From 71bcc80c2f8d651de4feabc801b972b8f329f8a6 Mon Sep 17 00:00:00 2001 From: Vidar Holen Date: Tue, 20 Mar 2018 22:09:13 -0700 Subject: [PATCH] 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 /