From 32689ef5ebc4475039870876c65663ae37043773 Mon Sep 17 00:00:00 2001 From: NLKNguyen Date: Thu, 8 Sep 2016 21:05:54 -0700 Subject: [PATCH] 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/"]