I gave up hope of seeing actions/runner#1182 fixed within my lifespan¹. I thus decided to write a very simple composite GitHub action that adds support for YAML anchors and merge keys in GitHub Actions.
Write your workflows into .github/real-workflows
,
freely using merge keys (<<:
) and anchors (*
),
but writing all your anchors definitions in a header document,
then write the real workflow separated by ---
, like this:
anchor: &anchor
name: Test running on ${{github.repository}}
run: echo Commit ${{github.sha}} seems to be working
---
name: Test this action
on:
push:
pull_request:
workflow_dispatch:
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Test running on ${{github.repository}}
run: echo Commit ${{github.sha}} seems to be working
- <<: *anchor
run: echo Test merge keys
- *anchor
Now, create a new token with workflows:write
permissions and register it as a repo (or organization) secret.
In the remainder, we'll call this token's secret WORKFLOW_TOKEN
.
Now, create an additional workflow in .github/workflows/autogen.yaml
(of course pick the name you like the most, the important thing is the workflow location)
that looks like this:
name: Generate workflows
on:
push:
branches:
- master
paths:
- ".github/real-workflows/*.yml"
jobs:
generate-workflows:
runs-on: ubuntu-latest
steps:
- name: Run locally
uses: 'DanySK/[email protected]' # pick the latest version maybe
with:
token: ${{ secrets.WORKFLOW_TOKEN }}
Replace WORKFLOW_TOKEN
with the name of the secret you created before.
That's it.
- I also honestly believe that GitHub Actions was built bottom-up, has great design flaws, and deserves a v2, but still, it's the best thing we have, so I can't help but love it ❤️