diff --git a/.github/workflows/danger.yml b/.github/workflows/danger.yml index dbd611a697..d56e1585a1 100644 --- a/.github/workflows/danger.yml +++ b/.github/workflows/danger.yml @@ -2,7 +2,7 @@ name: Danger on: pull_request: - types: [opened, synchronize, reopened, edited, ready_for_review] + types: [opened, synchronize, reopened, edited, ready_for_review, labeled, unlabeled] jobs: danger: @@ -10,5 +10,5 @@ jobs: steps: - uses: getsentry/github-workflows/danger@17cc15eb58ea3687cd8f2714a4192dcee4aa09ef with: - extra-dangerfile: scripts/check-replay-stubs.js + extra-dangerfile: scripts/check-additional-danger.js extra-install-packages: "curl unzip openjdk-17-jre-headless" diff --git a/scripts/check-additional-danger.js b/scripts/check-additional-danger.js new file mode 100644 index 0000000000..af91837641 --- /dev/null +++ b/scripts/check-additional-danger.js @@ -0,0 +1,14 @@ +async function safeRun(fnPath, { fail, warn, message, markdown, danger }) { + const fn = require(fnPath); + try { + return await fn({ fail, warn, message, markdown, danger }); + } catch (error) { + warn(`Failed to run ${fnPath}: ${error.message}`); + } +} + + +module.exports = async function ({ fail, warn, message, markdown, danger }) { + await safeRun('./check-github-label', { fail, warn, message, markdown, danger }); + await safeRun('./check-replay-stubs', { fail, warn, message, markdown, danger }); +}; diff --git a/scripts/check-github-label.js b/scripts/check-github-label.js new file mode 100644 index 0000000000..1ebc8e3552 --- /dev/null +++ b/scripts/check-github-label.js @@ -0,0 +1,7 @@ +module.exports = async function ({ fail, warn, __, ___, danger }) { + const isReeadyForMerge = danger.github.issue.labels.some(label => label.name === 'ready-to-merge'); + if (!isReeadyForMerge) { + // Ideally we could check for `isDraft` but this information is not easily available. + fail('Pull request is not ready for merge, please add the "ready-to-merge" label to the pull request'); + } +};