2929
3030 const projectNumber = 24;
3131 const org = "ydb-platform";
32+ const issueNumber = issue.number;
33+ const repoName = context.repo.repo;
34+ const repoOwner = context.repo.owner;
3235
33- const result = await github.graphql(`
36+ const projectQuery = await github.graphql(`
3437 query($org: String!, $number: Int!) {
3538 organization(login: $org) {
3639 projectV2(number: $number) {
@@ -43,51 +46,72 @@ jobs:
4346 }
4447 }
4548 }
46- items(first: 100) {
47- nodes {
48- id
49- content {
50- __typename
51- ... on Issue {
52- id
53- number
54- repository {
55- name
56- owner { login }
57- }
58- }
59- }
60- }
61- }
6249 }
6350 }
6451 }
6552 `, { org, number: projectNumber });
6653
67- const project = result.organization.projectV2;
68-
69- const field = project.fields.nodes.find(f => f.name === "CalculatedPriority");
54+ const projectId = projectQuery.organization.projectV2.id;
55+ const field = projectQuery.organization.projectV2.fields.nodes.find(f => f.name === "CalculatedPriority");
7056 if (!field) {
7157 core.setFailed("Field 'CalculatedPriority' not found.");
7258 return;
7359 }
60+ const fieldId = field.id;
7461
75- const issueNumber = issue.number;
76- const repoName = context.repo.repo;
77- const repoOwner = context.repo.owner;
62+ // Now paginate to find the matching item
63+ let item = null;
64+ let cursor = null;
65+ let hasNextPage = true;
7866
79- const item = project.items.nodes.find(n =>
80- n.content?.__typename === "Issue" &&
81- n.content?.number === issueNumber &&
82- n.content?.repository?.name === repoName &&
83- n.content?.repository?.owner?.login === repoOwner
84- );
67+ while (hasNextPage && !item) {
68+ const response = await github.graphql(`
69+ query($org: String!, $number: Int!, $after: String) {
70+ organization(login: $org) {
71+ projectV2(number: $number) {
72+ items(first: 100, after: $after) {
73+ pageInfo {
74+ hasNextPage
75+ endCursor
76+ }
77+ nodes {
78+ id
79+ content {
80+ __typename
81+ ... on Issue {
82+ number
83+ repository {
84+ name
85+ owner { login }
86+ }
87+ }
88+ }
89+ }
90+ }
91+ }
92+ }
93+ }
94+ `, { org, number: projectNumber, after: cursor });
95+
96+ const items = response.organization.projectV2.items.nodes;
97+
98+ item = items.find(n =>
99+ n.content?.__typename === "Issue" &&
100+ n.content?.number === issueNumber &&
101+ n.content?.repository?.name === repoName &&
102+ n.content?.repository?.owner?.login === repoOwner
103+ );
104+
105+ hasNextPage = response.organization.projectV2.items.pageInfo.hasNextPage;
106+ cursor = response.organization.projectV2.items.pageInfo.endCursor;
107+ }
85108
86109 if (!item) {
87110 console.log(`Issue #${issueNumber} not found in project (repo=${repoName}).`);
88111 return;
89112 }
90113
114+ // Update field
91115 await github.graphql(`
92116 mutation($input: UpdateProjectV2ItemFieldValueInput!) {
93117 updateProjectV2ItemFieldValue(input: $input) {
@@ -98,11 +122,12 @@ jobs:
98122 }
99123 `, {
100124 input: {
101- projectId: project.id ,
125+ projectId,
102126 itemId: item.id,
103- fieldId: field.id ,
127+ fieldId,
104128 value: { number: finalScore }
105129 }
106130 });
107131
108- console.log(`Updated CalculatedPriority of issue #${issueNumber} to ${finalScore}`);
132+ console.log(`✅ Updated CalculatedPriority of issue #${issueNumber} to ${finalScore}`);
133+
0 commit comments