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: - git log -n 1 --format='%H' > ./.commit_hash - export ANNAMS_DEV_IMAGE="zephinzer/annams:development-$(cat ./.commit_hash)" - docker pull "${ANNAMS_DEV_IMAGE}" - docker-compose -f ./provisioning/deployments/docker/test/docker-compose.yml run ${TASK} - stage: test env: - TASK: test-sec script: - git log -n 1 --format='%H' > ./.commit_hash - export ANNAMS_DEV_IMAGE="zephinzer/annams:development-$(cat ./.commit_hash)" - 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: - git log -n 1 --format='%H' > ./.commit_hash - export ANNAMS_DEV_IMAGE="zephinzer/annams:development-$(cat ./.commit_hash)" - 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 npm run version-major-bump; elif [ -z "${COMMIT_MESSAGE##*"[minor release]"*}" ]; then npm run version-minor-bump; else npm run version-patch-bump; 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/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="$(npm run version-get | egrep -i '^[0-9]+\..')"; 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;