-
Notifications
You must be signed in to change notification settings - Fork 427
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Replacing `mergify` that gets hard to maintain with GitHub actions with features: 1. automerge for PRs * `automerge` label is attached if and only if the PR author is `softwaremill-ci` and exactly one file from the specified list is changed, * auto-merge action is performed if and only if there is an `automerge` label attached and `ci` and `mima` jobs complete successfully. 2. `/rebase` as PR comment to rebase it.
- Loading branch information
Showing
5 changed files
with
104 additions
and
112 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
version: 1 | ||
labels: | ||
- label: "automerge" | ||
authors: ["softwaremill-ci"] | ||
files: | ||
- "build.sbt" | ||
- "project/Versions.scala" | ||
- "project/plugins.sbt" | ||
- label: "dependency" | ||
authors: ["softwaremill-ci"] | ||
files: | ||
- "build.sbt" | ||
- "project/Versions.scala" | ||
- "project/plugins.sbt" |
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,7 +1,6 @@ | ||
name: CI | ||
on: | ||
pull_request: | ||
branches: ['**'] | ||
push: | ||
branches: ['**'] | ||
tags: [v*] | ||
|
@@ -10,8 +9,12 @@ env: | |
SBT_JAVA_OPTS: -J-Xms4g -J-Xmx4g | ||
jobs: | ||
ci: | ||
# run on external PRs, but not on internal PRs since those will be run by push to branch | ||
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository | ||
# run on 1) push, 2) external PRs, 3) softwaremill-ci PRs | ||
# do not run on internal, non-steward PRs since those will be run by push to branch | ||
if: | | ||
github.event_name == 'push' || | ||
github.event.pull_request.head.repo.full_name != github.repository || | ||
github.event.pull_request.user.login == 'softwaremill-ci' | ||
runs-on: ubuntu-22.04 | ||
strategy: | ||
fail-fast: false | ||
|
@@ -102,9 +105,14 @@ jobs: | |
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
|
||
# identify binary incompatibilities (check build.sbt for details) | ||
mima: | ||
# run on external PRs, but not on internal PRs since those will be run by push to branch | ||
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository | ||
# run on 1) push, 2) external PRs, 3) softwaremill-ci PRs | ||
# do not run on internal, non-steward PRs since those will be run by push to branch | ||
if: | | ||
github.event_name == 'push' || | ||
github.event.pull_request.head.repo.full_name != github.repository || | ||
github.event.pull_request.user.login == 'softwaremill-ci' | ||
runs-on: ubuntu-22.04 | ||
steps: | ||
- name: Checkout | ||
|
@@ -175,3 +183,41 @@ jobs: | |
version: "v${{ env.VERSION }}" | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
|
||
|
||
# `automerge` label is attached iff there is exactly one file changed by steward and this file belongs to a | ||
# whitelist specified by `labeler.yml` | ||
label: | ||
name: Attach automerge label | ||
# only for PRs by softwaremill-ci | ||
if: github.event.pull_request.user.login == 'softwaremill-ci' | ||
runs-on: ubuntu-22.04 | ||
steps: | ||
- uses: actions/checkout@v3 | ||
with: | ||
fetch-depth: 2 | ||
# count number of files changed | ||
- name: Count number of files changed | ||
id: count-changed-files | ||
run: | | ||
N=$(git diff --name-only -r HEAD^1 HEAD | wc -w) | ||
echo "changed_files_num=$N" >> $GITHUB_OUTPUT | ||
- name: Launch labeler | ||
# skip if more than one file changed | ||
if: steps.count-changed-files.outputs.changed_files_num == 1 | ||
uses: srvaroa/labeler@master | ||
env: | ||
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" | ||
|
||
auto-merge: | ||
name: Auto merge | ||
# only for PRs by softwaremill-ci | ||
if: github.event.pull_request.user.login == 'softwaremill-ci' | ||
needs: [ ci, mima, label ] | ||
runs-on: ubuntu-22.04 | ||
steps: | ||
- id: automerge | ||
name: automerge | ||
uses: "pascalgn/[email protected]" | ||
env: | ||
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" |
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,19 @@ | ||
# On any comment, it will look for '/rebase' in the comment body and in case of hit, it dispatches rebase cmd | ||
# with event type 'rebase-command' which triggers 'rebase-command` WF that performs the rebase operation. | ||
name: Slash Command Dispatch | ||
on: | ||
issue_comment: | ||
types: [created] | ||
jobs: | ||
slashCommandDispatch: | ||
# to fast-skip for typical, non-rebase comments | ||
if: contains(github.event.comment.body, '/rebase') | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Slash Command Dispatch | ||
uses: peter-evans/slash-command-dispatch@v3 | ||
with: | ||
token: ${{ secrets.GITHUB_TOKEN }} | ||
commands: rebase | ||
permission: write | ||
issue-type: pull-request |
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,20 @@ | ||
name: rebase-command | ||
on: | ||
repository_dispatch: | ||
types: [rebase-command] | ||
jobs: | ||
rebase: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: peter-evans/rebase@v2 | ||
id: rebase | ||
with: | ||
head: ${{ github.event.client_payload.pull_request.head.label }} | ||
- name: Add reaction | ||
if: steps.rebase.outputs.rebased-count == 1 | ||
uses: peter-evans/create-or-update-comment@v1 | ||
with: | ||
token: ${{ secrets.GITHUB_TOKEN }} | ||
repository: ${{ github.event.client_payload.github.payload.repository.full_name }} | ||
comment-id: ${{ github.event.client_payload.github.payload.comment.id }} | ||
reaction-type: hooray |
This file was deleted.
Oops, something went wrong.