Automatically dispatch emscripten release tag action (#1442)
This PR add several features to release automation:
1. The existing tag-release job has an output that indicates whether the
triggering commit
is a release (i.e. whether it matches the regex)
2. The new followup job runs a new script which fetches the recent
emscripten-releases
revisions, reads the DEPS file from the 'latest' release in
emscripten-releases-tags.json
to find the corresponding emscripten revision and writes it into the
environment
2. The final step reads the emscripten revision from the environment and
creates a
workflow_dispatch event to run the tag-release.yml job on the emscripten
repo
This commit is contained in:
7
.github/workflows/create-release.yml
vendored
7
.github/workflows/create-release.yml
vendored
@@ -23,5 +23,10 @@ jobs:
|
||||
uses: peter-evans/create-pull-request@v6
|
||||
with:
|
||||
title: Release ${{ env.RELEASE_VERSION }}
|
||||
commit-message: Release ${{ env.RELEASE_VERSION }}
|
||||
commit-message: |
|
||||
Release ${{ env.RELEASE_VERSION }}
|
||||
body: |
|
||||
With emscripten-releases revisions:
|
||||
https://chromium.googlesource.com/emscripten-releases/+/${{ inputs.lto-sha }} (LTO)
|
||||
https://chromium.googlesource.com/emscripten-releases/+/${{ inputs.nonlto-sha }} (asserts)
|
||||
delete-branch: true
|
||||
|
||||
95
.github/workflows/tag-release.yml
vendored
95
.github/workflows/tag-release.yml
vendored
@@ -4,33 +4,74 @@ name: Create release tag
|
||||
|
||||
on:
|
||||
push:
|
||||
paths: [ emscripten-releases-tags.json, .github/workflows/tag-release.yml ]
|
||||
paths:
|
||||
- emscripten-releases-tags.json
|
||||
- .github/workflows/tag-release.yml
|
||||
branches:
|
||||
- main
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
tag-release:
|
||||
# Only activate for commits created by the create-release.yml workflow.
|
||||
# The assumption is that when manual changes happen, we want to handle
|
||||
# tagging manually too.
|
||||
if: github.event.head_commit.author.username == 'github-actions[bot]'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Match message and create tag
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const message = `${{ github.event.head_commit.message }}`
|
||||
const regex = /Release ([0-9]+.[0-9]+.[0-9]+)/
|
||||
const match = message.match(regex)
|
||||
if (match) {
|
||||
const release = match[1]
|
||||
console.log(`Matched release ${release}`)
|
||||
await github.rest.git.createRef({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
ref: `refs/tags/${release}`,
|
||||
sha: context.sha
|
||||
})
|
||||
} else {
|
||||
console.log(`Commit message: ${message} did not match pattern`)
|
||||
}
|
||||
tag-release:
|
||||
# Only activate for commits created by the create-release.yml workflow.
|
||||
# The assumption is that when manual changes happen, we want to handle
|
||||
# tagging manually too.
|
||||
name: Check for release commit and create tag
|
||||
if: github.event.head_commit.author.username == 'github-actions[bot]'
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
is_release: ${{ steps.create-tag.outputs.result }}
|
||||
steps:
|
||||
- name: Match message and create tag
|
||||
id: create-tag
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
github-token: ${{ secrets.TEST_TOKEN }}
|
||||
# A commit with the message of the form 'Release X.Y.Z' is expected
|
||||
# to have been created by create_release.py and update the latest
|
||||
# release in emscripten-releases-tags.json
|
||||
script: |
|
||||
const message = `${{ github.event.head_commit.message }}`
|
||||
const regex = /Release ([0-9]+.[0-9]+.[0-9]+)/;
|
||||
const match = message.match(regex);
|
||||
let is_release = false;
|
||||
if (match) {
|
||||
const release = match[1];
|
||||
console.log(`Matched release ${release}`);
|
||||
await github.rest.git.createRef({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
ref: `refs/tags/${release}`,
|
||||
sha: context.sha
|
||||
});
|
||||
is_release = true;
|
||||
} else {
|
||||
console.log(`Commit message: '${message}' did not match pattern`);
|
||||
}
|
||||
return is_release;
|
||||
|
||||
dispatch-emscripten-tag:
|
||||
name: Dispatch workflow to tag emscripten repo
|
||||
runs-on: ubuntu-latest
|
||||
needs: tag-release
|
||||
if: ${{ needs.tag-release.outputs.is_release == 'true' }}
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v4
|
||||
- name: Find emscripten revision
|
||||
# get_emscripten_revision_info.py sets env.EMSCRIPTEN_HASH to the
|
||||
# emscripten hash associated with the latest release in
|
||||
# emscripten-releases-tags.json
|
||||
run: python3 scripts/get_emscripten_revision_info.py
|
||||
- name: Dispatch emscripten workflow
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
github-token: ${{ secrets.TEST_TOKEN }}
|
||||
script: |
|
||||
await github.rest.actions.createWorkflowDispatch({
|
||||
owner: context.repo.owner,
|
||||
repo: 'emscripten',
|
||||
workflow_id: 'tag-release.yml',
|
||||
ref: 'main',
|
||||
inputs: { 'release-sha': '${{ env.EMSCRIPTEN_HASH }}' }
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user