Merge pull request #734 from NLKNguyen/add_CI_CD_solution_with_Docker

Add CI/CD solution with Docker
This commit is contained in:
koalaman 2016-09-11 23:42:06 -07:00 committed by GitHub
commit 1c0ec9c6f6
3 changed files with 82 additions and 18 deletions

21
.travis.yml Normal file
View File

@ -0,0 +1,21 @@
sudo: required
language: sh
services:
- docker
before_install:
- export DOCKER_REPO=koalaman/shellcheck
- |-
export TAG=$([ "$TRAVIS_BRANCH" == "master" ] && echo "latest" || echo $TRAVIS_BRANCH)
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"
- |-
[ "$TRAVIS_BRANCH" == "master" ] && docker push $DOCKER_REPO:$TAG

View File

@ -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 <NLKNguyen@MSN.com>
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"]

54
Dockerfile_builder Normal file
View File

@ -0,0 +1,54 @@
FROM mitchty/alpine-ghc:latest
MAINTAINER Nikyle Nguyen <NLKNguyen@MSN.com>
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
# Test
RUN cabal test
# # ------------------------------------------------------------
# # 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/"]