Apply offline repo on-demand

This commit is contained in:
Tad Fisher
2024-05-29 12:37:44 -07:00
parent bdce8389fb
commit d13b7b0d6d

View File

@@ -214,71 +214,52 @@ let
paths = finalDependencies; paths = finalDependencies;
}; };
initScript = initScript = writeText "init.gradle" ''
let import org.gradle.util.GradleVersion
inSettings = pred: script:
optionalString pred ( static boolean versionAtLeast(String version) {
if versionAtLeast gradle.version "6.0" then '' return GradleVersion.current() >= GradleVersion.version(version)
gradle.beforeSettings { }
${script}
} static void configureRepos(RepositoryHandler repositories) {
'' else '' repositories.configureEach { ArtifactRepository repo ->
gradle.settingsEvaluated { if (repo instanceof MavenArtifactRepository) {
${script} repo.setArtifactUrls(new HashSet<URI>())
} repo.url 'file:${offlineRepo}'
'' repo.metadataSources {
);
in
writeText "init.gradle" ''
static def offlineRepo(RepositoryHandler repositories) {
repositories.clear()
repositories.mavenLocal {
url 'file:${offlineRepo}'
metadataSources {
gradleMetadata() gradleMetadata()
mavenPom() mavenPom()
artifact() artifact()
} }
} else if (repo instanceof IvyArtifactRepository) {
repo.url 'file:${offlineRepo}'
repo.layout('maven')
repo.metadataSources {
gradleMetadata()
ivyDescriptor()
artifact()
}
} else if (repo instanceof UrlArtifactRepository) {
repo.url 'file:/homeless-shelter'
} }
} }
}
${inSettings (versionAtLeast gradle.version "6.0") '' beforeSettings { settings ->
offlineRepo(it.buildscript.repositories) configureRepos(settings.pluginManagement.repositories)
''} configureRepos(settings.buildscript.repositories)
if (versionAtLeast("6.8")) {
${inSettings true '' configureRepos(settings.dependencyResolutionManagement.repositories)
offlineRepo(it.pluginManagement.repositories)
''}
gradle.projectsLoaded {
allprojects {
buildscript {
offlineRepo(repositories)
}
}
} }
}
${if versionAtLeast gradle.version "6.8" beforeProject { project ->
then '' configureRepos(project.buildscript.repositories)
gradle.beforeSettings { configureRepos(project.repositories)
it.dependencyResolutionManagement { }
offlineRepo(repositories)
repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
}
}
''
else ''
gradle.projectsLoaded {
allprojects {
offlineRepo(repositories)
}
}
''
}
${extraInit}
'';
${extraInit}
'';
buildGradlePackage = stdenv.mkDerivation (finalAttrs: { buildGradlePackage = stdenv.mkDerivation (finalAttrs: {
@@ -295,6 +276,8 @@ let
( (
set -eux set -eux
export NIX_OFFLINE_REPO='${offlineRepo}'
${optionalString (versionOlder finalAttrs.gradle.version "8.0") '' ${optionalString (versionOlder finalAttrs.gradle.version "8.0") ''
# Work around https://github.com/gradle/gradle/issues/1055 # Work around https://github.com/gradle/gradle/issues/1055
TMPHOME="$(mktemp -d)" TMPHOME="$(mktemp -d)"
@@ -303,7 +286,7 @@ let
cp ${initScript} $TMPHOME/ cp ${initScript} $TMPHOME/
''} ''}
gradle --offline --no-daemon --no-build-cache \ gradle --offline --no-daemon --no-build-cache --no-watch-fs \
--info --full-stacktrace --warning-mode=all \ --info --full-stacktrace --warning-mode=all \
--no-configuration-cache --console=plain \ --no-configuration-cache --console=plain \
-Dmaven.repo.local=${offlineRepo} \ -Dmaven.repo.local=${offlineRepo} \