Github Actions is absolutely great. It’s fast, clean, clear, and I’ve yet to encounter a task I can’t accomplish. The main advantage of Github Actions over something like BitBucket Pipelines is the sheer number of modules (called “actions”) that you can just use.

Need a docker image built?

  - name: Set up Docker Buildx
    uses: docker/[email protected]
  - name: Login to GCR
    uses: docker/[email protected]
      username: _json_key
      password: ${{ secrets.GOOGLE_SA_KEY }}
  - name: Build and push run image
    uses: docker/[email protected]
      push: true
      tags: |<project>/image:${{ github.run_number }}<project>/image:latest        
      cache-to: type=inline

Need some Terraform deployed?

  - name: Setup Terraform
    uses: hashicorp/[email protected]
  - name: Terraform init
    working-directory: terraform
    run: terraform init -input=false
  - name: Terraform apply
    working-directory: terraform
    run: terraform apply -auto-approve -input=false

However, you see those version tags? They get out of date. And it’s a pain to go to every Marketplace link to figure out what the latest version is. (Spoiler: it’s not always latest)

So I scratched an itch. I wanted something where I could just paste in the GA workflow code and get it back with updated versions. I built it in Javascript, because it’s just logical. It’s my first JS in at least 10 years, but I had some very insightful help from a frontend colleague. I started out interpreting the yaml, but that’s really just dumb. It starts to complain about errors, and I just don’t care about that in this stage. I know I’ve copy-pasted some gibberish, that’s okey, I’m not done with it yet! Now it just regexes the content and replaces any version tag it finds with the latest. Which it pulls asynchronously from the Github API.

Now I (and some colleagues of mine) use it multiple times a week at least. All joking aside I’m pretty sure it must have saved me hours already, and a whole lot of frustration. So, spare yourself some grinding, for free!

Check it out: