mirror of
https://github.com/tadfisher/gradle2nix.git
synced 2026-01-11 23:40:37 -05:00
Resolve and apply settings buildscript dependencies
This commit is contained in:
65
app/src/dist/share/gradle-env.nix
vendored
65
app/src/dist/share/gradle-env.nix
vendored
@@ -32,12 +32,12 @@
|
||||
|
||||
let
|
||||
inherit (builtins)
|
||||
filter sort replaceStrings attrValues match fromJSON
|
||||
concatStringsSep;
|
||||
attrValues concatStringsSep filter fromJSON match replaceStrings sort;
|
||||
|
||||
inherit (stdenv.lib)
|
||||
versionOlder unique mapAttrs mapAttrsToList last concatMapStringsSep
|
||||
removeSuffix optionalString groupBy' readFile hasSuffix;
|
||||
assertMsg concatMapStringsSep groupBy' hasSuffix last mapAttrs
|
||||
mapAttrsToList optionalString readFile removeSuffix unique versionAtLeast
|
||||
versionOlder;
|
||||
|
||||
mkDep = depSpec: stdenv.mkDerivation {
|
||||
inherit (depSpec) name;
|
||||
@@ -176,10 +176,20 @@ let
|
||||
paths = map mkDep deps ++ mkModuleMetadata deps ++ mkSnapshotMetadata deps;
|
||||
};
|
||||
|
||||
mkInitScript = projectSpec:
|
||||
mkInitScript = projectSpec: gradle:
|
||||
let
|
||||
repos = mapAttrs (mkRepo projectSpec.name) projectSpec.dependencies;
|
||||
hasDependencies = mapAttrs (type: deps: deps != []) projectSpec.dependencies;
|
||||
in
|
||||
assert (assertMsg (hasDependencies.settings -> versionAtLeast gradle.version "6.0") ''
|
||||
Project `${projectSpec.name}' has settings script dependencies, such as settings
|
||||
plugins, which are not supported by gradle2nix for Gradle versions prior to 6.0.
|
||||
|
||||
Potential remedies:
|
||||
- Pass `--gradle-version=<version>' to the gradle2nix command.
|
||||
- Patch the `settings.gradle[.kts]' file to remove script dependencies.
|
||||
'');
|
||||
|
||||
writeText "init.gradle" ''
|
||||
static def offlineRepo(RepositoryHandler repositories, String env, String path) {
|
||||
repositories.clear()
|
||||
@@ -204,18 +214,35 @@ let
|
||||
}
|
||||
}
|
||||
|
||||
gradle.settingsEvaluated {
|
||||
offlineRepo(it.pluginManagement.repositories, "plugin", "${repos.plugin}")
|
||||
}
|
||||
${optionalString (hasDependencies.settings && (versionAtLeast gradle.version "6.0")) ''
|
||||
gradle.beforeSettings {
|
||||
offlineRepo(it.buildscript.repositories, "settings", "${repos.settings}")
|
||||
}
|
||||
''}
|
||||
|
||||
gradle.projectsLoaded {
|
||||
allprojects {
|
||||
buildscript {
|
||||
offlineRepo(repositories, "buildscript", "${repos.buildscript}")
|
||||
}
|
||||
offlineRepo(repositories, "project", "${repos.project}")
|
||||
}
|
||||
}
|
||||
${optionalString (hasDependencies.plugin) ''
|
||||
gradle.settingsEvaluated {
|
||||
offlineRepo(it.pluginManagement.repositories, "plugin", "${repos.plugin}")
|
||||
}
|
||||
''}
|
||||
|
||||
${optionalString (hasDependencies.buildscript) ''
|
||||
gradle.projectsLoaded {
|
||||
allprojects {
|
||||
buildscript {
|
||||
offlineRepo(repositories, "buildscript", "${repos.buildscript}")
|
||||
}
|
||||
}
|
||||
}
|
||||
''}
|
||||
|
||||
${optionalString (hasDependencies.project) ''
|
||||
gradle.projectsLoaded {
|
||||
allprojects {
|
||||
offlineRepo(repositories, "project", "${repos.project}")
|
||||
}
|
||||
}
|
||||
''}
|
||||
'';
|
||||
|
||||
mkGradle = gradleSpec:
|
||||
@@ -227,12 +254,14 @@ let
|
||||
src = fetchurl {
|
||||
inherit (gradleSpec) url sha256;
|
||||
};
|
||||
} // {
|
||||
inherit (gradleSpec) version;
|
||||
};
|
||||
|
||||
mkProjectEnv = projectSpec: {
|
||||
mkProjectEnv = projectSpec: rec {
|
||||
inherit (projectSpec) name path version;
|
||||
initScript = mkInitScript projectSpec;
|
||||
gradle = args.gradlePackage or mkGradle projectSpec.gradle;
|
||||
initScript = mkInitScript projectSpec gradle;
|
||||
};
|
||||
|
||||
gradleEnv = mapAttrs
|
||||
|
||||
@@ -19,6 +19,7 @@ fun buildEnv(builds: Map<String, DefaultBuild>): Map<String, NixGradleEnv> =
|
||||
path = path,
|
||||
gradle = build.gradle,
|
||||
dependencies = mapOf(
|
||||
"settings" to build.settingsDependencies,
|
||||
"plugin" to build.pluginDependencies,
|
||||
"buildscript" to build.rootProject.collectDependencies(DefaultProject::buildscriptDependencies),
|
||||
"project" to build.rootProject.collectDependencies(DefaultProject::projectDependencies)
|
||||
|
||||
Reference in New Issue
Block a user