Skip to content
All posts
2 min readtebakopackagingtutorial

Basic payloads: Publish to your users (5 of 5)

The basic payloads series, hands-on: publish to your users.

The Tebako team

github.com/tamatebako
Note

Post 5 of 5 in the series Basic payloads.

○ ○ ○ ○ ●

Note

The last subject in this series is the hand-off: getting your payload from your machine to your users'. Three steps — prove it, publish it, let them install it — and every step is a command.

Build your own feedstock recipe + CI release artifacts + registry one YAML file, press one executable shim a command on SHA256SUMS your own repo per platform the user PATH every hop is gated payload checks: the release proves it works before anything downstream sees it no central server anywhere your releases are the store; the registry only mirrors resolution fields

Figure 1 — The pipeline: you build and check the payload, publish it to your own release, and your users install it from your registry.

Prove it: checks

A payload can carry its own acceptance test, declared in its manifest:

checks:
  smoke:
    entry: /bin/myapp
    argv: ["--version"]
    expect: { exit: 0, stdout: ["myapp"] }
    timeout: 30
$ tebako check ./myapp
slice myapp: smoke PASS 2s

A missing prerequisite skips with a reason and never fails; a real failure exits with code 79 and names the expectation that failed. Run the checks in CI and a broken payload cannot reach your users.

Publish it

Publishing writes a registry — one YAML file — onto your own release, with a SHA-256 beside every artifact:

$ tebako publish --name myapp --version 1.0.0 \
    --release tfs:github:acme/myapp:v1.0.0 \
    --payload universal=dist/myapp-1.0.0-universal.tfs
published myapp 1.0.0 -> tfs:github:acme/myapp (tag v1.0.0)
sha256 9f2c…a1  myapp-1.0.0-universal.tfs

No server, no store to submit to: your releases are the registry.

Your users' side

They add your registry once and install — and what they receive is the shim from the first post:

$ tebako add-registry tfs:github:acme/myapp
$ tebako install myapp
$ myapp --version
myapp 1.0.0

Versions are theirs to pin:

$ TEBAKO_MYAPP_VERSION=0.9.2 myapp   # per invocation
$ tebako-shim which myapp            # what resolves right now
$ tebako-shim doctor                 # is everything healthy

A .tebako-tools.yaml file in a project pins versions for the whole project. The shims guide covers the full surface.

What you can do now

You have the complete arc: run a package, make a data payload, package applications — Ruby, Rails, Sinatra — check them, and publish them. When you outgrow the basics, the advanced payloads series picks up exactly here: tracing, jails, image formats, native code, and the most demanding payload in this series.

Note

This is the end of the series Basic payloads. Continue with Advanced payloads, part 1 next.