Skip to main content

Watch GitHub action runs

Project description

This package provides one command, watch_gha_runs. It displays the status of the latest GitHub Action runs on your current branch. If any of the runs are in progress, it will refresh the display repeatedly with the latest status.

If you like, the name can be pronounced, “Watching? Ha!”

Installation

I suggest installing with pipx:

$ pipx install watchgha

Now you have a command watch_gha_runs available. It will check all GitHub remotes for the current directory’s repo, and find action runs for the current branch.

For complex defaulting, you can use a git alias. For example, this provides similar defaults, but can be adapted:

[alias]
    runs = "!f() { \
        watch_gha_runs $@ \
            \"$(git remote get-url origin)\" \
            \"$(git rev-parse --abbrev-ref HEAD)\"; \
    }; f"

Now git runs will show a live display of the current runs on your branch.

You can authenticate against GitHub if needed using either an entry in your .netrc file, or by setting the GITHUB_TOKEN environment variable.

If you use GitHub Enterprise, you can set the environment variables GITHUB_SERVER_URL (default: https://github.com) and GITHUB_API_URL (default: https://api.github.com) to match your instance.

Usage

$ watch_gha_runs --help
Usage: watch_gha_runs [OPTIONS] [REPO] [BRANCH]

  Watch GitHub Action runs.

  Repeatedly gets the latest status and redraws the screen, until all
  of the jobs are complete.

  REPO is a local directory or GitHub URL, defaulting to ".".

  BRANCH is defaulted from the git repo.

Options:
  --sha TEXT        The commit SHA to use. Must be a full SHA.
  --poll INTEGER    How many seconds between refreshes.  [default: 15]
  --wait-for-start  Wait for jobs to start.
  --only TEXT       Words to limit the workflows shown. Only workflows
                    with these comma separated case insensitive
                    substrings in their names will be shown.
  --help            Show this message and exit.

Display

The output shows runs and jobs. The current step of each job is shown, with a row of bullets indicating the number of steps, and which is current:

https://raw.githubusercontent.com/nedbat/watchgha/main/watch.gif
fix: recent pypy3.9 now omits lines after jumps nedbat/fix-pypy-nightly    53923268e8f9  @08:32am
⏲ queued       Tests             view 4397455341
    3.7 on ubuntu                  ↻ •••••••• Run tox for 3.7
    3.8 on ubuntu                  ↻ •••••••• Run tox for 3.8
    3.9 on ubuntu                  ↻ •••••••• Run tox for 3.9
    3.10 on ubuntu                 ↻ •••••••• Run tox for 3.10
    3.11 on ubuntu                 ↻ •••••••• Run tox for 3.11
    pypy-3.7 on ubuntu             ↻ •••••••• Run tox for pypy-3.7
    pypy-3.9 on ubuntu             ↻ •••••••• Run tox for pypy-3.9
    3.7 on macos                   ↻ •••••••• Run tox for 3.7
    3.8 on macos                   ↻ •••••••• Run tox for 3.8
    3.9 on macos                   ⏲ queued
    3.10 on macos                  ↻ •••••••• Run tox for 3.10
    3.11 on macos                  ↻ •••••••• Run tox for 3.11
    pypy-3.7 on macos              ⏲ queued
    pypy-3.9 on macos              ⏲ queued
    3.7 on windows                 ⏲ queued
    3.8 on windows                 ⏲ queued
    3.9 on windows                 ⏲ queued
    3.10 on windows                ↻ ••••••• Check out the repo
    3.11 on windows                ⏲ queued
    pypy-3.7 on windows            ⏲ queued
↻ in_progress  Quality            view 4397455342
    Check types                    ✓ success
    Build docs                     ↻ ••••••• Tox doc
    Pylint etc                     ↻ ••••••• Tox lint
↻ in_progress  Python Nightly Tests   view 4397455346
    Python 3.10-dev                ↻ •••◦•••• Run tox
    Python 3.11-dev                ↻ •••◦•••• Run tox
    Python 3.12-dev                ↻ •••◦•••• Run tox
    Python pypy-3.7-nightly        ↻ ••◦•••••• Run tox
    Python pypy-3.8-nightly        ↻ ••◦•••••• Run tox
    Python pypy-3.9-nightly        ↻ ••◦•••••• Run tox

Jobs and runs are collapsed once all of their children are successful:

fix: recent pypy3.9 now omits lines after jumps nedbat/fix-pypy-nightly    53923268e8f9  @08:32am
✓ success      Tests              view 4397455341
↻ in_progress  Quality            view 4397455342
    Check types                    ✓ success
    Build docs                     ↻ ••••••• Tox doc
    Pylint etc                     ✓ success
✗ failure      Python Nightly Tests   view 4397455346
    Python 3.10-dev                ✓ success
    Python 3.11-dev                ✓ success
    Python 3.12-dev                ✓ success
    Python pypy-3.7-nightly        ✓ success
    Python pypy-3.8-nightly        ✓ success
    Python pypy-3.9-nightly        ✗ failure Run tox

Once all the runs are completed, the command ends, displaying the final status:

fix: recent pypy3.9 now omits lines after jumps nedbat/fix-pypy-nightly [push]   53923268e8f9  @08:32am
✓ success      Tests              view 4397455341
✓ success      Quality            view 4397455342
✗ failure      Python Nightly Tests   view 4397455346
    Python 3.10-dev                ✓ success
    Python 3.11-dev                ✓ success
    Python 3.12-dev                ✓ success
    Python pypy-3.7-nightly        ✓ success
    Python pypy-3.8-nightly        ✓ success
    Python pypy-3.9-nightly        ✗ failure Run tox

Changelog

2.3.1 – 2024-05-25

  • Workflows with many jobs could be truncated. There is still a limit of 100 jobs, but that is better than the earlier limit of 30.

2.3.0 – 2024-04-10

  • GitHub Enterprise is supported via GITHUB_SERVER_URL and GITHUB_API_URL environment variables. Thanks, Colin Marquardt.

  • Fix: in unusual cases, GitHub can return strange statuses for job steps. Those are now displayed as question marks.

2.2.2 – 2024-02-03

  • Fix: steps can be in a “pending” state, and are now displayed with a dot instead of “pending”.

2.2.1 – 2024-01-14

  • Fix: don’t fail if a .netrc file can’t be found. Fixes issue 18.

  • Fix: in the odd case of duplicate remotes, don’t list workflow runs twice. Fixes issue 19.

2.2.0 — 2024-01-11

  • Now all GitHub remotes are checked for jobs. Previously, only one was checked, so you wouldn’t see jobs running on an upstream fork.

  • Added option --only to limit which workflows are displayed as requested in issue 17.

  • The output is now redrawn immediately when the terminal window is resized (on Mac or Linux). Thanks, Bill Mill.

2.1.1 — 2023-07-05

  • Implicit .netrc authentication stopped working, but has been fixed. Thanks, Rob Weir.

2.0.0 — 2023-07-02

  • The default polling interval is now 15 seconds.

  • Now the GitHub repo location and branch name are defaulted from the current git repo. The repo location can be a local directory or GitHub URL. Closes issue 7.

  • A new option, --wait-for-start will make watch_gha_runs wait until jobs are in progress. This fixes a problem with using watch_gha_runs programmatically: it can check the run status before any new runs have started, and simply report the done state of the last bunch of runs, then quit.

  • Fix: if a .yml workflow file couldn’t be parsed, its “run” would persist in the list of runs for longer than it should. Now those unparsable runs aren’t displayed at all.

  • Fix: skipped runs are considered finished, and don’t need their jobs shown.

  • Error reporting is improved, removing unneeded noisy tracebacks in some cases, and providing more information for GitHub API errors. Closes issue 8.

  • More operations are retried on failure, fixing issue 10.

  • Interrupting with ctrl-C will set the exit status to 2.

1.0.0 — 2023-04-15

  • The --poll option sets the number of seconds to wait between refreshes.

  • Requests to GitHub are now made asynchronously, speeding execution.

  • Redirections from GitHub (for example, if a repo is renamed or moved) are followed transparently.

  • The exit code is now 1 if any runs failed, 0 if all were successful.

  • Long lines are no longer wrapped too short.

0.6.0 — 2023-03-22

  • Runs can be selected by a commit SHA by using --sha on the command line.

  • Retry if GitHub returns “502 - Bad Gateway”.

0.5.0 — 2023-03-15

  • Uses a GITHUB_TOKEN environment variable for authentication if it is defined.

0.0.2 — 2023-03-14

  • Support more forms of repo URLs: git@github.com:, without .git, etc.

  • Better error messages if the repo URL can’t be parsed.

0.0.1 — 2023-03-13

First version

Development

The code is a bit messy and undocumented, and there are no tests. If you want to change the code, open an issue and let’s talk about it.

Contributors:

  • Ned Batchelder

  • Bill Mill

  • Hugo van Kemenade

  • Rob Weir

Back Story

This started as a formatter for the output of gh run list from the gh run command. Then I tried gh run watch, but wasn’t happy with its choices. So I wrote my own.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

watchgha-2.3.1.tar.gz (384.2 kB view details)

Uploaded Source

Built Distribution

watchgha-2.3.1-py3-none-any.whl (18.5 kB view details)

Uploaded Python 3

File details

Details for the file watchgha-2.3.1.tar.gz.

File metadata

  • Download URL: watchgha-2.3.1.tar.gz
  • Upload date:
  • Size: 384.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.7.17

File hashes

Hashes for watchgha-2.3.1.tar.gz
Algorithm Hash digest
SHA256 4d564fa2b3361db3d69966f9bde8a7cd2a75d039414ec46646d893a903455e67
MD5 ea9abfe2c6ac75f69337a9c3c68b19a3
BLAKE2b-256 0cff0e5216329139622f59719574336a3ba833cd7e6cd327c966da2ec046aafa

See more details on using hashes here.

File details

Details for the file watchgha-2.3.1-py3-none-any.whl.

File metadata

  • Download URL: watchgha-2.3.1-py3-none-any.whl
  • Upload date:
  • Size: 18.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.7.17

File hashes

Hashes for watchgha-2.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e86c5392cb654019fa5173475b8d95bdc17416a246bb19a4aa8fad5a2917c56e
MD5 cedbaaa6bb615217ad55a616c991859c
BLAKE2b-256 9b3e4e5925b4ab31764b29218933af54d33ca95ce8be58d8023c6f8c4237010c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page