Skip to content
Draft
Show file tree
Hide file tree
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
5 changes: 3 additions & 2 deletions .github/workflows/check-change-note.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
name: Check change note

permissions:
contents: read
pull-requests: read

on:
pull_request_target:
pull_request:
types: [labeled, unlabeled, opened, synchronize, reopened, ready_for_review]
paths:
- "*/ql/src/**/*.ql"
Expand All @@ -23,7 +24,7 @@ jobs:
env:
REPO: ${{ github.repository }}
PULL_REQUEST_NUMBER: ${{ github.event.number }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_TOKEN: ${{ github.token }}
runs-on: ubuntu-latest
steps:

Expand Down
100 changes: 100 additions & 0 deletions .github/workflows/labeler-apply.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
name: "Pull Request Labeler Apply"

on:
workflow_run:
workflows: ["Pull Request Labeler"]
types: [completed]

permissions: {}

jobs:
triage:
if: >
github.event.workflow_run.event == 'pull_request' &&
github.event.workflow_run.conclusion == 'success'
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
pull-requests: write
steps:
- name: Validate pull request from workflow_run
id: validate
env:
GH_TOKEN: ${{ github.token }}
REPO: ${{ github.repository }}
RUN_ID: ${{ github.event.workflow_run.id }}
run: |
set -euo pipefail

run_json=$(gh api "repos/$REPO/actions/runs/$RUN_ID")
event=$(jq -r '.event' <<<"$run_json")
conclusion=$(jq -r '.conclusion' <<<"$run_json")
head_sha=$(jq -r '.head_sha' <<<"$run_json")
head_repo=$(jq -r '.head_repository.full_name // empty' <<<"$run_json")

if [ "$event" != "pull_request" ] || [ "$conclusion" != "success" ]; then
echo "apply=false" >> "$GITHUB_OUTPUT"
exit 0
fi

pr_number=$(jq -r 'if (.pull_requests | length) == 1 then .pull_requests[0].number else empty end' <<<"$run_json")

if [ -z "$pr_number" ]; then
prs_json=$(gh api -H 'Accept: application/vnd.github+json' "repos/$REPO/commits/$head_sha/pulls" || echo '[]')
pr_number=$(jq -r 'map(select(.state == "open")) | if length == 1 then .[0].number else empty end' <<<"$prs_json" 2>/dev/null || true)
fi

if [ -z "$pr_number" ]; then
head_owner=$(jq -r '.head_repository.owner.login // empty' <<<"$run_json")
head_branch=$(jq -r '.head_branch // empty' <<<"$run_json")
if [ -n "$head_owner" ] && [ -n "$head_branch" ]; then
prs_json=$(gh api --method GET "repos/$REPO/pulls" -f state=open -f head="$head_owner:$head_branch" || echo '[]')
pr_number=$(jq -r 'if length == 1 then .[0].number else empty end' <<<"$prs_json" 2>/dev/null || true)
fi
fi

if [ -z "$pr_number" ]; then
echo "Could not identify a unique open pull request for workflow run $RUN_ID; skipping."
echo "apply=false" >> "$GITHUB_OUTPUT"
exit 0
fi

pr_json=$(gh api "repos/$REPO/pulls/$pr_number" || true)
if [ -z "$pr_json" ]; then
echo "Pull request #$pr_number could not be fetched; skipping."
echo "apply=false" >> "$GITHUB_OUTPUT"
exit 0
fi

state=$(jq -r '.state // empty' <<<"$pr_json" 2>/dev/null || true)
base_repo=$(jq -r '.base.repo.full_name // empty' <<<"$pr_json" 2>/dev/null || true)
pr_head_sha=$(jq -r '.head.sha // empty' <<<"$pr_json" 2>/dev/null || true)
pr_head_repo=$(jq -r '.head.repo.full_name // empty' <<<"$pr_json" 2>/dev/null || true)

if [ -z "$state" ]; then
echo "Pull request #$pr_number could not be parsed; skipping."
echo "apply=false" >> "$GITHUB_OUTPUT"
exit 0
fi

if [ "$state" != "open" ] || [ "$base_repo" != "$REPO" ]; then
echo "Pull request #$pr_number is no longer an open pull request against $REPO; skipping."
echo "apply=false" >> "$GITHUB_OUTPUT"
exit 0
fi

if [ "$pr_head_sha" != "$head_sha" ] || [ "$pr_head_repo" != "$head_repo" ]; then
echo "Pull request #$pr_number changed since workflow run $RUN_ID; skipping stale labeling."
echo "apply=false" >> "$GITHUB_OUTPUT"
exit 0
fi

echo "number=$pr_number" >> "$GITHUB_OUTPUT"
echo "apply=true" >> "$GITHUB_OUTPUT"

- uses: actions/labeler@v4
if: steps.validate.outputs.apply == 'true'
with:
repo-token: "${{ github.token }}"
pr-number: ${{ steps.validate.outputs.number }}
13 changes: 7 additions & 6 deletions .github/workflows/labeler.yml
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
name: "Pull Request Labeler"

on:
- pull_request_target
pull_request:
types: [opened, synchronize, reopened]

permissions:
contents: read
pull-requests: write
pull-requests: read

jobs:
triage:
request-labels:
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@v4
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
- name: Request privileged labeling
run: echo "Labels are applied by the workflow_run writer after re-validating the pull request."
Loading