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
This commit is contained in:
Robert Hensing 2026-01-13 16:49:52 +01:00
parent 95a8d49693
commit 0266e22379
25 changed files with 170 additions and 2 deletions

83
CHANGELOG.md Normal file
View file

@ -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]
<!-- 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
[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

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

View file

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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