bhabalan is running Deploy CD #3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |