Merge pull request #40 from nixops4/release

Release, add CHANGELOG and crate READMEs
This commit is contained in:
Robert Hensing 2026-01-13 18:56:02 +01:00 committed by GitHub
commit a4ebec56de
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
26 changed files with 235 additions and 54 deletions

86
CHANGELOG.md Normal file
View file

@ -0,0 +1,86 @@
# 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).
## [Unreleased]
## [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]
<!-- end of 0.1.0 release section -->
[@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
[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

22
Cargo.lock generated
View file

@ -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",

View file

@ -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)

View file

@ -1,8 +1,22 @@
# 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].
## Steps
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
---
Dissatisfied with the coarse grained release process? Complain to @roberth and he'll get it done for you.

View file

@ -1,9 +1,12 @@
[package]
name = "nix-bindings-bdwgc-sys"
version = "0.2.0"
version = "0.2.1"
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"
[lib]
path = "src/lib.rs"

View file

@ -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).

View file

@ -1,16 +1,19 @@
[package]
name = "nix-bindings-expr-sys"
version = "0.2.0"
version = "0.2.1"
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"
[lib]
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"

View file

@ -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).

View file

@ -1,23 +1,24 @@
[package]
name = "nix-bindings-expr"
version = "0.2.0"
version = "0.2.1"
edition = "2021"
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"
[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"
@ -25,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.1" }
[lints.rust]
warnings = "deny"

View file

@ -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).

View file

@ -1,15 +1,18 @@
[package]
name = "nix-bindings-fetchers-sys"
version = "0.2.0"
version = "0.2.1"
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"
[lib]
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"

View file

@ -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).

View file

@ -1,19 +1,20 @@
[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"
repository = "https://github.com/nixops4/nix-bindings-rust"
readme = "README.md"
[lib]
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"

View file

@ -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).

View file

@ -1,19 +1,22 @@
[package]
name = "nix-bindings-flake-sys"
version = "0.2.0"
version = "0.2.1"
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"
[lib]
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"

View file

@ -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).

View file

@ -1,21 +1,22 @@
[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"
repository = "https://github.com/nixops4/nix-bindings-rust"
readme = "README.md"
[lib]
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"

View file

@ -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).

View file

@ -1,15 +1,18 @@
[package]
name = "nix-bindings-store-sys"
version = "0.2.0"
version = "0.2.1"
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"
[lib]
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"

View file

@ -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).

View file

@ -1,20 +1,21 @@
[package]
name = "nix-bindings-store"
version = "0.2.0"
version = "0.2.1"
edition = "2021"
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"
[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]
@ -24,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"

View file

@ -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).

View file

@ -1,11 +1,12 @@
[package]
name = "nix-bindings-util-sys"
version = "0.2.0"
version = "0.2.1"
edition = "2021"
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"

View file

@ -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).

View file

@ -1,17 +1,18 @@
[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"
repository = "https://github.com/nixops4/nix-bindings-rust"
readme = "README.md"
[lib]
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"

View file

@ -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).