ptinstall
One bootstrap command for Plumtree:
go run github.com/Ceinl/ptinstall@latest
With no arguments, ptinstall opens an interactive setup that can install or
update pt, run the Plumtree server in the foreground, install the server
binary, or diagnose the local installation.
The same operations are available as scriptable commands:
go run github.com/Ceinl/ptinstall@latest -- pt install
go run github.com/Ceinl/ptinstall@latest -- server run
go run github.com/Ceinl/ptinstall@latest -- server install
go run github.com/Ceinl/ptinstall@latest -- doctor
Pin a Plumtree release when reproducibility matters:
go run github.com/Ceinl/ptinstall@latest -- pt install --version v0.2.0
go run github.com/Ceinl/ptinstall@latest -- server run --version v0.2.0 -- -addr :8080
Design
ptinstall is deliberately thin. Plumtree owns its builds, tests, runtime
configuration, and releases; this repository owns platform detection,
interactive setup, verified downloads, installation, and foreground process
launching.
It does not build Plumtree from source or bake server credentials into public
binaries. It downloads versioned GitHub Release assets, verifies their SHA-256
checksums, and atomically installs them into GOBIN or GOPATH/bin.
Tailscale is not required. Networking and authentication remain Plumtree server
configuration concerns and can be added as optional setup adapters later.
Plumtree release contract
Every Plumtree release consumed by this installer must contain:
checksums.txt
pt-darwin-amd64
pt-darwin-arm64
pt-linux-amd64
pt-linux-arm64
pt-windows-amd64.exe
plumtree-server-darwin-amd64
plumtree-server-darwin-arm64
plumtree-server-linux-amd64
plumtree-server-linux-arm64
plumtree-server-windows-amd64.exe
checksums.txt uses the standard format:
<sha256> <asset-name>
The release repository defaults to Ceinl/plumtree. It can be overridden for
forks and integration tests:
PTINSTALL_REPOSITORY=owner/repository go run . doctor
Private repositories can use GITHUB_TOKEN.
Development
go run .
go test -race ./...
go vet ./...
CI checks formatting, vetting, race-enabled tests, and supported-platform
builds on every pull request and push to main.
Releasing
ptinstall is distributed as Go source, so its releases do not contain binary
assets. Create an annotated semantic-version tag and push it:
git switch main
git pull --ff-only
git tag -a v0.1.0 -m "ptinstall v0.1.0"
git push origin v0.1.0
The release workflow tests the tagged source and creates a GitHub release with
generated notes. Go's module proxy then makes the highest release tag available
through go run github.com/Ceinl/ptinstall@latest. Use a new tag for every
published change; do not move or reuse an existing tag.
The public go run ...@latest command will work after this repository is
created on GitHub and receives its first version tag. Until Plumtree publishes
the release contract above, installation commands intentionally fail rather
than accepting an unverified or incomplete artifact.