No description
  • Python 95%
  • Makefile 1.5%
  • PowerShell 1.3%
  • Shell 1.2%
  • Batchfile 1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
dev-boffin-io c82b6ff536
Some checks failed
Build Linux AMD64 / build (push) Failing after 1m14s
Build Linux ARM64 / build (push) Successful in 4m5s
Build Windows EXE / build (push) Has been cancelled
fix: dialog close buttons + SSH-key-first pull/push
Dialogs (Options, Add Remote, Clone, New Repo, Credentials) now
explicitly call close() alongside accept()/reject(), so OK/Cancel
reliably close the window.

Extend the SSH-key-first auth (already added for Fetch) to Pull and
Push as well. For http(s) remotes, silently try the equivalent SSH
URL with BatchMode (no prompt) before falling back to the normal
HTTPS + GUI askpass flow. SSH auth happens before any data transfer,
so a failed silent attempt is safe — nothing gets left half-done.

Pull reuses the SSH-first fetch logic, then does a local merge.
Push gets its own SSH-first attempt with the same fallback pattern.
SSH remotes (git@host:...) are untouched — they already try keys
automatically at the OS level.
2026-06-21 22:20:43 +05:30
.github/workflows debug: print full binary path after build 2026-06-17 07:39:01 +05:30
assets Initial commit: gh-forge GUI 2026-06-13 19:12:43 +05:30
core Initial commit: gh-forge GUI 2026-06-13 19:12:43 +05:30
git_manager fix: dialog close buttons + SSH-key-first pull/push 2026-06-21 22:20:43 +05:30
panels Initial commit: gh-forge GUI 2026-06-13 19:12:43 +05:30
ui refactor: make Git Remote Manager the primary window 2026-06-21 09:30:10 +05:30
.gitignore Initial commit: gh-forge GUI 2026-06-13 19:12:43 +05:30
build.bat refactor: make Git Remote Manager the primary window 2026-06-21 09:30:10 +05:30
build.ps1 refactor: make Git Remote Manager the primary window 2026-06-21 09:30:10 +05:30
build.sh refactor: make Git Remote Manager the primary window 2026-06-21 09:30:10 +05:30
LICENSE Initial commit: gh-forge GUI 2026-06-13 19:12:43 +05:30
main.py fix: window vanishing immediately — capture launch_git_manager() reference 2026-06-21 09:51:10 +05:30
Makefile Initial commit: gh-forge GUI 2026-06-13 19:12:43 +05:30
pyproject.toml Initial commit: gh-forge GUI 2026-06-13 19:12:43 +05:30
README.md refactor: make Git Remote Manager the primary window 2026-06-21 09:30:10 +05:30
requirements.txt Initial commit: gh-forge GUI 2026-06-13 19:12:43 +05:30
run.bat Initial commit: gh-forge GUI 2026-06-13 19:12:43 +05:30
run.ps1 Initial commit: gh-forge GUI 2026-06-13 19:12:43 +05:30
run.sh feat: add Git Remote Manager tool 2026-06-21 09:03:04 +05:30

gh-forge icon

gh-forge

GitHub Actions Cleanup & Management GUI — part of the Forge Suite

Built with PyQt6 · 100% local · No telemetry


Overview

gh-forge bundles two tools, both for the dev-boffin-io organization:

  • Git Remote Manager — a local, multi-remote git GUI (opens first, since it's local-only).
  • GitHub Actions Manager — the org-wide GitHub Actions cleanup/artifacts/ workflows tool (opened from Git Remote Manager's Tools → Open gh-forge menu, Ctrl+G).

It wraps the gh CLI for the Actions side to give you a fast, visual way to clean up storage, manage workflows, browse source code, and more — without touching the terminal.

Features

  • 💻 Code — browse repo info, file tree, rendered README (with images), clone URLs (HTTPS/SSH/CLI) with one-click copy, and source code download (ZIP / tar.gz) with progress + cancel.
  • 📦 Artifacts — view, download, and delete workflow run artifacts per repo, with live download progress, destination path, and cancel.
  • 🧹 Caches — view and bulk-delete GitHub Actions caches per repo.
  • ⚡ Workflows — list workflows, trigger workflow_dispatch runs, re-run (including failed-jobs-only), and stream build logs live.
  • 💾 Storage — scan every repo in the org for artifact + cache storage usage, with live progress and a sortable breakdown table.
  • 🚀 Full Cleanup — one-click cleanup across all repos (artifacts + caches), with a live log and stop button.
  • ☰ Account menu — check gh auth status, login, logout, and a built-in GH CLI Manager:
    • Install / update / upgrade gh (auto-detects apt/dnf/pacman/brew)
    • Auto-detect or manually set the gh binary path
    • Version check
    • Password prompt dialog for sudo-requiring install/update commands
  • 🌿 Git Remote Manager — a separate GitHub-Desktop-style local git GUI (launched from the account menu), for managing multiple remotes on a single local repo: stage/commit, branch switching, commit history with diffs, add/remove remotes, and Push/Pull/Fetch against whichever remote you pick. Includes a GUI credential prompt (no terminal hangs on username/password) and per-host saved credentials.

Requirements

  • Python 3.9+
  • GitHub CLI (gh) — authenticated via gh auth login (or use the built-in GH CLI Manager to install it)
  • PyQt6 (auto-installed by the launcher scripts below)

Running

The launcher scripts automatically create a .venv, install/repair requirements.txt if needed, and run the app — no manual setup required.

Linux / macOS:

./run.sh

Windows (cmd):

run.bat

Windows (PowerShell):

.\run.ps1

Or via Makefile:

make run

If .venv is missing, broken, or has incomplete dependencies, the launcher will (re)create it and reinstall requirements.txt automatically before launching main.py.

Building a standalone binary

Builds run in a fully isolated virtual environment and produce a single executable in bin/, with all build artifacts cleaned up afterwards.

Linux (AMD64 / ARM64):

chmod +x build.sh
./build.sh

Windows (cmd):

build.bat

Windows (PowerShell):

.\build.ps1

Installation (Linux)

make install      # builds, installs binary, creates desktop entry, sets up PATH
make uninstall     # removes binary + desktop entry
make help          # show all available targets

CI/CD

Three GitHub Actions workflows build platform binaries automatically (.github/workflows/):

Workflow Target
build-linux-amd64.yml Linux x86_64
build-linux-arm64.yml Linux ARM64 (Termux/proot-Debian compatible)
build-windows.yml Windows x64 (.exe)

Each can be triggered manually via Actions → Run workflow, or automatically on push to main when relevant files change.

Project Structure

gh-forge/
├── main.py              # thin entry point — launches Git Remote Manager first
├── core/                # gh CLI wrapper, settings, background workers
├── panels/              # Code, Artifacts, Caches, Workflows, Storage, Cleanup
├── ui/
│   ├── style.py            # gh-forge stylesheet
│   ├── gh_manager.py        # GH CLI install/update dialog
│   └── actions_window.py    # GitHub Actions Manager window (opened via Tools menu)
├── git_manager/          # standalone multi-remote git GUI (launched from account menu)
│   ├── core/              # git_worker, credentials/askpass, diff renderer
│   ├── dialogs/           # clone, new repo, add remote, credentials, options
│   ├── ui/                # stylesheet
│   └── main_window.py     # GitRemoteManager + launch()
├── ui/                   # stylesheet + GH CLI manager dialog
├── assets/               # app icon
├── requirements.txt
├── run.sh / .bat / .ps1   # auto-venv launchers
├── build.sh / .bat / .ps1 # isolated binary builds
├── Makefile
├── .gitignore
└── .github/workflows/

License

MIT — see LICENSE.