google.golang.org/grpc@v1.74.2/.github/workflows/pr-validation.yml (about)

     1  name: PR Validation
     2  on:
     3    pull_request:
     4      types: [opened, edited, synchronize, labeled, unlabeled, milestoned, demilestoned]
     5  
     6  jobs:
     7    validate:
     8      name: Validate PR
     9      runs-on: ubuntu-latest
    10      steps:
    11        - name: Validate Label
    12          uses: actions/github-script@v6
    13          with:
    14            script: |
    15              const labels = context.payload.pull_request.labels.map(label => label.name);
    16              const requiredRegex = new RegExp('^Type:');
    17              const hasRequiredLabel = labels.some(label => requiredRegex.test(label));
    18              if (!hasRequiredLabel) {
    19                core.setFailed("This PR must have a label starting with 'Type:'.");
    20              }
    21  
    22        - name: Validate Description
    23          uses: actions/github-script@v6
    24          with:
    25            script: |
    26              const body = context.payload.pull_request.body;
    27              const requiredRegex = new RegExp('^RELEASE NOTES:\\s*([Nn][Oo][Nn][Ee]|[Nn]/[Aa]|\\n(\\*|-)\\s*.+)$', 'm');
    28              if (!requiredRegex.test(body)) {
    29                core.setFailed(`
    30                  The PR description must include a RELEASE NOTES section.
    31                  It should be in one of the following formats:
    32                  - "RELEASE NOTES: none" (case-insensitive)
    33                  - "RELEASE NOTES: N/A" (case-insensitive)
    34                  - A bulleted list under "RELEASE NOTES:", for example:
    35                    RELEASE NOTES:
    36                    * my_package: Fix bug causing crash...
    37                `);
    38              }
    39  
    40        - name: Validate Milestone
    41          uses: actions/github-script@v6
    42          with:
    43            script: |
    44              const milestone = context.payload.pull_request.milestone;
    45              if (!milestone) {
    46                core.setFailed("This PR must be associated with a milestone.");
    47              } else {
    48                const requiredRegex = new RegExp('Release$');
    49                if (!requiredRegex.test(milestone.title)) {
    50                  core.setFailed("The milestone for this PR must end with 'Release'.");
    51                }
    52              }