From 32689ef5ebc4475039870876c65663ae37043773 Mon Sep 17 00:00:00 2001 From: NLKNguyen Date: Thu, 8 Sep 2016 21:05:54 -0700 Subject: [PATCH 1/5] Test Dockerfiles and Travis CI on downstream repos --- .travis.yml | 19 +++++++++++++++++ Dockerfile | 25 ++++++---------------- Dockerfile_builder | 53 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+), 18 deletions(-) create mode 100644 .travis.yml create mode 100644 Dockerfile_builder diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..933d678 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,19 @@ +sudo: required + +language: sh + +services: + - docker + +before_install: + - export DOCKER_REPO=nlknguyen/shellcheck + - export TAG=$(if [ "$TRAVIS_BRANCH" == "master" ]; then echo "latest"; else echo $TRAVIS_BRANCH ; fi) + +script: + - docker build -t builder -f Dockerfile_builder . + - docker run --rm -it -v $(pwd):/mnt builder + - docker build -t $DOCKER_REPO:$TAG . + +after_success: + - docker login -e="$DOCKER_EMAIL" -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD" + - docker push $DOCKER_REPO:$TAG diff --git a/Dockerfile b/Dockerfile index c5c1a21..5841389 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,22 +1,11 @@ -FROM ubuntu:xenial -MAINTAINER https://github.com/koalaman/shellcheck +FROM alpine:latest -RUN apt-get update && apt-get install --no-install-recommends -y \ - cabal-install \ - ghc \ - && rm -rf /var/lib/apt/lists/* +MAINTAINER Nikyle Nguyen -COPY ShellCheck.cabal /src/ShellCheck.cabal +COPY package/bin/shellcheck /usr/local/bin/ +COPY package/lib/ /usr/local/lib/ -WORKDIR /src +RUN ldconfig /usr/local/lib -ENV PATH="/root/.cabal/bin:$PATH" - -RUN cabal update \ - && cabal install --only-dependencies - -COPY . /src - -RUN cabal install /src - -CMD ["shellcheck", "-"] +WORKDIR /mnt +ENTRYPOINT ["shellcheck"] diff --git a/Dockerfile_builder b/Dockerfile_builder new file mode 100644 index 0000000..2fb623c --- /dev/null +++ b/Dockerfile_builder @@ -0,0 +1,53 @@ +FROM mitchty/alpine-ghc:latest + +MAINTAINER Nikyle Nguyen + +RUN apk add --no-cache build-base + +RUN mkdir -p /usr/src/shellcheck +WORKDIR /usr/src/shellcheck + +# # ------------------------------------------------------------ +# # Build & Test +# # ------------------------------------------------------------ + +# Obtain the dependencies first, which are less likely to change, in order to reduce +# subsequent build time by leveraging image cache. This benefits developers when they +# build their code with this image locally. In case of Travis CI, this doesn't help +# reduce building time because Travis CI doesn't use cache. +COPY ShellCheck.cabal . +RUN cabal update && cabal install --only-dependencies + +# Copy the rest of the source files, including ShellCheck.cabal again but doesn't matter +COPY . . + +# Build +RUN cabal install + +# TODO: run tests + +# # ------------------------------------------------------------ +# # Set PATH +# # ------------------------------------------------------------ + +# Add runtime path to easily reach the executable file. This only exists during build. +ENV PATH "/root/.cabal/bin:$PATH" + +# Make it permanent for someone who login to the container of this image +RUN echo "export PATH=${PATH}" >> /etc/profile + +# # ------------------------------------------------------------ +# # Extract Binaries +# # ------------------------------------------------------------ + +# Get shellcheck binary +RUN mkdir -p /package/bin/ +RUN cp $(which shellcheck) /package/bin/ + +# Get shared libraries using magic +RUN mkdir -p /package/lib/ +RUN ldd $(which shellcheck) | grep "=> /" | awk '{print $3}' | xargs -I '{}' cp -v '{}' /package/lib/ + + +# Copy shellcheck package out to mounted directory +CMD ["cp", "-avr", "/package", "/mnt/"] From 47201822f996140ab41681b8f99ee28d276887f3 Mon Sep 17 00:00:00 2001 From: NLKNguyen Date: Thu, 8 Sep 2016 21:31:23 -0700 Subject: [PATCH 2/5] Change syntax style for readability --- .travis.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 933d678..7cde455 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ services: before_install: - export DOCKER_REPO=nlknguyen/shellcheck - - export TAG=$(if [ "$TRAVIS_BRANCH" == "master" ]; then echo "latest"; else echo $TRAVIS_BRANCH ; fi) + - export TAG=$([ "$TRAVIS_BRANCH" == "master" ] && echo "latest" || echo $TRAVIS_BRANCH) script: - docker build -t builder -f Dockerfile_builder . @@ -16,4 +16,5 @@ script: after_success: - docker login -e="$DOCKER_EMAIL" -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD" - - docker push $DOCKER_REPO:$TAG + - [ "$TRAVIS_BRANCH" == "master" ] && docker push $DOCKER_REPO:$TAG + # Only push to Docker Hub if this is the master branch From a5d5831a2e2aa58ec708aa34fcf1a64baa55dd97 Mon Sep 17 00:00:00 2001 From: NLKNguyen Date: Thu, 8 Sep 2016 21:41:06 -0700 Subject: [PATCH 3/5] Fix syntax error with traditional if-clause instead of escaping bracket --- .travis.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7cde455..af11fae 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ services: before_install: - export DOCKER_REPO=nlknguyen/shellcheck - - export TAG=$([ "$TRAVIS_BRANCH" == "master" ] && echo "latest" || echo $TRAVIS_BRANCH) + - export TAG=$([ "$TRAVIS_BRANCH" == "master" ] && echo "latest" || echo $TRAVIS_BRANCH) script: - docker build -t builder -f Dockerfile_builder . @@ -16,5 +16,6 @@ script: after_success: - docker login -e="$DOCKER_EMAIL" -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD" - - [ "$TRAVIS_BRANCH" == "master" ] && docker push $DOCKER_REPO:$TAG - # Only push to Docker Hub if this is the master branch + - if [ "$TRAVIS_BRANCH" == "master" ]; then \ + docker push $DOCKER_REPO:$TAG \ + fi From 1a7e98beaf7a81619323b2b1467ddbfd588ee631 Mon Sep 17 00:00:00 2001 From: NLKNguyen Date: Thu, 8 Sep 2016 21:58:51 -0700 Subject: [PATCH 4/5] Use cleaner escaping method --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index af11fae..27504ed 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,8 @@ services: before_install: - export DOCKER_REPO=nlknguyen/shellcheck - - export TAG=$([ "$TRAVIS_BRANCH" == "master" ] && echo "latest" || echo $TRAVIS_BRANCH) + - |- + export TAG=$([ "$TRAVIS_BRANCH" == "master" ] && echo "latest" || echo $TRAVIS_BRANCH) script: - docker build -t builder -f Dockerfile_builder . @@ -16,6 +17,5 @@ script: after_success: - docker login -e="$DOCKER_EMAIL" -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD" - - if [ "$TRAVIS_BRANCH" == "master" ]; then \ - docker push $DOCKER_REPO:$TAG \ - fi + - |- + [ "$TRAVIS_BRANCH" == "master" ] && docker push $DOCKER_REPO:$TAG From 84110dbef47e41f3a7475203fc75f956534e03c5 Mon Sep 17 00:00:00 2001 From: NLKNguyen Date: Thu, 8 Sep 2016 23:57:46 -0700 Subject: [PATCH 5/5] Change DOCKER_REPO value and add test runner --- .travis.yml | 2 +- Dockerfile_builder | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 27504ed..e62254f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,7 @@ services: - docker before_install: - - export DOCKER_REPO=nlknguyen/shellcheck + - export DOCKER_REPO=koalaman/shellcheck - |- export TAG=$([ "$TRAVIS_BRANCH" == "master" ] && echo "latest" || echo $TRAVIS_BRANCH) diff --git a/Dockerfile_builder b/Dockerfile_builder index 2fb623c..b202ade 100644 --- a/Dockerfile_builder +++ b/Dockerfile_builder @@ -24,7 +24,8 @@ COPY . . # Build RUN cabal install -# TODO: run tests +# Test +RUN cabal test # # ------------------------------------------------------------ # # Set PATH