mirror of
https://github.com/ipetkov/crane.git
synced 2024-11-22 23:17:15 +03:00
Add cleanCargoToml
This commit is contained in:
parent
e6a6ad68b1
commit
a286fe1ff5
16
flake.lock
16
flake.lock
@ -1,5 +1,20 @@
|
||||
{
|
||||
"nodes": {
|
||||
"nix-std": {
|
||||
"locked": {
|
||||
"lastModified": 1624642189,
|
||||
"narHash": "sha256-tIt3p1k0PsYeIxK2xO9Z8k2Ggq2nH4auqj3RbVAiRrg=",
|
||||
"owner": "chessai",
|
||||
"repo": "nix-std",
|
||||
"rev": "9ef1cf73948bfad05d370165c7f3011b82c4d679",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "chessai",
|
||||
"repo": "nix-std",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1640269308,
|
||||
@ -18,6 +33,7 @@
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"nix-std": "nix-std",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"utils": "utils"
|
||||
}
|
||||
|
@ -1,13 +1,14 @@
|
||||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
||||
nix-std.url = "github:chessai/nix-std";
|
||||
utils = {
|
||||
url = "github:numtide/flake-utils";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
|
||||
outputs = inputs@{ self, nixpkgs, utils, ... }:
|
||||
outputs = inputs@{ self, nixpkgs, nix-std, utils, ... }:
|
||||
let
|
||||
myPkgsFor = pkgs: pkgs.callPackages ./pkgs { };
|
||||
in
|
||||
@ -23,6 +24,7 @@
|
||||
|
||||
# To override do: lib.overrideScope' (self: super: { ... });
|
||||
lib = import ./lib {
|
||||
inherit (nix-std.lib.serde) fromTOML toTOML;
|
||||
inherit (pkgs) lib newScope;
|
||||
inherit myPkgs;
|
||||
};
|
||||
|
101
lib/cleanCargoToml.nix
Normal file
101
lib/cleanCargoToml.nix
Normal file
@ -0,0 +1,101 @@
|
||||
{ fromTOML
|
||||
, toTOML
|
||||
, writeText
|
||||
}:
|
||||
|
||||
let
|
||||
dummyLib = writeText "lib.rs" "#[test] fn it_works() {}";
|
||||
dummyMain = writeText "main.rs" "fn main() {}";
|
||||
|
||||
# https://doc.rust-lang.org/cargo/reference/manifest.html#the-package-section
|
||||
cleanPackage = package: removeAttrs package [
|
||||
"authors"
|
||||
"autobenches"
|
||||
"autobins"
|
||||
"autoexamples"
|
||||
"autotests"
|
||||
"build"
|
||||
"categories"
|
||||
"default-run"
|
||||
"description"
|
||||
"documentation"
|
||||
"edition"
|
||||
"exclude"
|
||||
"homepage"
|
||||
"include"
|
||||
"keywords"
|
||||
"license-file"
|
||||
"license"
|
||||
"links"
|
||||
"metadata"
|
||||
"publish"
|
||||
"readme"
|
||||
"repository"
|
||||
"resolver"
|
||||
"rust-version"
|
||||
|
||||
# Additional package attributes which are expressly kept in
|
||||
# (but listed here for audit purposes)
|
||||
# "name" # The name of the package.
|
||||
# "version" # The version of the package.
|
||||
# "workspace" # Path to the workspace for the package.
|
||||
];
|
||||
|
||||
# https://doc.rust-lang.org/cargo/reference/cargo-targets.html#configuring-a-target
|
||||
cleanTargetCommon = pathReplacement: target:
|
||||
let
|
||||
cleanedCommon =
|
||||
removeAttrs target [
|
||||
"test"
|
||||
"doctest"
|
||||
"bench"
|
||||
"doc"
|
||||
"edition"
|
||||
"plugin"
|
||||
"proc-macro"
|
||||
"harness"
|
||||
"crate-type"
|
||||
|
||||
# Additional package attributes which are expressly kept in
|
||||
# (but listed here for audit purposes)
|
||||
# "name" # let cargo manage targets/collisions/etc.
|
||||
# "required-features" # influences dependency feature combinations
|
||||
];
|
||||
in
|
||||
cleanedCommon // { path = builtins.toString pathReplacement; };
|
||||
|
||||
# https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
cleanCargoToml = parsed:
|
||||
let
|
||||
topLevelCleaned = removeAttrs parsed [
|
||||
"badges" # Badges to display on a registry.
|
||||
|
||||
# Top level attributes intentionally left in place:
|
||||
# "build-dependencies" # we want to build and cache these
|
||||
# "cargo-features" # just in case some special depencency-related features are needed
|
||||
# "dependencies" # we want build and cache these
|
||||
# "dev-dependencies" # we want to build and cache these
|
||||
# "features" # keep this as is, some deps may be compiled with different feature combinations
|
||||
# "patch" # configures sources as the project wants
|
||||
# "profile" # this could influence how dependencies are built/optimized
|
||||
# "replace" # (deprecated) configures sources as the project wants
|
||||
# "target" # we want to build and cache these
|
||||
# "workspace" # keep the workspace hierarchy as the project wants
|
||||
];
|
||||
|
||||
recursivelyCleaned = {
|
||||
package = cleanPackage (parsed.package or { });
|
||||
lib = cleanTargetCommon dummyLib (parsed.lib or { });
|
||||
|
||||
bench = map (cleanTargetCommon dummyLib) (parsed.bench or [ ]);
|
||||
bin = map (cleanTargetCommon dummyMain) (parsed.bin or [ ]);
|
||||
example = map (cleanTargetCommon dummyLib) (parsed.example or [ ]);
|
||||
test = map (cleanTargetCommon dummyLib) (parsed.test or [ ]);
|
||||
};
|
||||
in
|
||||
topLevelCleaned // recursivelyCleaned;
|
||||
in
|
||||
{ cargoToml ? throw "either cargoToml or cargoTomlContents must be specified"
|
||||
, cargoTomlContents ? builtins.readFile cargoToml
|
||||
}:
|
||||
cleanCargoToml (fromTOML cargoTomlContents)
|
@ -1,6 +1,8 @@
|
||||
{ lib
|
||||
{ fromTOML
|
||||
, lib
|
||||
, myPkgs
|
||||
, newScope
|
||||
, toTOML
|
||||
}:
|
||||
|
||||
lib.makeScope newScope (self:
|
||||
@ -8,9 +10,10 @@ lib.makeScope newScope (self:
|
||||
callPackage = self.newScope { };
|
||||
in
|
||||
myPkgs // {
|
||||
inherit callPackage;
|
||||
inherit callPackage fromTOML toTOML;
|
||||
|
||||
buildWithCargo = callPackage ./buildWithCargo.nix { };
|
||||
cleanCargoToml = callPackage ./cleanCargoToml.nix { };
|
||||
downloadCargoPackage = callPackage ./downloadCargoPackage.nix { };
|
||||
urlForCargoPackage = callPackage ./urlForCargoPackage.nix { };
|
||||
vendorCargoDeps = callPackage ./vendorCargoDeps.nix { };
|
||||
|
@ -1,4 +1,5 @@
|
||||
{ downloadCargoPackage
|
||||
, fromTOML
|
||||
, linkFarm
|
||||
}:
|
||||
|
||||
@ -6,7 +7,7 @@
|
||||
, cargoLockContents ? builtins.readFile cargoLock
|
||||
}:
|
||||
let
|
||||
lock = builtins.fromTOML cargoLockContents;
|
||||
lock = fromTOML cargoLockContents;
|
||||
|
||||
packages =
|
||||
if lock ? package
|
||||
|
Loading…
Reference in New Issue
Block a user