tinfoil
Release automation for Burrito-based Elixir CLIs. Tag a version, tinfoil ships the binaries.
What you get
A pushed v* tag produces:
- Cross-compiled binaries for darwin (arm64, x86_64), linux (arm64, x86_64 musl), and windows (x86_64), built on GitHub Actions and cross-compiled via Zig (no native ARM or Windows runner needed).
- A GitHub Release with every archive attached, a combined
checksums-sha256.txt, and build-provenance attestations. - An optional
curl | shinstaller (Unix) andiex (irm ...)installer (Windows). - An optional Homebrew formula pushed to your tap (macOS + Linux via Linuxbrew).
- An optional Scoop manifest pushed to your bucket (Windows).
- A regeneratable workflow --
mix tinfoil.generaterewrites.github/workflows/release.ymlfrom yourmix.exsconfig, so upgrading tinfoil upgrades the pipeline.
All configured via one :tinfoil keyword in mix.exs; no
hand-edited YAML. See
tinfoil_demo for
a full working project.
Status: pre-1.0. The mix tasks, workflow template, and Hex publish loop are all in place and dogfooded against a real Burrito project. Defaults and target strategies are still evolving -- pin to an exact minor version if you need stability.
Quick start
On a fresh mix new project:
mix tinfoil.init --install # splices dep + starter config into mix.exs
mix tinfoil.init # generates .github/workflows/release.yml
git add . && git commit -m "feat: add tinfoil"
git tag v0.1.0 && git push --follow-tags
That is the whole flow. Every subsequent tagged push produces a full release.
To also automate the version-bumping side with release-please (so tagging becomes "merge the release PR"), see the release-please guide.
Documentation
Full docs live on hexdocs.pm/tinfoil:
| Guide | What's in it |
|---|---|
| Getting started | Install, configure, first release, Application callback pattern. |
| Configuration | Every option in the :tinfoil keyword. |
| Targets and runners | Target matrix, Burrito target resolution, cross-compilation, NIFs. |
| Distribution | Homebrew, Scoop, installers, prerelease handling, attestations. |
| Automatic releases with release-please | Wiring release-please to tinfoil; the GITHUB_TOKEN gotcha and three fixes. |
| Mix tasks | Task reference. |
Related projects
- Burrito -- builds self-contained Elixir binaries. Required peer dependency.
- cargo-dist -- the equivalent tool in the Rust/Cargo ecosystem. Tinfoil borrows the pattern of a generated CI workflow that calls back into the tool via mix tasks, so upgrading the tool upgrades the pipeline.
License
MIT.