This post exemplifies an efficient workflow to shorten the edit-refresh loop when dealing with github actions.

Assumptions

  • You have git, jq and the gh command-line tool installed (brew install gh)
  • You have a github actions file in ~/.github/workflows/package-release-dispatch.yml.
  • The action has the following form:
on:
  workflow_dispatch:
    inputs:
      ref:
        description: 'Ref to build from. This can either be a SHA or a branch/tag'
        required: true
        type: string
  push:
    branches:
      - master
    paths:
      - '.github/workflows/package-release-dispatch.yml'
      - 'helm/**'

The goal is to iterate on the jobs: section of the action.

Workflow

Trigger an action run from the command line:

gh workflow run package-release-dispatch.yml [--ref master] [-f ref=master]

--ref should be the git branch you’re working on, for example, thiagowfx/my-cool-feature.

-f provides an input to the workflow. In this case, there’s an input named ref, which is meant to be the branch the action will act upon.

The action takes a little while to trigger, we can sleep to give it some time. I found that sleep 3 is a sensible value (3 seconds).

How to view the action?

First we need to get its ID. Here’s one way to do so:

gh run list --workflow=package-release-dispatch.yml --json databaseId --jq '.[0].databaseId'

Option 1) Via the command-line

gh run watch <id>

It’s analogous to watch, continuously refreshing the action progress in the background, step by step. Example:

* master Package release dispatch · 12345678
Triggered via workflow_dispatch about 1 minute ago

JOBS
* build (ID 23456789)
  ✓ Set up job
  ✓ Checkout source code
  ✓ Run azure/setup-helm@v4
  ✓ Install yq
  ✓ Install helm cm-push plugin
  ✓ Set up Helm repos
  * Helm package all charts sans blacklist
  * Publish all helm packages
  * Post Checkout source code

Option 2) Via the web browser

gh run view <id> -w

It will open the system web browser in the right page, pertaining to the action run.

Putting everything together

Option 1)

gh workflow run package-release-dispatch.yml --ref master -f ref=master && \
  sleep 3 && \
  gh run watch $(gh run list --workflow=package-release-dispatch.yml --json databaseId --jq '.[0].databaseId')

Option 2)

gh workflow run package-release-dispatch.yml --ref master -f ref=master && \
  sleep 3 && \
  gh run view $(gh run list --workflow=package-release-dispatch.yml --json databaseId --jq '.[0].databaseId') -w