[CI] Make PR workflows Gitea-compatible #3
@@ -6,6 +6,7 @@ on:
|
||||
|
||||
permissions:
|
||||
pull-requests: write
|
||||
issues: write
|
||||
|
||||
jobs:
|
||||
update-description:
|
||||
@@ -61,12 +62,29 @@ jobs:
|
||||
const { owner, repo } = context.repo;
|
||||
const prAuthor = context.payload.pull_request.user.login;
|
||||
|
||||
const { data: searchResults } = await github.rest.search.issuesAndPullRequests({
|
||||
q: `repo:${owner}/${repo} type:pr is:merged author:${prAuthor}`,
|
||||
per_page: 1,
|
||||
});
|
||||
|
||||
const mergedPRCount = searchResults.total_count;
|
||||
// Gitea does not implement GitHub's /search/issues endpoint.
|
||||
// Walk closed PRs until we find one merged PR by this author.
|
||||
let mergedPRCount = 0;
|
||||
let page = 1;
|
||||
while (mergedPRCount === 0) {
|
||||
const { data: pulls } = await github.request(
|
||||
'GET /repos/{owner}/{repo}/pulls',
|
||||
{
|
||||
owner,
|
||||
repo,
|
||||
state: 'closed',
|
||||
page,
|
||||
limit: 50,
|
||||
},
|
||||
);
|
||||
mergedPRCount += pulls.filter(
|
||||
pr => pr.merged && pr.user?.login === prAuthor,
|
||||
).length;
|
||||
if (pulls.length < 50) {
|
||||
break;
|
||||
}
|
||||
page += 1;
|
||||
}
|
||||
console.log(`Found ${mergedPRCount} merged PRs by ${prAuthor}`);
|
||||
|
||||
if (mergedPRCount === 0) {
|
||||
|
||||
@@ -32,11 +32,28 @@ jobs:
|
||||
const hasReadyLabel = pr.labels.some(l => readyLabels.includes(l.name));
|
||||
const hasVerifiedLabel = pr.labels.some(l => l.name === 'verified');
|
||||
|
||||
const { data: mergedPRs } = await github.rest.search.issuesAndPullRequests({
|
||||
q: `repo:${context.repo.owner}/${context.repo.repo} is:pr is:merged author:${pr.user.login}`,
|
||||
per_page: 4,
|
||||
});
|
||||
const mergedCount = mergedPRs.total_count;
|
||||
// Gitea does not implement GitHub's /search/issues endpoint.
|
||||
// Walk closed PRs until four merged PRs by this author are found.
|
||||
let mergedCount = 0;
|
||||
let page = 1;
|
||||
while (mergedCount < 4) {
|
||||
const { data: pulls } = await github.request(
|
||||
'GET /repos/{owner}/{repo}/pulls',
|
||||
{
|
||||
...context.repo,
|
||||
state: 'closed',
|
||||
page,
|
||||
limit: 50,
|
||||
},
|
||||
);
|
||||
mergedCount += pulls.filter(
|
||||
item => item.merged && item.user?.login === pr.user.login,
|
||||
).length;
|
||||
if (pulls.length < 50) {
|
||||
break;
|
||||
}
|
||||
page += 1;
|
||||
}
|
||||
|
||||
if (hasReadyLabel || hasVerifiedLabel || mergedCount >= 4) {
|
||||
core.info(`Check passed: verified label=${hasVerifiedLabel}, ready label=${hasReadyLabel}, 4+ merged PRs=${mergedCount >= 4}`);
|
||||
|
||||
Reference in New Issue
Block a user