Release - Bump Version #9
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 - Bump Version | |
on: # yamllint disable-line rule:truthy | |
schedule: | |
- cron: '0 0 1 * *' | |
workflow_dispatch: | |
inputs: | |
version_type: | |
description: "Version Type?" | |
required: true | |
type: choice | |
options: | |
- major | |
- minor | |
- patch | |
default: "minor" | |
jobs: | |
Create-PR-To-Bump-Fetch-Metadata-Version: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Generate token | |
id: generate_token | |
uses: actions/create-github-app-token@a0de6af83968303c8c955486bf9739a57d23c7f1 # v1.10.0 | |
with: | |
app-id: ${{ secrets.FETCH_METADATA_ACTION_AUTOMATION_APP_ID }} | |
private-key: ${{ secrets.FETCH_METADATA_ACTION_AUTOMATION_PRIVATE_KEY }} | |
- uses: actions/checkout@v4 | |
with: | |
# Ensure we start from main in case the workflow is run from a branch | |
ref: "main" | |
token: ${{ steps.generate_token.outputs.token }} | |
- uses: actions/setup-node@v4 # bin/bump-version needs npm | |
with: | |
node-version-file: .nvmrc | |
- name: Bump the version | |
# Cron runs with no inputs, so version_type will default to 'minor' | |
run: | | |
NEW_VERSION=$(bin/bump-version ${{ github.event.inputs.version_type || 'minor' }}) | |
echo "New version is: $NEW_VERSION" | |
echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_ENV | |
- name: Configure the git user | |
run: | | |
git config user.name "github-actions[bot]" | |
# Specifying the full email allows the avatar to show up: https://github.com/orgs/community/discussions/26560 | |
git config user.email "41898282+github-actions[bot]@users.noreply.github.com" | |
- name: Create a branch and commit the changes | |
run: | | |
# Using an idempotent branch name ensures no duplicate PR's are created | |
# if the action is re-run before the previous PR is merged. | |
# The branch name is purposefully different from the release tag to | |
# avoid ambiguity when selecting git refs. | |
git checkout -b "bump-to-${{ env.NEW_VERSION }}" | |
git add package.json package-lock.json | |
echo "Creating commit / PR linking to the releases notes URL." | |
echo "This URL will 404 until the release is actually tagged, which you should do as soon as the PR is merged." | |
git commit -m "${{ env.NEW_VERSION }}" -m "Release notes: https://github.com/${{ github.repository }}/releases/tag/${{ env.NEW_VERSION }}" | |
- name: Push the branch | |
run: | | |
echo "Pushing branch to remote. If this fails, check if a branch/PR already exists for this version." | |
git config push.autoSetupRemote true | |
git push | |
- name: Create a PR from the branch with the commit | |
run: | | |
PR_URL=$(gh pr create --fill) # `fill` re-uses the title / body from the commit | |
echo "PR created at URL: $PR_URL" | |
echo "PR_URL=$PR_URL" >> $GITHUB_ENV | |
env: | |
GH_TOKEN: ${{ steps.generate_token.outputs.token }} | |
- name: Set summary | |
run: | | |
echo ":rocket: PR created at URL: ${{ env.PR_URL }}" >> $GITHUB_STEP_SUMMARY | |
echo "" >> $GITHUB_STEP_SUMMARY | |
echo "After the PR is approved/merged, create a new release tagged as \`${{ env.NEW_VERSION }}\`, _making sure to point it at the merge commit_:" >> $GITHUB_STEP_SUMMARY | |
echo "* You can do this via the web UI - use the \`Generate release notes\` button and then edit as needed: https://github.com/${{ github.repository }}/releases/new?tag=${{ env.NEW_VERSION }}&title=${{ env.NEW_VERSION }}" >> $GITHUB_STEP_SUMMARY | |
echo "* Or via the GitHub CLI:" >> $GITHUB_STEP_SUMMARY | |
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY | |
echo " gh release create ${{ env.NEW_VERSION }} --title ${{ env.NEW_VERSION }} --generate-notes --draft" >> $GITHUB_STEP_SUMMARY | |
echo " > https://github.com/${{ github.repository }}/releases/tag/untagged-XXXXXX" >> $GITHUB_STEP_SUMMARY | |
echo " # Use the generated URL to review/edit the release notes." >> $GITHUB_STEP_SUMMARY | |
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY | |
echo "Once the release is tagged, another GitHub Action workflow automatically moves the floating \`v2\` tag to point at this release." >> $GITHUB_STEP_SUMMARY |