|
332 | 332 | pname = pname'; |
333 | 333 | version = version'; |
334 | 334 |
|
335 | | - src = crateRepoSource; |
336 | | - |
337 | 335 | dummySrc = craneLib.mkDummySrc crateRepoSource; |
338 | 336 |
|
339 | 337 | # defaults to "--all-targets" otherwise, which breaks some stuff |
|
405 | 403 | (cargoBuild.buildPackage ( |
406 | 404 | extraBuildEnv |
407 | 405 | // crateAttrs |
| 406 | + // { |
| 407 | + src = crateRepoSource; |
| 408 | + } |
408 | 409 | // (lib.optionalAttrs (builtins.length crateDirsFromRoot' == 1) { |
409 | 410 | meta.mainProgram = pname'; |
410 | 411 | }) |
|
435 | 436 | passthru = (old.passthru or { }) // { |
436 | 437 | inherit release; |
437 | 438 | craneAttrs = crateAttrs // { |
| 439 | + src = crateRepoSource; |
438 | 440 | inherit cargoArtifacts; |
439 | 441 | }; |
440 | 442 | }; |
|
448 | 450 | }; |
449 | 451 | }; |
450 | 452 |
|
451 | | - cargoWorkspaceSrc = |
452 | | - let |
453 | | - allCargoTomls = builtins.listToAttrs ( |
454 | | - map ( |
455 | | - dep: lib.nameValuePair dep (lib.importTOML "${root}/${dep}/Cargo.toml") |
456 | | - ) workspaceCargoToml.workspace.members |
457 | | - ); |
458 | | - in |
| 453 | + allCargoTomls = builtins.listToAttrs ( |
| 454 | + map ( |
| 455 | + dep: lib.nameValuePair dep (lib.importTOML "${root}/${dep}/Cargo.toml") |
| 456 | + ) workspaceCargoToml.workspace.members |
| 457 | + ); |
459 | 458 |
|
460 | | - mkCleanSrc { |
461 | | - workspaceMembers = mkRootPaths workspaceCargoToml.workspace.members; |
462 | | - extraIncludes = mkRootPaths ((getIncludes allCargoTomls) ++ (getExtraIncludes allCargoTomls)); |
463 | | - }; |
| 459 | + cargoWorkspaceSrc = mkCleanSrc { |
| 460 | + workspaceMembers = mkRootPaths workspaceCargoToml.workspace.members; |
| 461 | + extraIncludes = mkRootPaths ((getIncludes allCargoTomls) ++ (getExtraIncludes allCargoTomls)); |
| 462 | + }; |
464 | 463 | in |
465 | 464 | { |
466 | 465 | _module.args = { |
|
517 | 516 | { |
518 | 517 | cargo-workspace-clippy = craneLib.cargoClippy (cargoWorkspaceAttrs // { inherit cargoArtifacts; }); |
519 | 518 | cargo-workspace-test = craneLib.cargoTest (cargoWorkspaceAttrs // { inherit cargoArtifacts; }); |
| 519 | + # NOTE: This is currently broken, as some crate features are not working properly |
| 520 | + all-crates-buildable-individually = craneLib.mkCargoDerivation ( |
| 521 | + (builtins.removeAttrs cargoWorkspaceAttrs [ |
| 522 | + "cargoTestExtraArgs" |
| 523 | + "cargoClippyExtraArgs" |
| 524 | + ]) |
| 525 | + // { |
| 526 | + inherit cargoArtifacts; |
| 527 | + pname = "cargo-workspace-individual-check"; |
| 528 | + # strictDeps = true; |
| 529 | + passAsFile = [ "actualBuildPhase" ]; |
| 530 | + buildPhaseCargoCommand = null; |
| 531 | + buildPhase = '' |
| 532 | + . "$actualBuildPhasePath" |
| 533 | + ''; |
| 534 | + # if we don't do this (and pass as file above), we hit "Argument list too long" |
| 535 | + # no clue why |
| 536 | + actualBuildPhase = lib.concatMapStringsSep "\n\n" ( |
| 537 | + cargoToml: |
| 538 | + let |
| 539 | + features = builtins.attrNames (builtins.removeAttrs (cargoToml.features or { }) [ "default" ]); |
| 540 | + |
| 541 | + subsets = |
| 542 | + xs: n: |
| 543 | + if n == 0 then |
| 544 | + [ [ ] ] |
| 545 | + else if xs == [ ] then |
| 546 | + [ ] |
| 547 | + else |
| 548 | + let |
| 549 | + x = builtins.head xs; |
| 550 | + xs' = builtins.tail xs; |
| 551 | + in |
| 552 | + (map (ys: [ x ] ++ ys) (subsets xs' (n - 1))) ++ (subsets xs' n); |
| 553 | + |
| 554 | + allFeatureCombinations = lib.concatLists ( |
| 555 | + builtins.genList (subsets features) (dbg (builtins.length (dbg features) + 1)) |
| 556 | + ); |
| 557 | + in |
| 558 | + if cargoToml.package.name == "protos" then |
| 559 | + "cargo clippy -p protos --all-features --tests -- -Dwarnings" |
| 560 | + else if features == [ ] then |
| 561 | + "cargo clippy -p ${cargoToml.package.name} --no-default-features --tests -- -Dwarnings" |
| 562 | + else |
| 563 | + lib.concatMapStringsSep "\n" ( |
| 564 | + features: |
| 565 | + "cargo clippy -p ${cargoToml.package.name} --no-default-features ${ |
| 566 | + lib.optionalString (features != [ ]) "-F${lib.concatMapStringsSep "," (f: f) features}" |
| 567 | + } --tests -- -Dwarnings" |
| 568 | + ) allFeatureCombinations |
| 569 | + ) (builtins.attrValues allCargoTomls); |
| 570 | + doInstallCargoArtifacts = false; |
| 571 | + } |
| 572 | + ); |
| 573 | + # this would probably be better for caching but it's an insanely massive derivation |
| 574 | + # all-crates-buildable-individually = pkgs.linkFarmFromDrvs "all-crates-buildable-individually" ( |
| 575 | + # dbg ( |
| 576 | + # map ( |
| 577 | + # p: |
| 578 | + # craneLib.cargoClippy ( |
| 579 | + # cargoWorkspaceAttrs |
| 580 | + # // { |
| 581 | + # inherit cargoArtifacts; |
| 582 | + # pname = "${p.name}-individual-check"; |
| 583 | + # cargoClippyExtraArgs = "-p ${p.name} --tests -- -Dwarnings"; |
| 584 | + # doInstallCargoArtifacts = false; |
| 585 | + # } |
| 586 | + # ) |
| 587 | + # ) (pkgs.lib.mapAttrsToList lib.nameValuePair allCargoTomls) |
| 588 | + # ) |
| 589 | + # ); |
520 | 590 | }; |
521 | 591 |
|
522 | 592 | # FIXME: currently ICE, https://github.com/unionlabs/union/actions/runs/8882618404/job/24387814904 |
|
0 commit comments