feat(tvix): add crate2nixGenerate target

`mg run //tvix:crate2nixGenerate --` runs crate2nix generate and
depotfmt's it afterwards.

This removes a frequent point of friction, because the Cargo.nix emitted
by crate2nix needs another formatter.

Change-Id: I649495980718cd3847d4cff77c9d4bfcb599387c
Reviewed-on: https://cl.tvl.fyi/c/depot/+/7612
Tested-by: BuildkiteCI
Reviewed-by: grfn <grfn@gws.fyi>
This commit is contained in:
Florian Klink 2022-12-22 15:44:32 +01:00 committed by flokli
parent 2e04f68df8
commit 40a17acdc1
2 changed files with 11 additions and 9 deletions

View file

@ -14,14 +14,9 @@ single Rust workspace in `//tvix` to maintain the Nix build
configuration. configuration.
When making changes to Cargo dependency configuration in any of the When making changes to Cargo dependency configuration in any of the
Rust projects under `//tvix`, be sure to run `crate2nix generate` in Rust projects under `//tvix`, be sure to run
`//tvix` itself and commit the changes to the generated `Cargo.nix` `mg run //tvix:crate2nixGenerate --` in `//tvix` itself and commit the changes
file. to the generated `Cargo.nix` file.
`crate2nix` is available via `direnv` inside of depot, or can be built
from the `third_party.nixpkgs.crate2nix` attribute of depot. Make sure
to build it from depot to avoid generating files with a different
version that might have different output.
## License structure ## License structure

View file

@ -1,5 +1,5 @@
# Nix helpers for projects under //tvix # Nix helpers for projects under //tvix
{ pkgs, ... }: { pkgs, depot, ... }:
{ {
# Load the crate2nix crate tree. # Load the crate2nix crate tree.
@ -8,6 +8,13 @@
nixpkgs = pkgs.path; nixpkgs = pkgs.path;
}; };
# Run crate2nix generate in the current working directory, then
# format the generated file with depotfmt.
crate2nixGenerate = pkgs.writeShellScriptBin "crate2nix-generate" ''
${pkgs.crate2nix}/bin/crate2nix generate
${depot.tools.depotfmt}/bin/depotfmt Cargo.nix
'';
# Provide a shell for the combined dependencies of all Tvix Rust # Provide a shell for the combined dependencies of all Tvix Rust
# projects. Note that as this is manually maintained it may be # projects. Note that as this is manually maintained it may be
# lacking something, but it is required for some people's workflows. # lacking something, but it is required for some people's workflows.