Skip to content

install.sh version flags + canonical manifest + publish-manifest receiver#5

Merged
TeoSlayer merged 2 commits into
mainfrom
install-sh-version-manifest
May 29, 2026
Merged

install.sh version flags + canonical manifest + publish-manifest receiver#5
TeoSlayer merged 2 commits into
mainfrom
install-sh-version-manifest

Conversation

@TeoSlayer

Copy link
Copy Markdown
Contributor

Summary

Two commits on this branch:

  • `c857852` — install.sh gains `--version`, `--channel stable|edge`, `--yes`, `--no-warn` flags; seeds `public/.well-known/latest.json` from v1.10.5.
  • `cabe3fe` — `publish-manifest.yml` workflow (receiver), manifest filename fix (`pilot.rb` → `pilotprotocol.rb`), and three doc fixes for stale install snippets.

install.sh changes

New CLI flags with sensible precedence: `--version > PILOT_RELEASE_TAG > --channel > PILOT_RC=1 > manifest latest_stable > GitHub redirect`. Legacy env vars still honored so existing curl|sh callers work unchanged.

When the resolved tag is semver-older than `latest_stable`, install.sh prints a warning. On a TTY without `--yes` it prompts; in a curl|sh pipeline it prints the warning and proceeds so automation does not hang.

publish-manifest receiver

Listens for `repository_dispatch` event_type=`manifest-update` from `web4/.github/workflows/release.yml`. Merges the incoming manifest into `public/.well-known/latest.json`:

  • `latest_stable` is only advanced when the upstream is NOT a prerelease.
  • `channels.edge` and `latest_prerelease` always advance.
  • `platforms` is replaced wholesale.

`workflow_dispatch` is also wired so the manifest can be nudged manually if the upstream dispatch is dropped.

Doc sweep

  • Two blog snippets that wgot `pilot-rendezvous-linux-amd64` and `pilot-daemon-linux-amd64` (neither exists as a release asset — releases ship `pilot-${OS}-${ARCH}.tar.gz` bundles) replaced with the canonical curl|sh form.
  • `PILOT_RC=1` snippet replaced with `--channel edge`.
  • Hardcoded v1.10.3 release link replaced with `/releases/latest`.

Test plan

  • Open this PR — Cloudflare Pages preview should serve the new install.sh + manifest at the preview URL.
  • `curl https:///.well-known/latest.json` returns the seeded manifest.
  • `curl -fsSL https:///install.sh | sh -s -- --version v1.10.4` warns about being older than latest_stable.
  • `curl -fsSL https:///install.sh | sh -s -- --version v1.10.5` proceeds without warning.

Manual unit tests already passed locally

  • 6 manifest-field extractions
  • 8 version-compare pairs incl. prerelease ordering and leading-v stripping
  • 6 arg-parser cases (default, --version, --channel, --version=, env back-compat, flag-wins-over-env)
  • 2 fail-fast cases (bogus channel, unknown flag)
  • 4 warning cases (old + non-interactive, --no-warn, newest, newer-than-stable)

🤖 Generated with Claude Code

teovl added 2 commits May 28, 2026 15:17
Add a single source-of-truth manifest at .well-known/latest.json that
encodes latest_stable, latest_prerelease, channel pointers, and per-
platform SHA-256 + tarball URL. install.sh fetches the manifest first
and falls back to the GitHub /releases/latest redirect when unreachable.

New CLI flags (POSIX-shell arg parser, no getopt):
  --version <tag>    pin a release; --version=<tag> equivalent
  --channel stable|edge  manifest channel lookup
  --yes / -y         skip the older-than-stable confirmation prompt
  --no-warn          suppress the warning entirely

Precedence: --version > PILOT_RELEASE_TAG > --channel > PILOT_RC=1 >
manifest latest_stable > GitHub-redirect fallback. Legacy env vars still
work so curl|sh callers keep working unchanged.

Stale-version warning prints whenever the resolved tag is semver-older
than latest_stable. Confirmation prompt only fires on a TTY *and* when
--yes is absent, so curl|sh pipelines do not hang waiting for input.
… + doc sweep

publish-manifest.yml receives the manifest-update repository_dispatch
from web4/.github/workflows/release.yml, merges the incoming manifest
into public/.well-known/latest.json (preserving latest_stable on
prerelease bumps, advancing only channels.edge), and commits to main
so the Cloudflare Pages deploy picks it up.

Manifest filename fix: homebrew_formula_url referenced pilot.rb but the
actual file in TeoSlayer/homebrew-pilot is Formula/pilotprotocol.rb.

Doc sweep — replace dead per-binary release URLs and the legacy
PILOT_RC= snippet with the canonical install.sh form:

  - blog/private-agent-network-company.astro: rendezvous/daemon download
    snippets pointed at pilot-rendezvous-linux-amd64 and
    pilot-daemon-linux-amd64, neither of which exists as a release asset
    (releases ship pilot-${OS}-${ARCH}.tar.gz bundles). Replaced with
    curl|sh install + ~/.pilot/bin/{rendezvous,daemon} invocation.
  - blog/enterprise-phase-3-rbac-policies-audit-fleet.astro: PILOT_RC=1
    snippet replaced with --channel edge (the new canonical form). The
    legacy env var still works in install.sh, but docs lead with flags.
  - for/compatibility.astro: hardcoded v1.10.3 release link replaced with
    /releases/latest.
@TeoSlayer TeoSlayer merged commit 6ca124b into main May 29, 2026
2 checks passed
@TeoSlayer TeoSlayer deleted the install-sh-version-manifest branch July 13, 2026 07:58
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.

2 participants