Use lib.makeScope for consistent package resolution

This commit is contained in:
Tad Fisher
2024-06-16 12:22:38 -07:00
committed by Tad Fisher
parent 6e37e6e3f9
commit 0160c945b8
7 changed files with 96 additions and 98 deletions

View File

@@ -247,7 +247,7 @@ produced by =gradle2nix=. It performs the following:
- =lockFile= :: Path to the lock file generated by =gradle2nix= - =lockFile= :: Path to the lock file generated by =gradle2nix=
(e.g. =gradle.lock=). (e.g. =gradle.lock=).
- =gradlePackage= :: The Gradle package to use. Default is - =gradle= :: The Gradle package to use. Default is
=pkgs.gradle=. =pkgs.gradle=.
- =buildJdk= :: Override the default JDK used to run Gradle itself. - =buildJdk= :: Override the default JDK used to run Gradle itself.
- =fetchers= :: Override functions which fetch dependency - =fetchers= :: Override functions which fetch dependency

View File

@@ -2,62 +2,11 @@
pkgs ? import <nixpkgs> { }, pkgs ? import <nixpkgs> { },
}: }:
with pkgs;
let let
buildMavenRepo = callPackage ./nix/build-maven-repo.nix { }; scope = pkgs.callPackage ./nix { };
gradleSetupHook = makeSetupHook {
name = "gradle-setup-hook";
propagatedBuildInputs = [ gradle ];
} ./nix/setup-hook.sh;
buildGradlePackage = callPackage ./nix/build-gradle-package.nix {
inherit buildMavenRepo gradleSetupHook;
};
gradle2nix = buildGradlePackage {
pname = "gradle2nix";
version = "2.0.0";
lockFile = ./gradle.lock;
src = lib.cleanSourceWith {
filter = lib.cleanSourceFilter;
src = lib.cleanSourceWith {
filter =
path: type:
let
baseName = baseNameOf path;
in in
!( scope.gradle2nix.overrideAttrs (attrs: {
(type == "directory" && (baseName == "build" || baseName == ".idea" || baseName == ".gradle")) passthru = (attrs.passthru or { }) // {
|| (lib.hasSuffix ".iml" baseName) inherit (scope) buildGradlePackage buildMavenRepo gradleSetupHook;
);
src = ./.;
}; };
}; })
gradleInstallFlags = [ ":app:installDist" ];
postInstall = ''
mkdir -p $out/{bin,/lib/gradle2nix}
cp -r app/build/install/gradle2nix/* $out/lib/gradle2nix/
rm $out/lib/gradle2nix/bin/gradle2nix.bat
ln -sf $out/lib/gradle2nix/bin/gradle2nix $out/bin
'';
passthru = {
inherit buildGradlePackage buildMavenRepo gradleSetupHook;
};
meta = with lib; {
inherit (gradle.meta) platforms;
description = "Wrap Gradle builds with Nix";
homepage = "https://github.com/tadfisher/gradle2nix";
license = licenses.asl20;
maintainers = with maintainers; [ tadfisher ];
mainProgram = "gradle2nix";
};
};
in
gradle2nix

View File

@@ -17,27 +17,26 @@
system: system:
let let
pkgs = nixpkgs.legacyPackages.${system}; pkgs = nixpkgs.legacyPackages.${system};
scope = pkgs.callPackage ./nix { };
inherit (nixpkgs) lib; inherit (nixpkgs) lib;
in in
{ {
builders = { builders = {
inherit (self.packages.${system}.gradle2nix) buildGradlePackage buildMavenRepo; inherit (scope) buildGradlePackage buildMavenRepo;
default = self.packages.${system}.buildGradlePackage; default = self.packages.${system}.buildGradlePackage;
}; };
packages = { packages = {
inherit (self.packages.${system}.gradle2nix) gradleSetupHook; inherit (scope) gradle2nix gradleSetupHook;
gradle2nix = pkgs.callPackage ./default.nix { };
default = self.packages.${system}.gradle2nix; default = self.packages.${system}.gradle2nix;
}; };
apps = rec { apps = {
gradle2nix = { gradle2nix = {
type = "app"; type = "app";
program = lib.getExe self.packages.${system}.default; program = lib.getExe self.packages.${system}.gradle2nix;
}; };
default = self.apps.${system}.gradle2nix;
default = gradle2nix;
}; };
formatter = pkgs.writeShellScriptBin "gradle2nix-fmt" '' formatter = pkgs.writeShellScriptBin "gradle2nix-fmt" ''

View File

@@ -1,28 +1,6 @@
# This file is generated by gradle2nix.
#
# Example usage (e.g. in default.nix):
#
# with (import <nixpkgs> {});
# let
# buildGradle = callPackage ./gradle.nix {};
# in
# buildGradle {
# lockFile = ./gradle.lock;
#
# src = ./.;
#
# gradleFlags = [ "installDist" ];
#
# installPhase = ''
# mkdir -p $out
# cp -r app/build/install/myproject $out
# '';
# }
{ {
lib, lib,
stdenv, stdenv,
gradle,
buildMavenRepo, buildMavenRepo,
gradleSetupHook, gradleSetupHook,
writeText, writeText,
@@ -31,10 +9,8 @@
{ {
# Path to the lockfile generated by gradle2nix (e.g. gradle.lock). # Path to the lockfile generated by gradle2nix (e.g. gradle.lock).
lockFile ? null, lockFile ? null,
pname ? "project",
version ? null,
# The Gradle package to use. Default is 'pkgs.gradle'. # The Gradle package to use. Default is 'pkgs.gradle'.
gradlePackage ? gradle, gradle ? null,
# Override the default JDK used to run Gradle itself. # Override the default JDK used to run Gradle itself.
buildJdk ? null, buildJdk ? null,
# Override functions which fetch dependency artifacts. # Override functions which fetch dependency artifacts.
@@ -105,24 +81,25 @@
let let
inherit (builtins) removeAttrs; inherit (builtins) removeAttrs;
gradleSetupHook' = gradleSetupHook.overrideAttrs (_: {
propagatedBuildInputs = [ gradlePackage ];
});
offlineRepo = offlineRepo =
if lockFile != null then buildMavenRepo { inherit lockFile fetchers overrides; } else null; if lockFile != null then buildMavenRepo { inherit lockFile fetchers overrides; } else null;
buildGradlePackage = stdenv.mkDerivation ( buildGradlePackage = stdenv.mkDerivation (
finalAttrs: finalAttrs:
{ {
inherit buildJdk gradle;
inherit buildJdk pname version;
inherit (offlineRepo) gradleInitScript; inherit (offlineRepo) gradleInitScript;
dontStrip = true; dontStrip = true;
nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [ gradleSetupHook' ]; gradleSetupHook =
if (finalAttrs.gradle != null) then
gradleSetupHook.override { inherit (finalAttrs) gradle; }
else
gradleSetupHook;
nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [ finalAttrs.gradleSetupHook ];
gradleFlags = gradleFlags =
[ "--console=plain" ] [ "--console=plain" ]
@@ -137,7 +114,7 @@ let
"lockFile" "lockFile"
"fetchers" "fetchers"
"nativeBuildInputs" "nativeBuildInputs"
"overlays" "overrides"
"passthru" "passthru"
] ]
); );

15
nix/default.nix Normal file
View File

@@ -0,0 +1,15 @@
{
lib,
gradle,
newScope,
}:
lib.makeScope newScope (
self: with self; {
inherit gradle;
buildGradlePackage = callPackage ./build-gradle-package.nix { };
buildMavenRepo = callPackage ./build-maven-repo.nix { };
gradleSetupHook = callPackage ./gradle-setup-hook.nix { };
gradle2nix = callPackage ./gradle2nix.nix { };
}
)

View File

@@ -0,0 +1,7 @@
{ makeSetupHook, gradle }:
makeSetupHook {
name = "gradle-setup-hook";
propagatedBuildInputs = [ gradle ];
passthru.gradle = gradle;
} ./setup-hook.sh

51
nix/gradle2nix.nix Normal file
View File

@@ -0,0 +1,51 @@
{
lib,
buildGradlePackage,
buildMavenRepo,
gradle,
gradleSetupHook,
}:
buildGradlePackage {
pname = "gradle2nix";
version = "2.0.0";
lockFile = ../gradle.lock;
src = lib.cleanSourceWith {
filter = lib.cleanSourceFilter;
src = lib.cleanSourceWith {
filter =
path: type:
let
baseName = baseNameOf path;
in
!(
(type == "directory" && (baseName == "build" || baseName == ".idea" || baseName == ".gradle"))
|| (lib.hasSuffix ".iml" baseName)
);
src = ../.;
};
};
gradleInstallFlags = [ ":app:installDist" ];
postInstall = ''
mkdir -p $out/{bin,/lib/gradle2nix}
cp -r app/build/install/gradle2nix/* $out/lib/gradle2nix/
rm $out/lib/gradle2nix/bin/gradle2nix.bat
ln -sf $out/lib/gradle2nix/bin/gradle2nix $out/bin
'';
passthru = {
inherit buildGradlePackage buildMavenRepo gradleSetupHook;
};
meta = with lib; {
inherit (gradle.meta) platforms;
description = "Wrap Gradle builds with Nix";
homepage = "https://github.com/tadfisher/gradle2nix";
license = licenses.asl20;
maintainers = with maintainers; [ tadfisher ];
mainProgram = "gradle2nix";
};
}