Skip to content

Commit 1668cf4

Browse files
committed
Address merged issue bookkeeping review
1 parent 48dfe74 commit 1668cf4

1 file changed

Lines changed: 39 additions & 11 deletions

File tree

.github/workflows/merged-pr-bookkeeping.yml

Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -105,14 +105,20 @@ jobs:
105105
}
106106
}
107107
108-
async function getClosingIssueNumbers() {
108+
async function getClosingIssueRefs() {
109109
const query = `
110110
query($owner: String!, $repo: String!, $pullNumber: Int!, $cursor: String) {
111111
repository(owner: $owner, name: $repo) {
112112
pullRequest(number: $pullNumber) {
113113
closingIssuesReferences(first: 100, after: $cursor) {
114114
nodes {
115115
number
116+
repository {
117+
name
118+
owner {
119+
login
120+
}
121+
}
116122
}
117123
pageInfo {
118124
hasNextPage
@@ -124,7 +130,7 @@ jobs:
124130
}
125131
`;
126132
127-
const numbers = [];
133+
const issueRefs = new Map();
128134
let cursor = null;
129135
let hasNextPage = true;
130136
@@ -136,12 +142,20 @@ jobs:
136142
cursor,
137143
});
138144
const refs = result.repository.pullRequest.closingIssuesReferences;
139-
numbers.push(...refs.nodes.map((issue) => issue.number));
145+
for (const issue of refs.nodes) {
146+
const issueOwner = issue.repository.owner.login;
147+
const issueRepo = issue.repository.name;
148+
issueRefs.set(`${issueOwner}/${issueRepo}#${issue.number}`, {
149+
owner: issueOwner,
150+
repo: issueRepo,
151+
number: issue.number,
152+
});
153+
}
140154
hasNextPage = refs.pageInfo.hasNextPage;
141155
cursor = refs.pageInfo.endCursor;
142156
}
143157
144-
return [...new Set(numbers)];
158+
return [...issueRefs.values()];
145159
}
146160
147161
async function hasBookkeepingComment(issueNumber, marker) {
@@ -158,13 +172,25 @@ jobs:
158172
await ensureLabel(pendingReleaseLabel);
159173
const fallbackMilestone = pullRequest.milestone || await ensureMilestone(nextReleaseMilestoneTitle);
160174
161-
const issueNumbers = await getClosingIssueNumbers();
162-
if (issueNumbers.length === 0) {
175+
const issueRefs = await getClosingIssueRefs();
176+
if (issueRefs.length === 0) {
163177
core.info(`PR #${pullNumber} did not declare closing issue references. Nothing to update.`);
164178
return;
165179
}
166180
167-
for (const issueNumber of issueNumbers) {
181+
for (const issueRef of issueRefs) {
182+
if (
183+
issueRef.owner.toLowerCase() !== owner.toLowerCase() ||
184+
issueRef.repo.toLowerCase() !== repo.toLowerCase()
185+
) {
186+
core.warning(
187+
`Skipping cross-repository closing reference ${issueRef.owner}/${issueRef.repo}#${issueRef.number}; ` +
188+
`this workflow only updates issues in ${owner}/${repo}.`,
189+
);
190+
continue;
191+
}
192+
193+
const issueNumber = issueRef.number;
168194
const issueResponse = await github.rest.issues.get({
169195
owner,
170196
repo,
@@ -213,10 +239,12 @@ jobs:
213239
owner,
214240
repo,
215241
issue_number: issueNumber,
216-
body: `${marker}
217-
Fixed by #${pullNumber} and merged into \`main\`.
218-
219-
This change is assigned to the \`${milestoneTitle}\` release milestone and is not necessarily available in the latest downloadable desktop release yet. It is currently marked as \`${pendingReleaseLabel.name}\` until a packaged release containing it is published.`,
242+
body: [
243+
marker,
244+
`Fixed by #${pullNumber} and merged into \`main\`.`,
245+
"",
246+
`This change is assigned to the \`${milestoneTitle}\` release milestone and is not necessarily available in the latest downloadable desktop release yet. It is currently marked as \`${pendingReleaseLabel.name}\` until a packaged release containing it is published.`,
247+
].join("\n"),
220248
});
221249
}
222250

0 commit comments

Comments
 (0)