diff --git a/.circleci/config.yml b/.circleci/config.yml index 1b57473c..2d0c4043 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,91 +1,91 @@ -version: 2.1 -orbs: - node: circleci/node@5 +# version: 2.1 +# orbs: +# node: circleci/node@5 -aliases: - - &release-branches - - master - - develop - - /^hotfix\// +# 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 +# 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 +# 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 +# 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 +# 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 diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml new file mode 100644 index 00000000..5fbf4e23 --- /dev/null +++ b/.github/workflows/ci-cd.yml @@ -0,0 +1,81 @@ +# +name: CI/CD + +on: + workflow_dispatch: # Allows you to run this workflow manually from the Actions tab + pull_request: # Runs whenever a pull request is created or updated + push: # Runs whenever a commit is pushed to the repository + branches: [master, develop, hotfix/*] + +concurrency: + group: "${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}" + cancel-in-progress: true + +permissions: + contents: write # publish a GitHub release + pages: write # deploy to GitHub Pages + issues: write # comment on released issues + pull-requests: write # comment on released pull requests + +jobs: + ci-cd: + runs-on: ubuntu-latest + env: + TRIGGER_DEPLOY: ${{ startsWith(github.ref, 'refs/heads/master') || startsWith(github.ref, 'refs/heads/hotfix') || startsWith(github.ref, 'refs/heads/develop') || startsWith(github.ref, 'refs/heads/beta') }} + steps: + - uses: actions/checkout@v4 + - uses: wagoid/commitlint-github-action@v5 + if: github.event_name == 'pull_request' + - uses: actions/setup-node@v3 + with: + cache: "npm" + node-version-file: ".nvmrc" + + - name: Info + run: | + cat <> $GITHUB_ENV + if [[ "${GITHUB_REF##*/}" == hotfix/* ]]; then + echo "NPM_TAG=hotfix" >> $GITHUB_ENV + else + echo "NPM_TAG=latest" >> $GITHUB_ENV + fi + + - name: Build + run: | + npm run build + npm --no-git-tag-version version $RELEASE_VERSION + + - name: Deploy to NPM (do a dry-run if not on master, develop, or hotfix/*) + env: + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + NPM_TAG: ${{ env.NPM_TAG }} + run: | + message=$([[ "$TRIGGER_DEPLOY" == "false" ]] && echo "DRY RUN of" || echo "Deploying") + echo "$message version $RELEASE_VERSION to $NPM_TAG" + npm set //registry.npmjs.org/:_authToken=$NPM_TOKEN + npm publish --tag $NPM_TAG $([[ "$TRIGGER_DEPLOY" == "false" ]] && echo "--dry-run") + + - name: Check Release Version and Create Tag + run: | + if npm info | grep -q $RELEASE_VERSION; then + git tag $RELEASE_VERSION + git push origin $RELEASE_VERSION + fi diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 00000000..6f7f377b --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +v16