.travis.yml
sudo: required
language: node_js
node_js:
- "lts/*"
services:
- docker
stages:
- build_dependencies
- build_applications
- static_sanity_checks
- test
- release
- publish
branches:
except:
- /^[0-9]+\.[0-9]+\.[0-9]+$/
before_install:
- sudo rm /usr/local/bin/docker-compose
- curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-`uname -s`-`uname -m` > docker-compose
- chmod +x docker-compose
- sudo mv docker-compose /usr/local/bin
jobs:
include:
- stage: build_dependencies
env:
- ENV: development
script:
- git log -n 1 --format='%s' > ./.commit_message;
- cat package.json | jq '.dependencies,.devDependencies' | md5sum | cut -f 1 -d ' ' > ./.dependency_hash
- |
COMMIT_MESSAGE="$(cat ./.commit_message)";
curl -s https://index.docker.io/v1/repositories/zephinzer/annams/tags | jq '.[].name' | grep "deps-${ENV}-$(cat ./.dependency_hash)";
if [ "$?" != "0" ] || [ -z "${COMMIT_MESSAGE##*"[force build]"*}" ]; then
ENV=${ENV} npm run build deps -- "$(cat ./.dependency_hash)";
docker login -u "${DH_USERNAME}" -p "${DH_PASSWORD}";
docker tag zephinzer/annams:deps-${ENV}-$(cat ./.dependency_hash) zephinzer/annams:deps-${ENV}-latest;
docker push zephinzer/annams:deps-${ENV}-$(cat ./.dependency_hash);
docker push zephinzer/annams:deps-${ENV}-latest;
docker logout;
fi;
- stage: build_dependencies
env:
- ENV: production
script:
- git log -n 1 --format='%s' > ./.commit_message;
- cat package.json | jq '.dependencies,.devDependencies' | md5sum | cut -f 1 -d ' ' > ./.dependency_hash
- |
COMMIT_MESSAGE="$(cat ./.commit_message)";
curl -s https://index.docker.io/v1/repositories/zephinzer/annams/tags | jq '.[].name' | grep "deps-${ENV}-$(cat ./.dependency_hash)";
if [ "$?" != "0" ] || [ -z "${COMMIT_MESSAGE##*"[force build]"*}" ]; then
ENV=${ENV} npm run build deps -- "$(cat ./.dependency_hash)";
docker login -u "${DH_USERNAME}" -p "${DH_PASSWORD}";
docker tag zephinzer/annams:deps-${ENV}-$(cat ./.dependency_hash) zephinzer/annams:deps-${ENV}-latest;
docker push zephinzer/annams:deps-${ENV}-$(cat ./.dependency_hash);
docker push zephinzer/annams:deps-${ENV}-latest;
docker logout;
fi;
- stage: build_applications
env:
- ENV: development
script:
- cat package.json | jq '.dependencies,.devDependencies' | md5sum | cut -f 1 -d ' ' > ./.dependency_hash;
- git log -n 1 --format='%H' > ./.commit_hash;
- ENV=${ENV} DEPENDENCY_VERSION="$(cat ./.dependency_hash)" npm run build;
- docker tag zephinzer/annams:${ENV}-latest zephinzer/annams:${ENV}-$(cat ./.commit_hash);
- docker login -u "${DH_USERNAME}" -p "${DH_PASSWORD}";
- docker push zephinzer/annams:${ENV}-latest;
- docker push zephinzer/annams:${ENV}-$(cat ./.commit_hash);
- docker logout;
- stage: build_applications
env:
- ENV: mock
script:
- npm run services start
- npm run mock scrape
- npm run services stop
- npm run mock export
- git log -n 1 --format='%H' > ./.commit_hash;
- docker login -u "${DH_USERNAME}" -p "${DH_PASSWORD}";
- docker push zephinzer/annams:${ENV}-latest;
- docker tag zephinzer/annams:${ENV}-latest zephinzer/annams:${ENV}-$(cat ./.commit_hash);
- docker push zephinzer/annams:${ENV}-$(cat ./.commit_hash);
- docker logout;
- stage: build_applications
env:
- ENV: production
script:
- cat package.json | jq '.dependencies,.devDependencies' | md5sum | cut -f 1 -d ' ' > ./.dependency_hash;
- git log -n 1 --format='%H' > ./.commit_hash;
- ENV=${ENV} DEPENDENCY_VERSION="$(cat ./.dependency_hash)" npm run build;
- docker tag zephinzer/annams:${ENV}-latest zephinzer/annams:${ENV}-$(cat ./.commit_hash);
- docker login -u "${DH_USERNAME}" -p "${DH_PASSWORD}";
- docker push zephinzer/annams:${ENV}-latest;
- docker push zephinzer/annams:${ENV}-$(cat ./.commit_hash);
- docker logout;
- stage: static_sanity_checks
script:
- npm run test deployment
- stage: test
env:
- TASK: test-lint
script:
- export ANNAMS_DEV_IMAGE="zephinzer/annams:development-$(git log -n 1 --format='%H')"
- docker pull "${ANNAMS_DEV_IMAGE}"
- docker-compose -f ./provisioning/deployments/docker/test/docker-compose.yml run ${TASK}
- stage: test
env:
- TASK: test-sec
script:
- export ANNAMS_DEV_IMAGE="zephinzer/annams:development-$(git log -n 1 --format='%H')"
- docker pull "${ANNAMS_DEV_IMAGE}"
- docker-compose -f ./provisioning/deployments/docker/test/docker-compose.yml run ${TASK}
- stage: test
env:
- TASK: test-unit
before_script:
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
- chmod +x ./cc-test-reporter
- ./cc-test-reporter before-build
script:
- export ANNAMS_DEV_IMAGE="zephinzer/annams:development-$(git log -n 1 --format='%H')"
- docker pull "${ANNAMS_DEV_IMAGE}"
- mkdir -p ./coverage/.nyc_output
- mkdir -p ./coverage/.nyc_output/processinfo
- chmod 777 -R ./coverage
- docker-compose -f ./provisioning/deployments/docker/test/docker-compose.yml run ${TASK}
- ls -lA ./coverage
after_script:
- sed -i.bak -e "s|/app|$(pwd)|g" ./coverage/lcov.info
- ./cc-test-reporter after-build -r "${CC_TOKEN}" --coverage-input-type lcov --exit-code ${TRAVIS_TEST_RESULT}
- stage: release
if: branch = master
env:
- PLATFORM: github.com
script:
- git log -n 1 --format='%s' > ./.commit_message;
- git log -n 1 --format='%H' > ./.commit_hash;
- git checkout "${TRAVIS_BRANCH}";
- git reset --hard "$(cat ./.commit_hash)";
- |
if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then
COMMIT_MESSAGE="$(cat ./.commit_message)";
if [ -z "${COMMIT_MESSAGE##*"[major release]"*}" ]; then zsc version bump --major;
elif [ -z "${COMMIT_MESSAGE##*"[minor release]"*}" ]; then zsc version bump --minor;
else npm run zsc version bump --patch;
fi;
git remote set-url origin https://${GH_USERNAME}:${GH_ACCESS_TOKEN}@github.com/${GIT_ORIGIN_REMOTE_PATH};
git push origin "${TRAVIS_BRANCH}" --tags;
fi;
- stage: publish
if: branch = master
env:
- PLATFORM: npmjs.org
script:
- if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then
printf -- "//${NPM_REGISTRY_URL}/:_authToken=${NPM_TOKEN}" > ~/.npmrc;
./provisioning/scripts/ci/publish-npm.sh;
rm -rf ~/.npmrc;
else
printf -- "Skipping because this is a pull request.\n";
fi;
- stage: publish
if: branch = master
env:
- PLATFORM: hub.docker.io
- ENV: production
script:
- if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then
git log -n 1 --format='%H' > ./.commit_hash;
git checkout "${TRAVIS_BRANCH}";
VERSION="$(zsc version current)";
docker login -u "${DH_USERNAME}" -p "${DH_PASSWORD}";
docker pull zephinzer/annams:${ENV}-latest;
docker tag zephinzer/annams:${ENV}-latest zephinzer/annams:latest;
docker push zephinzer/annams:latest;
docker tag zephinzer/annams:${ENV}-latest zephinzer/annams:${VERSION};
docker push zephinzer/annams:${VERSION};
docker logout;
else
printf -- "Skipping because this is a pull request.\n";
fi;