
anodizer
io.github.tj-smith47由 GitHub 帳號 tj-smith47 發布v0.30.0更新於 Oct 24, 2026
Rust release tooling — drop-in GoReleaser parity + Rust extras.
概覽
Anodizer 內建的 MCP 伺服器把它的 Rust 發佈命令列工具暴露成工具,讓助理驗證設定、升版、打標籤、建置、發佈並公告一次發佈。
- 可以做什麼
- 檢查與驗證:驗證設定與版本檔案,執行健康檢查、預檢、JSON Schema、標籤解析、目標與詞彙查詢,列出工具。撰寫發佈:產生初始設定、更新變更日誌、升級 crate 版本、建立或回滾標籤。執行發佈:建置、執行完整發佈流程、發佈、提升到穩定通道、續跑中斷的發佈、公告與通知。耗時較長的指令會以任務句柄回傳,可輪詢、串流查看進度並取消。
- 適用情境
- 適合希望由 AI 助理驅動 Rust 專案發佈工作的情境:驗證設定、預覽版本升級或標籤,或執行建置與發佈階段。只啟用 inspect 分組即可得到一個唯讀助理,用來檢查發佈設定。
- 執行需求
- 以本機程序在使用者機器上執行(stdio,或透過 stream 指令使用可串流 HTTP),僅限桌面端。需先安裝 anodizer 命令列工具(Homebrew、cargo 或從原始碼建置)。發佈與發佈階段需要 GITHUB_TOKEN 或 ANODIZER_GITHUB_TOKEN 中的 GitHub 權杖,以及所設定各發佈目標與簽章工具所需的憑證。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 anodizer,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
anodizer
The release pipeline built for Rust — workspace-aware, reproducible, and signed by default.
[CI] [Release] [Docs] [Coverage] [Crates.io] [License: MIT OR Apache-2.0]
Anodizer reads a declarative config file and runs your entire release from a single anodizer release command: build, archive, checksum, changelog, sign, release, publish, and announce. It's built around the Rust ecosystem — Cargo workspaces, Cargo.lock-aware version bumps, crates.io, and byte-reproducible artifacts.
See What works (with proof) for a per-feature status — every "live" claim links to a real published artifact you can verify yourself.
Why anodizer?
Your release is a Cargo workspace — not a bag of loose binaries. anodizer is built that way from the ground up.
- It speaks Cargo. Per-crate release cadences, per-crate tags, and a tag resolver let a single crate and a thirty-crate monorepo share one config.
anodizer tagandanodizer bumprewriteCargo.tomlandCargo.lock, then commit and tag — locally by default, and (on--push) push the bump commit and tag atomically — no orphaned bump commit, no hand-rolledgit push, no lockfile drift. - crates.io, published in the right order. Dependency-aware ordering with sparse-index polling holds each crate until the ones it depends on have propagated — so a workspace publish never races itself into a transient "version not found."
- Cross-compiles without the toolchain tax. musl, glibc, Windows, and macOS from one machine via
cargo-zigbuildorcross. Norustup target addrituals, no per-target CI shards to babysit. - Reproducible — and it proves it. Deterministic artifacts by default, then
anodizer check determinismrebuilds them and byte-compares. "Reproducible" becomes a fact your CI enforces, not a claim in your release notes. - Signing and attestation are first-class. cosign + GPG for binaries, archives, checksums, and images, plus SLSA-style build provenance — wired in a few lines of config.
Then the long tail that Rust authors actually hit: generated per-crate READMEs, cargo-binstall metadata derived straight from your config (no hand-maintained pkg-url that 404s), version_files to pin your docs and install scripts to the released version, and post-release install smoke tests that catch a broken artifact before your users do.
Already know GoReleaser? anodizer's {{ .Field }} template syntax will feel right at home. Moving from cargo-dist, release-plz, or cargo-release? The migration guides map your setup straight over.
Features
Build
- Cross-platform builds via
cargo-zigbuild,cross, or nativecargo build - Per-build hooks (pre/post), environment variables, feature flags, and target overrides
- UPX binary compression with per-target filtering
- Workspace support with per-crate independent release cadences
Package
- Archives in tar.gz, tar.xz, tar.zst, zip, gz, or raw binary format with OS-specific overrides
- Linux packages (.deb, .rpm, .apk, .archlinux, .ipk) via nFPM with full lifecycle scripts
- Snapcraft snaps with prime-dir architecture
- macOS DMG disk images and PKG installers
- Windows MSI and NSIS installers
- Flatpak bundles
- AppImage portable Linux applications
- Makeself self-extracting archives
curl | shinstall-script generation — a per-platform asset table derived from your build/archive config (no hand-maintained URLs to 404), with a checksum-verify gate- Source RPMs (.src.rpm)
- Source archives with file filtering
- SBOM generation (CycloneDX/SPDX)
- Checksums with SHA-256, SHA-512, SHA3, BLAKE2b, BLAKE2s, BLAKE3, CRC32, MD5, and more — combined or split per-artifact sidecars in bare or coreutils (
shasum -c) format
Sign
- GPG and cosign signing for binaries, archives, checksums, Docker images, and SBOMs
- Signed git tags (GPG or SSH) using your existing git signing key
- Multiple independent signing configurations
- Conditional signing via template expressions
- Build provenance attestations (SLSA-style) for binaries and artifacts
Publish
- GitHub/GitLab/Gitea Releases with asset uploads, draft/prerelease detection, header/footer templates; the repository owner and name default to the
originremote - crates.io with dependency-aware ordering and index polling
- Homebrew formula and cask generation
- Homebrew-core formula bump PRs (bump an existing
homebrew-coreformula) - Scoop manifest generation
- Chocolatey package generation
- Winget manifest generation
- AUR PKGBUILD and .SRCINFO generation
- Krew plugin manifest generation
- Nix derivation generation
- SchemaStore catalog registration for editor autocomplete of your config files
- MCP registry server-manifest publishing (Model Context Protocol)
- Docker multi-arch images via
docker buildx - Blob storage uploads (S3, GCS, Azure)
- NPM per-platform binary packages and PyPI native binary wheels
- Keyless OIDC Trusted Publishing for crates.io, npm (with provenance), and PyPI — no stored registry tokens
- Artifactory, Cloudsmith, Fury, Docker Hub
- Custom publisher commands
Announce
- Discord, Slack, Telegram, Teams, Mattermost
- Email, Reddit, Twitter/X, Mastodon, Bluesky, LinkedIn
- OpenCollective, Discourse
- Generic webhooks with custom headers and templates
Advanced
- Tera templates (Jinja2-like) with GoReleaser-compatible
{{ .Field }}syntax - Nightly builds with date-based versioning
- Config includes for shared configuration
- Split/merge CI for fan-out parallel builds
- Monorepo support with independent workspaces
- Auto-tagging from commit message directives
- Reproducible builds with
mod_timestampandbuilds_info - Version-string file syncing (
version_files) to keep docs, scripts, and manifests in lockstep at tag - Cross-publisher track promotion (
anodizer promote) — flip an already-published artifact to a stable track (snapcraft channels, npm dist-tags, OCI floating tags, GitHub prerelease) with no rebuild - Post-release verification with install smoke tests
- GitHub Actions job summary listing every release, pull request, package and image the run published
- JSON Schema for editor autocomplete and validation
- Built-in MCP server (
anodizer mcp) exposing the CLI as annotated tools for AI assistants
Installation
Homebrew (macOS/Linux)
Cargo
From source
Quick Start
For CI-based releases, set GITHUB_TOKEN (or ANODIZER_GITHUB_TOKEN) as a secret — the release pipeline picks it up automatically.
Configuration
Anodizer uses .anodizer.yaml (or .anodizer.toml) in your project root. Add a schema comment for editor autocomplete:
See the full configuration reference and the template reference for all available fields, variables, and filters.
Real-world adoption: cfgd
cfgd — declarative, GitOps-style machine configuration management — is anodizer's first real-world adopter and dogfoods every shipped publisher. It's a 4-crate workspace (shared lib + CLI + Kubernetes operator + CSI driver) that ships to crates.io (dependency-aware ordering), GitHub Releases, Homebrew, Scoop, Chocolatey, Winget, the Snap Store, Krew, GHCR, and via cargo binstall — all from one .anodizer.yaml and one tag push.
A condensed slice of cfgd's .anodizer.yaml:
Every cell of What works (with proof) links to a real published cfgd artifact for the feature in question — that's where the verification lives.
GitHub Actions
Anodizer ships a first-party action, tj-smith47/anodizer-action, which is what this repo dogfoods in its own release.yml:
For split/merge fan-out, GPG key import, registry login, and per-platform variants, see anodizer-action and the live .github/workflows/release.yml in this repo.
MCP server
anodizer mcp serves the CLI to any MCP client — Claude Desktop, VS Code, Cursor,
Zed — over stdio or streamable HTTP, built on brontes.
Every subcommand becomes a tool with its flags as a JSON Schema, so a release can be
driven by an assistant without wrapping anything by hand.
23 tools ship by default (completion and man are shell-prompt artifacts and are
withheld). Three groups narrow that for a client that shouldn't see every tool:
The same --group / --command / --tool flags work on mcp start and mcp stream,
and the editor installers forward them — anodizer mcp claude enable --group inspect
registers a read-only assistant. Each has a --hide- counterpart for subtracting from
the full list instead of selecting into it.
Each tool carries annotations a client can gate on, so a config validation and a publish are distinguishable before either runs:
The six commands that routinely run for minutes — build, check determinism,
continue, promote, publish, release — are handed back as task handles rather
than held-open requests, so a client that speaks the MCP tasks extension can poll,
stream progress, and cancel a running release.
CLI Reference
Failure handling is in-process: a failed anodizer release executes the
release.on_failure policy itself (rollback by default — delete the tag,
revert the bump — auto-degrading to hold once a one-way-door publisher like
crates.io has published), so release workflows need no if: failure() recovery
steps. anodizer tag rollback "$GITHUB_SHA" is the manual recovery command
for killed or held runs. See
Release resilience
for the flag matrix and recovery flows.
Full reference: anodizer --help or the docs site.
Documentation
Full documentation is available at tj-smith47.github.io/anodizer.
Operator guides:
- Release resilience guide - three-group publisher dispatch, Submitter gate, rollback, replay-from-run
- Determinism guide - byte-stability contract,
anodizer check determinismharness, runtime allow-list
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
來源:README.md,提交 6cb440a
工具
0版本歷史
3- v0.30.0最新Oct 15, 2026
- v0.29.0Oct 11, 2026
- v0.28.1Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分