Skip to content

Commit 4f50414

Browse files
committed
Add label-sync workflow that copies issue labels to PRs
1 parent c7638bb commit 4f50414

2 files changed

Lines changed: 100 additions & 0 deletions

File tree

.github/workflows/label-sync.yml

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
name: PR Label Sync
2+
3+
on:
4+
pull_request_target:
5+
types: [opened, reopened, synchronize]
6+
pull_request:
7+
types: [opened, reopened, synchronize]
8+
workflow_call:
9+
inputs:
10+
copy_issue_labels:
11+
type: boolean
12+
default: true
13+
description: "Copy labels from linked issue"
14+
15+
permissions:
16+
contents: read
17+
pull-requests: write
18+
19+
jobs:
20+
copy-issue-labels:
21+
if: inputs.copy_issue_labels == true
22+
runs-on: ubuntu-latest
23+
steps:
24+
- name: Extract issue number from PR
25+
id: extract-issue
26+
run: |
27+
BODY='${{ github.event.pull_request.body }}'
28+
TITLE='${{ github.event.pull_request.title }}'
29+
30+
ISSUE=$(echo "$BODY $TITLE" | \
31+
grep -oE '(closes|fixes|resolves|addresses)\s+#[[:digit:]]+' | \
32+
grep -oE '#[[:digit:]]+' | head -1 | tr -d '#')
33+
34+
if [ -n "$ISSUE" ]; then
35+
echo "issue_number=$ISSUE" >> "$GITHUB_OUTPUT"
36+
fi
37+
38+
- name: Copy labels from issue to PR
39+
if: steps.extract-issue.outputs.issue_number != ''
40+
run: |
41+
ISSUE_NUM=${{ steps.extract-issue.outputs.issue_number }}
42+
PR_NUM=${{ github.event.pull_request.number }}
43+
44+
LABELS=$(gh issue view "$ISSUE_NUM" --json labels --jq '.labels[].name')
45+
46+
for label in $LABELS; do
47+
gh pr edit "$PR_NUM" --add-label "$label" 2>/dev/null || true
48+
done
49+
env:
50+
GH_TOKEN: ${{ github.token }}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
name: PR Label Sync
2+
3+
on:
4+
pull_request_target:
5+
types: [opened, reopened, synchronize]
6+
pull_request:
7+
types: [opened, reopened, synchronize]
8+
workflow_call:
9+
inputs:
10+
copy_issue_labels:
11+
type: boolean
12+
default: true
13+
description: "Copy labels from linked issue"
14+
15+
permissions:
16+
contents: read
17+
pull-requests: write
18+
19+
jobs:
20+
copy-issue-labels:
21+
if: inputs.copy_issue_labels == true
22+
runs-on: ubuntu-latest
23+
steps:
24+
- name: Extract issue number from PR
25+
id: extract-issue
26+
run: |
27+
BODY='${{ github.event.pull_request.body }}'
28+
TITLE='${{ github.event.pull_request.title }}'
29+
30+
ISSUE=$(echo "$BODY $TITLE" | \
31+
grep -oE '(closes|fixes|resolves|addresses)\s+#[[:digit:]]+' | \
32+
grep -oE '#[[:digit:]]+' | head -1 | tr -d '#')
33+
34+
if [ -n "$ISSUE" ]; then
35+
echo "issue_number=$ISSUE" >> "$GITHUB_OUTPUT"
36+
fi
37+
38+
- name: Copy labels from issue to PR
39+
if: steps.extract-issue.outputs.issue_number != ''
40+
run: |
41+
ISSUE_NUM=${{ steps.extract-issue.outputs.issue_number }}
42+
PR_NUM=${{ github.event.pull_request.number }}
43+
44+
LABELS=$(gh issue view "$ISSUE_NUM" --json labels --jq '.labels[].name')
45+
46+
for label in $LABELS; do
47+
gh pr edit "$PR_NUM" --add-label "$label" 2>/dev/null || true
48+
done
49+
env:
50+
GH_TOKEN: ${{ github.token }}

0 commit comments

Comments
 (0)