name: "[PR Management] Add Backport Label" on: pull_request_target: types: [opened, reopened] branches: [main] permissions: pull-requests: write jobs: add-backport-label: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 with: ref: ${{ github.base_ref }} - name: Fetch release branches and PR labels id: fetch_info env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | set -euo pipefail repo="${{ github.repository }}" pr_number=${{ github.event.pull_request.number }} release_branches=$(gh api "repos/${repo}/branches" --paginate --jq '.[].name' | grep -E '^release-harvester-v[0-9]+\.[0-9]+$' || true) if [[ -z "$release_branches" ]]; then echo "should_label=false" >> "$GITHUB_OUTPUT" exit 0 fi latest_branch=$(echo "$release_branches" | sort -Vr | head -n1) version="${latest_branch#release-harvester-v}" release_tag="v${version}.0" tags=$(gh api "repos/${repo}/releases" --paginate --jq '.[].tag_name') if echo "$tags" | grep -Fxq "$release_tag"; then echo "should_label=false" >> "$GITHUB_OUTPUT" exit 0 fi label="require backport/v${version}" echo "should_label=true" >> "$GITHUB_OUTPUT" echo "backport_label=$label" >> "$GITHUB_OUTPUT" pr_labels=$(gh pr view "$pr_number" --repo "$repo" --json labels --jq '.labels[].name' || echo "") pr_labels_csv=$(echo "$pr_labels" | tr '\n' ',' | sed 's/,$//') echo "pr_labels=$pr_labels_csv" >> "$GITHUB_OUTPUT" - name: Add backport label if needed if: steps.fetch_info.outputs.should_label == 'true' && !contains(steps.fetch_info.outputs.pr_labels, steps.fetch_info.outputs.backport_label) env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | echo "Adding label: ${{ steps.fetch_info.outputs.backport_label }}" gh pr edit ${{ github.event.pull_request.number }} \ --repo ${{ github.repository }} \ --add-label "${{ steps.fetch_info.outputs.backport_label }}"