Skip to content

chrisadubois is running Deploy CD #326

chrisadubois is running Deploy CD

chrisadubois is running Deploy CD #326

Workflow file for this run

name: Deploy CD
run-name: ${{ github.actor }} is running Deploy CD
on:
push:
branches: # White-list of deployable tags and branches. Note that all white-listed branches cannot include any `/` characters
- next
env:
rid: ${{ github.run_id }}-${{ github.run_number }}
token: ${{ secrets.NPM_TOKEN }}
GIT_AUTHOR_NAME: ${{ github.actor }}
GIT_AUTHOR_EMAIL: ${{ github.actor }}@users.noreply.github.com
jobs:
initialize:
name: Initialize Project
runs-on: ubuntu-latest
steps:
- name: Checkout Project
uses: actions/checkout@v3
- name: Setup Node
uses: actions/[email protected]
with:
node-version-file: '.nvmrc'
registry-url: 'https://registry.npmjs.org'
cache: 'yarn'
- name: Install Dependencies
run: yarn
- name: Cache Dependencies
uses: actions/cache@v3
if: steps.validate-dependencies.outputs.cache-hit != 'true'
with:
path: '**/node_modules'
key: node-modules-${{ hashFiles('./yarn.lock') }}
build:
name: Build Packages
needs: initialize
runs-on: ubuntu-latest
steps:
- name: Checkout Project
uses: actions/checkout@v3
- name: Setup Node
uses: actions/[email protected]
with:
node-version-file: '.nvmrc'
registry-url: 'https://registry.npmjs.org'
cache: 'yarn'
- name: Uncache Dependencies
uses: actions/cache@v3
with:
path: '**/node_modules'
key: node-modules-${{ hashFiles('./yarn.lock') }}
- name: Synchronize Packages
run: yarn
- name: Build Tools
run: yarn workspaces foreach --from '@webex/*-tools' --topological-dev --parallel --verbose run build:src
- name: Build Webex Core
run: yarn workspace @webex/webex-core run build:src
- name: Build Other Packages
run: yarn workspaces foreach --parallel --verbose run build:src
- name: Cache Distributables
uses: actions/cache@v3
with:
path: '**/dist'
key: dist-${{ env.rid }}
generate-package-matrix:
name: Determine Changed Packages
needs: build
runs-on: ubuntu-latest
outputs:
node-changed: ${{ steps.generate-package-matrix-node-changed.outputs.node-changed }} # Used for execution.
node-recursive: ${{ steps.generate-package-matrix-node-recursive.outputs.node-recursive }} # Used for execution.
yarn-changed: ${{ steps.generate-package-matrix-yarn-changed.outputs.yarn-changed }} # Used for workspaces.
yarn-recursive: ${{ steps.generate-package-matrix-yarn-recursive.outputs.yarn-recursive }} # Used for workspaces.
steps:
- name: Checkout Project
uses: actions/checkout@v3
- name: Setup Node
uses: actions/[email protected]
with:
node-version-file: '.nvmrc'
registry-url: 'https://registry.npmjs.org'
cache: 'yarn'
- name: Uncache Dependencies
uses: actions/cache@v3
with:
path: '**/node_modules'
key: node-modules-${{ hashFiles('./yarn.lock') }}
- name: Uncache Distributables
uses: actions/cache@v3
with:
path: '**/dist'
key: dist-${{ env.rid }}
- name: Synchronize Packages
run: yarn
- name: Update Main Branch
run: git fetch origin ${GITHUB_REF##*/} --unshallow
# Used for running node scripts against all changed packages since the last push to the target branch.
- id: generate-package-matrix-node-changed
name: Generate Package Matrix
run: echo "node-changed=$(yarn package-tools list --mode node --since ${{ github.event.before }})" >> $GITHUB_OUTPUT
# Used for running node scripts against all changed packages, and their dependents, since the last push to the target branch.
- id: generate-package-matrix-node-recursive
name: Generate Package Matrix
run: echo "node-recursive=$(yarn package-tools list --mode node --recursive --since ${{ github.event.before }})" >> $GITHUB_OUTPUT
# Used for running yarn tools against all changed packages since the last push to the target branch.
- id: generate-package-matrix-yarn-changed
name: Generate Package Matrix
run: echo "yarn-changed=$(yarn package-tools list --since ${{ github.event.before }})" >> $GITHUB_OUTPUT
# Used for running yarn tools against all changed packages, and their dependents, since the last push to the target branch.
- id: generate-package-matrix-yarn-recursive
name: Generate Package Matrix
run: echo "yarn-recursive=$(yarn package-tools list --recursive --since ${{ github.event.before }})" >> $GITHUB_OUTPUT
- name: Display Package Matrix
run: |
echo "changed packages for node - ${{ steps.generate-package-matrix-node-changed.outputs.node-changed}}"
echo "changed packages and dependents for node - ${{ steps.generate-package-matrix-node-recursive.outputs.node-recursive }}"
echo "changed packages for yarn - ${{ steps.generate-package-matrix-yarn-changed.outputs.yarn-changed}}"
echo "changed packages and dependents for yarn - ${{ steps.generate-package-matrix-yarn-recursive.outputs.yarn-recursive }}"
publish-npm:
name: Publish - NPM
needs: generate-package-matrix
runs-on: ubuntu-latest
steps:
- name: Checkout Project
uses: actions/checkout@v3
- name: Setup Node
uses: actions/[email protected]
with:
node-version-file: '.nvmrc'
registry-url: 'https://registry.npmjs.org'
cache: 'yarn'
- name: Uncache Dependencies
uses: actions/cache@v3
with:
path: '**/node_modules'
key: node-modules-${{ hashFiles('./yarn.lock') }}
- name: Uncache Distributables
uses: actions/cache@v3
with:
path: '**/dist'
key: dist-${{ env.rid }}
- name: Add NPM token to .yarnrc.yml file
run: |
echo "npmAuthToken: ${{ env.token }}" >> ~/.yarnrc.yml
- name: Synchronize Packages
run: |
yarn
yarn package-tools sync --tag ${GITHUB_REF##*/}
- name: Display Notice
run: |
echo "packages to increment: ${{ needs.generate-package-matrix.outputs.node-recursive }}"
echo "tag to increment: ${GITHUB_REF##*/}"
- name: Increment Package Versions
run: yarn package-tools increment --packages ${{ needs.generate-package-matrix.outputs.node-recursive }} --tag ${GITHUB_REF##*/}
- name: Build all packages for publish
run: yarn run build:publish
- name: Build a webex UMD
run: yarn run build:script
- name: Deploy Packages
run: yarn workspaces foreach --from '${{ needs.generate-package-matrix.outputs.yarn-recursive }}' --verbose run deploy:npm --access public --tag ${GITHUB_REF##*/}
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
publish-documentation:
name: Publish - Documentation
needs: [publish-npm,generate-package-matrix]
runs-on: ubuntu-latest
steps:
- name: Documentation Deploy Steps
run: echo "Documentation Deploy Steps"
- name: Checkout Project
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Setup Node
uses: actions/[email protected]
with:
node-version-file: '.nvmrc'
registry-url: 'https://registry.npmjs.org'
cache: 'yarn'
- name: Uncache Dependencies
uses: actions/cache@v3
with:
path: '**/node_modules'
key: node-modules-${{ hashFiles('./yarn.lock') }}
- name: Uncache Distributables
uses: actions/cache@v3
with:
path: '**/dist'
key: dist-${{ env.rid }}
- name: Synchronize Packages
run: yarn
- name: Build tools and set versions
run: |
yarn workspaces foreach --from '@webex/*-tools' --topological-dev --parallel --verbose run build:src
yarn package-tools sync --tag ${GITHUB_REF##*/}
- name: Build packages locally
run: yarn build:local
- name: Build Docs
run: yarn run build:docs
- name: Set Git Identity
run: |
git config user.email "${GIT_AUTHOR_EMAIL}"
git config user.name "${GIT_AUTHOR_NAME}"
- name: Get existing changelog from documentation Branch
run: |
git fetch origin documentation
git checkout origin/documentation -- docs/changelog/logs
- name: Update changelog
run: yarn package-tools changelog --packages ${{ needs.generate-package-matrix.outputs.node-recursive }} --tag ${GITHUB_REF##*/} --commit ${{ github.event.before }}
- name: Update Changelog and Publish Docs Folder
run: |
# Check if there's anything to commit before committing
if [ -n "$(git status --porcelain)" ]; then
git add docs/
git commit -m "chore(docs): update docs"
git push origin HEAD:documentation --force
fi
publish-tag:
name: Publish - Tags
runs-on: ubuntu-latest
needs: [generate-package-matrix, publish-npm]
outputs:
message: ${{ steps.versionextractor.outputs.message }}
version: ${{ steps.versionextractor.outputs.version }}
commit: ${{ steps.lastcommit.outputs.commit }}
proceed: ${{ steps.skipcondition.outputs.proceed }}
steps:
- name: Checkout Project
uses: actions/checkout@v3
- name: Setup Node
uses: actions/[email protected]
with:
node-version-file: '.nvmrc'
registry-url: 'https://registry.npmjs.org'
cache: 'yarn'
- name: Uncache Dependencies
uses: actions/cache@v3
with:
path: '**/node_modules'
key: node-modules-${{ hashFiles('./yarn.lock') }}
- name: Uncache Distributables
uses: actions/cache@v3
with:
path: '**/dist'
key: dist-${{ env.rid }}
- name: Synchronize Packages
run: yarn
- name: Extract latest version from NPM and commit message
id: versionextractor
run: |
yarn ws:tools
echo "message=$(git log -1 --oneline --no-decorate)" >> $GITHUB_OUTPUT
echo "version=v$(yarn package-tools sync --tag ${GITHUB_REF##*/} --packages webex | awk '{print $3}' | tr -d '%')" >> $GITHUB_OUTPUT
- name: Conditions to skip tag publish
id: skipcondition
run: |
echo "proceed=true" >> $GITHUB_OUTPUT
if git rev-parse "${{ steps.versionextractor.outputs.version }}" >/dev/null 2>&1; then
echo "Tag ${{ steps.versionextractor.outputs.version }} already exists. Exiting job."
echo "proceed=false" >> $GITHUB_OUTPUT
elif [ -z ${{ needs.generate-package-matrix.outputs.node-recursive }} ]; then
echo "No packages published, therefore, publishing a tag is unnecessary. Exiting job."
echo "proceed=false" >> $GITHUB_OUTPUT
else
echo "Creating the tag."
fi
- name: Get the last commit hash
id: lastcommit
run: |
if [ ${{ steps.skipcondition.outputs.proceed }} = false ]; then
echo "Skipping this step."
else
echo "commit=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
fi
- name: Set Git Identity
run: |
if [ ${{ steps.skipcondition.outputs.proceed }} = false ]; then
echo "Skipping this step."
else
git config user.email "${GIT_AUTHOR_EMAIL}"
git config user.name "${GIT_AUTHOR_NAME}"
fi
- name: Create a tag for the last commit
run: |
if [ ${{ steps.skipcondition.outputs.proceed }} = false ]; then
echo "Skipping this step."
else
git tag -a "${{ steps.versionextractor.outputs.version }}" ${{ steps.lastcommit.outputs.commit }} -m "${{ steps.versionextractor.outputs.message }}"
fi
- name: Publish the tag to GitHub
run: |
if [ ${{ steps.skipcondition.outputs.proceed }} = false ]; then
echo "Skipping this step."
else
git push origin ${{ steps.versionextractor.outputs.version }}
fi