Version Packages (#1023) #189
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: Release | |
on: | |
push: | |
branches: | |
- main | |
# This workflow will run changesets depending on two different scenarios: | |
# | |
# 1. If we are landing a specific commit into main (Author PR), then | |
# changesets will check if there are changes verifying the Markdown files | |
# generated automatically: | |
# | |
# a) There are new versions and there's NO Release PR, then the changesets | |
# action will create a new Release PR. | |
# | |
# b) There's a Release PR, then the changesets action will update the | |
# existing Release PR with the new commit. | |
# | |
# NOTE: (in both cases, changesets will modify the new version in | |
# package.json for each package, and will remove the MD files as part of the | |
# Release PR). | |
# | |
# 2. If we are landing the Release PR into main, then the changesets action | |
# will publish the changes to npm. | |
# | |
# For more info about this workflow, see: | |
# https://github.com/changesets/action#usage | |
jobs: | |
release: | |
name: Release | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ssh-key: ${{ secrets.KHAN_ACTIONS_BOT_SSH_PRIVATE_KEY }} | |
fetch-depth: 0 | |
- name: Install & cache node_modules | |
uses: Khan/actions@shared-node-cache-v2 | |
with: | |
node-version: 20.x | |
- name: Build Typedoc | |
# Generate nice docs inside "docs/" folder | |
run: yarn build:docs | |
- name: Deploy to GitHub pages | |
uses: JamesIves/github-pages-deploy-action@v4 | |
with: | |
# The branch the action should deploy to. | |
branch: gh-pages | |
# The folder the action should deploy. | |
folder: docs | |
- name: Create Release Pull Request or Publish to npm | |
id: changesets | |
uses: changesets/action@v1 | |
with: | |
publish: yarn publish:ci | |
env: | |
# We use a Personal Access Token here rather than the GITHUB_TOKEN | |
# so that it will trigger our other actions. The token has to be on | |
# the account of someone with appropriate access levels and given the | |
# repo scope. | |
GITHUB_TOKEN: ${{ secrets.KHAN_ACTIONS_BOT_TOKEN }} | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | |
- name: Build Slack message | |
id: slack_message | |
if: steps.changesets.outputs.published == 'true' | |
# We have to do this in stages to make sure that the output into the | |
# GITHUB_OUTPUT retains our lines and is valid for updating the env. | |
# This is based on: | |
# https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#example-of-a-multiline-string | |
run: | | |
EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64) | |
echo "updated_packages<<$EOF" >> $GITHUB_OUTPUT | |
jq -r '[group_by(.name) | .[] | " - "+.[].name+"@"+.[].version] | join("\n")' <<< '${{ steps.changesets.outputs.publishedPackages }}' >> $GITHUB_OUTPUT | |
echo "$EOF" >> $GITHUB_OUTPUT | |
- name: Send a Slack notification for web if a publish happens | |
if: steps.changesets.outputs.published == 'true' | |
uses: rtCamp/action-slack-notify@v2 | |
env: | |
SLACK_WEBHOOK: ${{ secrets.SLACK_FEIWEB_WEBHOOK }} | |
SLACK_CHANNEL: frontend-infra-web | |
SLACK_MSG_AUTHOR: ${{ github.event.pull_request.user.login }} | |
SLACK_USERNAME: GithubGoose | |
SLACK_ICON_EMOJI: ":goose:" | |
SLACK_MESSAGE: "A new version of ${{ github.event.repository.name }} was published! 🎉 \n${{ steps.slack_message.outputs.updated_packages }}\n\nRelease notes → https://github.com/Khan/${{ github.event.repository.name }}/releases/" | |
SLACK_TITLE: "New Wonder Stuff release!" | |
SLACK_FOOTER: Wonder Stuff Slack Notification | |
MSG_MINIMAL: true | |
- name: Send a Slack notification for mobile if a publish happens | |
if: steps.changesets.outputs.published == 'true' | |
uses: rtCamp/action-slack-notify@v2 | |
env: | |
SLACK_WEBHOOK: ${{ secrets.SLACK_FEIMOBILE_WEBHOOK }} | |
SLACK_CHANNEL: frontend-infra-mobile | |
SLACK_MSG_AUTHOR: ${{ github.event.pull_request.user.login }} | |
SLACK_USERNAME: GithubGoose | |
SLACK_ICON_EMOJI: ":goose:" | |
SLACK_MESSAGE: "A new version of ${{ github.event.repository.name }} was published! 🎉 \n${{ steps.slack_message.outputs.updated_packages }}\n\nRelease notes → https://github.com/Khan/${{ github.event.repository.name }}/releases/" | |
SLACK_TITLE: "New Wonder Stuff release!" | |
SLACK_FOOTER: Wonder Stuff Slack Notification | |
MSG_MINIMAL: true |