Skip to content

Commit 181d614

Browse files
authored
Merge pull request #6434 from NomicFoundation/changeset-check
ci: run the changeset check in the merge queue
2 parents 25067ca + 9f09fb9 commit 181d614

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

.github/workflows/check-changeset-added.yml

+67
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
name: Check that the PR has a changeset
55

66
on:
7+
merge_group:
78
pull_request:
89
branches:
910
- main
@@ -25,6 +26,72 @@ jobs:
2526
- uses: actions/github-script@v7
2627
with:
2728
script: |
29+
const isMergeGroup = context.eventName === "merge_group";
30+
31+
// Merge group context
32+
if (isMergeGroup) {
33+
console.log("Running in merge_group context...");
34+
const listPrResult = await github.rest.repos.listPullRequestsAssociatedWithCommit({
35+
owner: context.repo.owner,
36+
repo: context.repo.repo,
37+
commit_sha: context.sha
38+
});
39+
40+
console.log("list pr result");
41+
console.log(listPrResult);
42+
43+
const { data: mergeQueue } = listPrResult;
44+
45+
if (mergeQueue.length === 0) {
46+
console.log("No associated PRs found for this merge_group commit.");
47+
process.exit(1);
48+
}
49+
50+
console.log(`Found ${mergeQueue.length} PR(s) in the merge group.`);
51+
52+
for (const pr of mergeQueue) {
53+
const pullNumber = context.issue.number;
54+
55+
console.log(`Checking PR #${pr.number}...`);
56+
const { data: files } = await github.rest.pulls.listFiles({
57+
owner: context.repo.owner,
58+
repo: context.repo.repo,
59+
pull_number: pullNumber
60+
});
61+
62+
const changeset = files.find(
63+
file => file.status === "added" && file.filename.startsWith(".changeset/")
64+
);
65+
66+
if (changeset !== undefined) {
67+
console.log(`PR #${pr.number} has a changeset: ${changeset.filename}`);
68+
continue;
69+
}
70+
71+
console.log(`PR #${pr.number} has no changeset.`);
72+
73+
const { data: prDetails } = await github.rest.pulls.get({
74+
owner: context.repo.owner,
75+
repo: context.repo.repo,
76+
pull_number: pullNumber
77+
});
78+
79+
const noChangesetNeededLabel = prDetails.labels.some(l => l.name === "no changeset needed");
80+
81+
if (noChangesetNeededLabel) {
82+
console.log(`PR #${pr.number} is labeled as "no changeset needed".`);
83+
continue;
84+
}
85+
86+
console.log(`PR #${pr.number} is not labeled as "no changeset needed". Failing job.`);
87+
process.exit(1);
88+
}
89+
90+
console.log("All PRs in the merge group have a changeset or are labeled correctly.");
91+
return;
92+
}
93+
94+
// Single PR context
2895
const pullNumber = context.issue.number;
2996
3097
const { data: files } = await github.rest.pulls.listFiles({

0 commit comments

Comments
 (0)