Add GitHub Action to prompt CP/CPS review when new flags are added (#7425)
Fixes https://github.com/letsencrypt/boulder/issues/7420
This commit is contained in:
parent
ce8986e17b
commit
3664314778
|
@ -0,0 +1,69 @@
|
||||||
|
name: Check PR for changes that trigger CP/CPS review
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [ready_for_review, review_requested]
|
||||||
|
paths:
|
||||||
|
- 'features/features.go'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check-features:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
pull-requests: write
|
||||||
|
steps:
|
||||||
|
- name: Setup Go
|
||||||
|
uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version: "stable"
|
||||||
|
|
||||||
|
- name: Checkout Upstream
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: ${{ github.event.pull_request.base.ref }}
|
||||||
|
- name: Get Current Flags
|
||||||
|
run: go run ./test/list-features/list-features.go | sort >| /tmp/currflags.txt
|
||||||
|
|
||||||
|
- name: Checkout PR
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
- name: Get PR Flags
|
||||||
|
run: go run ./test/list-features/list-features.go | sort >| /tmp/prflags.txt
|
||||||
|
|
||||||
|
- name: Identify New Flags
|
||||||
|
id: newflags
|
||||||
|
run: echo flagnames=$(comm -13 /tmp/currflags.txt /tmp/prflags.txt | paste -sd,) >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Comment PR
|
||||||
|
if: ${{ steps.newflags.outputs.flagnames != '' }}
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const { owner, repo, number: issue_number } = context.issue;
|
||||||
|
|
||||||
|
// No need to comment if the PR description already has a CPS review.
|
||||||
|
const reviewRegexp = /^CPS Compliance Review:/;
|
||||||
|
if (reviewRegexp.test(context.payload.pull_request.body)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// No need to comment if this task has previously commented on this PR.
|
||||||
|
const commentMarker = '<!-- cps_review_check -->';
|
||||||
|
const comments = await github.rest.issues.listComments({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
issue_number
|
||||||
|
});
|
||||||
|
if (comments.data.find(c => c.body.includes(commentMarker))) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// No existing review or comment found, post the comment.
|
||||||
|
const prAuthor = context.payload.pull_request.user.login;
|
||||||
|
const flagNames = '${{ steps.newflags.outputs.flagnames }}';
|
||||||
|
const commentBody = `${commentMarker}\n@${prAuthor}, this PR adds one or more new feature flags: ${flagNames}. As such, this PR must be accompanied by a review of the Let's Encrypt CP/CPS to ensure that our behavior both before and after this flag is flipped is compliant with that document.\n\nPlease conduct such a review, then add your findings to the PR description in a paragraph beginning with "CPS Compliance Review:".`;
|
||||||
|
await github.rest.issues.createComment({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
issue_number,
|
||||||
|
body: commentBody
|
||||||
|
});
|
|
@ -0,0 +1,14 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"reflect"
|
||||||
|
|
||||||
|
"github.com/letsencrypt/boulder/features"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
for _, flag := range reflect.VisibleFields(reflect.TypeOf(features.Config{})) {
|
||||||
|
fmt.Println(flag.Name)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue