From b8e8620882e15e72fb90d4e4dd77ba63d5527af2 Mon Sep 17 00:00:00 2001 From: Ryan Cragun Date: Tue, 25 Feb 2025 16:30:27 -0700 Subject: [PATCH] VAULT-33693 actions: fix push event PR labels (#29476) * VAULT-33693: actions: fix push event PR labels Fix pull request label metadata when triggered `push` event types. We now use Github's `associatedPullRequests()` connection on the `Commit` associated with the SHA to resolve the labels. Signed-off-by: Ryan Cragun --- .github/actions/metadata/action.yml | 32 ++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/.github/actions/metadata/action.yml b/.github/actions/metadata/action.yml index f88c7a305a..720636042c 100644 --- a/.github/actions/metadata/action.yml +++ b/.github/actions/metadata/action.yml @@ -108,15 +108,33 @@ runs: labels=$(gh api "/repos/${{ github.repository }}/issues/${{ github.event.number }}/labels" | jq -erc '. | map(.name)') else + # We can assume we're being triggered for a 'push' (a merge) is_draft='false' - # Look up the labels for the pull request that is associated with the last commit. If - # there are none set it as a JSON encoded empty array. - if pr_number=$(gh api "/repos/${{ github.repository }}/commits/${{ github.ref }}/pulls" | jq -erc '.[0].number'); then - if ! labels=$(gh api "/repos/${{ github.repository }}/issues/${pr_number}/labels" | jq -erc '. | map(.name)'); then - labels='[]' - fi - else + # Look up the pull request labels for the PR that is associated with + # the commit. If there are none set it as a JSON encoded empty array. + repo=$(printf ${{ github.repository }} | cut -d "/" -f2) + if ! labels=$(gh api graphql -F repo="$repo" -F sha="${{ steps.vault-metadata.outputs.vault-revision }}" -f query=' + query($repo: String!, $sha: String!){ + repository(name: $repo, owner: "hashicorp") { + commit: object(expression: $sha) { + ... on Commit { + associatedPullRequests(first:1){ + edges{ + node{ + labels(first: 10) { + nodes { + name + } + } + } + } + } + } + } + } + }' | jq -erc '.data.repository.commit.associatedPullRequests.edges[0].node.labels.nodes | map(.name)'); + then labels='[]' fi fi