-
Notifications
You must be signed in to change notification settings - Fork 116
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: add owlbot PRs process check for Node (#5315)
See: https://docs.google.com/document/d/1PxkDU5nZihyxDJ9XvjwX7GvDDdJu8qm4TpoxMUsryz0/edit?tab=t.0#heading=h.689e00isjkgi Adding owlbot process checks for Node: ``` Auto-approve would approve and tag owl-bot PRs if and only if: The PR author is ‘gcf-owl-bot[bot]’ The title of the PR, and the commits in the PR, do not include breaking, BREAKING or ! The body of the PR contains a ‘PiperOrigin-RevId’ There are no other PRs in the repository opened by gcf-owl-bot[bot] Checks that the PR does not have any commits from any other authors other than gcf-owl-bot[bot] ```
- Loading branch information
Showing
7 changed files
with
390 additions
and
107 deletions.
There are no files selected for viewing
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
212 changes: 106 additions & 106 deletions
212
packages/auto-approve/__snapshots__/auto-approve.test.js
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,185 +1,185 @@ | ||
exports['auto-approve main auto-approve function config exists on main branch approves and tags a PR if a config exists & is valid & PR is valid 1'] = { | ||
'head_sha': 'c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a', | ||
'name': 'Auto-approve.yml check', | ||
'conclusion': 'success', | ||
'output': { | ||
'title': 'Auto-approve.yml check', | ||
'summary': 'Successful auto-approve.yml config check', | ||
'text': '' | ||
"head_sha": "c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a", | ||
Check warning on line 2 in packages/auto-approve/__snapshots__/auto-approve.test.js GitHub Actions / test (auto-approve)
|
||
"name": "Auto-approve.yml check", | ||
Check warning on line 3 in packages/auto-approve/__snapshots__/auto-approve.test.js GitHub Actions / test (auto-approve)
|
||
"conclusion": "success", | ||
Check warning on line 4 in packages/auto-approve/__snapshots__/auto-approve.test.js GitHub Actions / test (auto-approve)
|
||
"output": { | ||
"title": "Auto-approve.yml check", | ||
Check warning on line 6 in packages/auto-approve/__snapshots__/auto-approve.test.js GitHub Actions / test (auto-approve)
|
||
"summary": "Successful auto-approve.yml config check", | ||
"text": "" | ||
} | ||
} | ||
|
||
exports['auto-approve main auto-approve function config exists on main branch approves and tags a PR if a config exists & is valid & PR is valid 2'] = { | ||
'event': 'APPROVE' | ||
"event": "APPROVE" | ||
} | ||
|
||
exports['auto-approve main auto-approve function config exists on main branch still attempts to add an automerge: exact label if there is an approval 1'] = { | ||
'head_sha': 'c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a', | ||
'name': 'Auto-approve.yml check', | ||
'conclusion': 'success', | ||
'output': { | ||
'title': 'Auto-approve.yml check', | ||
'summary': 'Successful auto-approve.yml config check', | ||
'text': '' | ||
"head_sha": "c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a", | ||
"name": "Auto-approve.yml check", | ||
"conclusion": "success", | ||
"output": { | ||
"title": "Auto-approve.yml check", | ||
"summary": "Successful auto-approve.yml config check", | ||
"text": "" | ||
} | ||
} | ||
|
||
exports['auto-approve main auto-approve function config exists on main branch approves and tags a PR if everything is valid, and it is coming from a fork 1'] = { | ||
'head_sha': '65f14b92a8135948008c6e26344167a2dac9f066', | ||
'name': 'Auto-approve.yml check', | ||
'conclusion': 'success', | ||
'output': { | ||
'title': 'Auto-approve.yml check', | ||
'summary': 'Successful auto-approve.yml config check', | ||
'text': '' | ||
"head_sha": "65f14b92a8135948008c6e26344167a2dac9f066", | ||
"name": "Auto-approve.yml check", | ||
"conclusion": "success", | ||
"output": { | ||
"title": "Auto-approve.yml check", | ||
"summary": "Successful auto-approve.yml config check", | ||
"text": "" | ||
} | ||
} | ||
|
||
exports['auto-approve main auto-approve function config exists on main branch approves and tags a PR if everything is valid, and it is coming from a fork 2'] = { | ||
'event': 'APPROVE' | ||
"event": "APPROVE" | ||
} | ||
|
||
exports['auto-approve main auto-approve function config exists on main branch retries if etag is not current 1'] = { | ||
'head_sha': 'c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a', | ||
'name': 'Auto-approve.yml check', | ||
'conclusion': 'success', | ||
'output': { | ||
'title': 'Auto-approve.yml check', | ||
'summary': 'Successful auto-approve.yml config check', | ||
'text': '' | ||
"head_sha": "c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a", | ||
"name": "Auto-approve.yml check", | ||
"conclusion": "success", | ||
"output": { | ||
"title": "Auto-approve.yml check", | ||
"summary": "Successful auto-approve.yml config check", | ||
"text": "" | ||
} | ||
} | ||
|
||
exports['auto-approve main auto-approve function config exists on main branch retries if etag is not current 2'] = { | ||
'event': 'APPROVE' | ||
"event": "APPROVE" | ||
} | ||
|
||
exports['auto-approve main auto-approve function config exists on main branch stops retrying to add the label after 3 attempts, even if it is never successful 1'] = { | ||
'head_sha': 'c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a', | ||
'name': 'Auto-approve.yml check', | ||
'conclusion': 'success', | ||
'output': { | ||
'title': 'Auto-approve.yml check', | ||
'summary': 'Successful auto-approve.yml config check', | ||
'text': '' | ||
"head_sha": "c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a", | ||
"name": "Auto-approve.yml check", | ||
"conclusion": "success", | ||
"output": { | ||
"title": "Auto-approve.yml check", | ||
"summary": "Successful auto-approve.yml config check", | ||
"text": "" | ||
} | ||
} | ||
|
||
exports['auto-approve main auto-approve function config exists on main branch stops retrying to add the label after 3 attempts, even if it is never successful 2'] = { | ||
'event': 'APPROVE' | ||
"event": "APPROVE" | ||
} | ||
|
||
exports['auto-approve main auto-approve function config exists on main branch submits a failing check if config exists but is not valid 1'] = { | ||
'head_sha': 'c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a', | ||
'name': 'Auto-approve.yml check', | ||
'conclusion': 'failure', | ||
'output': { | ||
'title': 'Auto-approve.yml check', | ||
'summary': 'auto-approve.yml config check failed', | ||
'text': 'See the following errors in your auto-approve.yml config:\n[{"wrongProperty":"wrongProperty","message":"message"}]\n' | ||
"head_sha": "c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a", | ||
"name": "Auto-approve.yml check", | ||
"conclusion": "failure", | ||
"output": { | ||
"title": "Auto-approve.yml check", | ||
"summary": "auto-approve.yml config check failed", | ||
"text": "See the following errors in your auto-approve.yml config:\n[{\"wrongProperty\":\"wrongProperty\",\"message\":\"message\"}]\n" | ||
} | ||
} | ||
|
||
exports['auto-approve main auto-approve function config exists on main branch logs to the console if config is valid but PR is not 1'] = { | ||
'head_sha': 'c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a', | ||
'name': 'Auto-approve.yml check', | ||
'conclusion': 'success', | ||
'output': { | ||
'title': 'Auto-approve.yml check', | ||
'summary': 'Successful auto-approve.yml config check', | ||
'text': '' | ||
"head_sha": "c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a", | ||
"name": "Auto-approve.yml check", | ||
"conclusion": "success", | ||
"output": { | ||
"title": "Auto-approve.yml check", | ||
"summary": "Successful auto-approve.yml config check", | ||
"text": "" | ||
} | ||
} | ||
|
||
exports['auto-approve main auto-approve function config exists on main branch will not check config on master if the config is modified on PR 1'] = { | ||
'head_sha': 'c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a', | ||
'name': 'Auto-approve.yml check', | ||
'conclusion': 'failure', | ||
'output': { | ||
'title': 'Auto-approve.yml check', | ||
'summary': 'auto-approve.yml config check failed', | ||
'text': 'See the following errors in your auto-approve.yml config:\n\n' | ||
"head_sha": "c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a", | ||
"name": "Auto-approve.yml check", | ||
"conclusion": "failure", | ||
"output": { | ||
"title": "Auto-approve.yml check", | ||
"summary": "auto-approve.yml config check failed", | ||
"text": "See the following errors in your auto-approve.yml config:\n\n" | ||
} | ||
} | ||
|
||
exports['auto-approve main auto-approve function config exists on main branch uses the correct function to check the PR if the config is V2 1'] = { | ||
'head_sha': 'c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a', | ||
'name': 'Auto-approve.yml check', | ||
'conclusion': 'success', | ||
'output': { | ||
'title': 'Auto-approve.yml check', | ||
'summary': 'Successful auto-approve.yml config check', | ||
'text': '' | ||
"head_sha": "c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a", | ||
"name": "Auto-approve.yml check", | ||
"conclusion": "success", | ||
"output": { | ||
"title": "Auto-approve.yml check", | ||
"summary": "Successful auto-approve.yml config check", | ||
"text": "" | ||
} | ||
} | ||
|
||
exports['auto-approve main auto-approve function config exists on main branch uses the correct function to check the PR if the config is V2 2'] = { | ||
'event': 'APPROVE' | ||
"event": "APPROVE" | ||
} | ||
|
||
exports['auto-approve main auto-approve function config exists on main branch uses the correct function to check the PR if the config is V1 1'] = { | ||
'head_sha': 'c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a', | ||
'name': 'Auto-approve.yml check', | ||
'conclusion': 'success', | ||
'output': { | ||
'title': 'Auto-approve.yml check', | ||
'summary': 'Successful auto-approve.yml config check', | ||
'text': '' | ||
"head_sha": "c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a", | ||
"name": "Auto-approve.yml check", | ||
"conclusion": "success", | ||
"output": { | ||
"title": "Auto-approve.yml check", | ||
"summary": "Successful auto-approve.yml config check", | ||
"text": "" | ||
} | ||
} | ||
|
||
exports['auto-approve main auto-approve function config exists on main branch uses the correct function to check the PR if the config is V1 2'] = { | ||
'event': 'APPROVE' | ||
"event": "APPROVE" | ||
} | ||
|
||
exports['auto-approve main auto-approve function config does not exist on main branch attempts to create a passing status check if PR contains correct config 1'] = { | ||
'head_sha': 'c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a', | ||
'name': 'Auto-approve.yml check', | ||
'conclusion': 'success', | ||
'output': { | ||
'title': 'Auto-approve.yml check', | ||
'summary': 'Successful auto-approve.yml config check', | ||
'text': '' | ||
"head_sha": "c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a", | ||
"name": "Auto-approve.yml check", | ||
"conclusion": "success", | ||
"output": { | ||
"title": "Auto-approve.yml check", | ||
"summary": "Successful auto-approve.yml config check", | ||
"text": "" | ||
} | ||
} | ||
|
||
exports['auto-approve main auto-approve function config does not exist on main branch attempts to create a failing status check if PR contains wrong config, and error messages check out 1'] = { | ||
'head_sha': 'c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a', | ||
'name': 'Auto-approve.yml check', | ||
'conclusion': 'failure', | ||
'output': { | ||
'title': 'Auto-approve.yml check', | ||
'summary': 'auto-approve.yml config check failed', | ||
'text': 'See the following errors in your auto-approve.yml config:\n[{"wrongProperty":"wrongProperty","message":"message"}]\n' | ||
"head_sha": "c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a", | ||
"name": "Auto-approve.yml check", | ||
"conclusion": "failure", | ||
"output": { | ||
"title": "Auto-approve.yml check", | ||
"summary": "auto-approve.yml config check failed", | ||
"text": "See the following errors in your auto-approve.yml config:\n[{\"wrongProperty\":\"wrongProperty\",\"message\":\"message\"}]\n" | ||
} | ||
} | ||
|
||
exports['auto-approve main auto-approve function config does not exist on main branch passes PR if auto-approve is on main, not PR 1'] = { | ||
'head_sha': 'c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a', | ||
'name': 'Auto-approve.yml check', | ||
'conclusion': 'success', | ||
'output': { | ||
'title': 'Auto-approve.yml check', | ||
'summary': 'Successful auto-approve.yml config check', | ||
'text': '' | ||
"head_sha": "c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a", | ||
"name": "Auto-approve.yml check", | ||
"conclusion": "success", | ||
"output": { | ||
"title": "Auto-approve.yml check", | ||
"summary": "Successful auto-approve.yml config check", | ||
"text": "" | ||
} | ||
} | ||
|
||
exports['auto-approve main auto-approve function config does not exist on main branch passes PR if auto-approve is on main, not PR 2'] = { | ||
'event': 'APPROVE' | ||
"event": "APPROVE" | ||
} | ||
|
||
exports['auto-approve gets secrets and authenticates separately for approval creates a separate octokit instance and authenticates with secret in secret manager 1'] = { | ||
'head_sha': 'c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a', | ||
'name': 'Auto-approve.yml check', | ||
'conclusion': 'success', | ||
'output': { | ||
'title': 'Auto-approve.yml check', | ||
'summary': 'Successful auto-approve.yml config check', | ||
'text': '' | ||
"head_sha": "c5b0c82f5d58dd4a87e4e3e5f73cd752e552931a", | ||
"name": "Auto-approve.yml check", | ||
"conclusion": "success", | ||
"output": { | ||
"title": "Auto-approve.yml check", | ||
"summary": "Successful auto-approve.yml config check", | ||
"text": "" | ||
} | ||
} | ||
|
||
exports['auto-approve gets secrets and authenticates separately for approval creates a separate octokit instance and authenticates with secret in secret manager 2'] = { | ||
'event': 'APPROVE' | ||
"event": "APPROVE" | ||
} |
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
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
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
// Copyright 2021 Google LLC | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// https://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
|
||
import {PullRequest} from '../../interfaces'; | ||
import { | ||
checkAuthor, | ||
checkTitleOrBody, | ||
reportIndividualChecks, | ||
getOpenPRsInRepoFromSameAuthor, | ||
} from '../../utils-for-pr-checking'; | ||
import {listCommitsOnAPR} from '../../get-pr-info'; | ||
import {Octokit} from '@octokit/rest'; | ||
import {OwlBotTemplateChangesNode} from './owlbot-template-changes'; | ||
|
||
/** | ||
* The OwlBotTemplateChanges class's checkPR function returns | ||
* true if the PR: | ||
- has an author that is 'gcf-owl-bot[bot]' | ||
- has a title that does NOT include BREAKING, or ! | ||
- has a PR body that DOES contain 'PiperOrigin-RevId' | ||
- is the first owlbot template PR in a repo (so they are merged in order) | ||
- has no other commit authors on the PR | ||
*/ | ||
export class OwlBotNode extends OwlBotTemplateChangesNode { | ||
classRule = { | ||
author: 'gcf-owl-bot[bot]', | ||
// For this particular rule, we want to check a pattern and an antipattern; | ||
// we want it to start with regular commit convention, | ||
// and it should not be breaking | ||
titleRegex: /^(chore|build|tests|refactor|fix|feat)/, | ||
titleRegexExclude: /(breaking|!)/, | ||
bodyRegex: /^((?!PiperOrigin-RevId).)*$/, | ||
}; | ||
|
||
constructor(octokit: Octokit) { | ||
super(octokit); | ||
} | ||
|
||
public async checkPR(incomingPR: PullRequest): Promise<boolean> { | ||
return super.checkPR(incomingPR); | ||
} | ||
} |
Oops, something went wrong.