Skip to content

feat(release): distribution channels — native bundles, npm, Homebrew, Docker CLI - #10

Merged
ritikbansod merged 5 commits into
mainfrom
feat/packaging
Sep 28, 2026
Merged

ritikbansod merged 5 commits into
mainfrom
feat/packaging

Conversation

@ritikbansod

Copy link
Copy Markdown
Owner

"Add all the support": wires every standard distribution channel around the direct CLI and server from #9. Stacked on #9 (introduces the --cli mode the wrappers call) — merge #1 → … → #9 → this.

Channels

Channel What ships Needs
Native bundles (new) jpackage app-images with a bundled JRE: kview-<v>-linux-x64.tar.gz (+ .deb), kview-<v>-macos-aarch64.tar.gz, kview-<v>-windows-x64.zip — server launcher and a kview direct-CLI wrapper nothing (no Java install)
npm (new) kview package: bin/kview dispatcher (direct mode via KVIEW_JAR or a local kview-*.jar; thin client otherwise) + npx kview-mcp (19 tools) Node 18+
Homebrew (new) formula template rendered at release and pushed to the tap (brew install kview → kview CLI + kview-server, both on the bundled JRE) tap repo + HOMEBREW_TAP_TOKEN
Docker (existing, documented) docker run --rm ghcr.io/ritikbansod/kview --cli topics ... passes the CLI through the existing entrypoint Docker
SDKMAN manual submission documented in docs/RELEASING.md (Linux bundle URL per release) —

Workflow

release.yml restructured into three jobs: build (tested jar → artifact + GitHub Release + Docker), bundles (per-OS jpackage matrix consuming the artifact — no rebuild divergence), publish (attaches bundles to the release; npm publish and Homebrew tap update activate only when their secrets NPM_TOKEN / HOMEBREW_TAP_TOKEN are configured, and skip gracefully otherwise). docs/RELEASING.md documents the per-channel setup and the release checklist.

Verified locally (not just designed)

  • jpackage app-image on Windows: built one, ran the bundled-JRE launcher with no system Java involved — kview.exe --cli --version → kview 1.0.0. (This also caught the real Windows layout: the launcher sits at the app root, not bin/ — the workflow wrapper is written against the verified layout. Linux uses bin/kview, macOS kview.app/Contents/MacOS/kview.)
  • npm: npm pack contents checked (7 files); both dispatcher modes exercised — thin client --version and direct mode through KVIEW_JAR (which routes into the jar's CliMain --version); kview-mcp bin serves 19 tools over stdio.
  • Full suite: 66/66 green.

Not verifiable from here

  • The macOS/Linux bundle jobs and the npm/Homebrew publish steps run for real only on a tagged push (macos-latest jpackage, npm registry auth, tap push). The workflow is written against the locally-verified jpackage command shape; first release should be a -rc.1 tag to watch it end to end. macOS bundles are unsigned (Gatekeeper xattr -cr noted in docs).

… Docker CLI

'Add all the support': the direct CLI and server now reach users through
every standard channel, all wired into the release workflow.

- native bundles: a bundles matrix job (ubuntu/macos/windows) runs jpackage
  app-images with a bundled JRE — kview-<v>-linux-x64.tar.gz (+ a .deb),
  kview-<v>-macos-aarch64.tar.gz, kview-<v>-windows-x64.zip — each containing
  the server launcher and a kview direct-CLI wrapper, so no Java install is
  needed. Windows launcher validated locally: bundled runtime runs
  'kview.exe --cli --version' with no system Java.
- npm: the 'kview' package (bin/kview dispatcher: direct mode via KVIEW_JAR
  or a local kview-*.jar, thin client otherwise; bin/kview-mcp for
  'npx kview-mcp'), published with the release version when NPM_TOKEN is set.
- Homebrew: packaging/homebrew/kview.rb.tmpl rendered and pushed to the tap
  on release when HOMEBREW_TAP_TOKEN is set (formula installs both the
  direct-CLI 'kview' and 'kview-server' from the bundle).
- release.yml restructured: build job uploads the tested jar as an artifact
  (bundles rebuild-free consume it), a publish job attaches bundles to the
  GitHub release and handles npm/Homebrew (steps skip gracefully while their
  secrets are unconfigured).
- docs: docs/RELEASING.md (per-channel checklist incl. the manual SDKMAN
  submission) and a README install table (jar / bundles / npm / Docker /
  Homebrew; Docker also passes the CLI through: 'docker run --rm image --cli
  topics ...').
- verified locally: npm pack contents + both dispatcher modes + npm MCP bin
  (19 tools); jpackage app-image on Windows with the bundled runtime;
  workflow YAML structure; full suite 66/66.
…SING.md from the README

docs/RELEASE-PLAN.md is the historical v1.0.0 runbook (its facts are stale:
Boot 3.3.4, 30/30 tests, pre-license) — banner it as an archive and point
maintainers at docs/RELEASING.md, which is the current release checklist.
README Contributing section now links it too.
The image was only on ghcr.io. When the repo secrets DOCKERHUB_USERNAME,
DOCKERHUB_TOKEN and DOCKERHUB_REPOSITORY are configured, the release now
copies the already-published multi-arch manifest from GHCR to Docker Hub
with 'docker buildx imagetools create' (same digests, both :version and
:latest, no rebuild) and skips gracefully while the secrets are absent —
the same pattern as npm and Homebrew. RELEASING.md documents the three
secrets; the README Docker row mentions the mirror.
Consolidated draft covering the ten stacked PRs: security & safety (auth
roles, AI/MCP pack), new features (search, replay, protobuf, metrics,
direct CLI), distribution channels (bundles/npm/Docker Hub/Homebrew/SDKMAN),
platform (Boot 3.5.16), the 18 resolved verified issues, the quality
statement (66/66 across 18 classes, Linux+Windows matrix), upgrading notes,
and the remaining roadmap (registry browser, live-registry protobuf
verification, packaging secrets).
@ritikbansod
ritikbansod changed the base branch from feat/direct-cli to main September 28, 2026 08:46
@ritikbansod
ritikbansod merged commit 0049187 into main Sep 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant