Some checks failed
codecov / upload (push) Failing after 13m59s
CodeQL / Analyze (push) Failing after 1s
Testing / vet-proto (push) Failing after 1s
Testing / tests (arm, latest) (push) Waiting to run
Testing / extras (latest) (push) Failing after 1s
Testing / static checks (latest-1) (push) Failing after 1s
Testing / tests (-race, latest) (push) Failing after 1s
Testing / tests (i386, latest) (push) Failing after 1s
Testing / tests (latest) (push) Failing after 1s
Testing / tests (latest-1) (push) Failing after 1s
Lock Threads / lock (push) Failing after 1s
govulncheck / govulncheck (.) (push) Failing after 1s
govulncheck / govulncheck (./cmd/protoc-gen-go-grpc) (push) Failing after 1s
govulncheck / govulncheck (./gcp/observability) (push) Failing after 1s
govulncheck / govulncheck (./security/advancedtls) (push) Failing after 1s
govulncheck / govulncheck (./stats/opencensus) (push) Failing after 1s
Stale bot / stale (push) Failing after 1s
56 lines
2.0 KiB
YAML
56 lines
2.0 KiB
YAML
name: PR Validation
|
|
on:
|
|
pull_request:
|
|
types: [opened, edited, synchronize, labeled, unlabeled, milestoned, demilestoned]
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
validate:
|
|
name: Validate PR
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Validate Description
|
|
uses: actions/github-script@v6
|
|
with:
|
|
script: |
|
|
const body = context.payload.pull_request.body;
|
|
const requiredRegex = new RegExp('^RELEASE NOTES:\\s*([Nn][Oo][Nn][Ee]|[Nn]/[Aa]|\\n(\\*|-)\\s*.+)$', 'm');
|
|
if (!requiredRegex.test(body)) {
|
|
core.setFailed(`
|
|
The PR description must include a RELEASE NOTES section.
|
|
It should be in one of the following formats:
|
|
- "RELEASE NOTES: none" (case-insensitive)
|
|
- "RELEASE NOTES: N/A" (case-insensitive)
|
|
- A bulleted list under "RELEASE NOTES:", for example:
|
|
RELEASE NOTES:
|
|
* my_package: Fix bug causing crash...
|
|
`);
|
|
}
|
|
|
|
- name: Validate Label
|
|
uses: actions/github-script@v6
|
|
with:
|
|
script: |
|
|
const labels = context.payload.pull_request.labels.map(label => label.name);
|
|
const requiredRegex = new RegExp('^Type:');
|
|
const hasRequiredLabel = labels.some(label => requiredRegex.test(label));
|
|
if (!hasRequiredLabel) {
|
|
core.setFailed("This PR must have a label starting with 'Type:'.");
|
|
}
|
|
|
|
- name: Validate Milestone
|
|
uses: actions/github-script@v6
|
|
with:
|
|
script: |
|
|
const milestone = context.payload.pull_request.milestone;
|
|
if (!milestone) {
|
|
core.setFailed("This PR must be associated with a milestone.");
|
|
} else {
|
|
const requiredRegex = new RegExp('Release$');
|
|
if (!requiredRegex.test(milestone.title)) {
|
|
core.setFailed("The milestone for this PR must end with 'Release'.");
|
|
}
|
|
}
|