Skip to content

chore(deps): bump actions/setup-python from 5.6.0 to 7.0.0 #16

chore(deps): bump actions/setup-python from 5.6.0 to 7.0.0

chore(deps): bump actions/setup-python from 5.6.0 to 7.0.0 #16

Workflow file for this run

name: Label PRs by Type of Change

Check warning on line 1 in .github/workflows/pr-labels.yaml

View workflow run for this annotation

GitHub Actions / Label PRs by Type of Change

Workflow execution policy warning (evaluate mode)

On November 2, 2026, GitHub will restrict `pull_request_target` on public repositories by default. To continue allowing the event trigger, configure an Actions policy. Learn more: https://gh.io/securely-using-pull_request_target#default-policy-for-pull_request_target
on:
pull_request_target:
types: [opened, edited, synchronize]
jobs:
label-pr:
runs-on: ubuntu-latest
permissions:
pull-requests: write
issues: write
contents: read
steps:
- name: Check PR body for Type of Change
uses: actions/github-script@v9
with:
script: |
const prBody = context.payload.pull_request.body || '';
const labelsToAdd = [];
// Check for Type of Change checkboxes
if (/\[x\]\s*New feature/i.test(prBody)) {
labelsToAdd.push('new feature');
}
if (/\[x\]\s*Bug fix/i.test(prBody)) {
labelsToAdd.push('bug');
}
if (/\[x\]\s*Documentation update/i.test(prBody)) {
labelsToAdd.push('documentation');
}
if (/\[x\]\s*Hotfix/i.test(prBody)) {
labelsToAdd.push('hotfix');
}
if (/\[x\]\s*UI\/UX improvement/i.test(prBody)) {
labelsToAdd.push('UI update');
}
// Check changed files for automatic labeling
const { data: files } = await github.rest.pulls.listFiles({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.payload.pull_request.number
});
const hasRustFiles = files.some(file => file.filename.endsWith('.rs'));
const hasShellFiles = files.some(file => file.filename.endsWith('.sh'));
const hasMarkdownFiles = files.some(file => file.filename.endsWith('.md'));
if (hasRustFiles) {
labelsToAdd.push('rust');
}
if (hasShellFiles) {
labelsToAdd.push('script');
}
if (hasMarkdownFiles) {
labelsToAdd.push('documentation');
}
// Extract referenced issues and get their labels
const issueRegex = /(?:Fixes|Resolves|Closes):?\s*#(\d+)/gi;
const issueMatches = [...prBody.matchAll(issueRegex)];
const issueNumbers = [...new Set(issueMatches.map(match => parseInt(match[1])))];
for (const issueNumber of issueNumbers) {
try {
const issue = await github.rest.issues.get({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber
});
// Add labels from referenced issues that contain a colon
const issueLabels = issue.data.labels
.map(label => typeof label === 'string' ? label : label.name)
.filter(name => name.includes(':'));
labelsToAdd.push(...issueLabels);
} catch (error) {
console.log(`Could not fetch issue #${issueNumber}: ${error.message}`);
}
}
// Remove duplicates and add labels
const uniqueLabels = [...new Set(labelsToAdd)];
if (uniqueLabels.length > 0) {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
labels: uniqueLabels
});
}