Hubwagen hauls Headlamp plugins from public sources into your own Nexus repository — like a pallet truck for plugin artifacts.
It is a small GUI tool (Windows and Linux) that:
- Browses two sources for Headlamp plugins: Artifact Hub and the official headlamp-k8s/plugins GitHub releases. Pick a specific version, or Download all at once.
- Downloads the plugin archives into a local repository
(
~/Hubwagen), verifying every download against its sha256 checksum, and can update downloaded plugins to their latest version. - Generates an
index.jsonfrom the downloaded files — the static catalog format consumed by Headlamp's in-cluster plugin manager. - Uploads archives and index into a Nexus OSS raw hosted repository via HTTP PUT. Before pushing it synchronizes with the repository's current index, so several people can publish to the same Nexus without overwriting each other's plugins — only missing archives are uploaded and the index is merged.
The resulting catalog URL
(https://<nexus>/repository/<repo>/index.json) can be added directly in
Headlamp under Plugin Manager → Catalog Settings → Static index.
Every push to main runs the release pipeline: it tests, builds, bumps the
patch version, tags it and publishes a GitHub release with three artifacts:
hubwagen-linux-amd64.tar.gzhubwagen-windows-amd64.ziphubwagen-windows-amd64-softgl.zip— Windows build bundled with Mesa llvmpipe DLLs for machines without GPU acceleration (VMs, RDP): keep the DLLs next to the exe and everything renders on the CPU.
Start hubwagen (Linux) or hubwagen.exe (Windows) — no installation
required.
On startup Hubwagen checks its GitHub releases for a newer version. If one is found it shows a banner with Update now (downloads the release, verifies its checksum, replaces the executable in place and restarts), Skip this version (never prompt for that version again) and Ignore (dismiss for this session).
Fyne (the GUI toolkit) requires OpenGL 2.0+. Windows VMs without 3D
acceleration only expose OpenGL 1.1, so use the softgl bundle there. On
Linux, Mesa provides a software fallback out of the box
(LIBGL_ALWAYS_SOFTWARE=1 forces it).
- Browse plugins: choose a source (Artifact Hub or the official repo), filter, select a plugin, pick a version and press Download — or Download all to fetch the latest of every listed plugin.
- Local Repository: shows downloaded archives and a live preview of the
generated
index.json, with Update all to latest to refresh them. - Upload to Nexus: enter the Nexus base URL (e.g.
https://nexus.example.com), the raw hosted repository name, username and password, then Test connection and Upload plugins + index.json.
Prefer https:// URLs: HTTP Basic auth sends the credentials in cleartext,
so plain http:// requires ticking Allow insecure HTTP explicitly.
URL, repository and username are persisted between runs. The password is only persisted if Remember password is enabled — the Fyne preferences file is plain JSON, so it is stored unencrypted.
- A raw (hosted) repository with deployment policy Allow redeploy.
- The uploading user needs write permission on that repository.
- Headlamp fetches index and archives anonymously, so anonymous read access must be enabled.
Linux (needs gcc plus X11/GL headers for Fyne):
go build -o hubwagen ./cmd/hubwagen
Windows binary, cross-compiled on Linux via MinGW (see build/build-windows.sh
for a containerized variant):
CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc GOOS=windows GOARCH=amd64 \
go build -ldflags "-s -w -H=windowsgui" -o hubwagen.exe ./cmd/hubwagen
go test ./internal/...
End-to-end test against a live Nexus (uploads a real plugin from Artifact Hub and fetches it back anonymously):
go test -tags e2e ./internal/e2e -v \
-nexus-url=https://nexus.example.com -nexus-repo=headlamp-plugins \
-nexus-user=<user> -nexus-pass=<password>
main is protected: changes land via pull request with a green test
check (no direct pushes). Every merged PR is automatically tagged with the
next patch version and published as a GitHub release by the Release
workflow.