Levitate / Report breaking changes #2
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: Levitate / Report breaking changes | |
on: | |
workflow_run: | |
workflows: ["Levitate / Detect breaking changes"] | |
types: [completed] | |
jobs: | |
notify: | |
name: Report | |
runs-on: ubuntu-latest | |
env: | |
ARTIFACT_FOLDER: '${{ github.workspace }}/tmp' | |
ARTIFACT_NAME: 'levitate' | |
steps: | |
- uses: actions/checkout@v2 | |
- name: 'Download artifact' | |
uses: actions/github-script@v5 | |
env: | |
RUN_ID: ${{ github.event.workflow_run.id }} | |
with: | |
script: | | |
const fs = require('fs'); | |
const { owner, repo } = context.repo; | |
const runId = process.env.RUN_ID; | |
const artifactName = process.env.ARTIFACT_NAME; | |
const artifactFolder = process.env.ARTIFACT_FOLDER; | |
const artifacts = await github.rest.actions.listWorkflowRunArtifacts({ | |
owner, | |
repo, | |
run_id: runId, | |
}); | |
const artifact = artifacts.data.artifacts.find(a => a.name === artifactName); | |
if (!artifact) { | |
throw new Error(`Could not find artifact ${ artifactName } in workflow (${ runId })`); | |
} | |
const download = await github.rest.actions.downloadArtifact({ | |
owner, | |
repo, | |
artifact_id: artifact.id, | |
archive_format: 'zip', | |
}); | |
fs.mkdirSync(artifactFolder, { recursive: true }); | |
fs.writeFileSync(`${ artifactFolder }/${ artifactName }.zip`, Buffer.from(download.data)); | |
- name: Unzip artifact | |
run: unzip "${ARTIFACT_FOLDER}/${ARTIFACT_NAME}.zip" -d "${ARTIFACT_FOLDER}" | |
- name: Parsing levitate result | |
uses: actions/github-script@v5 | |
id: levitate-run | |
with: | |
script: | | |
const filePath = `${ process.env.ARTIFACT_FOLDER }/result.json`; | |
const script = require('./.github/workflows/scripts/json-file-to-job-output.js'); | |
await script({ core, filePath }); | |
- name: Check if "breaking change" label exists | |
id: does-label-exist | |
uses: actions/github-script@v5 | |
env: | |
PR_NUMBER: ${{ github.event.workflow_run.pull_requests[0].number }} | |
with: | |
script: | | |
const { data } = await github.rest.issues.listLabelsOnIssue({ | |
issue_number: process.env.PR_NUMBER, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
}); | |
const labels = data.map(({ name }) => name); | |
const doesExist = labels.includes('breaking change'); | |
return doesExist ? 1 : 0; | |
- name: Comment on PR | |
if: ${{ steps.levitate-run.outputs.exit_code == 1 }} | |
uses: marocchino/sticky-pull-request-comment@v2 | |
with: | |
number: ${{ github.event.workflow_run.pull_requests[0].number }} | |
message: | | |
⚠️ **Possible breaking changes** | |
_(Open the links below in a new tab to go to the correct steps)_ | |
${{ steps.levitate-run.outputs.message }} | |
[Check console output](${{ steps.levitate-run.outputs.job_link }}) | |
- name: Remove comment on PR | |
if: ${{ steps.levitate-run.outputs.exit_code == 0 }} | |
uses: marocchino/sticky-pull-request-comment@v2 | |
with: | |
number: ${{ github.event.workflow_run.pull_requests[0].number }} | |
delete: true | |
- name: Add "breaking change" label | |
if: ${{ steps.levitate-run.outputs.exit_code == 1 && steps.does-label-exist.outputs.result == 0 }} | |
uses: actions/github-script@v5 | |
env: | |
PR_NUMBER: ${{ github.event.workflow_run.pull_requests[0].number }} | |
with: | |
script: | | |
await github.rest.issues.addLabels({ | |
issue_number: process.env.PR_NUMBER, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
labels: ['breaking change'] | |
}) | |
- name: Remove "breaking change" label | |
if: ${{ steps.levitate-run.outputs.exit_code == 0 && steps.does-label-exist.outputs.result == 1 }} | |
uses: actions/github-script@v5 | |
env: | |
PR_NUMBER: ${{ github.event.workflow_run.pull_requests[0].number }} | |
with: | |
script: | | |
await github.rest.issues.removeLabel({ | |
issue_number: process.env.PR_NUMBER, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
name: 'breaking change' | |
}) | |
# This is very weird, the actual request goes through (comes back with a 201), but does not assign the team. | |
# Related issue: https://github.com/renovatebot/renovate/issues/1908 | |
- name: Add "grafana/plugins-platform-frontend" as a reviewer | |
if: ${{ steps.levitate-run.outputs.exit_code == 1 }} | |
uses: actions/github-script@v5 | |
env: | |
PR_NUMBER: ${{ github.event.workflow_run.pull_requests[0].number }} | |
with: | |
script: | | |
await github.rest.pulls.requestReviewers({ | |
pull_number: process.env.PR_NUMBER, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
reviewers: [], | |
team_reviewers: ['grafana/plugins-platform-frontend'] | |
}); | |
- name: Remove "grafana/plugins-platform-frontend" from the list of reviewers | |
if: ${{ steps.levitate-run.outputs.exit_code == 0 }} | |
uses: actions/github-script@v5 | |
env: | |
PR_NUMBER: ${{ github.event.workflow_run.pull_requests[0].number }} | |
with: | |
script: | | |
await github.rest.pulls.removeRequestedReviewers({ | |
pull_number: process.env.PR_NUMBER, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
reviewers: [], | |
team_reviewers: ['grafana/plugins-platform-frontend'] | |
}); | |