
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 分