From d42b93070a798c1175c2295467ba0b0efa424b3e Mon Sep 17 00:00:00 2001 From: karylab_agents Date: Thu, 30 Jul 2026 18:05:48 +0800 Subject: [PATCH] Fix PR workflows on Gitea --- .github/workflows/new_pr_bot.yml | 30 ++++++++++++++++++++++++------ .github/workflows/pre-commit.yml | 27 ++++++++++++++++++++++----- 2 files changed, 46 insertions(+), 11 deletions(-) diff --git a/.github/workflows/new_pr_bot.yml b/.github/workflows/new_pr_bot.yml index a2f09eb8a45..7292d7cc643 100644 --- a/.github/workflows/new_pr_bot.yml +++ b/.github/workflows/new_pr_bot.yml @@ -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) { diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index aa1f437ab6a..bb70a036a0b 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -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}`); -- 2.54.0