Adds a text search box to the workflow sidebar on GitHub Actions pages, so you no longer have to click Show more workflows… repeatedly to find a workflow.
A content script runs on github.com Actions pages. On page load it fetches the full
workflow list from GitHub's own same-origin sidebar endpoint —
/{owner}/{repo}/actions/workflows_partial?query=&page=N — pulling pages in parallel
batches until one comes back empty. No clicking Show more workflows…, no DOM
mutation, no waiting for re-renders.
Matches render in the extension's own list under the search box. GitHub's sidebar is left completely untouched, so nothing shifts, nothing re-renders, and focus never jumps.
It uses your existing session cookies (same-origin fetch), so it works on private repos with no API token.
- Clone this repo.
- Open
chrome://extensions. - Enable Developer mode (top right).
- Click Load unpacked and select this folder.
- Open any repo's Actions page —
https://github.com/<owner>/<repo>/actions.
Chrome keeps unpacked extensions loaded across restarts. To share with teammates, they repeat the same steps (or you zip the folder and publish it to the Chrome Web Store).
./build.sh # -> dist/github-workflow-search-<version>.zip
python3 tools/make-store-assets.py # -> store/screenshot-*.png at 1280x800Bump version in manifest.json before every upload — the store rejects a re-used
version. Listing copy, the single-purpose statement, and permission justifications live in
docs/store-listing.md.
Capture store screenshots on a public repository only. They are published publicly,
and workflow names from a private repo disclose internal systems. docs/*.png and
store/ are gitignored for the same reason.
about:debugging#/runtime/this-firefox → Load Temporary Add-on → pick manifest.json.
Firefox drops temporary add-ons on restart.
- Click the box (or tab into it) and type. Matching is case-insensitive and every
whitespace-separated token must match, so
deploy prodfindsDeploy to Production. ↑/↓move through matches,Enteropens the highlighted one.Escclears the search.- The line under the box shows
matches / total · mode. Matched characters are highlighted in the results.
Click the extension's toolbar icon to toggle Fuzzy search (on by default). The setting
lives in chrome.storage.sync, so it follows your Chrome profile and applies to any open
tab immediately.
| Mode | Behaviour |
|---|---|
| Fuzzy (on) | Each token matches as a subsequence — dtprod finds Deploy to Production. Results are ranked, scoring word-boundary hits and runs of consecutive characters highest. |
| Exact (off) | Each token must appear literally — dtprod finds nothing, deploy prod still works. |
If you would rather not install an extension, the same logic runs as a Tampermonkey / Violentmonkey userscript: create a new script with
// ==UserScript==
// @name GitHub Workflow Search
// @match https://github.com/*
// @run-at document-idle
// @grant none
// ==/UserScript==
then paste the contents of content.js, and inject styles.css via GM_addStyle or a
<style> element.
- GitHub Enterprise Server: add your host to
matchesinmanifest.json. workflows_partialis an internal GitHub endpoint, not a documented API. If it is ever renamed,fetchPage()incontent.jsneeds updating; until then the extension falls back to filtering whatever the sidebar already rendered.- Pagination stops after 40 pages (
MAX_PAGES), fetched 4 at a time (PAGE_BATCH).