Skip to content

Commit

Permalink
CHROMIUM: Merge 'upstream/master' into chromeos-0.7
Browse files Browse the repository at this point in the history
Merge of upstream through 5cf2c00

Conflicts:
	src/ShellCheck/Analytics.hs

Manual changes:
	Minor conflicts in variable lists for portage

Changelog:
----------------------------------------------------------------
Artur Klauser (4):
      Add multi-architecture Docker image build
      Don't try to deploy docker images on PR runs
      Run "deploy" step only for "Build" stages
      Use shellcheck on yourself

Austin English (1):
      src/ShellCheck/Analytics.hs: suggest using a shell directive for SC2148

Benjamin Gordon (1):
      Merge 'upstream/master' into chromeos-0.7

Joseph C. Sible (82):
      Simplify literalEquals
      Use findM instead of filterM
      Use the Identity monad to avoid unnecessary uses of fromJust
      Remove more unnecessary uses of fromJust
      Switch getLiteralStringExt to Identity where it can never be Nothing
      Add getLiteralStringDef and simplify with it
      Replace mapMaybe and concatMap with list comprehensions
      Use mapM instead of implementing a slower version of it
      Use find instead of take 1 and filter
      Use mapM_ and sequence_ instead of reimplementing them
      Simplify check and checkTranslatedStringVariable
      Get rid of potentially
      Use head instead of reimplementing it
      Use void instead of do and return ()
      Simplify matchToken
      Simplify <> for SpaceStatus
      Inline an uncurry
      Avoid unnecessary use of when and unless
      Simplify findFunction
      Use Map.! instead of reimplementing it
      Simplify a double negative
      Do toLower earlier
      Remove unnecessary fromMaybes
      Avoid a zip that breaks fusion
      Use forM_ instead of reimplementing it
      Use isNothing instead of reimplementing it
      Use Map.member instead of isJust and Map.lookup
      Simplify determineShell
      Remove unnecessary uses of head
      Use isJust instead of reimplementing it
      Simplify shellFromFilename
      Simplify mockedSystemInterface
      Remove a partial pattern match equivalent to fromJust from checkFindNameGlob
      Optimize patterns in checkFindNameGlob
      Use headOrDefault instead of fromMaybe and listToMaybe
      Simplify checkForInQuoted
      Simplify checkWhileReadPitfalls
      Mark that base >= 4.8.0.0 is required
      Fix koalaman#1892: Use pattern synonyms to clean up AST
      Simplify nameExpansion
      Use force instead of reimplementing it
      Remove unnecessary Maybe from isQuoteFreeElement
      Implement findFirst in terms of foldr
      Use execState instead of reimplementing it
      Simplify causesSubshell
      Use a list comprehension instead of a concatMap with extra lists
      Remove unnecessary maybeToList
      Remove unnecessary as-patterns
      Remove an unnecessary operator section
      Simplify isArrayFlag
      Use head instead of (!! 0)
      Simplify dropPrefix
      Simplify getSpecial
      Don't bother with asks if you're just immediately binding the result anyway
      Implement supportsArrays with pattern-matching
      Simplify process
      Simplify getCommandNameAndToken
      Simplify getAssociativeArrays
      Remove unnecessary monadicity from wordToPseudoGlob
      Remove unnecessary cases from wordToPseudoGlob
      Only perform the comparisons once
      Use foldr in checkFindNameGlob
      Use pattern matching instead of snd
      Use a guard instead of unless
      Prefer pattern matching in undirected
      Simplify checkArg
      Use MultiWayIf instead of case-matching on ()
      Simplify checkSetAssignment
      Simplify warnRedundant
      Make skipRepeating lazier and faster
      Make it slightly lazier still (and more clear)
      Write getLiteralArgs with foldr and without fromMaybe or monads
      Remove unnecessary fromMaybe and when from bashism
      Use fromRight instead of reimplementing it
      Avoid some awkward parentheses with forM_
      Simplify thenSkip, and use in another location
      Simplify checkVariableBraces
      Combine bracedString into getSingleUnmodifiedVariable
      Get rid of bracedString everywhere it's easy to
      Move bracedString to be local to its last use site
      Clean up and optimize getSuspiciousRegexWildcard
      Revert "Use fromRight instead of reimplementing it"

Marcin Szydelski (1):
      SC2016: disable for mumps -run %XCMD and LOOP%XCMD

Vidar Holen (59):
      Merge pull request koalaman#1828 from josephcsible/cleanups
      Merge pull request koalaman#1827 from josephcsible/nofromjust2
      Merge pull request koalaman#1826 from josephcsible/nofromjust
      Merge pull request koalaman#1825 from josephcsible/nofilterm
      Merge pull request koalaman#1824 from josephcsible/patch-1
      Merge pull request koalaman#1802 from szydell/master
      Merge pull request koalaman#1785 from ArturKlauser/multi-arch-docker
      Merge pull request koalaman#1831 from josephcsible/checkfindnameglob
      Don't try to deploy on PRs
      Rename 'Test' stage
      Parse keywords with case sensitivity (fixes koalaman#1809)
      Bump SC1102/SC1105 about ambiguous `$((` to Error (fixes koalaman#1836)
      Remove unused instance Ord Replacement (fixes koalaman#1829)
      Inspect 'alias' commands for referenced variables (Fixes koalaman#1832)
      SC2257: Warn when changing arithmetic variables in redirections
      Upload to assets to GitHub
      Merge pull request koalaman#1862 from austin987/sc2148-shell-directive
      Fix TravisCI condition
      Refer to GitHub rather than GCS for release builds
      Make SC2095 (ssh in while read loops) more robust and suggest fixes
      Merge pull request koalaman#1865 from josephcsible/patch-1
      Improve detection of for loops with single values
      Try to make TravisCI not fail on deployment of Docker stage
      Include shebang in AST traversal (fixes koalaman#1858)
      Stop deploying artifacts to GCS
      Update distro tests to support newer Cabal
      Merge pull request koalaman#1893 from josephcsible/pattern-synonyms
      Merge pull request koalaman#1872 from josephcsible/checkforinquoted
      Merge pull request koalaman#1873 from josephcsible/checkwhilereadpitfalls
      Merge pull request koalaman#1880 from josephcsible/patch-1
      Merge pull request koalaman#1885 from ArturKlauser/travis-pr-fix
      Merge pull request koalaman#1897 from ArturKlauser/use-shellcheck-on-yourself
      Merge pull request koalaman#1896 from ArturKlauser/travis-deploy-stage-fix
      Merge pull request koalaman#1876 from fork-graveyard/master
      Don't warn about [ 0 -ne $FOO ] || [ 0 -ne $BAR ] (fixes koalaman#1891)
      Stable version v0.7.1
      Update Changelog with new version
      Filter GitHub uploads by tag
      Disable SC2257 about > $((i=42)) for Dash
      Merge pull request koalaman#1898 from josephcsible/nameexpansion
      Merge pull request koalaman#1900 from josephcsible/analyzerlib
      Merge pull request koalaman#1902 from josephcsible/astlib
      Merge pull request koalaman#1904 from josephcsible/commands
      Merge pull request koalaman#1903 from josephcsible/fixer
      Merge pull request koalaman#1901 from josephcsible/bracedstring
      Merge pull request koalaman#1905 from josephcsible/skiprepeating
      Merge pull request koalaman#1906 from josephcsible/shellsupport
      Merge pull request koalaman#1907 from josephcsible/formatters
      Merge pull request koalaman#1917 from josephcsible/thenskip
      Merge pull request koalaman#1918 from josephcsible/getsuspiciousregexwildcard
      Merge pull request koalaman#1925 from josephcsible/nofromright
      Merge pull request koalaman#1927 from scop/sc-prefix
      Merge pull request koalaman#1926 from scop/spelling
      Warn about duplicate uses of stdin/out/err
      Improve SC2259/60/61 messages
      Allow disabling SC1072/SC1073 with annotations (fixes koalaman#1931)
      Merge pull request koalaman#1950 from geeseven/aur-shellcheck-bin
      Count $# as an argument reference in SC2120
      Warn about defining and using an alias in a single command (fixes koalaman#1807)

Ville Skyttä (2):
      Spelling fixes
      Use SC prefix for disable= in man page

geeseven (1):
      update dependency free AUR package

girst (1):
      recognize `: ${parameter=word}` as assignment

 .compile_binaries                     |   6 -
 .github_deploy                        |  58 +++
 .multi_arch_docker                    | 113 +++++
 .travis.yml                           |  34 +-
 CHANGELOG.md                          |  20 +-
 Dockerfile                            |   7 -
 Dockerfile.multi-arch                 |  26 ++
 README.md                             |  17 +-
 ShellCheck.cabal                      |   6 +-
 nextnumber                            |   2 +-
 shellcheck.1.md                       |   6 +-
 shellcheck.hs                         |  12 +-
 src/ShellCheck/AST.hs                 | 542 ++++++++++--------------
 src/ShellCheck/ASTLib.hs              |  83 ++--
 src/ShellCheck/Analytics.hs           | 748 +++++++++++++++++++++++-----------
 src/ShellCheck/AnalyzerLib.hs         | 185 ++++-----
 src/ShellCheck/Checker.hs             |  18 +-
 src/ShellCheck/Checks/Commands.hs     | 162 ++++----
 src/ShellCheck/Checks/ShellSupport.hs |  44 +-
 src/ShellCheck/Fixer.hs               |  16 +-
 src/ShellCheck/Formatter/TTY.hs       |   5 +-
 src/ShellCheck/Interface.hs           |  11 +-
 src/ShellCheck/Parser.hs              |  55 ++-
 test/buildtest                        |  23 +-
 test/check_release                    |   3 +-
 test/distrotest                       |  22 +-
 26 files changed, 1286 insertions(+), 938 deletions(-)
 create mode 100755 .github_deploy
 create mode 100755 .multi_arch_docker
 create mode 100644 Dockerfile.multi-arch

BUG=chromium:1086928
TEST=stack test

Cq-Depend: chromium:2233790
Change-Id: Icaa54e0a17181685f1f8234a9ab811bc24229338
  • Loading branch information
yetamrra committed Jun 5, 2020
2 parents acacffa + 5cf2c00 commit 9ac14b5
Show file tree
Hide file tree
Showing 26 changed files with 1,291 additions and 943 deletions.
6 changes: 0 additions & 6 deletions .compile_binaries
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,6 @@ build_linux() {
do
cp "shellcheck" "deploy/shellcheck-$tag.linux-x86_64";
done

# Linux Alpine based Docker image
name="$DOCKER_BASE-alpine"
DOCKER_BUILDS="$DOCKER_BUILDS $name"
docker build -f Dockerfile -t "$name:current" --target alpine .
docker run "$name:current" sh -c 'shellcheck --version'
}

build_aarch64() {
Expand Down
58 changes: 58 additions & 0 deletions .github_deploy
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
#!/bin/bash
set -x
shopt -s extglob

if [[ "$TRAVIS_SECURE_ENV_VARS" != "true" ]]
then
echo >&2 "Missing TRAVIS_SECURE_ENV_VARS. Skipping GitHub deployment."
exit 0
fi

install_deps() {
version="2.7.0" # 2.14.1 fails to overwrite duplicates
case "$(uname)" in
Linux)
sudo apt-get update
sudo apt-get install curl
curl -L "https://github.com/github/hub/releases/download/v$version/hub-linux-amd64-$version.tgz" | tar xvz --strip-components=1 "hub-linux-amd64-$version/bin/hub"
;;
Darwin)
curl -L "https://github.com/github/hub/releases/download/v$version/hub-darwin-amd64-$version.tgz" | tar xvz --strip-components=1 "hub-darwin-amd64-$version/bin/hub"
;;
*)
echo "Unknown: $(uname)"
exit 1
;;
esac

hub_path="$PWD/bin/hub"
hub() {
"$hub_path" "$@"
}
}
install_deps

export EDITOR="touch"

# Sanity check
hub release show latest || exit 1

for tag in $TAGS
do
if ! hub release show "$tag"
then
echo "Creating new release $tag"
git show --no-patch --format='format:%B' > description
hub release create -F description "$tag"
fi

files=()
for file in deploy/*
do
[[ $file == *.@(xz|gz|zip) ]] || continue
[[ $file == *"$tag"* ]] || continue
files+=(-a "$file")
done
hub release edit "${files[@]}" "$tag" || exit 1
done

113 changes: 113 additions & 0 deletions .multi_arch_docker
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
#!/bin/bash
# This script builds and deploys multi-architecture docker images from the
# binaries previously built and deployed to GCS by the Travis pipeline.

if [[ "$TRAVIS_SECURE_ENV_VARS" != "true" ]]
then
echo >&2 "Missing TRAVIS_SECURE_ENV_VARS. Skipping Docker builds."
exit 0
fi

function multi_arch_docker::install_docker_buildx() {
# Install up-to-date version of docker, with buildx support.
local -r docker_apt_repo='https://download.docker.com/linux/ubuntu'
curl -fsSL "${docker_apt_repo}/gpg" | sudo apt-key add -
local -r os="$(lsb_release -cs)"
sudo add-apt-repository "deb [arch=amd64] $docker_apt_repo $os stable"
sudo apt-get update
sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce

# Enable docker daemon experimental support (for 'pull --platform').
local -r config='/etc/docker/daemon.json'
if [[ -e "$config" ]]; then
sudo sed -i -e 's/{/{ "experimental": true, /' "$config"
else
echo '{ "experimental": true }' | sudo tee "$config"
fi
sudo systemctl restart docker

# Install QEMU multi-architecture support for docker buildx.
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

# Instantiate docker buildx builder with multi-architecture support.
export DOCKER_CLI_EXPERIMENTAL=enabled
docker buildx create --name mybuilder
docker buildx use mybuilder
# Start up buildx and verify that all is OK.
docker buildx inspect --bootstrap
}

# Log in to Docker Hub for deployment.
function multi_arch_docker::login_to_docker_hub() {
echo "$DOCKER_PASSWORD" | docker login -u="$DOCKER_USERNAME" --password-stdin
}

# Run buildx build and push. Passed in arguments augment the command line.
function multi_arch_docker::buildx() {
mkdir -p /tmp/empty
docker buildx build \
--platform "${DOCKER_PLATFORMS// /,}" \
--push \
--progress plain \
-f Dockerfile.multi-arch \
"$@" \
/tmp/empty
rmdir /tmp/empty
}

# Build and push plain and alpine docker images for all tags.
function multi_arch_docker::build_and_push_all() {
for tag in $TAGS; do
multi_arch_docker::buildx -t "$DOCKER_BASE:$tag" --build-arg "tag=$tag"
multi_arch_docker::buildx -t "$DOCKER_BASE-alpine:$tag" \
--build-arg "tag=$tag" --target alpine
done
}

# Test all pushed docker images.
function multi_arch_docker::test_all() {
printf '%s\n' "#!/bin/sh" "echo 'hello world'" > myscript

for platform in $DOCKER_PLATFORMS; do
for tag in $TAGS; do
for ext in '-alpine' ''; do
image="${DOCKER_BASE}${ext}:${tag}"
msg="Testing docker image $image on platform $platform"
line="${msg//?/=}"
printf '\n%s\n%s\n%s\n' "${line}" "${msg}" "${line}"
docker pull -q --platform "$platform" "$image"
if [ -n "$ext" ]; then
echo -n "Image architecture: "
docker run --rm --entrypoint /bin/sh "$image" -c 'uname -m'
version=$(docker run --rm "$image" shellcheck --version \
| grep 'version:')
else
version=$(docker run --rm "$image" --version | grep 'version:')
fi
version=${version/#version: /v}
echo "shellcheck version: $version"
if [[ ! ("$tag" =~ ^(latest|stable)$) && "$tag" != "$version" ]]; then
echo "Version mismatch: shellcheck $version tagged as $tag"
exit 1
fi
if [ -n "$ext" ]; then
docker run --rm -v "$PWD:/mnt" -w /mnt "$image" shellcheck myscript
else
docker run --rm -v "$PWD:/mnt" "$image" myscript
fi
done
done
done
}

function multi_arch_docker::main() {
export DOCKER_PLATFORMS='linux/amd64'
DOCKER_PLATFORMS+=' linux/arm64'
DOCKER_PLATFORMS+=' linux/arm/v6'

multi_arch_docker::install_docker_buildx
multi_arch_docker::login_to_docker_hub
multi_arch_docker::build_and_push_all
set +x
multi_arch_docker::test_all
}
34 changes: 19 additions & 15 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,55 +6,59 @@ services:

jobs:
include:
- env: BUILD=linux
- stage: Build

# This must weirdly not have a dash, otherwise an empty job is created
env: BUILD=linux
- env: BUILD=windows
- env: BUILD=armv6hf
- env: BUILD=aarch64
- env: BUILD=osx
os: osx

- stage: Deploy docker image
# Deploy only for pushes to master branch, not other branches, not PRs.
if: type = push
script:
- source ./.multi_arch_docker
- set -ex; multi_arch_docker::main; set +x

# This is in global context and runs for every stage that doesn't override it.
before_install: |
DOCKER_BASE="$DOCKER_USERNAME/shellcheck"
DOCKER_BUILDS=""
TAGS=""
export TAGS=""
test "$TRAVIS_BRANCH" = master && TAGS="$TAGS latest" || true
test -n "$TRAVIS_TAG" && TAGS="$TAGS stable $TRAVIS_TAG" || true
echo "Tags are $TAGS"
# This is in global context and runs for every stage that doesn't override it.
script:
- mkdir -p deploy
- source ./.compile_binaries
- ./striptests
- set -ex; build_"$BUILD"; set +x;
- ./.prepare_deploy
- ./.github_deploy

after_success: |
if [ "$BUILD" = "linux" ]; then
docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
for repo in $DOCKER_BUILDS; do
for tag in $TAGS; do
echo "Deploying $repo:current as $repo:$tag...";
docker tag "$repo:current" "$repo:$tag" || exit 1;
docker push "$repo:$tag" || exit 1;
done;
done;
fi
# This is in global context and runs for every stage that doesn't override it.
after_failure: |
id
pwd
df -h
find . -name '*.log' -type f -exec grep "" /dev/null {} +
find . -ls
# This is in global context and runs for every stage that doesn't override it.
deploy:
provider: gcs
skip_cleanup: true
access_key_id: GOOG7MDN7WEH6IIGBDCA
secret_access_key:
secure: Bcx2cT0/E2ikj7sdamVq52xlLZF9dz9ojGPtoKfPyQhkkZa+McVI4xgUSuyyoSxyKj77sofx2y8m6PJYYumT4g5hREV1tfeUkl0J2DQFMbGDYEt7kxVkXCxojNvhHwTzLFv0ezstrxWWxQm81BfQQ4U9lggRXtndAP4czZnOeHPINPSiue1QNwRAEw05r5UoIUJXy/5xyUrjIxn381pAs+gJqP2COeN9kTKYH53nS/AAws29RprfZFnPlo7xxWmcjRcdS5KPdGXI/c6tQp5zl2iTh510VC1PN2w1Wvnn/oNWhiNdqPyVDsojIX5+sS3nejzJA+KFMxXSBlyXIY3wPpS/MdscU79X6Q5f9ivsFfsm7gNBmxHUPNn0HAvU4ROT/CCE9j6jSbs5PC7QBo3CK4++jxAwE/pd9HUc2rs3k0ofx3rgveJ7txpy5yPKfwIIBi98kVKlC4w7dLvNTOfjW1Imt2yH87XTfsE0UIG9st1WII6s4l/WgBx2GuwKdt6+3QUYiAlCFckkxWi+fAvpHZUEL43Qxub5fN+ZV7Zib1n7opchH4QKGBb6/y0WaDCmtCfu0lppoe/TH6saOTjDFj67NJSElK6ZDxGZ3uw4R+ret2gm6WRKT2Oeub8J33VzSa7VkmFpMPrAAfPa9N1Z4ewBLoTmvxSg2A0dDrCdJio=
bucket: shellcheck
bucket: shellcheck-private
local_dir: deploy
on:
repo: koalaman/shellcheck
condition: $TRAVIS_BUILD_STAGE_NAME = Build
all_branches: true
20 changes: 18 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,15 @@
## v0.7.1 - soon
## Git
### Added
- SC2259/SC2260: Warn when redirections override pipes
- SC2261: Warn about multiple competing redirections
- SC2262/SC2263: Warn about aliases declared and used in the same parsing unit

### Fixed
- SC1072/SC1073 now respond to disable annotations, though ignoring parse errors
is still purely cosmetic and does not allow ShellCheck to continue.


## v0.7.1 - 2020-04-04
### Fixed
- `-f diff` no longer claims that it found more issues when it didn't
- Known empty variables now correctly trigger SC2086
Expand All @@ -7,12 +18,17 @@
called with `builtin`

### Added
- SC1136: Warn about unexpected characters after ]/]]
- SC2254: Suggest quoting expansions in case statements
- SC2255: Suggest using `$((..))` in `[ 2*3 -eq 6 ]`
- SC2256: Warn about translated strings that are known variables
- SC2257: Warn about arithmetic mutation in redirections
- SC2258: Warn about trailing commas in for loop elements

### Changed
- SC2230: This check is now off by default
- SC2230: 'command -v' suggestion is now off by default (-i deprecate-which)
- SC1081: Keywords are now correctly parsed case sensitively, with a warning


## v0.7.0 - 2019-07-28
### Added
Expand Down
7 changes: 0 additions & 7 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,6 @@ RUN cabal build Paths_ShellCheck && \
RUN mkdir -p /out/bin && \
cp shellcheck /out/bin/

# Resulting Alpine image
FROM alpine:latest AS alpine
LABEL maintainer="Vidar Holen <[email protected]>"
COPY --from=build /out /

# DELETE-MARKER (Remove everything below to keep the alpine image)

# Resulting ShellCheck image
FROM scratch
LABEL maintainer="Vidar Holen <[email protected]>"
Expand Down
26 changes: 26 additions & 0 deletions Dockerfile.multi-arch
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Alpine image
FROM alpine:latest AS alpine
LABEL maintainer="Vidar Holen <[email protected]>"
ARG tag

# Put the right binary for each architecture into place for the
# multi-architecture docker image.
RUN set -x; \
arch="$(uname -m)"; \
echo "arch is $arch"; \
if [ "${arch}" = 'armv7l' ]; then \
arch='armv6hf'; \
fi; \
url_base='https://github.com/koalaman/shellcheck/releases/download/'; \
tar_file="${tag}/shellcheck-${tag}.linux.${arch}.tar.xz"; \
wget "${url_base}${tar_file}" -O - | tar xJf -; \
mv "shellcheck-${tag}/shellcheck" /bin/; \
rm -rf "shellcheck-${tag}"; \
ls -laF /bin/shellcheck

# ShellCheck image
FROM scratch
LABEL maintainer="Vidar Holen <[email protected]>"
WORKDIR /mnt
COPY --from=alpine /bin/shellcheck /bin/
ENTRYPOINT ["/bin/shellcheck"]
17 changes: 9 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ On Arch Linux based distros:

pacman -S shellcheck

or get the dependency free [shellcheck-static](https://aur.archlinux.org/packages/shellcheck-static/) from the AUR.
or get the dependency free [shellcheck-bin](https://aur.archlinux.org/packages/shellcheck-bin/) from the AUR.

On Gentoo based distros:

Expand Down Expand Up @@ -217,13 +217,14 @@ nix-env -iA nixpkgs.shellcheck

Alternatively, you can download pre-compiled binaries for the latest release here:

* [Linux, x86_64](https://storage.googleapis.com/shellcheck/shellcheck-stable.linux.x86_64.tar.xz) (statically linked)
* [Linux, armv6hf](https://storage.googleapis.com/shellcheck/shellcheck-stable.linux.armv6hf.tar.xz), i.e. Raspberry Pi (statically linked)
* [Linux, aarch64](https://storage.googleapis.com/shellcheck/shellcheck-stable.linux.aarch64.tar.xz) aka ARM64 (statically linked)
* [MacOS, x86_64](https://shellcheck.storage.googleapis.com/shellcheck-stable.darwin.x86_64.tar.xz)
* [Windows, x86](https://storage.googleapis.com/shellcheck/shellcheck-stable.zip)
* [Linux, x86_64](https://github.com/koalaman/shellcheck/releases/download/stable/shellcheck-stable.linux.x86_64.tar.xz) (statically linked)
* [Linux, armv6hf](https://github.com/koalaman/shellcheck/releases/download/stable/shellcheck-stable.linux.armv6hf.tar.xz), i.e. Raspberry Pi (statically linked)
* [Linux, aarch64](https://github.com/koalaman/shellcheck/releases/download/stable/shellcheck-stable.linux.aarch64.tar.xz) aka ARM64 (statically linked)
* [MacOS, x86_64](https://github.com/koalaman/shellcheck/releases/download/stable/shellcheck-stable.darwin.x86_64.tar.xz)
* [Windows, x86](https://github.com/koalaman/shellcheck/releases/download/stable/shellcheck-stable.zip)

or see the [storage bucket listing](https://shellcheck.storage.googleapis.com/index.html) for checksums, older versions and the latest daily builds.
or see the [GitHub Releases](https://github.com/koalaman/shellcheck/releases) for other releases
(including the [latest](https://github.com/koalaman/shellcheck/releases/tag/latest) meta-release for daily git builds).

Distro packages already come with a `man` page. If you are building from source, it can be installed with:

Expand All @@ -250,7 +251,7 @@ A simple installer may do something like:

```bash
scversion="stable" # or "v0.4.7", or "latest"
wget -qO- "https://storage.googleapis.com/shellcheck/shellcheck-${scversion?}.linux.x86_64.tar.xz" | tar -xJv
wget -qO- "https://github.com/koalaman/shellcheck/releases/download/${scversion?}/shellcheck-${scversion?}.linux.x86_64.tar.xz" | tar -xJv
cp "shellcheck-${scversion}/shellcheck" /usr/bin/
shellcheck --version
```
Expand Down
6 changes: 2 additions & 4 deletions ShellCheck.cabal
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Name: ShellCheck
Version: 0.7.0
Version: 0.7.1
Synopsis: Shell script analysis tool
License: GPL-3
License-file: LICENSE
Expand Down Expand Up @@ -45,9 +45,7 @@ library
build-depends:
aeson,
array,
-- GHC 7.6.3 (base 4.6.0.1) is buggy (#1131, #1119) in optimized mode.
-- Just disable that version entirely to fail fast.
base > 4.6.0.1 && < 5,
base >= 4.8.0.0 && < 5,
bytestring,
containers >= 0.5,
deepseq >= 1.4.0.0,
Expand Down
Loading

0 comments on commit 9ac14b5

Please sign in to comment.