Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

adding pagination to find item ids #1238

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 88 additions & 11 deletions .github/workflows/issue-last-updated.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ jobs:
echo "project_id=PVT_kwDOA9MHEM4AjeTl" >> $GITHUB_ENV
echo "field_id=PVTF_lADOA9MHEM4AjeTlzgiiU18" >> $GITHUB_ENV


- name: Get Issue ID
id: get_issue_id
run: |
Expand All @@ -31,18 +32,94 @@ jobs:


- name: Get Item ID for Issue
id: get_item_by_issue_id
id: get_item_id_by_issue_id
run: |
ITEM_ID=$(curl -X POST -H "Authorization: Bearer $GITHUB_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"query": "query($projectId: ID!) { node(id: $projectId) { ... on ProjectV2 { items(first: 100) { nodes { id content { ... on Issue { id } } } } } } }",
"variables": {
"projectId": "'"${{ env.project_id }}"'"
}
}' \
https://api.github.com/graphql | jq -r '.data.node.items.nodes[] | select(.content.id=="'"${{ env.issue_id }}"'") | .id')
echo "ITEM_ID=$ITEM_ID" >> $GITHUB_ENV
# Initialize variables
CURSOR=null
ITEM_ID=""


# Define the GraphQL query as a string
QUERY='query($projectId: ID!, $cursor: String) {
node(id: $projectId) {
... on ProjectV2 {
items(first: 100, after: $cursor) {
nodes {
id
content {
... on Issue {
id
}
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
}
}'


while : ; do
# Construct JSON payload using jq for proper formatting
JSON_PAYLOAD=$(jq -n \
--arg query "$QUERY" \
--arg projectId "$PROJECT_ID" \
--arg cursor "$CURSOR" \
'{ query: $query, variables: { projectId: $projectId, cursor: $cursor }}')


# Make the GraphQL request
RESPONSE=$(curl -s -X POST -H "Authorization: Bearer $GITHUB_TOKEN" \
-H "Content-Type: application/json" \
-d "$JSON_PAYLOAD" \
https://api.github.com/graphql)


# Debug: print entire response
echo "RESPONSE: $RESPONSE"


# Check if the response contains `items` data
ITEMS_DATA=$(echo "$RESPONSE" | jq -r '.data.node.items.nodes' 2>/dev/null)
if [[ "$ITEMS_DATA" == "null" ]]; then
echo "Error: Items data not found. Please check your PROJECT_ID and GITHUB_TOKEN permissions."
break
fi


# Parse the item ID if it matches the ISSUE_NODE_ID
ITEM_ID=$(echo "$RESPONSE" | jq -r --arg ISSUE_NODE_ID "$ISSUE_NODE_ID" \
'.data.node.items.nodes[] | select(.content.id==$ISSUE_NODE_ID) | .id')


# If ITEM_ID is found, output it and stop the loop
if [[ -n "$ITEM_ID" && "$ITEM_ID" != "null" ]]; then
echo "Found ITEM_ID: $ITEM_ID"
echo "ITEM_ID=$ITEM_ID" >> $GITHUB_ENV # Save ITEM_ID to environment for future steps
break
fi


# Extract pagination information
HAS_NEXT_PAGE=$(echo "$RESPONSE" | jq -r '.data.node.items.pageInfo.hasNextPage')
CURSOR=$(echo "$RESPONSE" | jq -r '.data.node.items.pageInfo.endCursor')


# If no more pages, exit loop
if [[ "$HAS_NEXT_PAGE" != "true" ]]; then
echo "Issue not found in project items."
break
fi
done


- name: Use Found ITEM_ID
if: env.ITEM_ID # Only runs if ITEM_ID was set
run: echo "The ITEM_ID is ${{ env.ITEM_ID }}"


- name: Update Project Field
run: |
Expand Down
Loading