crane/checks/cleanCargoTomlTests/default.nix
Kayla Firestack e908c1afea fix(nix-relative-paths): quote relative paths to allow for external sources
when trying to use crane with a non local src (eg, not `./.`) we get the error
```
$ nix flake show
<...>
error: access to absolute path '/Cargo.toml' is forbidden in pure eval mode (use '--impure' to override)
(use '--show-trace' to show detailed location information)
```

To fix this, we quote the relative paths so to properly append them to the base path.

https://nixos.wiki/wiki/Nix_Expression_Language#Coercing_a_relative_path_with_interpolated_variables_to_an_absolute_path_.28for_imports.29

## Reproduction flake
```
{
  description = "Build a cargo project without extra checks";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";

    crane = {
      url = "github:ipetkov/crane";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    external-crate-source = {
      url = "github:ray-kast/empress";
      flake = false;
    };

    flake-utils.url = "github:numtide/flake-utils";
  };

  outputs = { self, nixpkgs, crane, flake-utils, external-crate-source, ... }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        pkgs = nixpkgs.legacyPackages.${system};

        test-crate = crane.lib.${system}.buildPackage {
          src = external-crate-source.outPath;
        };
      in
      {
        packages.default = test-crate;
      });
}
```
2022-05-10 10:00:00 -04:00

25 lines
530 B
Nix

{ cleanCargoToml
, linkFarmFromDrvs
, runCommand
, writeTOML
}:
let
cmpCleanCargoToml = name: path:
let
cleaned = cleanCargoToml {
cargoToml = path + "/Cargo.toml";
};
cleanedToml = writeTOML "cleaned.toml" cleaned;
expected = path + "/expected.toml";
in
runCommand "compare-${name}" { } ''
diff ${expected} ${cleanedToml}
touch $out
'';
in
linkFarmFromDrvs "cleanCargoToml" [
(cmpCleanCargoToml "barebones" ./barebones)
(cmpCleanCargoToml "complex" ./complex)
]