3 May 2022 0 comments GitHub
Auto-merge is a fantastic GitHub Actions feature. You first need to set up some branch protections and then, as soon as you've created the PR you can press the "Enable auto-merge (squash)". It will ("Squash and merge") merge the PR as soon as all branch protection checks succeeded. Neat.
But what if you have a workflow that is made up of half critical and half not-so-important stuff. In particular, what if there's stuff in the workflow that is really slow and you don't want to wait. One example is that you might have a build-and-deploy workflow where you've decided that the "build" part of that is a required check, but the (slow) deployment is just a nice-to-have. Here's an example of that:
name: Build and Deploy stuff on: workflow_dispatch: pull_request: permissions: contents: read jobs: build-stuff: runs-on: ubuntu-latest steps: - name: Slight delay run: sleep 5 deploy-stuff: needs: build-stuff runs-on: ubuntu-latest steps: - name: Do something run: sleep 26
It's a bit artificial but perhaps you can see beyond that. What you can do is set up a required status check, as a branch protection, just for the
Note how the job is made up of
deploy-stuff, where the latter depends on the first. Now set up branch protection purely based on the
build-stuff. This option should appear as you start typing
buil there in the "Status checks that are required." section of Branch protections.
Now, when the PR is created it immediately starts working on that
build-stuff job. While that's running you press the "Enable auto-merge (squash)" button:
What will happen is that as soon as the
build-stuff job (technically the full name becomes "Build and Deploy stuff / build-stuff") goes green, the PR is auto-merged. But the next (dependent) job
deploy-stuff now starts so even if the PR is merged you still have an ongoing workflow job running. Note the little orange dot (instead of the green checkmark).
It's quite an advanced pattern and perhaps you don't have the use case yet, but it's good to know it's possible. What our use case at work was, was that we use auto-merge a lot in automation and our complete workflow depended on a slow step that is actually conditional (and a bit slow). So we didn't want the auto-merge to be delayed because of something that might be slow and might also turn out to not be necessary.