chore: add related values #604
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: "Update PR labels and Block PR until related docs are shipped for the feature" | |
on: | |
pull_request: | |
branches: | |
- develop | |
types: [opened, edited, labeled, unlabeled] | |
permissions: | |
pull-requests: write | |
contents: read | |
jobs: | |
docs_label_check: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check PR Title and Manage Labels | |
uses: actions/github-script@v6 | |
with: | |
script: | | |
const prTitle = context.payload.pull_request.title; | |
const prNumber = context.payload.pull_request.number; | |
const owner = context.repo.owner; | |
const repo = context.repo.repo; | |
// Fetch the current PR details to get labels | |
const pr = await github.rest.pulls.get({ | |
owner, | |
repo, | |
pull_number: prNumber | |
}); | |
const labels = pr.data.labels.map(label => label.name); | |
if (prTitle.startsWith('feat:')) { | |
const hasDocsRequired = labels.includes('docs required'); | |
const hasDocsShipped = labels.includes('docs shipped'); | |
const hasDocsNotRequired = labels.includes('docs not required'); | |
// If "docs not required" is present, skip the checks | |
if (hasDocsNotRequired && !hasDocsRequired) { | |
console.log("Skipping checks due to 'docs not required' label."); | |
return; // Exit the script early | |
} | |
// If "docs shipped" is present, remove "docs required" if it exists | |
if (hasDocsShipped && hasDocsRequired) { | |
await github.rest.issues.removeLabel({ | |
owner, | |
repo, | |
issue_number: prNumber, | |
name: 'docs required' | |
}); | |
console.log("Removed 'docs required' label."); | |
} | |
// Add "docs required" label if neither "docs shipped" nor "docs required" are present | |
if (!hasDocsRequired && !hasDocsShipped) { | |
await github.rest.issues.addLabels({ | |
owner, | |
repo, | |
issue_number: prNumber, | |
labels: ['docs required'] | |
}); | |
console.log("Added 'docs required' label."); | |
} | |
} | |
// Fetch the updated labels after any changes | |
const updatedPr = await github.rest.pulls.get({ | |
owner, | |
repo, | |
pull_number: prNumber | |
}); | |
const updatedLabels = updatedPr.data.labels.map(label => label.name); | |
const updatedHasDocsRequired = updatedLabels.includes('docs required'); | |
const updatedHasDocsShipped = updatedLabels.includes('docs shipped'); | |
// Block PR if "docs required" is still present and "docs shipped" is missing | |
if (updatedHasDocsRequired && !updatedHasDocsShipped) { | |
core.setFailed("This PR requires documentation. Please remove the 'docs required' label and add the 'docs shipped' label to proceed."); | |
} |