Fix self-hosting

This commit is contained in:
Tad Fisher
2019-06-19 14:36:14 -07:00
parent 2001d21f14
commit e0ebecec21
11 changed files with 1182 additions and 3095 deletions

View File

@@ -1,54 +1,130 @@
# This file is generated by gradle2nix. # This file is generated by gradle2nix.
#
# Example usage (e.g. in default.nix):
#
# with (import <nixpkgs> {});
# let
# buildGradle = callPackage ./gradleEnv.nix {};
# in
# buildGradle {
# envSpec = ./gradle-env.json;
#
# src = ./.;
#
# gradleFlags = [ "installDist" ];
#
# installPhase = ''
# mkdir -p $out
# cp -r app/build/install/myproject $out
# '';
# }
{ stdenvNoCC, lib, buildEnv, fetchurl }: { stdenv, lib, buildEnv, fetchurl, gradleGen, writeText }:
{ name, repositories, dependencies }: { envSpec
, pname ? null
, version ? null
, enableParallelBuilding ? true
, gradleFlags ? [ "build" ]
, gradlePackage ? null
, ... } @ args:
let let
mkPath = artifact: with artifact; lib.concatStringsSep "/" [ mkDep = depSpec: stdenv.mkDerivation {
(lib.replaceChars ["."] ["/"] artifact.groupId) inherit (depSpec) name;
artifact.artifactId
artifact.version
];
mkFilename = artifact: with artifact;
"${artifactId}-${version}${lib.optionalString (classifier != "") "-${classifier}"}.${extension}";
mkMavenUrls = repo: artifact:
mkArtifactUrl = base: artifact:
"${lib.removeSuffix "/" base}/${mkPath artifact}/${mkFilename artifact}";
fetchArtifact = artifact:
let
artifactPath = mkPath artifact;
artifactName = mkFilename artifact;
in stdenvNoCC.mkDerivation rec {
name = with artifact; lib.concatStrings [
(lib.replaceChars ["."] ["_"] groupId) "-"
(lib.replaceChars ["."] ["_"] artifactId) "-"
version
(lib.optionalString (classifier != "") "-${classifier}")
"-" type
];
src = fetchurl { src = fetchurl {
name = mkFilename artifact; inherit (depSpec) urls sha256;
urls = map (url: mkArtifactUrl url artifact) repositories;
inherit (artifact) sha256;
}; };
phases = "installPhase fixupPhase"; phases = "installPhase fixupPhase";
installPhase = '' installPhase = ''
mkdir -p $out/${artifactPath} mkdir -p $out/${depSpec.path}
ln -s ${src} $out/${artifactPath}/${artifactName} ln -s $src $out/${depSpec.path}/${depSpec.filename}
''; '';
}; };
mkRepo = project: type: deps: buildEnv {
name = "${project}-gradle-${type}-env";
paths = map mkDep deps;
};
mkInitScript = projectSpec:
let
repos = builtins.mapAttrs (mkRepo projectSpec.name) projectSpec.dependencies;
in in
buildEnv { writeText "init.gradle" ''
inherit name; gradle.settingsEvaluated {
paths = map fetchArtifact dependencies; it.pluginManagement.repositories {
clear()
maven { url = uri("${repos.plugin}") }
} }
}
gradle.projectsLoaded {
allprojects {
buildscript {
repositories {
clear()
maven { url = uri("${repos.buildscript}") }
}
}
repositories {
clear()
maven { url = uri("${repos.project}") }
}
}
}
'';
mkGradle = gradleSpec:
gradleGen.gradleGen {
inherit (gradleSpec) nativeVersion;
name = "gradle-${gradleSpec.version}-${gradleSpec.type}";
src = fetchurl {
inherit (gradleSpec) url sha256;
};
};
mkProjectEnv = projectSpec: {
inherit (projectSpec) name version;
initScript = mkInitScript projectSpec;
gradle = args.gradlePackage or mkGradle projectSpec.gradle;
};
gradleEnv = builtins.mapAttrs
(_: p: mkProjectEnv p)
(builtins.fromJSON (builtins.readFile envSpec));
projectEnv = gradleEnv."";
pname = args.pname or projectEnv.name;
version = args.version or projectEnv.version;
in stdenv.mkDerivation (args // {
inherit pname version;
nativeBuildInputs = (args.nativeBuildInputs or []) ++ [ projectEnv.gradle ];
buildPhase = args.buildPhase or ''
runHook preBuild
(
set -x
env \
"GRADLE_USER_HOME=$(mktemp -d)" \
gradle --offline --no-daemon --no-build-cache \
--info --full-stacktrace --warning-mode=all \
${lib.optionalString enableParallelBuilding "--parallel"} \
--init-script ${projectEnv.initScript} \
${builtins.concatStringsSep " " gradleFlags}
)
runHook postBuild
'';
dontStrip = true;
})

View File

@@ -4,9 +4,11 @@ import com.squareup.moshi.JsonClass
@JsonClass(generateAdapter = true) @JsonClass(generateAdapter = true)
data class NixGradleEnv( data class NixGradleEnv(
val project: String, val name: String,
val pluginRepo: List<Dependency>, val version: String,
val projectRepos: Map<String, List<Dependency>> val path: String,
val gradle: DefaultGradle,
val dependencies: Map<String, List<Dependency>>
) )
@JsonClass(generateAdapter = true) @JsonClass(generateAdapter = true)
@@ -21,12 +23,18 @@ data class Dependency(
fun buildEnv(builds: Map<String, DefaultBuild>): Map<String, NixGradleEnv> = fun buildEnv(builds: Map<String, DefaultBuild>): Map<String, NixGradleEnv> =
builds.mapValues { (path, build) -> builds.mapValues { (path, build) ->
NixGradleEnv( NixGradleEnv(
project = path, name = build.rootProject.name,
pluginRepo = buildRepo(build.pluginDependencies).values.toList(), version = build.rootProject.version,
projectRepos = mapOf( path = path,
"buildscript" to build.rootProject.collectDependencies(DefaultProject::buildscriptDependencies).values.toList(), gradle = build.gradle,
"project" to build.rootProject.collectDependencies(DefaultProject::projectDependencies).values.toList() dependencies = mapOf(
)) "plugin" to buildRepo(build.pluginDependencies).values.toList(),
"buildscript" to build.rootProject.collectDependencies(DefaultProject::buildscriptDependencies)
.values.toList(),
"project" to build.rootProject.collectDependencies(DefaultProject::projectDependencies)
.values.toList()
)
)
} }
private fun DefaultProject.collectDependencies(chooser: DefaultProject.() -> DefaultDependencies): Map<DefaultArtifact, Dependency> { private fun DefaultProject.collectDependencies(chooser: DefaultProject.() -> DefaultDependencies): Map<DefaultArtifact, Dependency> {

View File

@@ -33,20 +33,20 @@ data class Config(
class Main : CliktCommand( class Main : CliktCommand(
name = "gradle2nix" name = "gradle2nix"
) { ) {
val wrapper: Boolean by option("--gradle-wrapper", "-w", private val wrapper: Boolean by option("--gradle-wrapper", "-w",
help = "Use the project's gradle wrapper for building") help = "Use the project's gradle wrapper for building")
.flag() .flag()
val gradleVersion: String? by option("--gradle-version", "-g", private val gradleVersion: String? by option("--gradle-version", "-g",
metavar = "VERSION", metavar = "VERSION",
help = "Use a specific Gradle version") help = "Use a specific Gradle version")
val configurations: List<String> by option("--configuration", "-c", private val configurations: List<String> by option("--configuration", "-c",
metavar = "NAME", metavar = "NAME",
help = "Add a configuration to resolve (default: all configurations)") help = "Add a configuration to resolve (default: all configurations)")
.multiple() .multiple()
val includes: List<File> by option("--include", "-i", private val includes: List<File> by option("--include", "-i",
metavar = "DIR", metavar = "DIR",
help = "Add an additional project to include") help = "Add an additional project to include")
.file(exists = true, fileOkay = false, folderOkay = true, readable = true) .file(exists = true, fileOkay = false, folderOkay = true, readable = true)
@@ -60,23 +60,23 @@ class Main : CliktCommand(
} }
} }
val outDir: File? by option("--out-dir", "-o", private val outDir: File? by option("--out-dir", "-o",
metavar = "DIR", metavar = "DIR",
help = "Path to write generated files (default: PROJECT-DIR)") help = "Path to write generated files (default: PROJECT-DIR)")
.file(fileOkay = false, folderOkay = true) .file(fileOkay = false, folderOkay = true)
val envFile: String by option("--env", "-e", private val envFile: String by option("--env", "-e",
metavar = "FILENAME", metavar = "FILENAME",
help = "Name of the environment file") help = "Prefix for environment files (.json and .nix)")
.default("gradle-env.json") .default("gradle-env")
val buildSrc: Boolean by option("--build-src", "-b", help = "Include buildSrc project (default: true)") private val buildSrc: Boolean by option("--build-src", "-b", help = "Include buildSrc project (default: true)")
.flag("--no-build-src", "-nb", default = true) .flag("--no-build-src", "-nb", default = true)
val quiet: Boolean by option("--quiet", "-q", help = "Disable logging") private val quiet: Boolean by option("--quiet", "-q", help = "Disable logging")
.flag(default = false) .flag(default = false)
val projectDir: File by argument("PROJECT-DIR", help = "Path to the project root (default: .)") private val projectDir: File by argument("PROJECT-DIR", help = "Path to the project root (default: .)")
.projectDir() .projectDir()
.default(File(".")) .default(File("."))
@@ -105,10 +105,11 @@ class Main : CliktCommand(
val nixGradleEnv = buildEnv(models) val nixGradleEnv = buildEnv(models)
val outDir = outDir ?: projectDir val outDir = outDir ?: projectDir
val envFile = outDir.resolve(envFile)
log("Writing environment to $envFile")
envFile.sink().buffer().use { out -> val json = outDir.resolve("$envFile.json")
log("Writing environment to $json")
json.sink().buffer().use { out ->
Moshi.Builder().build() Moshi.Builder().build()
.adapter<Map<String, NixGradleEnv>>( .adapter<Map<String, NixGradleEnv>>(
Types.newParameterizedType(Map::class.java, String::class.java, NixGradleEnv::class.java) Types.newParameterizedType(Map::class.java, String::class.java, NixGradleEnv::class.java)
@@ -117,6 +118,11 @@ class Main : CliktCommand(
.toJson(out, nixGradleEnv) .toJson(out, nixGradleEnv)
out.flush() out.flush()
} }
val nix = outDir.resolve("$envFile.nix")
log("Writing Nix script to $nix")
File(shareDir).resolve("gradle-env.nix").copyTo(nix, overwrite = true)
} }
} }

View File

@@ -3,69 +3,17 @@
with pkgs; with pkgs;
let let
gradleEnvJson = builtins.fromJSON (builtins.readFile ./gradle/nix/gradle-env.json); buildGradle = pkgs.callPackage ./gradle-env.nix {};
gradleDist = builtins.fromJSON (builtins.readFile ./gradle/nix/gradle-dist.json);
mkGradleEnv = callPackage ./gradle-env.nix {}; in buildGradle {
gradle = pkgs.gradleGen.gradleGen { envSpec = ./gradle-env.json;
name = "gradle-dist-${gradleDist.version}-${gradleDist.type}";
src = pkgs.fetchurl {
inherit (gradleDist) url sha256;
};
inherit (gradleDist) nativeVersion;
};
maven = r: ''maven { url = uri("${r}") }'';
projects = lib.mapAttrsToList (path: envs: {
inherit path;
config = ''
buildscript {
repositories {
clear()
${maven (mkGradleEnv envs.buildscript)}
}
}
repositories {
clear()
${maven (mkGradleEnv envs.project)}
}
'';
}) gradleEnvJson;
initScript = pkgs.writeText "init.gradle" ''
gradle.settingsEvaluated {
it.pluginManagement.repositories {
clear()
${maven (mkGradleEnv gradleEnvJson.":".plugins)}
}
}
gradle.projectsLoaded {
${lib.concatMapStringsSep "\n" (p: ''
rootProject.project("${p.path}") {
${p.config}
}
'') projects}
}
'';
in stdenv.mkDerivation rec {
name = "gradle2nix-${version}";
version = "1.0";
src = ./.; src = ./.;
nativeBuildInputs = [ gradle ]; gradleFlags = [ "installDist" ];
buildPhase = ''
export GRADLE_USER_HOME=$(mktemp -d)
gradle --offline --no-daemon --info --full-stacktrace --init-script ${initScript} installDist
'';
installPhase = '' installPhase = ''
mkdir -p $out mkdir -p $out
cp -r app/build/install/gradle2nix/* $out/ cp -r app/build/install/gradle2nix/* $out/
''; '';
dontStrip = true;
} }

View File

@@ -1,7 +1,17 @@
{ {
"": { "": {
"project": "", "name": "gradle2nix",
"pluginRepo": [ "version": "unspecified",
"path": "",
"gradle": {
"version": "5.4.1",
"type": "all",
"url": "https://services.gradle.org/distributions/gradle-5.4.1-all.zip",
"sha256": "14cd15fc8cc8705bd69dcfa3c8fefb27eb7027f5de4b47a8b279218f76895a91",
"nativeVersion": "0.17"
},
"dependencies": {
"plugin": [
{ {
"name": "com.fasterxml.jackson.core-jackson-annotations-2.9.0-jar", "name": "com.fasterxml.jackson.core-jackson-annotations-2.9.0-jar",
"filename": "jackson-annotations-2.9.0.jar", "filename": "jackson-annotations-2.9.0.jar",
@@ -867,7 +877,6 @@
"sha256": "4a139306cbe0aa3765bd9fd837a71253a911a9c4e55c50e062a4bd6843ee19a1" "sha256": "4a139306cbe0aa3765bd9fd837a71253a911a9c4e55c50e062a4bd6843ee19a1"
} }
], ],
"projectRepos": {
"buildscript": [], "buildscript": [],
"project": [ "project": [
{ {
@@ -1741,54 +1750,54 @@
"sha256": "965aeb2bedff369819bdde1bf7a0b3b89b8247dd69c88b86375d76163bb8c397" "sha256": "965aeb2bedff369819bdde1bf7a0b3b89b8247dd69c88b86375d76163bb8c397"
}, },
{ {
"name": "org.slf4j-slf4j-api-1.8.0-beta4-jar", "name": "org.slf4j-slf4j-api-2.0.0-alpha0-jar",
"filename": "slf4j-api-1.8.0-beta4.jar", "filename": "slf4j-api-2.0.0-alpha0.jar",
"path": "org/slf4j/slf4j-api/1.8.0-beta4", "path": "org/slf4j/slf4j-api/2.0.0-alpha0",
"urls": [ "urls": [
"https://jcenter.bintray.com/org/slf4j/slf4j-api/1.8.0-beta4/slf4j-api-1.8.0-beta4.jar", "https://jcenter.bintray.com/org/slf4j/slf4j-api/2.0.0-alpha0/slf4j-api-2.0.0-alpha0.jar",
"https://repo.gradle.org/gradle/libs-releases/org/slf4j/slf4j-api/1.8.0-beta4/slf4j-api-1.8.0-beta4.jar" "https://repo.gradle.org/gradle/libs-releases/org/slf4j/slf4j-api/2.0.0-alpha0/slf4j-api-2.0.0-alpha0.jar"
], ],
"sha256": "602b712329c84b4a83c40464f4fdfd0fe4238c53ef397139a867064739dbf4e0" "sha256": "cb111794c79ea249e9cfe1608e4c698604553d41b5a179a2786ff9f331cd7a37"
}, },
{ {
"name": "org.slf4j-slf4j-api-1.8.0-beta4-pom", "name": "org.slf4j-slf4j-api-2.0.0-alpha0-pom",
"filename": "slf4j-api-1.8.0-beta4.pom", "filename": "slf4j-api-2.0.0-alpha0.pom",
"path": "org/slf4j/slf4j-api/1.8.0-beta4", "path": "org/slf4j/slf4j-api/2.0.0-alpha0",
"urls": [ "urls": [
"https://jcenter.bintray.com/org/slf4j/slf4j-api/1.8.0-beta4/slf4j-api-1.8.0-beta4.pom", "https://jcenter.bintray.com/org/slf4j/slf4j-api/2.0.0-alpha0/slf4j-api-2.0.0-alpha0.pom",
"https://repo.gradle.org/gradle/libs-releases/org/slf4j/slf4j-api/1.8.0-beta4/slf4j-api-1.8.0-beta4.pom" "https://repo.gradle.org/gradle/libs-releases/org/slf4j/slf4j-api/2.0.0-alpha0/slf4j-api-2.0.0-alpha0.pom"
], ],
"sha256": "f8316d28acf252b21b1e9e8eed9a84c2afbdc8e040f69d3a10bab813d3d85a85" "sha256": "6c40501656200d3ab1bac0b67124973ebb11b8734a93e122182f65162f9b392b"
}, },
{ {
"name": "org.slf4j-slf4j-parent-1.8.0-beta4-pom", "name": "org.slf4j-slf4j-parent-2.0.0-alpha0-pom",
"filename": "slf4j-parent-1.8.0-beta4.pom", "filename": "slf4j-parent-2.0.0-alpha0.pom",
"path": "org/slf4j/slf4j-parent/1.8.0-beta4", "path": "org/slf4j/slf4j-parent/2.0.0-alpha0",
"urls": [ "urls": [
"https://jcenter.bintray.com/org/slf4j/slf4j-parent/1.8.0-beta4/slf4j-parent-1.8.0-beta4.pom", "https://jcenter.bintray.com/org/slf4j/slf4j-parent/2.0.0-alpha0/slf4j-parent-2.0.0-alpha0.pom",
"https://repo.gradle.org/gradle/libs-releases/org/slf4j/slf4j-parent/1.8.0-beta4/slf4j-parent-1.8.0-beta4.pom" "https://repo.gradle.org/gradle/libs-releases/org/slf4j/slf4j-parent/2.0.0-alpha0/slf4j-parent-2.0.0-alpha0.pom"
], ],
"sha256": "bafba30a83d53a94550196447562aa8cdad145615c28932c6a4bb441c3553101" "sha256": "142150b6369e5e1160515c00ea8656e9f5afd11b19bf079400fc1e19201b22f4"
}, },
{ {
"name": "org.slf4j-slf4j-simple-1.8.0-beta4-jar", "name": "org.slf4j-slf4j-simple-2.0.0-alpha0-jar",
"filename": "slf4j-simple-1.8.0-beta4.jar", "filename": "slf4j-simple-2.0.0-alpha0.jar",
"path": "org/slf4j/slf4j-simple/1.8.0-beta4", "path": "org/slf4j/slf4j-simple/2.0.0-alpha0",
"urls": [ "urls": [
"https://jcenter.bintray.com/org/slf4j/slf4j-simple/1.8.0-beta4/slf4j-simple-1.8.0-beta4.jar", "https://jcenter.bintray.com/org/slf4j/slf4j-simple/2.0.0-alpha0/slf4j-simple-2.0.0-alpha0.jar",
"https://repo.gradle.org/gradle/libs-releases/org/slf4j/slf4j-simple/1.8.0-beta4/slf4j-simple-1.8.0-beta4.jar" "https://repo.gradle.org/gradle/libs-releases/org/slf4j/slf4j-simple/2.0.0-alpha0/slf4j-simple-2.0.0-alpha0.jar"
], ],
"sha256": "bac66abc5b4462dff62e1e19ab3b0a65c160ebcd564cf25910db003a8e569cfd" "sha256": "482f0699a76e537e05ed55968fe4e076655a20e80f7e2a30e9cb4e4549fd24f4"
}, },
{ {
"name": "org.slf4j-slf4j-simple-1.8.0-beta4-pom", "name": "org.slf4j-slf4j-simple-2.0.0-alpha0-pom",
"filename": "slf4j-simple-1.8.0-beta4.pom", "filename": "slf4j-simple-2.0.0-alpha0.pom",
"path": "org/slf4j/slf4j-simple/1.8.0-beta4", "path": "org/slf4j/slf4j-simple/2.0.0-alpha0",
"urls": [ "urls": [
"https://jcenter.bintray.com/org/slf4j/slf4j-simple/1.8.0-beta4/slf4j-simple-1.8.0-beta4.pom", "https://jcenter.bintray.com/org/slf4j/slf4j-simple/2.0.0-alpha0/slf4j-simple-2.0.0-alpha0.pom",
"https://repo.gradle.org/gradle/libs-releases/org/slf4j/slf4j-simple/1.8.0-beta4/slf4j-simple-1.8.0-beta4.pom" "https://repo.gradle.org/gradle/libs-releases/org/slf4j/slf4j-simple/2.0.0-alpha0/slf4j-simple-2.0.0-alpha0.pom"
], ],
"sha256": "a17ad2e8e534d0e819ea8d14213de748d4650fff2a257d3e92a13da310287bf7" "sha256": "a5f8d5c14cdea2ddc65ddf4e7ff0a8b67aa887f610538badee3f22890b8f0489"
}, },
{ {
"name": "org.sonatype.oss-oss-parent-7-pom", "name": "org.sonatype.oss-oss-parent-7-pom",

View File

@@ -1,51 +1,130 @@
# This file is generated by gradle2nix. # This file is generated by gradle2nix.
#
# Example usage (e.g. in default.nix):
#
# with (import <nixpkgs> {});
# let
# buildGradle = callPackage ./gradleEnv.nix {};
# in
# buildGradle {
# envSpec = ./gradle-env.json;
#
# src = ./.;
#
# gradleFlags = [ "installDist" ];
#
# installPhase = ''
# mkdir -p $out
# cp -r app/build/install/myproject $out
# '';
# }
{ stdenvNoCC, lib, buildEnv, fetchurl }: { stdenv, lib, buildEnv, fetchurl, gradleGen, writeText }:
{ path, env, repositories, artifacts }@args: { envSpec
, pname ? null
, version ? null
, enableParallelBuilding ? true
, gradleFlags ? [ "build" ]
, gradlePackage ? null
, ... } @ args:
let let
mkPath = artifact: with artifact; lib.concatStringsSep "/" [ mkDep = depSpec: stdenv.mkDerivation {
(lib.replaceChars ["."] ["/"] artifact.groupId) inherit (depSpec) name;
artifact.artifactId
artifact.version
];
mkFilename = artifact: with artifact;
"${artifactId}-${version}${lib.optionalString (classifier != "") "-${classifier}"}.${extension}";
mkArtifactUrl = base: artifact:
"${lib.removeSuffix "/" base}/${mkPath artifact}/${mkFilename artifact}";
fetchArtifact = artifact:
let
artifactPath = mkPath artifact;
artifactName = mkFilename artifact;
in stdenvNoCC.mkDerivation rec {
name = with artifact; lib.concatStrings [
(lib.replaceChars ["."] ["_"] groupId) "-"
(lib.replaceChars ["."] ["_"] artifactId) "-"
version
(lib.optionalString (classifier != "") "-${classifier}")
"-" extension
];
src = fetchurl { src = fetchurl {
name = mkFilename artifact; inherit (depSpec) urls sha256;
urls = map (url: mkArtifactUrl url artifact) repositories;
inherit (artifact) sha256;
}; };
phases = "installPhase fixupPhase"; phases = "installPhase fixupPhase";
installPhase = '' installPhase = ''
mkdir -p $out/${artifactPath} mkdir -p $out/${depSpec.path}
ln -s ${src} $out/${artifactPath}/${artifactName} ln -s $src $out/${depSpec.path}/${depSpec.filename}
''; '';
}; };
mkRepo = project: type: deps: buildEnv {
name = "${project}-gradle-${type}-env";
paths = map mkDep deps;
};
mkInitScript = projectSpec:
let
repos = builtins.mapAttrs (mkRepo projectSpec.name) projectSpec.dependencies;
in in
buildEnv { writeText "init.gradle" ''
name = "gradle-env-${builtins.replaceStrings [":"] ["-"] path}-${env}"; gradle.settingsEvaluated {
paths = map fetchArtifact artifacts; it.pluginManagement.repositories {
clear()
maven { url = uri("${repos.plugin}") }
} }
}
gradle.projectsLoaded {
allprojects {
buildscript {
repositories {
clear()
maven { url = uri("${repos.buildscript}") }
}
}
repositories {
clear()
maven { url = uri("${repos.project}") }
}
}
}
'';
mkGradle = gradleSpec:
gradleGen.gradleGen {
inherit (gradleSpec) nativeVersion;
name = "gradle-${gradleSpec.version}-${gradleSpec.type}";
src = fetchurl {
inherit (gradleSpec) url sha256;
};
};
mkProjectEnv = projectSpec: {
inherit (projectSpec) name version;
initScript = mkInitScript projectSpec;
gradle = args.gradlePackage or mkGradle projectSpec.gradle;
};
gradleEnv = builtins.mapAttrs
(_: p: mkProjectEnv p)
(builtins.fromJSON (builtins.readFile envSpec));
projectEnv = gradleEnv."";
pname = args.pname or projectEnv.name;
version = args.version or projectEnv.version;
in stdenv.mkDerivation (args // {
inherit pname version;
nativeBuildInputs = (args.nativeBuildInputs or []) ++ [ projectEnv.gradle ];
buildPhase = args.buildPhase or ''
runHook preBuild
(
set -x
env \
"GRADLE_USER_HOME=$(mktemp -d)" \
gradle --offline --no-daemon --no-build-cache \
--info --full-stacktrace --warning-mode=all \
${lib.optionalString enableParallelBuilding "--parallel"} \
--init-script ${projectEnv.initScript} \
${builtins.concatStringsSep " " gradleFlags}
)
runHook postBuild
'';
dontStrip = true;
})

View File

@@ -1,7 +0,0 @@
{
"version": "5.4.1",
"type": "all",
"url": "https://services.gradle.org/distributions/gradle-5.4.1-all.zip",
"sha256": "14cd15fc8cc8705bd69dcfa3c8fefb27eb7027f5de4b47a8b279218f76895a91",
"nativeVersion": "0.17"
}

File diff suppressed because it is too large Load Diff

View File

@@ -49,6 +49,7 @@ data class DefaultGradle(
@JsonClass(generateAdapter = true) @JsonClass(generateAdapter = true)
data class DefaultProject( data class DefaultProject(
override val name: String, override val name: String,
override val version: String,
override val path: String, override val path: String,
override val projectDir: String, override val projectDir: String,
override val buildscriptDependencies: DefaultDependencies, override val buildscriptDependencies: DefaultDependencies,
@@ -57,6 +58,7 @@ data class DefaultProject(
) : Project, Serializable { ) : Project, Serializable {
constructor(model: Project) : this( constructor(model: Project) : this(
model.name, model.name,
model.version,
model.path, model.path,
model.projectDir, model.projectDir,
DefaultDependencies(model.buildscriptDependencies), DefaultDependencies(model.buildscriptDependencies),

View File

@@ -22,6 +22,7 @@ interface Gradle {
interface Project { interface Project {
val name: String val name: String
val version: String
val path: String val path: String
val projectDir: String val projectDir: String
val buildscriptDependencies: Dependencies val buildscriptDependencies: Dependencies

View File

@@ -101,6 +101,7 @@ private fun Project.buildProject(
): DefaultProject = ): DefaultProject =
DefaultProject( DefaultProject(
name = name, name = name,
version = version.toString(),
path = path, path = path,
projectDir = projectDir.toRelativeString(rootProject.projectDir), projectDir = projectDir.toRelativeString(rootProject.projectDir),
buildscriptDependencies = buildscriptDependencies(plugins), buildscriptDependencies = buildscriptDependencies(plugins),