diff --git a/pkgs/development/tools/build-managers/gradle/default.nix b/pkgs/development/tools/build-managers/gradle/default.nix index 7e7eb2d7a1aa..dfb36de7fae5 100644 --- a/pkgs/development/tools/build-managers/gradle/default.nix +++ b/pkgs/development/tools/build-managers/gradle/default.nix @@ -1,12 +1,107 @@ { + callPackage, jdk17, jdk21, jdk23, }: -rec { - gen = +let + wrapGradle = + { + lib, + callPackage, + mitm-cache, + replaceVars, + symlinkJoin, + concatTextFile, + makeSetupHook, + nix-update-script, + runCommand, + }: + gradle-unwrapped: updateAttrPath: + lib.makeOverridable ( + args: + let + gradle = gradle-unwrapped.override args; + in + symlinkJoin { + pname = "gradle"; + inherit (gradle) version; + paths = [ + (makeSetupHook { name = "gradle-setup-hook"; } (concatTextFile { + name = "setup-hook.sh"; + files = [ + (mitm-cache.setupHook) + (replaceVars ./setup-hook.sh { + # jdk used for keytool + inherit (gradle) jdk; + init_script = "${./init-build.gradle}"; + }) + ]; + })) + gradle + mitm-cache + ]; + + passthru = { + fetchDeps = callPackage ./fetch-deps.nix { inherit mitm-cache; }; + inherit (gradle) jdk; + unwrapped = gradle; + tests = { + toolchains = + let + javaVersion = lib.getVersion jdk23; + javaMajorVersion = lib.versions.major javaVersion; + in + runCommand "detects-toolchains-from-nix-env" + { + # Use JDKs that are not the default for any of the gradle versions + nativeBuildInputs = [ + (gradle.override { + javaToolchains = [ + jdk23 + ]; + }) + ]; + src = ./tests/toolchains; + } + '' + cp -a $src/* . + substituteInPlace ./build.gradle --replace-fail '@JAVA_VERSION@' '${javaMajorVersion}' + env GRADLE_USER_HOME=$TMPDIR/gradle org.gradle.native.dir=$TMPDIR/native \ + gradle run --no-daemon --quiet --console plain > $out + actual="$(<$out)" + if [[ "${javaVersion}" != "$actual"* ]]; then + echo "Error: Expected '${javaVersion}', to start with '$actual'" >&2 + exit 1 + fi + ''; + } + // gradle.tests; + } + // lib.optionalAttrs (updateAttrPath != null) { + updateScript = nix-update-script { + attrPath = updateAttrPath; + extraArgs = [ + "--url=https://github.com/gradle/gradle" + # Gradle’s .0 releases are tagged as `vX.Y.0`, but the actual + # release version omits the `.0`, so we’ll wanto to only capture + # the version up but not including the the trailing `.0`. + "--version-regex=^v(\\d+\\.\\d+(?:\\.[1-9]\\d?)?)(\\.0)?$" + ]; + }; + }; + + meta = gradle.meta // { + # prefer normal gradle/mitm-cache over this wrapper, this wrapper only provides the setup hook + # and passthru + priority = (gradle.meta.priority or lib.meta.defaultPriority) + 1; + }; + } + ) { }; + + gen = { version, hash, @@ -34,12 +129,13 @@ rec { # Extra attributes to be merged into the resulting derivation's # meta attribute. meta ? { }, - }: + }@genArgs: { lib, stdenv, fetchurl, + callPackage, makeWrapper, unzip, ncurses5, @@ -186,6 +282,8 @@ rec { }; }; passthru.jdk = defaultJava; + passthru.unwrapped = gen' genArgs; + passthru.wrap = callPackage wrapGradle { } finalAttrs.finalPackage.unwrapped; meta = with lib; @@ -219,119 +317,28 @@ rec { // meta; }); + # Calls the generated Gradle package with default arguments. + gen' = args: callPackage (gen args) { }; +in +{ # NOTE: Default JDKs that are hardcoded below must be LTS versions # and respect the compatibility matrix at # https://docs.gradle.org/current/userguide/compatibility.html - gradle_9 = gen { + gradle_9 = gen' { version = "9.0.0"; hash = "sha256-j609eClspRgRPz0pAWYXx/k2fcAF+TK9nZO/RbpGBys="; defaultJava = jdk21; }; - gradle_8 = gen { + gradle_8 = gen' { version = "8.14.3"; hash = "sha256-vXEQIhNJMGCVbsIp2Ua+7lcVjb2J0OYrkbyg+ixfNTE="; defaultJava = jdk21; }; - gradle_7 = gen { + gradle_7 = gen' { version = "7.6.6"; hash = "sha256-Zz2XdvMDvHBI/DMp0jLW6/EFGweJO9nRFhb62ahnO+A="; defaultJava = jdk17; }; - - wrapGradle = - { - lib, - callPackage, - mitm-cache, - replaceVars, - symlinkJoin, - concatTextFile, - makeSetupHook, - nix-update-script, - runCommand, - }: - gradle-unwrapped: updateAttrPath: - lib.makeOverridable ( - args: - let - gradle = gradle-unwrapped.override args; - in - symlinkJoin { - pname = "gradle"; - inherit (gradle) version; - - paths = [ - (makeSetupHook { name = "gradle-setup-hook"; } (concatTextFile { - name = "setup-hook.sh"; - files = [ - (mitm-cache.setupHook) - (replaceVars ./setup-hook.sh { - # jdk used for keytool - inherit (gradle) jdk; - init_script = "${./init-build.gradle}"; - }) - ]; - })) - gradle - mitm-cache - ]; - - passthru = { - fetchDeps = callPackage ./fetch-deps.nix { inherit mitm-cache; }; - inherit (gradle) jdk; - unwrapped = gradle; - tests = { - toolchains = - let - javaVersion = lib.getVersion jdk23; - javaMajorVersion = lib.versions.major javaVersion; - in - runCommand "detects-toolchains-from-nix-env" - { - # Use JDKs that are not the default for any of the gradle versions - nativeBuildInputs = [ - (gradle.override { - javaToolchains = [ - jdk23 - ]; - }) - ]; - src = ./tests/toolchains; - } - '' - cp -a $src/* . - substituteInPlace ./build.gradle --replace-fail '@JAVA_VERSION@' '${javaMajorVersion}' - env GRADLE_USER_HOME=$TMPDIR/gradle org.gradle.native.dir=$TMPDIR/native \ - gradle run --no-daemon --quiet --console plain > $out - actual="$(<$out)" - if [[ "${javaVersion}" != "$actual"* ]]; then - echo "Error: Expected '${javaVersion}', to start with '$actual'" >&2 - exit 1 - fi - ''; - } - // gradle.tests; - } - // lib.optionalAttrs (updateAttrPath != null) { - updateScript = nix-update-script { - attrPath = updateAttrPath; - extraArgs = [ - "--url=https://github.com/gradle/gradle" - # Gradle’s .0 releases are tagged as `vX.Y.0`, but the actual - # release version omits the `.0`, so we’ll wanto to only capture - # the version up but not including the the trailing `.0`. - "--version-regex=^v(\\d+\\.\\d+(?:\\.[1-9]\\d?)?)(\\.0)?$" - ]; - }; - }; - - meta = gradle.meta // { - # prefer normal gradle/mitm-cache over this wrapper, this wrapper only provides the setup hook - # and passthru - priority = (gradle.meta.priority or lib.meta.defaultPriority) + 1; - }; - } - ) { }; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 0907b9121b65..cc0a8eaef983 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6915,25 +6915,18 @@ with pkgs; m4 = gnum4; gnumake = callPackage ../development/tools/build-managers/gnumake { }; - gradle-packages = import ../development/tools/build-managers/gradle { - inherit - jdk17 - jdk21 - jdk23 - ; - }; - gradleGen = gradle-packages.gen; - wrapGradle = callPackage gradle-packages.wrapGradle { }; - gradle_7-unwrapped = callPackage gradle-packages.gradle_7 { }; - gradle_8-unwrapped = callPackage gradle-packages.gradle_8 { }; - gradle_9-unwrapped = callPackage gradle-packages.gradle_9 { }; + gradle-packages = callPackage ../development/tools/build-managers/gradle { }; + + gradle_7-unwrapped = gradle-packages.gradle_7.unwrapped; + gradle_8-unwrapped = gradle-packages.gradle_8.unwrapped; + gradle_9-unwrapped = gradle-packages.gradle_9.unwrapped; gradle-unwrapped = gradle_8-unwrapped; - gradle_7 = wrapGradle gradle_7-unwrapped null; - gradle_8 = wrapGradle gradle_8-unwrapped null; - gradle_9 = wrapGradle gradle_9-unwrapped null; - gradle = wrapGradle gradle-unwrapped "gradle-unwrapped"; + gradle_7 = gradle_7-unwrapped.wrap null; + gradle_8 = gradle_8-unwrapped.wrap null; + gradle_9 = gradle_9-unwrapped.wrap null; + gradle = gradle-unwrapped.wrap "gradle-unwrapped"; griffe = with python3Packages; toPythonApplication griffe;