Check semver breaks - Label and Comment PR #2
This file contains hidden or 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
on: # yamllint disable-line rule:truthy | |
workflow_run: | |
workflows: [Check semver breaks] | |
types: [completed] | |
name: Check semver breaks - Label and Comment PR | |
jobs: | |
Download: | |
name: Download, Unzip and Add Labels/Comments | |
runs-on: ubuntu-24.04 | |
permissions: | |
contents: read | |
pull-requests: write | |
# only run if CI passes on the "Check semver breaks" workflow | |
if: ${{ github.event.workflow_run.conclusion == 'success' }} | |
steps: | |
- name: "Download artifact" | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
// get all artifacts from the workflow run | |
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
run_id: context.payload.workflow_run.id, | |
}); | |
// find the artifact that starts with 'semver-break' | |
let matchArtifact = allArtifacts.data.artifacts.filter((artifact) => { | |
return artifact.name.startsWith('semver-break'); | |
})[0]; | |
// if no artifact found, exit | |
if (!matchArtifact) { | |
console.log('No semver-break artifact found'); | |
process.exit(0); | |
} | |
// otherwise download the artifact | |
let download = await github.rest.actions.downloadArtifact({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
artifact_id: matchArtifact.id, | |
archive_format: 'zip', | |
}); | |
// write the artifact to the workspace | |
let fs = require('fs'); | |
fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/semver-break.zip`, Buffer.from(download.data)); | |
- name: "Unzip artifact" | |
if: ${{ hashFiles('semver-break.zip') != '' }} | |
run: unzip -n semver-break.zip | |
- name: "Comment and add label on PR - Semver break" | |
uses: actions/github-script@v7 | |
if: ${{ hashFiles('semver-break') != '' }} | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
// sanitize and get the PR number from the semver-break file | |
const fs = require('fs'); | |
let issue_number = parseInt(fs.readFileSync('semver-break', 'utf8'), 10); | |
// assure that is not NaN using Number.isNaN | |
// since does not coerce the value to a number like isNaN | |
if (Number.isNaN(issue_number)) { | |
console.log('PR_NUMBER is not a number'); | |
process.exit(1); | |
} | |
// comment on the PR | |
await github.rest.issues.createComment({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
issue_number: issue_number, | |
body: ':rotating_light: API BREAKING CHANGE DETECTED\n\nTo see the changes click details on "Check semver breaks / PR Semver - stable toolchain" job then expand "Run semver checker script" and scroll to the end of the section.' | |
}); | |
// add the label to the PR | |
await github.rest.issues.addLabels({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
issue_number: issue_number, | |
labels: ['API break'] | |
}); |