1+ on :
2+ pull_request :
3+ name : auto-release
4+ jobs :
5+ approve :
6+ runs-on : ubuntu-latest
7+ steps :
8+ 9+ with :
10+ github-token : ${{secrets.GITHUB_TOKEN}}
11+ debug : true
12+ script : |
13+ // only approve PRs from release-please[bot]
14+ if (context.payload.pull_request.user.login !== "release-please[bot]") {
15+ return;
16+ }
17+
18+ // only approve PRs like "chore: release <release version>"
19+ if ( !context.payload.pull_request.title.startsWith("chore: release") ) {
20+ return;
21+ }
22+
23+ // trigger auto-release when
24+ // 1) it is a SNAPSHOT release (auto-generated post regular release)
25+ // 2) there are dependency updates only
26+ // 3) there are no open dependency update PRs in this repo (to avoid multiple releases)
27+ if (
28+ context.payload.pull_request.body.includes("Fix") ||
29+ context.payload.pull_request.body.includes("Build") ||
30+ context.payload.pull_request.body.includes("Documentation") ||
31+ context.payload.pull_request.body.includes("BREAKING CHANGES") ||
32+ context.payload.pull_request.body.includes("Features")
33+ ) {
34+ console.log( "Not auto-releasing since it is not a dependency-update-only release." );
35+ return;
36+ }
37+
38+ const promise = github.pulls.list.endpoint({
39+ owner: context.repo.owner,
40+ repo: context.repo.repo,
41+ state: 'open'
42+ });
43+ const open_pulls = await github.paginate(promise)
44+
45+ if ( open_pulls.length > 1 && !context.payload.pull_request.title.includes("SNAPSHOT") ) {
46+ for ( const pull of open_pulls ) {
47+ if ( pull.title.startsWith("deps: update dependency") ) {
48+ console.log( "Not auto-releasing yet since there are dependency update PRs open in this repo." );
49+ return;
50+ }
51+ }
52+ }
53+
54+ // approve release PR
55+ await github.pulls.createReview({
56+ owner: context.repo.owner,
57+ repo: context.repo.repo,
58+ body: 'Rubber stamped release!',
59+ pull_number: context.payload.pull_request.number,
60+ event: 'APPROVE'
61+ });
62+
63+ // attach kokoro:force-run and automerge labels
64+ await github.issues.addLabels({
65+ owner: context.repo.owner,
66+ repo: context.repo.repo,
67+ issue_number: context.payload.pull_request.number,
68+ labels: ['kokoro:force-run', 'automerge']
69+ });
0 commit comments