From 0266e22379c822e9ffa6e7bd7b071914ebe497bd Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Tue, 13 Jan 2026 16:49:52 +0100 Subject: [PATCH 1/7] Add CHANGELOG and crate READMEs - Add CHANGELOG.md documenting 0.1.0 and 0.2.0 releases with contributor credits and PR links - Add README.md to each crate linking to the changelog - Link READMEs in Cargo.toml files - Add repository field to -sys crates that were missing it - Update top-level README to reference changelog and reflect -sys crate split - Document changelog update step in release process --- CHANGELOG.md | 83 ++++++++++++++++++++++++++++ README.md | 3 +- doc/maintainers/release.md | 11 +++- nix-bindings-bdwgc-sys/Cargo.toml | 2 + nix-bindings-bdwgc-sys/README.md | 4 ++ nix-bindings-expr-sys/Cargo.toml | 2 + nix-bindings-expr-sys/README.md | 4 ++ nix-bindings-expr/Cargo.toml | 1 + nix-bindings-expr/README.md | 7 +++ nix-bindings-fetchers-sys/Cargo.toml | 2 + nix-bindings-fetchers-sys/README.md | 4 ++ nix-bindings-fetchers/Cargo.toml | 1 + nix-bindings-fetchers/README.md | 7 +++ nix-bindings-flake-sys/Cargo.toml | 2 + nix-bindings-flake-sys/README.md | 4 ++ nix-bindings-flake/Cargo.toml | 1 + nix-bindings-flake/README.md | 7 +++ nix-bindings-store-sys/Cargo.toml | 2 + nix-bindings-store-sys/README.md | 4 ++ nix-bindings-store/Cargo.toml | 1 + nix-bindings-store/README.md | 7 +++ nix-bindings-util-sys/Cargo.toml | 1 + nix-bindings-util-sys/README.md | 4 ++ nix-bindings-util/Cargo.toml | 1 + nix-bindings-util/README.md | 7 +++ 25 files changed, 170 insertions(+), 2 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 nix-bindings-expr/README.md create mode 100644 nix-bindings-fetchers/README.md create mode 100644 nix-bindings-flake/README.md create mode 100644 nix-bindings-store/README.md create mode 100644 nix-bindings-util/README.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..7c8ea3a --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,83 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [0.2.0] - 2026-01-13 + +### Added + +- Workaround for automatic C library input propagation in downstream Nix builds. ([#27] by [@roberth]) +- `EvalStateBuilder::load_ambient_settings()` to control whether global Nix settings are loaded. ([#36] by [@roberth]) + +### Fixed + +- Path coercion failing with "path does not exist" errors due to missing `eval_state_builder_load()` call. ([#36] by [@aanderse]) + +### Changed + +- Split `nix-bindings-util-sys` (which contained all low-level FFI bindings) into separate per-library `*-sys` crates. ([#27] by [@Ericson2314]) + This allows downstream crates to depend on just the low-level bindings they need without pulling in higher-level crates. + +## [0.1.0] - 2026-01-12 + +Initial release, extracted from the [nixops4 repository](https://github.com/nixops4/nixops4). + +### Added + +- `nix-bindings-store`: Rust bindings for Nix store operations + - Store opening (auto, from URI, from environment) + - Store path parsing and manipulation + - `Store::get_fs_closure` ([#12] by [@RossComputerGuy], [@roberth]) + - `Clone` for `Derivation` ([#25] by [@Ericson2314]) + - Store deduplication workaround for [nix#11979] + - aarch64 ABI support ([#26] by [@RossComputerGuy]) +- `nix-bindings-expr`: Rust bindings for Nix expression evaluation + - `EvalState` for evaluating Nix expressions + - Value creation (int, string, attrs, thunks, primops, etc.) + - Value inspection/extraction (`require_*` functions) + - Attribute selection and manipulation + - Thread registration for GC safety +- `nix-bindings-fetchers`: Rust bindings for Nix fetchers +- `nix-bindings-flake`: Rust bindings for Nix flake operations + - Flake locking + - Flake overriding +- `nix-bindings-util`: Shared utilities + - Context management for Nix C API error handling + - Settings access +- `nix-bindings-util-sys`: Low-level FFI bindings for all Nix C libraries + +### Contributors + +Thanks to everyone who contributed to the initial development, some of whom may not be listed with individual changes above: + +- [@aanderse] +- [@Ericson2314] +- [@ErinvanderVeen] +- [@numinit] +- [@prednaz] +- [@Radvendii] +- [@roberth] +- [@RossComputerGuy] + + + +[@aanderse]: https://github.com/aanderse +[@Ericson2314]: https://github.com/Ericson2314 +[@ErinvanderVeen]: https://github.com/ErinvanderVeen +[@numinit]: https://github.com/numinit +[@prednaz]: https://github.com/prednaz +[@Radvendii]: https://github.com/Radvendii +[@roberth]: https://github.com/roberth +[@RossComputerGuy]: https://github.com/RossComputerGuy + +[#12]: https://github.com/nixops4/nix-bindings-rust/pull/12 +[#25]: https://github.com/nixops4/nix-bindings-rust/pull/25 +[#26]: https://github.com/nixops4/nix-bindings-rust/pull/26 +[#27]: https://github.com/nixops4/nix-bindings-rust/pull/27 +[#36]: https://github.com/nixops4/nix-bindings-rust/pull/36 +[0.2.0]: https://github.com/nixops4/nix-bindings-rust/compare/0.1.0...0.2.0 +[0.1.0]: https://github.com/nixops4/nix-bindings-rust/releases/tag/0.1.0 +[nix#11979]: https://github.com/NixOS/nix/issues/11979 diff --git a/README.md b/README.md index 44c0975..ad6f2ac 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ This workspace provides multiple crates that wrap different layers of the Nix C - **`nix-bindings-flake`** - Flake operations - **`nix-bindings-fetchers`** - Fetcher functionality (requires Nix ≥ 2.29) -The `nix-bindings-util-sys` crate contains the generated FFI bindings and is not intended for direct use. +The `*-sys` crates contain generated FFI bindings and are not intended for direct use. ## Features @@ -211,6 +211,7 @@ For VSCode, load the dev shell via Nix Env Selector extension or direnv. ## Documentation +- [Changelog](CHANGELOG.md) - [Nix C API Reference][C API] - [nix-cargo-integration][nix-cargo-integration] - [Hacking Guide](doc/hacking/test-ffi.md) diff --git a/doc/maintainers/release.md b/doc/maintainers/release.md index 59056dd..3b0f03b 100644 --- a/doc/maintainers/release.md +++ b/doc/maintainers/release.md @@ -1,9 +1,18 @@ - # Release process This project uses simple tags, that trigger a release of all crates using Hercules CI. See [HCI Effects cargo publish workflow]. +## Before tagging + +- Update `CHANGELOG.md`: + - Make sure the Unreleased section is up to date + - Change it to the new version and release date + +## After tagging + +- Add a new Unreleased section to `CHANGELOG.md` + Dissatisfied with the coarse grained release process? Complain to @roberth and he'll get it done for you. [HCI Effects cargo publish workflow]: https://docs.hercules-ci.com/hercules-ci-effects/reference/flake-parts/cargo-publish/#_releasing_a_version diff --git a/nix-bindings-bdwgc-sys/Cargo.toml b/nix-bindings-bdwgc-sys/Cargo.toml index bf75ca7..ff4bc1e 100644 --- a/nix-bindings-bdwgc-sys/Cargo.toml +++ b/nix-bindings-bdwgc-sys/Cargo.toml @@ -4,6 +4,8 @@ version = "0.2.0" edition = "2021" build = "build.rs" license = "LGPL-2.1" +repository = "https://github.com/nixops4/nix-bindings-rust" +readme = "README.md" [lib] path = "src/lib.rs" diff --git a/nix-bindings-bdwgc-sys/README.md b/nix-bindings-bdwgc-sys/README.md index 3723e90..80988a5 100644 --- a/nix-bindings-bdwgc-sys/README.md +++ b/nix-bindings-bdwgc-sys/README.md @@ -2,3 +2,7 @@ This crate contains generated bindings for the Boehm-Demers-Weiser garbage collector (`bdw-gc`). **You should not have to use this crate directly,** and so you should probably not add it to your dependencies. + +## Changelog + +See the [nix-bindings-rust changelog](https://github.com/nixops4/nix-bindings-rust/blob/main/CHANGELOG.md). diff --git a/nix-bindings-expr-sys/Cargo.toml b/nix-bindings-expr-sys/Cargo.toml index 39518fc..1512326 100644 --- a/nix-bindings-expr-sys/Cargo.toml +++ b/nix-bindings-expr-sys/Cargo.toml @@ -4,6 +4,8 @@ version = "0.2.0" edition = "2021" build = "build.rs" license = "LGPL-2.1" +repository = "https://github.com/nixops4/nix-bindings-rust" +readme = "README.md" [lib] path = "src/lib.rs" diff --git a/nix-bindings-expr-sys/README.md b/nix-bindings-expr-sys/README.md index ccdcc26..906f366 100644 --- a/nix-bindings-expr-sys/README.md +++ b/nix-bindings-expr-sys/README.md @@ -3,3 +3,7 @@ This crate contains generated bindings for the Nix C API (`nix-expr-c`). **You should not have to use this crate directly,** and so you should probably not add it to your dependencies. Instead, use the `nix-bindings-expr` crate, which _should_ be sufficient. + +## Changelog + +See the [nix-bindings-rust changelog](https://github.com/nixops4/nix-bindings-rust/blob/main/CHANGELOG.md). diff --git a/nix-bindings-expr/Cargo.toml b/nix-bindings-expr/Cargo.toml index 4e64c63..f72ea6e 100644 --- a/nix-bindings-expr/Cargo.toml +++ b/nix-bindings-expr/Cargo.toml @@ -6,6 +6,7 @@ build = "build.rs" license = "LGPL-2.1" description = "Rust bindings to Nix expression evaluator" repository = "https://github.com/nixops4/nix-bindings-rust" +readme = "README.md" [lib] path = "src/lib.rs" diff --git a/nix-bindings-expr/README.md b/nix-bindings-expr/README.md new file mode 100644 index 0000000..ebd889a --- /dev/null +++ b/nix-bindings-expr/README.md @@ -0,0 +1,7 @@ +# nix-bindings-expr + +Rust bindings to the Nix expression evaluator. + +## Changelog + +See the [nix-bindings-rust changelog](https://github.com/nixops4/nix-bindings-rust/blob/main/CHANGELOG.md). diff --git a/nix-bindings-fetchers-sys/Cargo.toml b/nix-bindings-fetchers-sys/Cargo.toml index 6101928..a4742c9 100644 --- a/nix-bindings-fetchers-sys/Cargo.toml +++ b/nix-bindings-fetchers-sys/Cargo.toml @@ -4,6 +4,8 @@ version = "0.2.0" edition = "2021" build = "build.rs" license = "LGPL-2.1" +repository = "https://github.com/nixops4/nix-bindings-rust" +readme = "README.md" [lib] path = "src/lib.rs" diff --git a/nix-bindings-fetchers-sys/README.md b/nix-bindings-fetchers-sys/README.md index b403eac..87113b6 100644 --- a/nix-bindings-fetchers-sys/README.md +++ b/nix-bindings-fetchers-sys/README.md @@ -3,3 +3,7 @@ This crate contains generated bindings for the Nix C API (`nix-fetchers-c`). **You should not have to use this crate directly,** and so you should probably not add it to your dependencies. Instead, use the `nix-bindings-fetchers` crate, which _should_ be sufficient. + +## Changelog + +See the [nix-bindings-rust changelog](https://github.com/nixops4/nix-bindings-rust/blob/main/CHANGELOG.md). diff --git a/nix-bindings-fetchers/Cargo.toml b/nix-bindings-fetchers/Cargo.toml index cf216a0..fde4ce5 100644 --- a/nix-bindings-fetchers/Cargo.toml +++ b/nix-bindings-fetchers/Cargo.toml @@ -5,6 +5,7 @@ edition = "2021" license = "LGPL-2.1" description = "Rust bindings to Nix fetchers" repository = "https://github.com/nixops4/nix-bindings-rust" +readme = "README.md" [lib] path = "src/lib.rs" diff --git a/nix-bindings-fetchers/README.md b/nix-bindings-fetchers/README.md new file mode 100644 index 0000000..6d23b13 --- /dev/null +++ b/nix-bindings-fetchers/README.md @@ -0,0 +1,7 @@ +# nix-bindings-fetchers + +Rust bindings to the nix-fetchers library. + +## Changelog + +See the [nix-bindings-rust changelog](https://github.com/nixops4/nix-bindings-rust/blob/main/CHANGELOG.md). diff --git a/nix-bindings-flake-sys/Cargo.toml b/nix-bindings-flake-sys/Cargo.toml index e53bbe4..ecc3e99 100644 --- a/nix-bindings-flake-sys/Cargo.toml +++ b/nix-bindings-flake-sys/Cargo.toml @@ -4,6 +4,8 @@ version = "0.2.0" edition = "2021" build = "build.rs" license = "LGPL-2.1" +repository = "https://github.com/nixops4/nix-bindings-rust" +readme = "README.md" [lib] path = "src/lib.rs" diff --git a/nix-bindings-flake-sys/README.md b/nix-bindings-flake-sys/README.md index 10a9d96..84114d7 100644 --- a/nix-bindings-flake-sys/README.md +++ b/nix-bindings-flake-sys/README.md @@ -3,3 +3,7 @@ This crate contains generated bindings for the Nix C API (`nix-flake-c`). **You should not have to use this crate directly,** and so you should probably not add it to your dependencies. Instead, use the `nix-bindings-flake` crate, which _should_ be sufficient. + +## Changelog + +See the [nix-bindings-rust changelog](https://github.com/nixops4/nix-bindings-rust/blob/main/CHANGELOG.md). diff --git a/nix-bindings-flake/Cargo.toml b/nix-bindings-flake/Cargo.toml index 78e8460..30a426d 100644 --- a/nix-bindings-flake/Cargo.toml +++ b/nix-bindings-flake/Cargo.toml @@ -5,6 +5,7 @@ edition = "2021" license = "LGPL-2.1" description = "Rust bindings to Nix flakes" repository = "https://github.com/nixops4/nix-bindings-rust" +readme = "README.md" [lib] path = "src/lib.rs" diff --git a/nix-bindings-flake/README.md b/nix-bindings-flake/README.md new file mode 100644 index 0000000..6fda25d --- /dev/null +++ b/nix-bindings-flake/README.md @@ -0,0 +1,7 @@ +# nix-bindings-flake + +Rust bindings to Nix flakes. + +## Changelog + +See the [nix-bindings-rust changelog](https://github.com/nixops4/nix-bindings-rust/blob/main/CHANGELOG.md). diff --git a/nix-bindings-store-sys/Cargo.toml b/nix-bindings-store-sys/Cargo.toml index c098860..c1e03f2 100644 --- a/nix-bindings-store-sys/Cargo.toml +++ b/nix-bindings-store-sys/Cargo.toml @@ -4,6 +4,8 @@ version = "0.2.0" edition = "2021" build = "build.rs" license = "LGPL-2.1" +repository = "https://github.com/nixops4/nix-bindings-rust" +readme = "README.md" [lib] path = "src/lib.rs" diff --git a/nix-bindings-store-sys/README.md b/nix-bindings-store-sys/README.md index 73138ee..31a2d7e 100644 --- a/nix-bindings-store-sys/README.md +++ b/nix-bindings-store-sys/README.md @@ -3,3 +3,7 @@ This crate contains generated bindings for the Nix C API (`nix-store-c`). **You should not have to use this crate directly,** and so you should probably not add it to your dependencies. Instead, use the `nix-bindings-store` crate, which _should_ be sufficient. + +## Changelog + +See the [nix-bindings-rust changelog](https://github.com/nixops4/nix-bindings-rust/blob/main/CHANGELOG.md). diff --git a/nix-bindings-store/Cargo.toml b/nix-bindings-store/Cargo.toml index e0ed8a0..8a018dd 100644 --- a/nix-bindings-store/Cargo.toml +++ b/nix-bindings-store/Cargo.toml @@ -6,6 +6,7 @@ build = "build.rs" license = "LGPL-2.1" description = "Rust bindings to Nix store library" repository = "https://github.com/nixops4/nix-bindings-rust" +readme = "README.md" [lib] path = "src/lib.rs" diff --git a/nix-bindings-store/README.md b/nix-bindings-store/README.md new file mode 100644 index 0000000..1df35eb --- /dev/null +++ b/nix-bindings-store/README.md @@ -0,0 +1,7 @@ +# nix-bindings-store + +Rust bindings to the Nix store library. + +## Changelog + +See the [nix-bindings-rust changelog](https://github.com/nixops4/nix-bindings-rust/blob/main/CHANGELOG.md). diff --git a/nix-bindings-util-sys/Cargo.toml b/nix-bindings-util-sys/Cargo.toml index e37bf1a..6c38fab 100644 --- a/nix-bindings-util-sys/Cargo.toml +++ b/nix-bindings-util-sys/Cargo.toml @@ -6,6 +6,7 @@ build = "build.rs" license = "LGPL-2.1" description = "Low-level FFI bindings to Nix utility library" repository = "https://github.com/nixops4/nix-bindings-rust" +readme = "README.md" [lib] path = "src/lib.rs" diff --git a/nix-bindings-util-sys/README.md b/nix-bindings-util-sys/README.md index 82debbf..7e762d5 100644 --- a/nix-bindings-util-sys/README.md +++ b/nix-bindings-util-sys/README.md @@ -3,3 +3,7 @@ This crate contains generated bindings for the Nix C API (`nix-util-c`). **You should not have to use this crate directly,** and so you should probably not add it to your dependencies. Instead, use the `nix-bindings-util` crate, which _should_ be sufficient. + +## Changelog + +See the [nix-bindings-rust changelog](https://github.com/nixops4/nix-bindings-rust/blob/main/CHANGELOG.md). diff --git a/nix-bindings-util/Cargo.toml b/nix-bindings-util/Cargo.toml index 6c0d9db..5c68a56 100644 --- a/nix-bindings-util/Cargo.toml +++ b/nix-bindings-util/Cargo.toml @@ -5,6 +5,7 @@ edition = "2021" license = "LGPL-2.1" description = "Rust bindings to Nix utility library" repository = "https://github.com/nixops4/nix-bindings-rust" +readme = "README.md" [lib] path = "src/lib.rs" diff --git a/nix-bindings-util/README.md b/nix-bindings-util/README.md new file mode 100644 index 0000000..895b7cf --- /dev/null +++ b/nix-bindings-util/README.md @@ -0,0 +1,7 @@ +# nix-bindings-util + +Rust bindings to the Nix utility library. + +## Changelog + +See the [nix-bindings-rust changelog](https://github.com/nixops4/nix-bindings-rust/blob/main/CHANGELOG.md). From 0b0bd7013e010cb8eb6a3b45ab4f892873b147b0 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Tue, 13 Jan 2026 16:53:56 +0100 Subject: [PATCH 2/7] nix-bindings-expr: Add version to build-dep for crates.io cargo publish requires all dependencies to have version requirements. The build-dependency on nix-bindings-util was missing one. --- nix-bindings-expr/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nix-bindings-expr/Cargo.toml b/nix-bindings-expr/Cargo.toml index f72ea6e..c9280e4 100644 --- a/nix-bindings-expr/Cargo.toml +++ b/nix-bindings-expr/Cargo.toml @@ -26,7 +26,7 @@ cstr = "0.2" [build-dependencies] pkg-config = "0.3" -nix-bindings-util = { path = "../nix-bindings-util" } +nix-bindings-util = { path = "../nix-bindings-util", version = "0.2.0" } [lints.rust] warnings = "deny" From db5637a44867822dadf3f3fabe49499c0dc1d2ce Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Tue, 13 Jan 2026 17:07:20 +0100 Subject: [PATCH 3/7] Add Unreleased section to CHANGELOG --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c8ea3a..da22679 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [Unreleased] + ## [0.2.0] - 2026-01-13 ### Added @@ -78,6 +80,7 @@ Thanks to everyone who contributed to the initial development, some of whom may [#26]: https://github.com/nixops4/nix-bindings-rust/pull/26 [#27]: https://github.com/nixops4/nix-bindings-rust/pull/27 [#36]: https://github.com/nixops4/nix-bindings-rust/pull/36 +[Unreleased]: https://github.com/nixops4/nix-bindings-rust/compare/0.2.0...HEAD [0.2.0]: https://github.com/nixops4/nix-bindings-rust/compare/0.1.0...0.2.0 [0.1.0]: https://github.com/nixops4/nix-bindings-rust/releases/tag/0.1.0 [nix#11979]: https://github.com/NixOS/nix/issues/11979 From 9b2959d57d46b430e1610e22692bc94878d2cd72 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Tue, 13 Jan 2026 17:10:54 +0100 Subject: [PATCH 4/7] Add missing description fields to -sys crates --- nix-bindings-bdwgc-sys/Cargo.toml | 1 + nix-bindings-expr-sys/Cargo.toml | 1 + nix-bindings-fetchers-sys/Cargo.toml | 1 + nix-bindings-flake-sys/Cargo.toml | 1 + nix-bindings-store-sys/Cargo.toml | 1 + 5 files changed, 5 insertions(+) diff --git a/nix-bindings-bdwgc-sys/Cargo.toml b/nix-bindings-bdwgc-sys/Cargo.toml index ff4bc1e..4516766 100644 --- a/nix-bindings-bdwgc-sys/Cargo.toml +++ b/nix-bindings-bdwgc-sys/Cargo.toml @@ -4,6 +4,7 @@ version = "0.2.0" edition = "2021" build = "build.rs" license = "LGPL-2.1" +description = "Low-level FFI bindings to the Boehm-Demers-Weiser garbage collector" repository = "https://github.com/nixops4/nix-bindings-rust" readme = "README.md" diff --git a/nix-bindings-expr-sys/Cargo.toml b/nix-bindings-expr-sys/Cargo.toml index 1512326..af12a4e 100644 --- a/nix-bindings-expr-sys/Cargo.toml +++ b/nix-bindings-expr-sys/Cargo.toml @@ -4,6 +4,7 @@ version = "0.2.0" edition = "2021" build = "build.rs" license = "LGPL-2.1" +description = "Low-level FFI bindings to the Nix expression evaluator" repository = "https://github.com/nixops4/nix-bindings-rust" readme = "README.md" diff --git a/nix-bindings-fetchers-sys/Cargo.toml b/nix-bindings-fetchers-sys/Cargo.toml index a4742c9..6986909 100644 --- a/nix-bindings-fetchers-sys/Cargo.toml +++ b/nix-bindings-fetchers-sys/Cargo.toml @@ -4,6 +4,7 @@ version = "0.2.0" edition = "2021" build = "build.rs" license = "LGPL-2.1" +description = "Low-level FFI bindings to the nix-fetchers library" repository = "https://github.com/nixops4/nix-bindings-rust" readme = "README.md" diff --git a/nix-bindings-flake-sys/Cargo.toml b/nix-bindings-flake-sys/Cargo.toml index ecc3e99..a04257c 100644 --- a/nix-bindings-flake-sys/Cargo.toml +++ b/nix-bindings-flake-sys/Cargo.toml @@ -4,6 +4,7 @@ version = "0.2.0" edition = "2021" build = "build.rs" license = "LGPL-2.1" +description = "Low-level FFI bindings to Nix flakes" repository = "https://github.com/nixops4/nix-bindings-rust" readme = "README.md" diff --git a/nix-bindings-store-sys/Cargo.toml b/nix-bindings-store-sys/Cargo.toml index c1e03f2..2cbf9e2 100644 --- a/nix-bindings-store-sys/Cargo.toml +++ b/nix-bindings-store-sys/Cargo.toml @@ -4,6 +4,7 @@ version = "0.2.0" edition = "2021" build = "build.rs" license = "LGPL-2.1" +description = "Low-level FFI bindings to the Nix store library" repository = "https://github.com/nixops4/nix-bindings-rust" readme = "README.md" From 5aff417cacb2612d4dce1c23f1cb69d9cf89b7b9 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Tue, 13 Jan 2026 17:39:15 +0100 Subject: [PATCH 5/7] Document release branch workflow --- doc/maintainers/release.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/maintainers/release.md b/doc/maintainers/release.md index 3b0f03b..1555ac0 100644 --- a/doc/maintainers/release.md +++ b/doc/maintainers/release.md @@ -3,6 +3,10 @@ This project uses simple tags, that trigger a release of all crates using Hercules CI. See [HCI Effects cargo publish workflow]. +## Release branch + +Create a `release` branch and PR for release preparation. This allows CI to validate the release before tagging. + ## Before tagging - Update `CHANGELOG.md`: @@ -12,6 +16,9 @@ See [HCI Effects cargo publish workflow]. ## After tagging - Add a new Unreleased section to `CHANGELOG.md` +- Merge the release PR + +--- Dissatisfied with the coarse grained release process? Complain to @roberth and he'll get it done for you. From 9f2c7a2013a208d8eeb7cfad6b763e9b929dc666 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Tue, 13 Jan 2026 17:53:44 +0100 Subject: [PATCH 6/7] Bump version to 0.2.1 for development --- Cargo.lock | 22 +++++++++++----------- nix-bindings-bdwgc-sys/Cargo.toml | 2 +- nix-bindings-expr-sys/Cargo.toml | 6 +++--- nix-bindings-expr/Cargo.toml | 16 ++++++++-------- nix-bindings-fetchers-sys/Cargo.toml | 4 ++-- nix-bindings-fetchers/Cargo.toml | 8 ++++---- nix-bindings-flake-sys/Cargo.toml | 12 ++++++------ nix-bindings-flake/Cargo.toml | 12 ++++++------ nix-bindings-store-sys/Cargo.toml | 4 ++-- nix-bindings-store/Cargo.toml | 10 +++++----- nix-bindings-util-sys/Cargo.toml | 2 +- nix-bindings-util/Cargo.toml | 4 ++-- 12 files changed, 51 insertions(+), 51 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d7f2049..01fe2eb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -210,7 +210,7 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "nix-bindings-bdwgc-sys" -version = "0.2.0" +version = "0.2.1" dependencies = [ "bindgen", "pkg-config", @@ -218,7 +218,7 @@ dependencies = [ [[package]] name = "nix-bindings-expr" -version = "0.2.0" +version = "0.2.1" dependencies = [ "anyhow", "cstr", @@ -236,7 +236,7 @@ dependencies = [ [[package]] name = "nix-bindings-expr-sys" -version = "0.2.0" +version = "0.2.1" dependencies = [ "bindgen", "nix-bindings-store-sys", @@ -246,7 +246,7 @@ dependencies = [ [[package]] name = "nix-bindings-fetchers" -version = "0.2.0" +version = "0.2.1" dependencies = [ "anyhow", "cstr", @@ -259,7 +259,7 @@ dependencies = [ [[package]] name = "nix-bindings-fetchers-sys" -version = "0.2.0" +version = "0.2.1" dependencies = [ "bindgen", "nix-bindings-util-sys", @@ -268,7 +268,7 @@ dependencies = [ [[package]] name = "nix-bindings-flake" -version = "0.2.0" +version = "0.2.1" dependencies = [ "anyhow", "cstr", @@ -284,7 +284,7 @@ dependencies = [ [[package]] name = "nix-bindings-flake-sys" -version = "0.2.0" +version = "0.2.1" dependencies = [ "bindgen", "nix-bindings-bdwgc-sys", @@ -297,7 +297,7 @@ dependencies = [ [[package]] name = "nix-bindings-store" -version = "0.2.0" +version = "0.2.1" dependencies = [ "anyhow", "ctor", @@ -311,7 +311,7 @@ dependencies = [ [[package]] name = "nix-bindings-store-sys" -version = "0.2.0" +version = "0.2.1" dependencies = [ "bindgen", "nix-bindings-util-sys", @@ -320,7 +320,7 @@ dependencies = [ [[package]] name = "nix-bindings-util" -version = "0.2.0" +version = "0.2.1" dependencies = [ "anyhow", "ctor", @@ -329,7 +329,7 @@ dependencies = [ [[package]] name = "nix-bindings-util-sys" -version = "0.2.0" +version = "0.2.1" dependencies = [ "bindgen", "pkg-config", diff --git a/nix-bindings-bdwgc-sys/Cargo.toml b/nix-bindings-bdwgc-sys/Cargo.toml index 4516766..734663e 100644 --- a/nix-bindings-bdwgc-sys/Cargo.toml +++ b/nix-bindings-bdwgc-sys/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nix-bindings-bdwgc-sys" -version = "0.2.0" +version = "0.2.1" edition = "2021" build = "build.rs" license = "LGPL-2.1" diff --git a/nix-bindings-expr-sys/Cargo.toml b/nix-bindings-expr-sys/Cargo.toml index af12a4e..4f8e373 100644 --- a/nix-bindings-expr-sys/Cargo.toml +++ b/nix-bindings-expr-sys/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nix-bindings-expr-sys" -version = "0.2.0" +version = "0.2.1" edition = "2021" build = "build.rs" license = "LGPL-2.1" @@ -12,8 +12,8 @@ readme = "README.md" path = "src/lib.rs" [dependencies] -nix-bindings-util-sys = { path = "../nix-bindings-util-sys", version = "0.2.0" } -nix-bindings-store-sys = { path = "../nix-bindings-store-sys", version = "0.2.0" } +nix-bindings-util-sys = { path = "../nix-bindings-util-sys", version = "0.2.1" } +nix-bindings-store-sys = { path = "../nix-bindings-store-sys", version = "0.2.1" } [build-dependencies] bindgen = "0.69" diff --git a/nix-bindings-expr/Cargo.toml b/nix-bindings-expr/Cargo.toml index c9280e4..616bd96 100644 --- a/nix-bindings-expr/Cargo.toml +++ b/nix-bindings-expr/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nix-bindings-expr" -version = "0.2.0" +version = "0.2.1" edition = "2021" build = "build.rs" license = "LGPL-2.1" @@ -13,12 +13,12 @@ path = "src/lib.rs" [dependencies] anyhow = "1.0" -nix-bindings-store = { path = "../nix-bindings-store", version = "0.2.0" } -nix-bindings-util = { path = "../nix-bindings-util", version = "0.2.0" } -nix-bindings-bdwgc-sys = { path = "../nix-bindings-bdwgc-sys", version = "0.2.0" } -nix-bindings-util-sys = { path = "../nix-bindings-util-sys", version = "0.2.0" } -nix-bindings-store-sys = { path = "../nix-bindings-store-sys", version = "0.2.0" } -nix-bindings-expr-sys = { path = "../nix-bindings-expr-sys", version = "0.2.0" } +nix-bindings-store = { path = "../nix-bindings-store", version = "0.2.1" } +nix-bindings-util = { path = "../nix-bindings-util", version = "0.2.1" } +nix-bindings-bdwgc-sys = { path = "../nix-bindings-bdwgc-sys", version = "0.2.1" } +nix-bindings-util-sys = { path = "../nix-bindings-util-sys", version = "0.2.1" } +nix-bindings-store-sys = { path = "../nix-bindings-store-sys", version = "0.2.1" } +nix-bindings-expr-sys = { path = "../nix-bindings-expr-sys", version = "0.2.1" } lazy_static = "1.4" ctor = "0.2" tempfile = "3.10" @@ -26,7 +26,7 @@ cstr = "0.2" [build-dependencies] pkg-config = "0.3" -nix-bindings-util = { path = "../nix-bindings-util", version = "0.2.0" } +nix-bindings-util = { path = "../nix-bindings-util", version = "0.2.1" } [lints.rust] warnings = "deny" diff --git a/nix-bindings-fetchers-sys/Cargo.toml b/nix-bindings-fetchers-sys/Cargo.toml index 6986909..99ff741 100644 --- a/nix-bindings-fetchers-sys/Cargo.toml +++ b/nix-bindings-fetchers-sys/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nix-bindings-fetchers-sys" -version = "0.2.0" +version = "0.2.1" edition = "2021" build = "build.rs" license = "LGPL-2.1" @@ -12,7 +12,7 @@ readme = "README.md" path = "src/lib.rs" [dependencies] -nix-bindings-util-sys = { path = "../nix-bindings-util-sys", version = "0.2.0" } +nix-bindings-util-sys = { path = "../nix-bindings-util-sys", version = "0.2.1" } [build-dependencies] bindgen = "0.69" diff --git a/nix-bindings-fetchers/Cargo.toml b/nix-bindings-fetchers/Cargo.toml index fde4ce5..e0d06cb 100644 --- a/nix-bindings-fetchers/Cargo.toml +++ b/nix-bindings-fetchers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nix-bindings-fetchers" -version = "0.2.0" +version = "0.2.1" edition = "2021" license = "LGPL-2.1" description = "Rust bindings to Nix fetchers" @@ -12,9 +12,9 @@ path = "src/lib.rs" [dependencies] anyhow = "1.0" -nix-bindings-store = { path = "../nix-bindings-store", version = "0.2.0" } -nix-bindings-util = { path = "../nix-bindings-util", version = "0.2.0" } -nix-bindings-fetchers-sys = { path = "../nix-bindings-fetchers-sys", version = "0.2.0" } +nix-bindings-store = { path = "../nix-bindings-store", version = "0.2.1" } +nix-bindings-util = { path = "../nix-bindings-util", version = "0.2.1" } +nix-bindings-fetchers-sys = { path = "../nix-bindings-fetchers-sys", version = "0.2.1" } ctor = "0.2" tempfile = "3.10" cstr = "0.2" diff --git a/nix-bindings-flake-sys/Cargo.toml b/nix-bindings-flake-sys/Cargo.toml index a04257c..fe83419 100644 --- a/nix-bindings-flake-sys/Cargo.toml +++ b/nix-bindings-flake-sys/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nix-bindings-flake-sys" -version = "0.2.0" +version = "0.2.1" edition = "2021" build = "build.rs" license = "LGPL-2.1" @@ -12,11 +12,11 @@ readme = "README.md" path = "src/lib.rs" [dependencies] -nix-bindings-util-sys = { path = "../nix-bindings-util-sys", version = "0.2.0" } -nix-bindings-store-sys = { path = "../nix-bindings-store-sys", version = "0.2.0" } -nix-bindings-expr-sys = { path = "../nix-bindings-expr-sys", version = "0.2.0" } -nix-bindings-fetchers-sys = { path = "../nix-bindings-fetchers-sys", version = "0.2.0" } -nix-bindings-bdwgc-sys = { path = "../nix-bindings-bdwgc-sys", version = "0.2.0" } +nix-bindings-util-sys = { path = "../nix-bindings-util-sys", version = "0.2.1" } +nix-bindings-store-sys = { path = "../nix-bindings-store-sys", version = "0.2.1" } +nix-bindings-expr-sys = { path = "../nix-bindings-expr-sys", version = "0.2.1" } +nix-bindings-fetchers-sys = { path = "../nix-bindings-fetchers-sys", version = "0.2.1" } +nix-bindings-bdwgc-sys = { path = "../nix-bindings-bdwgc-sys", version = "0.2.1" } [build-dependencies] bindgen = "0.69" diff --git a/nix-bindings-flake/Cargo.toml b/nix-bindings-flake/Cargo.toml index 30a426d..5222133 100644 --- a/nix-bindings-flake/Cargo.toml +++ b/nix-bindings-flake/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nix-bindings-flake" -version = "0.2.0" +version = "0.2.1" edition = "2021" license = "LGPL-2.1" description = "Rust bindings to Nix flakes" @@ -12,11 +12,11 @@ path = "src/lib.rs" [dependencies] anyhow = "1.0" -nix-bindings-expr = { path = "../nix-bindings-expr", version = "0.2.0" } -nix-bindings-fetchers = { path = "../nix-bindings-fetchers", version = "0.2.0" } -nix-bindings-store = { path = "../nix-bindings-store", version = "0.2.0" } -nix-bindings-util = { path = "../nix-bindings-util", version = "0.2.0" } -nix-bindings-flake-sys = { path = "../nix-bindings-flake-sys", version = "0.2.0" } +nix-bindings-expr = { path = "../nix-bindings-expr", version = "0.2.1" } +nix-bindings-fetchers = { path = "../nix-bindings-fetchers", version = "0.2.1" } +nix-bindings-store = { path = "../nix-bindings-store", version = "0.2.1" } +nix-bindings-util = { path = "../nix-bindings-util", version = "0.2.1" } +nix-bindings-flake-sys = { path = "../nix-bindings-flake-sys", version = "0.2.1" } lazy_static = "1.4" ctor = "0.2" tempfile = "3.10" diff --git a/nix-bindings-store-sys/Cargo.toml b/nix-bindings-store-sys/Cargo.toml index 2cbf9e2..3bc2bb5 100644 --- a/nix-bindings-store-sys/Cargo.toml +++ b/nix-bindings-store-sys/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nix-bindings-store-sys" -version = "0.2.0" +version = "0.2.1" edition = "2021" build = "build.rs" license = "LGPL-2.1" @@ -12,7 +12,7 @@ readme = "README.md" path = "src/lib.rs" [dependencies] -nix-bindings-util-sys = { path = "../nix-bindings-util-sys", version = "0.2.0" } +nix-bindings-util-sys = { path = "../nix-bindings-util-sys", version = "0.2.1" } [build-dependencies] bindgen = "0.69" diff --git a/nix-bindings-store/Cargo.toml b/nix-bindings-store/Cargo.toml index 8a018dd..c665a0e 100644 --- a/nix-bindings-store/Cargo.toml +++ b/nix-bindings-store/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nix-bindings-store" -version = "0.2.0" +version = "0.2.1" edition = "2021" build = "build.rs" license = "LGPL-2.1" @@ -13,9 +13,9 @@ path = "src/lib.rs" [dependencies] anyhow = "1.0" -nix-bindings-util = { path = "../nix-bindings-util", version = "0.2.0" } -nix-bindings-util-sys = { path = "../nix-bindings-util-sys", version = "0.2.0" } -nix-bindings-store-sys = { path = "../nix-bindings-store-sys", version = "0.2.0" } +nix-bindings-util = { path = "../nix-bindings-util", version = "0.2.1" } +nix-bindings-util-sys = { path = "../nix-bindings-util-sys", version = "0.2.1" } +nix-bindings-store-sys = { path = "../nix-bindings-store-sys", version = "0.2.1" } lazy_static = "1.4" [dev-dependencies] @@ -25,7 +25,7 @@ tempfile = "3.10" [build-dependencies] pkg-config = "0.3" # Needed for version parsing in build.rs -nix-bindings-util = { path = "../nix-bindings-util", version = "0.2.0" } +nix-bindings-util = { path = "../nix-bindings-util", version = "0.2.1" } [lints.rust] warnings = "deny" diff --git a/nix-bindings-util-sys/Cargo.toml b/nix-bindings-util-sys/Cargo.toml index 6c38fab..7a0d01c 100644 --- a/nix-bindings-util-sys/Cargo.toml +++ b/nix-bindings-util-sys/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nix-bindings-util-sys" -version = "0.2.0" +version = "0.2.1" edition = "2021" build = "build.rs" license = "LGPL-2.1" diff --git a/nix-bindings-util/Cargo.toml b/nix-bindings-util/Cargo.toml index 5c68a56..6a32fb1 100644 --- a/nix-bindings-util/Cargo.toml +++ b/nix-bindings-util/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nix-bindings-util" -version = "0.2.0" +version = "0.2.1" edition = "2021" license = "LGPL-2.1" description = "Rust bindings to Nix utility library" @@ -12,7 +12,7 @@ path = "src/lib.rs" [dependencies] anyhow = "1.0" -nix-bindings-util-sys = { path = "../nix-bindings-util-sys", version = "0.2.0" } +nix-bindings-util-sys = { path = "../nix-bindings-util-sys", version = "0.2.1" } [dev-dependencies] ctor = "0.2" From b8c741dfe954575f8d8ba8b1397083c96677bc98 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Tue, 13 Jan 2026 17:59:56 +0100 Subject: [PATCH 7/7] Document release process in full Adopted the complete workflow from the HCI Effects cargo publish documentation rather than referencing it, making the steps explicit and self-contained. --- doc/maintainers/release.md | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/doc/maintainers/release.md b/doc/maintainers/release.md index 1555ac0..2d04d96 100644 --- a/doc/maintainers/release.md +++ b/doc/maintainers/release.md @@ -1,22 +1,20 @@ # Release process This project uses simple tags, that trigger a release of all crates using Hercules CI. -See [HCI Effects cargo publish workflow]. +Based on the [HCI Effects cargo publish workflow]. -## Release branch +## Steps -Create a `release` branch and PR for release preparation. This allows CI to validate the release before tagging. - -## Before tagging - -- Update `CHANGELOG.md`: - - Make sure the Unreleased section is up to date - - Change it to the new version and release date - -## After tagging - -- Add a new Unreleased section to `CHANGELOG.md` -- Merge the release PR +1. Create a `release` branch +2. Decide the version bump (patch for fixes, minor for features, major for breaking changes) +3. Update `CHANGELOG.md`: make sure the Unreleased section is up to date, then change it to the new version and release date +4. Open a draft release PR and wait for CI to pass +5. Create and push a tag matching the version +6. Add a new Unreleased section to `CHANGELOG.md` +7. Bump version in all `Cargo.toml` files to the next patch version (e.g., `0.2.0` → `0.2.1`) + and run `cargo update --workspace` to update `Cargo.lock`, + so that `cargo publish --dry-run` passes on subsequent commits +8. Merge the release PR ---