with one click
publish
Publish crates to crates.io with pre-flight checks
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Publish crates to crates.io with pre-flight checks
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Bump the manifold3d pin, add FFI + safe wrappers for new upstream C API functions, bump versions, open a PR
Run a deep code review across the manifold-csg crates
Run a deep code review across the manifold-csg crates
Push a branch and open a PR with pre-flight checks
| name | publish |
| description | Publish crates to crates.io with pre-flight checks |
| user-invocable | true |
Publish our 4 crates to crates.io with pre-flight validation. The workspace
has two canonical crates (manifold-csg-sys, manifold-csg) and two thin
facade re-exports (manifold3d-sys, manifold3d) under the same version
numbers. Facades always ship in lockstep with their canonical counterparts
via = version pins.
--dry-run: run all checks but don't actually publishRun all checks before publishing. Stop on first failure.
git status
Must be on main with no uncommitted changes. Refuse to publish from a feature branch.
cargo test --features nalgebra
cargo clippy --all-targets --all-features -- -D warnings
Version bumps happen at publish time, not in feature PRs. Read CLAUDE.md for the versioning scheme, then:
curl -sS https://crates.io/api/v1/crates/manifold-csg | python3 -c "import json,sys; print(json.load(sys.stdin)['crate']['max_version'])"
curl -sS https://crates.io/api/v1/crates/manifold-csg-sys | python3 -c "import json,sys; print(json.load(sys.stdin)['crate']['max_version'])"
If the in-repo version is already ahead of the published version, it's pre-bumped — DO NOT bump again. Subsequent feature PRs ride into the pre-bumped version. (Pitfall: assuming the workspace version is the published version. They diverge whenever a PR includes its own bump, which CLAUDE.md says PRs "usually should" do.)manifold-csg-sys: bump the patch component (e.g., 3.4.102 → 3.4.103) whenever the upstream contents differ from the last publish — pinned commit changed, carry-patches added/removed, or FFI declarations changed. If the upstream major.minor changed (new manifold3d release), update major.minor accordingly.manifold-csg (workspace version): bump patch for additive changes, minor for breaking changes (pre-1.0, minor bumps can break).manifold3d-sys version must match the new manifold-csg-sys version exactly (= pin).manifold3d inherits the workspace version, so bumps automatically. Its manifold-csg dependency = pin must be updated to the new workspace version.manifold-csg's manifold-csg-sys dependency version to match. Update manifold3d-sys's manifold-csg-sys = pin and manifold3d's manifold-csg = pin.For each patch in crates/manifold-csg-sys/patches/:
gh api)We don't keep a CHANGELOG file (it gets stale; git log + GitHub Releases cover the same ground). Tag the release after publishing — GitHub auto-generates release notes from PRs since the last tag:
git tag -a v<version> -m "Release <version>"
git push origin v<version>
Run a dry run for each crate in publish order:
cargo publish --dry-run -p manifold-csg-sys
cargo publish --dry-run -p manifold3d-sys
cargo publish --dry-run -p manifold-csg
cargo publish --dry-run -p manifold3d
Facade dry runs will fail if their canonical counterparts aren't already on crates.io at the expected version — this is expected for first publish and version bumps. The real dry-run validation for facades happens after their canonical is published.
For each crate, check:
cargo package --list -p <crate> — verify no secrets, build artifacts, or unnecessary files are includedLICENSE-APACHE and LICENSE-MIT must be presentDOCS_RS=1 cargo doc --no-deps --features nalgebra \
-p manifold-csg-sys -p manifold-csg -p manifold3d-sys -p manifold3d
Must build without errors. docs.rs runs with --network=none, so build.rs must detect DOCS_RS and skip the C clone/build.
Before first publish or any version where the public API changed:
pub items in manifold-csg — are any provisional or likely to change?Vec<f64> vs a newtype)0.x.y), minor bumps (0.1.0 → 0.2.0) can contain breaking changes, but patch bumps (0.1.0 → 0.1.1) must be backwards-compatible. Post-1.0, breaking changes require a major bump.cargo doc --features nalgebra --no-deps
Must build without warnings. Spot-check that crate-level docs render correctly.
Only after all checks pass. Always get explicit user confirmation before running cargo publish.
Dependencies must reach crates.io before their dependents:
manifold-csg-sys (no internal deps)manifold3d-sys (facade of manifold-csg-sys)manifold-csg (depends on manifold-csg-sys)manifold3d (facade of manifold-csg)Between each publish, crates.io may take a moment to index the new version. If the next publish fails with "no matching package", wait and retry.
cargo publish -p manifold-csg-sys
cargo publish -p manifold3d-sys
cargo publish -p manifold-csg
cargo publish -p manifold3d
git tag -a v<version> -m "Release <version>" (using the manifold-csg version number — facades share the workspace version)git push origin v<version>= pin in Cargo.toml enforces this)