crane/CHANGELOG.md
2022-09-07 20:47:33 -07:00

8.0 KiB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

Unreleased

0.6.0 - 2022-09-07

Added

  • Added cargoNextest for running tests via cargo-nextest
  • Added cargoAudit for running cargo-audit with a provided advisory database instance.

Changed

  • Breaking: the --workspace flag is no longer set for all cargo commands by default. The previous behavior can be recovered by setting cargoExtraArgs = "--workspace"; in any derivation.
  • Breaking: the $CARGO_PROFILE environment variable can be used to specify which cargo-profile all invocations use (by default release will be used). Technically breaking if the default command was overridden for any derivation; set CARGO_PROFILE = ""; to avoid telling cargo to use a release build.
  • Breaking: cargoTarpaulin will use the release profile by default
  • Breaking: cargoClippy's cargoClippyExtraArgs now default to "--all-targets" instead of being specified as the cargo command itself. If you have set cargoClippyExtraArgs to an explicit value and wish to retain the previous behavior you should prepend "--all-targets" to it.
  • Breaking: remapSourcePathPrefixHook and the doRemapSourcePathPrefix option have been removed, and the behavior of buildPackage has been updated to break false dependencies on the crate sources from the final binaries (which was the old behavior of the doRemapSourcePathPrefix option). To disable this behavior, set the doNotRemoveReferencesToVendorDir environment variable to any non-empty string.
  • All cargo invocations made during the build are automatically logged
  • Vendoring git dependencies will throw a descriptive error message if a locked revision is missing from Cargo.lock and a hint towards resolution

Fixed

  • Breaking: vendorGitDeps will only include crates referenced by the Cargo.lock file, meaning any extraneous crates which happen to be present in the git repository will be ignored.

0.5.1 - 2022-07-20

Added

  • Added .overrideToolchain as a convenience for using a custom rust toolchain

Fixed

  • Fixed an issue where mkDummySrc would produce incorrect results for filtered sources: #46

0.5.0 - 2022-06-12

Changed

  • Breaking: dropped compatibility for Nix versions below 2.8.1
  • Breaking: updated all flake attributes to follow the new .default guidance as per Nix's warnings. Specifically:
    • Crane's default overlay is now available at .overlays.default (previously .overlay)
    • All templates now use {app,devShells,packages}.default as well
  • Breaking: lib.fromTOML and lib.toTOML have been removed in favor of builtins.fromTOML
  • Improved support for consuming crane without using flakes
  • The nix-std dependency has been dropped

0.4.1 - 2022-05-29

Fixed

  • Dummy source derivations go to greater lengths to only depend on the files they consume. Specifying the entire flake source as an input (e.g. via buildPackage { src = self; }) now avoids rebuilding everything from scratch whenever any file is changed. #28

0.4.0 - 2022-05-10

Changed

  • Breaking: the previously named utils flake input has been renamed to flake-utils
  • buildDepsOnly now adds --all-targets to the default cargo check invocation. This allows caching all artifacts (including from dev-dependencies) such that tools like clippy don't have to generate them every time they run.
  • Templates now use the newer flake format accepted by Nix 2.8 (e.g. {packages,overlays,devShells}.default, etc.)

Fixed

  • Fixed project and template flakes to avoid superfluous follows declaration for flake-utils
  • Fixed quoting of relative paths to allow building with external sources

0.3.3 - 2022-02-24

Fixed

  • Use lib.groupBy if builtins.groupBy isn't available (i.e. if a Nix version earlier than 2.5 is used)
  • The cross compilation example also hows how to set the HOST_CC environment variable which may be required by some build scripts to function properly

0.3.2 - 2022-02-18

Fixed

  • Fixed handling git dependencies whose locked revision is not on the repository's main branch

0.3.1 - 2022-02-17

Added

  • Added template and example for cross compiling to other platforms
  • Added template and example for building static binaries using musl

Changed

  • cargoClippy and cargoTarpaulin will install cargo artifacts by default (or install an empty target directory if there are none). This allows for more easily chaining derivations if doing so is desired.
    • This can be disabled by setting doInstallCargoArtifacts = false; in the derivation

Fixed

  • Fixed an issue where cross compiling would try to needlessly cross compile rustc and cargo themselves

0.3.0 - 2022-02-11

Added

  • downloadCargoPackageFromGit has been added to handle downloading and unpacking a cargo workspace from a git repository
  • vendorCargoRegistries has been added to handle vendoring crates from all registries used in a Cargo.lock file
  • vendorGitDeps has been added to handle vendoring crates from all git sources used in a Cargo.lock file

Changed

  • vendorCargoDeps now automatically handles git dependencies by default
    • Git dependencies will be vendored as another source in the output derivation
    • The cargo configuration is done such that the sources are available to use when it decides, without overriding that crate for the entire workspace
      • For example, if your workspace contains a crate only used for testing which has a git dependency of a crate used by other parts of the workspace, then only that crate will use the git dependency. The rest of the workspace will continue to use the crates.io version, just like cargo behaves when used outside of Nix.

0.2.1 - 2022-02-11

Changed

  • cargoFmt will install cargo artifacts by default (or install an empty target directory if there are none). This allows for more easily chaining derivations if doing so is desired.
    • This can be disabled by setting doInstallCargoArtifacts = false; in the derivation

0.2.0 - 2022-01-30

Added

  • Support for alternative cargo registries

Changed

  • urlForCargoPackage now takes configured registries into account when downloading crate sources
  • Breaking: vendorCargoDeps now vendors each unique registry as a subdirectory within the derivation's output. A config.toml file is also placed at the output root which contains the necessary configurations to point cargo at the vendored sources.
  • configureCargoVendoredDepsHook is now aware of the updated vendorCargoDeps output format, and will use the config.toml file it generates if it is present. Otherwise it will fall back to the previous behavior (which is treat the entire directory as only vendoring crates.io).
  • Source vendoring now uses runCommandLocal (instead of runCommand) to reduce network pressure in trying to fetch results which can quickly be built locally
  • Searching for Cargo.toml or .cargo/config.toml files is now done more efficiently

0.1.0 - 2022-01-22

  • First release