zephinzer/annams

View on GitHub
.travis.yml

Summary

Maintainability
Test Coverage
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;