From ac295cf179c5a1c87bfee2723fee78fb32674e8b Mon Sep 17 00:00:00 2001 From: Alexey Efimov Date: Fri, 6 Jun 2025 11:29:39 +0000 Subject: [PATCH] fix(Automation): even more automation --- .github/workflows/add-to-project.yml | 15 ----- .github/workflows/priority-score.yml | 88 ++++++++++++++++++---------- 2 files changed, 56 insertions(+), 47 deletions(-) delete mode 100644 .github/workflows/add-to-project.yml diff --git a/.github/workflows/add-to-project.yml b/.github/workflows/add-to-project.yml deleted file mode 100644 index 55a5e738c..000000000 --- a/.github/workflows/add-to-project.yml +++ /dev/null @@ -1,15 +0,0 @@ -name: Auto-add to GitHub Project - -on: - issues: - types: [opened] - -jobs: - auto-add: - runs-on: ubuntu-latest - steps: - - name: Add to project - uses: github/add-to-project@v1 - with: - github-token: ${{ secrets.YDBOT_TOKEN }} - project-url: https://github.com/orgs/ydb-platform/projects/24 diff --git a/.github/workflows/priority-score.yml b/.github/workflows/priority-score.yml index a5f7763e9..fb52ccded 100644 --- a/.github/workflows/priority-score.yml +++ b/.github/workflows/priority-score.yml @@ -29,8 +29,11 @@ jobs: const projectNumber = 24; const org = "ydb-platform"; + const issueNumber = issue.number; + const repoName = context.repo.repo; + const repoOwner = context.repo.owner; - const result = await github.graphql(` + const projectQuery = await github.graphql(` query($org: String!, $number: Int!) { organization(login: $org) { projectV2(number: $number) { @@ -43,51 +46,72 @@ jobs: } } } - items(first: 100) { - nodes { - id - content { - __typename - ... on Issue { - id - number - repository { - name - owner { login } - } - } - } - } - } } } } `, { org, number: projectNumber }); - const project = result.organization.projectV2; - - const field = project.fields.nodes.find(f => f.name === "CalculatedPriority"); + const projectId = projectQuery.organization.projectV2.id; + const field = projectQuery.organization.projectV2.fields.nodes.find(f => f.name === "CalculatedPriority"); if (!field) { core.setFailed("Field 'CalculatedPriority' not found."); return; } + const fieldId = field.id; - const issueNumber = issue.number; - const repoName = context.repo.repo; - const repoOwner = context.repo.owner; + // Now paginate to find the matching item + let item = null; + let cursor = null; + let hasNextPage = true; - const item = project.items.nodes.find(n => - n.content?.__typename === "Issue" && - n.content?.number === issueNumber && - n.content?.repository?.name === repoName && - n.content?.repository?.owner?.login === repoOwner - ); + while (hasNextPage && !item) { + const response = await github.graphql(` + query($org: String!, $number: Int!, $after: String) { + organization(login: $org) { + projectV2(number: $number) { + items(first: 100, after: $after) { + pageInfo { + hasNextPage + endCursor + } + nodes { + id + content { + __typename + ... on Issue { + number + repository { + name + owner { login } + } + } + } + } + } + } + } + } + `, { org, number: projectNumber, after: cursor }); + + const items = response.organization.projectV2.items.nodes; + + item = items.find(n => + n.content?.__typename === "Issue" && + n.content?.number === issueNumber && + n.content?.repository?.name === repoName && + n.content?.repository?.owner?.login === repoOwner + ); + + hasNextPage = response.organization.projectV2.items.pageInfo.hasNextPage; + cursor = response.organization.projectV2.items.pageInfo.endCursor; + } if (!item) { console.log(`Issue #${issueNumber} not found in project (repo=${repoName}).`); return; } + // Update field await github.graphql(` mutation($input: UpdateProjectV2ItemFieldValueInput!) { updateProjectV2ItemFieldValue(input: $input) { @@ -98,11 +122,11 @@ jobs: } `, { input: { - projectId: project.id, + projectId, itemId: item.id, - fieldId: field.id, + fieldId, value: { number: finalScore } } }); - console.log(`Updated CalculatedPriority of issue #${issueNumber} to ${finalScore}`); + console.log(`✅ Updated CalculatedPriority of issue #${issueNumber} to ${finalScore}`);