Skip to content

Commit 538a680

Browse files
build(ci): enable auto-release for dependency-update-only releases (#760)
Automatically perform a Java client library release when: 1. Only dependency updates are going out in the release since any releases containing bug fixes, build changes or new features should be supervised; 2. There are no outstanding/open dependency update pull requests in the repo. This is to avoid multiple/redundant releases; 3. It is a SNAPSHOT release which is automatically generated post regular release -- this requires no human supervision. Testing done in 5 java-bigquery* client library repos. Example: [chore: release 0.3.4 ](googleapis/java-bigqueryconnection#130) [chore: release 0.3.5-SNAPSHOT](googleapis/java-bigqueryconnection#131)
1 parent dba48bb commit 538a680

1 file changed

Lines changed: 69 additions & 0 deletions

File tree

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
on:
2+
pull_request:
3+
name: auto-release
4+
jobs:
5+
approve:
6+
runs-on: ubuntu-latest
7+
steps:
8+
- uses: actions/github-script@v3.0.0
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

Comments
 (0)