feat(distribution): binary release pipeline + brew + winget
Some checks failed
CI / Lint (push) Has been cancelled
CI / Typecheck (push) Has been cancelled
CI / Broker tests (Postgres) (push) Has been cancelled
CI / Docker build (linux/amd64) (push) Has been cancelled

- .github/workflows/release-cli.yml: build self-contained binaries via
  `bun build --compile` for darwin/linux/windows × x64/arm64 on every
  cli-v* tag, attach to GitHub Release with SHA256SUMS, auto-bump the
  homebrew tap on non-prerelease versions.
- packaging/homebrew/claudemesh.rb.template: formula template for the
  homebrew-claudemesh tap.
- packaging/winget/claudemesh.yaml.template: winget manifest template.
- /install script now detects absence of Node and downloads the
  platform-appropriate binary from the GitHub Release, installs to
  ~/.claudemesh/bin, and shims into ~/.local/bin — zero Node required.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Alejandro Gutiérrez
2026-04-15 02:42:16 +01:00
parent 43f2728283
commit ccf95ff382
4 changed files with 275 additions and 33 deletions

View File

@@ -0,0 +1,54 @@
# Homebrew formula template — lives in the `alezmad/homebrew-claudemesh` tap.
#
# The release-cli workflow bumps `version`, `url`, and `sha256` per platform
# via `brew bump-formula-pr`. This template is the source shape — copy it
# into the tap repo as `Formula/claudemesh.rb` when bootstrapping, then let
# CI keep it up to date.
class Claudemesh < Formula
desc "Peer mesh for Claude Code sessions"
homepage "https://claudemesh.com"
version "1.0.0-alpha.28"
license "MIT"
on_macos do
if Hardware::CPU.arm?
url "https://github.com/alezmad/claudemesh/releases/download/cli-v#{version}/claudemesh-darwin-arm64"
sha256 "REPLACED_BY_CI"
else
url "https://github.com/alezmad/claudemesh/releases/download/cli-v#{version}/claudemesh-darwin-x64"
sha256 "REPLACED_BY_CI"
end
end
on_linux do
if Hardware::CPU.arm?
url "https://github.com/alezmad/claudemesh/releases/download/cli-v#{version}/claudemesh-linux-arm64"
sha256 "REPLACED_BY_CI"
else
url "https://github.com/alezmad/claudemesh/releases/download/cli-v#{version}/claudemesh-linux-x64"
sha256 "REPLACED_BY_CI"
end
end
def install
bin.install Dir["*"].first => "claudemesh"
end
def caveats
<<~EOS
To enable click-to-launch from invite emails:
claudemesh url-handler install
To show live peer count in Claude Code:
claudemesh install --status-line
Shell completions:
claudemesh completions zsh > "$(brew --prefix)/share/zsh/site-functions/_claudemesh"
EOS
end
test do
assert_match "claudemesh", shell_output("#{bin}/claudemesh --version")
end
end

View File

@@ -0,0 +1,31 @@
# winget manifest template for claudemesh.
# Submit via PR to microsoft/winget-pkgs after each non-prerelease cli-v* tag.
# The release-cli workflow can automate this with a wingetcreate step.
PackageIdentifier: Claudemesh.Claudemesh
PackageVersion: 1.0.0
PackageName: Claudemesh
Publisher: Alejandro Gutierrez
License: MIT
LicenseUrl: https://github.com/alezmad/claudemesh/blob/main/LICENSE
ShortDescription: Peer mesh for Claude Code sessions
Description: |-
Claudemesh connects multiple Claude Code sessions into a peer mesh.
End-to-end encrypted, keys stay on your machine. Invite, share state,
verify safety numbers, back up encrypted configs.
Moniker: claudemesh
Tags:
- claude
- cli
- mesh
- ai
- developer-tools
Installers:
- Architecture: x64
InstallerType: portable
InstallerUrl: https://github.com/alezmad/claudemesh/releases/download/cli-v{{version}}/claudemesh-windows-x64.exe
InstallerSha256: REPLACED_BY_CI
Commands:
- claudemesh
ManifestType: singleton
ManifestVersion: 1.6.0