From 6b81a9924c46836227ef9fc06e552ded17cd2383 Mon Sep 17 00:00:00 2001 From: Pratik Mallya Date: Wed, 14 Mar 2018 05:25:52 -0500 Subject: [PATCH 1/3] Simplify Dockerfile Use multi stage Dockerfile to greatly simplify build. --- Dockerfile | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index 58ec83a..9a6abc1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,25 @@ +FROM ubuntu:16.04 AS build + +# Install GHC and cabal +USER root +WORKDIR /opt/shellCheck + +COPY . . + +RUN apt-get update && apt-get install -y \ + ghc \ + cabal-install +RUN cabal update && \ + cabal install --dependencies-only +RUN cabal build Paths_ShellCheck && \ + ghc -optl-static -optl-pthread -idist/build/autogen --make shellcheck && \ + strip --strip-all shellcheck + +RUN mkdir -p /out/bin && \ + cp shellcheck /out/bin/ + FROM scratch - LABEL maintainer="Vidar Holen " - -# This file assumes ShellCheck has already been built. -# See https://github.com/koalaman/scbuilder -COPY shellcheck /bin/shellcheck - -WORKDIR /mnt +WORKDIR / +COPY --from=build /out / ENTRYPOINT ["/bin/shellcheck"] From 99276cb9f55e10064d79ad78ab9c54948bfd3654 Mon Sep 17 00:00:00 2001 From: Tim Malone Date: Mon, 19 Mar 2018 11:15:28 +1100 Subject: [PATCH 2/3] README - Travis script for updating shellcheck ver Shellcheck in default Travis builds is currently a version behind --- README.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 310e5b0..e951649 100644 --- a/README.md +++ b/README.md @@ -155,7 +155,19 @@ or see the [storage bucket listing](https://shellcheck.storage.googleapis.com/in ## Travis CI -Travis CI now integrated ShellCheck by default, you don't need to manually install it. +Travis CI has now integrated ShellCheck by default, so you don't need to manually install it. + +However, if you want the _latest_ version you may have to still install it yourself: + + install: + + # Install latest version of shellcheck. + - wget https://storage.googleapis.com/shellcheck/shellcheck-latest.linux.x86_64.tar.xz + - tar --xz -xvf shellcheck-latest.linux.x86_64.tar.xz + - shellcheck-latest/shellcheck --version + + script: + - shellcheck-latest/shellcheck *.sh ## Compiling from source From 71bcc80c2f8d651de4feabc801b972b8f329f8a6 Mon Sep 17 00:00:00 2001 From: Vidar Holen Date: Tue, 20 Mar 2018 22:09:13 -0700 Subject: [PATCH 3/3] Allow more Docker build caching --- .travis.yml | 23 +++++++++++------------ Dockerfile | 31 +++++++++++++++++++++---------- 2 files changed, 32 insertions(+), 22 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5ec69bd..c007234 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,28 +15,27 @@ before_install: script: - mkdir deploy - # Windows .exe - - docker pull koalaman/winghc - - docker run --user="$UID" --rm -v "$PWD:/appdata" koalaman/winghc cuib - - for tag in $TAGS; do cp "dist/build/ShellCheck/shellcheck.exe" "deploy/shellcheck-$tag.exe"; done - - rm -rf dist || true - # Linux static executable - - docker pull koalaman/scbuilder - - docker run --user="$UID" --rm -v "$PWD:/mnt" koalaman/scbuilder - - for tag in $TAGS; do cp "shellcheck" "deploy/shellcheck-$tag.linux"; done - - ./shellcheck --version - - rm -rf dist || true # Linux Docker image - name="$DOCKER_BASE" - DOCKER_BUILDS="$DOCKER_BUILDS $name" - docker build -t "$name:current" . - docker run "$name:current" --version + # Copy static executable from docker image + - id=$(docker create "$name:current") + - docker cp "$id:/bin/shellcheck" "shellcheck" + - docker rm "$id" + - for tag in $TAGS; do cp "shellcheck" "deploy/shellcheck-$tag.linux"; done # Linux Alpine based Docker image - name="$DOCKER_BASE-alpine" - DOCKER_BUILDS="$DOCKER_BUILDS $name" - - sed -e 's/^FROM .*/FROM alpine:latest/' -e '/WORKDIR/d' -e '/ENTRYPOINT/d' Dockerfile > Dockerfile.alpine + - sed -e '/DELETE-MARKER/,$d' Dockerfile > Dockerfile.alpine - docker build -f Dockerfile.alpine -t "$name:current" . - docker run "$name:current" sh -c 'shellcheck --version' + # Windows .exe + - docker pull koalaman/winghc + - docker run --user="$UID" --rm -v "$PWD:/appdata" koalaman/winghc cuib + - for tag in $TAGS; do cp "dist/build/ShellCheck/shellcheck.exe" "deploy/shellcheck-$tag.exe"; done + - rm -rf dist || true # Misc packaging - ./.prepare_deploy diff --git a/Dockerfile b/Dockerfile index 9a6abc1..b5f20d3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,23 +1,34 @@ -FROM ubuntu:16.04 AS build - -# Install GHC and cabal +# Build-only image +FROM ubuntu:17.10 AS build USER root WORKDIR /opt/shellCheck -COPY . . +# Install OS deps +RUN apt-get update && apt-get install -y ghc cabal-install -RUN apt-get update && apt-get install -y \ - ghc \ - cabal-install -RUN cabal update && \ - cabal install --dependencies-only +# Install Haskell deps +# (This is a separate copy/run so that source changes don't require rebuilding) +COPY ShellCheck.cabal ./ +RUN cabal update && cabal install --dependencies-only + +# Copy source and build it +COPY LICENSE Setup.hs shellcheck.hs ./ +COPY src src RUN cabal build Paths_ShellCheck && \ - ghc -optl-static -optl-pthread -idist/build/autogen --make shellcheck && \ + ghc -optl-static -optl-pthread -isrc -idist/build/autogen --make shellcheck && \ strip --strip-all shellcheck RUN mkdir -p /out/bin && \ cp shellcheck /out/bin/ +# Resulting Alpine image +FROM alpine:latest +LABEL maintainer="Vidar Holen " +COPY --from=build /out / + +# DELETE-MARKER (Remove everything below to keep the alpine image) + +# Resulting ShellCheck image FROM scratch LABEL maintainer="Vidar Holen " WORKDIR /