image: node:10 stages: - build - test - release build: stage: build script: - wipCommits=`git log --grep=^WIP`; if [ -n "$wipCommits" ] && [ "$CI_COMMIT_REF_NAME" = "master" ]; then echo "WIP commits detected in `master`; failing build."; exit 1; fi - yarn install --frozen-lockfile - yarn run build artifacts: expire_in: 1 month paths: - node_modules - ./*.d.ts - ./*.js - ./**/*.d.ts - ./**/*.js test: stage: test script: - wipCommits=`git log --grep=^WIP`; if [ -n "$wipCommits" ] && [ "$CI_COMMIT_REF_NAME" != "master" ]; then echo "WIP commits detected; skipping tests."; exit 0; fi - yarn test artifacts: expire_in: 1 week paths: - coverage release_snapshot: stage: release dependencies: - build only: - branches script: - apt-get update - apt-get install --assume-yes jq - echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ~/.npmrc - VERSION="$(cat package.json | jq -r '.version')" - NEWVERSION="$VERSION-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHA" - sed --in-place --expression="s/\"$VERSION\"/\"$NEWVERSION\"/" package.json - if [ $CI_COMMIT_REF_SLUG == "master" ]; then export TAGNAME="next"; else export TAGNAME="$CI_COMMIT_REF_SLUG"; fi - npm publish --tag "$TAGNAME" - npm pack - mv "$CI_PROJECT_NAME-$NEWVERSION.tgz" package.tgz - echo -e "To install this version of $CI_PROJECT_NAME, run:\n yarn add --dev $CI_PROJECT_NAME@$TAGNAME" environment: name: snapshot/$CI_COMMIT_REF_SLUG on_stop: unlist_snapshot artifacts: expire_in: 1 month paths: - package.tgz unlist_snapshot: stage: release when: manual only: - branches script: - echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ~/.npmrc - if [ $CI_COMMIT_REF_SLUG == "master" ]; then export TAGNAME="next"; else export TAGNAME="$CI_COMMIT_REF_SLUG"; fi - npm dist-tag rm "$CI_PROJECT_NAME" "$TAGNAME" environment: name: snapshot/$CI_COMMIT_REF_SLUG action: stop release: stage: release dependencies: - build only: - tags script: - echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ~/.npmrc - npm publish - npm pack # $CI_COMMIT_REF_NAME is the tag, which should be in the form `v`. # Thus, if we strip the `v`, we can get the package name. - mv "$CI_PROJECT_NAME-${CI_COMMIT_REF_NAME:1}.tgz" package.tgz environment: name: production url: https://www.npmjs.com/package/$CI_PROJECT_NAME