Skip to main content

How It Works

The anodizer release pipeline explained

When you run anodizer release, the following stages execute in order:

Pipeline stages

build → archive → nfpm → checksum → changelog → release → publish → docker → sign → announce

Each stage is independent — if you skip a stage with --skip, downstream stages still work with whatever artifacts exist.

1. Build

Compiles your Rust binary for each configured target triple. Anodizer auto-detects the best cross-compilation strategy:

  • cargo — native compilation (same-platform targets only)
  • cargo-zigbuild — cross-compilation via Zig's linker
  • cross — cross-compilation via Docker containers

You can override with cross: zigbuild or cross: cross in your config.

2. Archive

Packages each built binary into an archive. Supported formats: tar.gz, tar.xz, tar.zst, zip, binary (raw, no archive). You can set format overrides per OS — e.g., zip for Windows, tar.gz for everything else.

3. nFPM

Generates Linux packages (.deb, .rpm, .apk) using nFPM. Includes package metadata, install scripts, file contents, and dependencies.

4. Checksum

Computes checksums for all artifacts. Supported algorithms: SHA-1, SHA-224, SHA-256 (default), SHA-384, SHA-512, BLAKE2b, BLAKE2s.

5. Changelog

Generates a changelog from git commits between the previous tag and the current tag. Supports conventional commit parsing, regex filters, and custom grouping.

6. Release

Creates a GitHub release (or updates an existing draft). Uploads all artifacts as release assets. Supports draft mode, prerelease detection, make_latest, and custom release names with header/footer templates.

7. Publish

Publishes to package managers:

  • crates.io — with dependency-aware ordering for workspace crates
  • Homebrew — generates a Ruby formula and pushes to your tap repo
  • Scoop — generates a JSON manifest and pushes to your bucket repo

8. Docker

Builds and pushes Docker images via docker buildx. Supports multi-arch builds, tag templates, build flags, and extra files.

9. Sign

Signs artifacts using GPG or cosign. Supports multiple signing configs with different artifact filters.

10. Announce

Sends notifications to Discord, Slack, or generic webhooks with templated messages.

Artifact tracking

Every stage registers its outputs as artifacts. Later stages can reference and filter artifacts by kind (binary, archive, checksum, package, etc.). This is how the release stage knows which files to upload — it collects all artifacts generated by previous stages.

Config resolution

Anodizer searches for config files in this order:

  1. Path specified by --config / -f flag
  2. .anodizer.yaml in the current directory
  3. .anodizer.yml in the current directory
  4. .anodizer.toml in the current directory
  5. anodizer.yaml in the current directory
  6. anodizer.yml in the current directory
  7. anodizer.toml in the current directory