Skip to content
Merged
Changes from 2 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
68 changes: 68 additions & 0 deletions .github/workflows/pr-labeler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
name: Label PR for Changelog

on:
pull_request:
types: [opened, edited]

permissions:
pull-requests: write

jobs:
label:
runs-on: ubuntu-latest
steps:
- name: Add changelog label
uses: actions/github-script@v7
with:
script: |
const title = context.payload.pull_request.title.toLowerCase();
const prNumber = context.payload.pull_request.number;

// Get current labels
const { data: currentLabels } = await github.rest.issues.listLabelsOnIssue({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
});

// Check if a Changelog label already exists
const hasChangelogLabel = currentLabels.some(label =>
label.name.startsWith('Changelog:') || label.name === 'skip-changelog'
);

if (hasChangelogLabel) {
console.log('PR already has a Changelog label, skipping');
return;
}

// Determine which label to apply
let newLabel = null;

if (title.startsWith('feat')) {
newLabel = 'Changelog: Feature';
} else if (title.startsWith('fix') || title.startsWith('bugfix')) {
newLabel = 'Changelog: Bugfix';
} else if (title.includes('deprecate')) {
newLabel = 'Changelog: Deprecation';
} else if (title.startsWith('docs')) {
newLabel = 'Changelog: Docs';
} else if (title.startsWith('ref') || title.startsWith('test')) {
newLabel = 'Changelog: Internal';
} else if (title.startsWith('ci') || title.startsWith('build')) {
newLabel = 'skip-changelog';
}

// Apply the new label if one was determined
if (newLabel) {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
labels: [newLabel],
});

console.log(`Applied label: ${newLabel}`);
} else {
console.log('No matching label pattern found in PR title, please add manually');
}