Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>GitHub Actions WatchNew to Visual Studio Code? Get it now.
GitHub Actions Watch

GitHub Actions Watch

mohamed iburan

|
1 install
| (0) | Free
Compact GitHub Actions sidebar card: all runs, runs grouped by workflow, and the failed step on demand.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

GitHub Actions Watch

GitHub Actions runs, in the sidebar, for the repository you already have open.

The card lists every recent run, groups the same runs by workflow, and goes one click deeper to the failed job, the failed step, and that step's log excerpt — without leaving the editor or opening a browser tab.

Install

Search for GitHub Actions Watch in the Extensions view, or install a local package:

npm run package
code --install-extension gh-actions-watch-0.2.0.vsix

Then click the Actions icon in the Activity Bar. To keep it out of the way, right-click the view title → Move View and send it to the secondary sidebar.

The card

Rows are 22px and the header is 26px, so a narrow sidebar still lists a lot: one line per row, name on the left, outcome and age on the right, full detail on hover. The header carries the overall state as a dot — red when a recent run failed, pulsing while one is building — and its tooltip shows the latest run per repository.

▾ All runs                              3
    ✕ CI [#41](https://github.com/mohamediburan/gh-actions-watch/issues/41)             failure · 5m
    ✓ CI [#40](https://github.com/mohamediburan/gh-actions-watch/issues/40)             success · 1h
    ◌ Deploy Edge [#12](https://github.com/mohamediburan/gh-actions-watch/issues/12)    in progress · 2h
▸ By workflow                           2

⎯⎯ after opening By workflow and CI ⎯⎯
▾ All runs                              3
    ✕ CI [#41](https://github.com/mohamediburan/gh-actions-watch/issues/41)             failure · 5m
    ✓ CI [#40](https://github.com/mohamediburan/gh-actions-watch/issues/40)             success · 1h
    ◌ Deploy Edge [#12](https://github.com/mohamediburan/gh-actions-watch/issues/12)    in progress · 2h
▾ By workflow                           2
    ▾ CI                 failure · 5m
        ✕ [#41](https://github.com/mohamediburan/gh-actions-watch/issues/41)            failure · 5m
        ✓ [#40](https://github.com/mohamediburan/gh-actions-watch/issues/40)            success · 1h
    ▸ Deploy Edge        in progress · 2h

⎯⎯ after opening [#41](https://github.com/mohamediburan/gh-actions-watch/issues/41) ⎯⎯
← CI                                   ⟳
   [#41](https://github.com/mohamediburan/gh-actions-watch/issues/41) · failure · 5m

· Open on GitHub
▾ ✕ build (ubuntu-latest)  failure · 4m 12s
    ▸ ✓ Set up job         step 1 · 2s
    ▾ ✕ Build images       step 7 · 2m 58s
        · Open full log on GitHub
              docker build .
              ##[error]exit code 1
    ▸ · Always run         step 8 · 0s
▸ ✓ test                   success · 1m 3s

The list screen has two collapsible sections. All runs is the newest run page (ghActionsWatch.recentRuns, default 25) from every watched repository, newest first. By workflow groups those same runs by workflow and opens each group's runs in place. All runs starts open, By workflow starts collapsed. With more than one repository, each gets its own header inside By workflow — they are indistinguishable once merged.

When a repository's page is full, one muted line under the list says so (Updated just now · newest 25 runs per repo — raise ghActionsWatch.recentRuns for more). That is why a workflow with no run in the page is absent from the runs: the page is shared by every workflow in the repository. It is still listed under By workflow, muted, as no run in this page, because /actions/workflows is read on demand (15-minute cache) to name the workflows that are quiet. That endpoint is only touched once you open the section, and it never joins the poll.

ghActionsWatch.recentRuns accepts 1–100 (GitHub's per-page maximum).

Opening a run lists every job and every step of that run, so a failure is seen in context: failed jobs are red and start expanded, the rest are one click away. Expanding a step shows that step's lines from the job log inline, with Open full log on GitHub one click away.

A running run is treated as live: its steps are re-read on every poll (10 s cache instead of 60 s), and an expanded excerpt is dropped after 10 s so it never looks fresher than it is. GitHub publishes a job's log only once the job finishes, so expanding a step that has not finished says so instead of sending a request that would 404.

Loading is shown where it happens: a 2 px indeterminate bar under the header, skeleton lines beneath the row you clicked, and the list dimmed and unclickable until the request lands.

Clicking a row never reloads the card: the level you are on and the sections and groups you opened stay put, even when you switch to another sidebar view and come back.

Sign-in

The card uses VS Code's built-in GitHub session, so there is nothing to configure and no personal access token to create, copy or rotate:

  • the first time, the card offers Sign in with GitHub, and the consent dialog asks for the repo scope;
  • while that first lookup is still running the card says it is checking, so the button does not flash on load;
  • if the session is replaced or revoked, the card returns to the sign-in button and starts polling again once you sign in.

Refreshing

The card refreshes itself, so there is nothing to keep in sync by hand:

  • every 15 s while a run is queued or in progress, every 90 s when everything is finished;
  • immediately when the window regains focus, when you press the refresh button, when you run GitHub Actions Watch: Refresh, or when a commit or push lands in the open repository;
  • not at all while the window is in the background.

A refresh you ask for is visible and is not served from a cache: the bar under the header shows while it runs, the open run's jobs and step logs are re-read, and the footer tells you when the rows were last read (Updated just now), so a refresh that finds nothing new still says so.

Requests are conditional, so a refresh that finds nothing new spends no GitHub API quota — that applies to the run page and to a run's jobs. Jobs are fetched only for a run you open, and a step's log only when you expand that step. Workflow definitions are read once per 15 minutes, and only while By workflow is open.

When GitHub does limit the extension — the primary hourly quota or a secondary burst limit — the card pauses until the time GitHub gives (x-ratelimit-reset or retry-after) instead of retrying into the block.

Repository scope

The default is the current checkout: for each workspace folder, the extension runs git -C <folder> remote get-url origin and resolves owner/name from it. Set ghActionsWatch.repositories (an array of owner/name) only to override that, e.g. to watch a repository that is not the one you have open.

Develop

npm install
npm run bundle     # esbuild -> dist/extension.js (one file, zero runtime deps)
npm run typecheck
npm run lint
npm test           # headless: vscode aliased to a stub, GitHub responses canned
npm run package    # -> gh-actions-watch-0.2.0.vsix

Open the folder in VS Code and press F5 for an Extension Development Host.

Settings

Setting Default Meaning
ghActionsWatch.repositories [] owner/name list; empty uses each folder's origin
ghActionsWatch.activePollMs 15000 Poll interval while a run is active
ghActionsWatch.idlePollMs 90000 Poll interval when nothing is running
ghActionsWatch.recentRuns 25 Runs fetched per repository, shown in both sections

License

MIT — see LICENSE.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft