version: 2.1 orbs: node: circleci/node@5 aliases: - &release-branches - master - develop - /^hotfix\// executors: default-executor: docker: - image: cimg/node:16.18.1 # Consider switching to LTS when scratch-audio supports that version working_directory: ~/project resource_class: medium commands: test: steps: - run: name: Test command: npm run test setup_deploy: steps: - run: name: Setup Deploy command: | export NODE_ENV=production export RELEASE_TIMESTAMP=$(date +'%Y%m%d%H%M%S') echo "export NPM_TAG=latest" >> $BASH_ENV npm run build if [ -z "$BEFORE_DEPLOY_RAN" ]; then VPKG=$($(npm bin)/json -f package.json version) VERSION=${VPKG}-prerelease.${RELEASE_TIMESTAMP} echo "export RELEASE_VERSION=${VPKG}-prerelease.${RELEASE_TIMESTAMP}" >> $BASH_ENV npm --no-git-tag-version version $VERSION if [[ "$CIRCLE_BRANCH" == hotfix/* ]]; then # double brackets are important for matching the wildcard echo "export NPM_TAG=hotfix" >> $BASH_ENV fi git config --global user.email "$(git log --pretty=format:"%ae" -n1)" git config --global user.name "$(git log --pretty=format:"%an" -n1)" echo "export BEFORE_DEPLOY_RAN=true" >> $BASH_ENV fi deploy: steps: - run: name: Deploy command: | echo "Deploying version $RELEASE_VERSION to $NPM_TAG" npm set //registry.npmjs.org/:_authToken=$NPM_TOKEN npm publish --tag $NPM_TAG if npm info | grep -q $RELEASE_VERSION; then git tag $RELEASE_VERSION && git push https://${GH_TOKEN}@github.com/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}.git $RELEASE_VERSION; fi jobs: build-and-test: executor: default-executor steps: - checkout - node/install-packages - test - persist_to_workspace: root: ~/project paths: - . deploy: executor: default-executor steps: - attach_workspace: at: ~/project - setup_deploy - deploy workflows: build-and-test-workflow: jobs: - build-and-test: filters: branches: ignore: *release-branches deploy-workflow: jobs: - build-and-test: filters: branches: only: *release-branches - deploy: context: - scratch-npm-creds requires: - build-and-test