mirror of
https://github.com/tadfisher/gradle2nix.git
synced 2026-01-11 23:40:37 -05:00
Fix self-hosting
This commit is contained in:
150
app/src/dist/share/gradle-env.nix
vendored
150
app/src/dist/share/gradle-env.nix
vendored
@@ -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;
|
||||||
|
})
|
||||||
|
|||||||
@@ -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> {
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
60
default.nix
60
default.nix
@@ -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;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
147
gradle-env.nix
147
gradle-env.nix
@@ -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;
|
||||||
|
})
|
||||||
|
|||||||
@@ -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
@@ -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),
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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),
|
||||||
|
|||||||
Reference in New Issue
Block a user