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,72 +214,53 @@ 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}
} }
'' else ''
gradle.settingsEvaluated { static void configureRepos(RepositoryHandler repositories) {
${script} repositories.configureEach { ArtifactRepository repo ->
} if (repo instanceof MavenArtifactRepository) {
'' repo.setArtifactUrls(new HashSet<URI>())
); repo.url 'file:${offlineRepo}'
in repo.metadataSources {
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") ''
offlineRepo(it.buildscript.repositories)
''}
${inSettings true ''
offlineRepo(it.pluginManagement.repositories)
''}
gradle.projectsLoaded {
allprojects {
buildscript {
offlineRepo(repositories)
} }
} }
} }
${if versionAtLeast gradle.version "6.8" beforeSettings { settings ->
then '' configureRepos(settings.pluginManagement.repositories)
gradle.beforeSettings { configureRepos(settings.buildscript.repositories)
it.dependencyResolutionManagement { if (versionAtLeast("6.8")) {
offlineRepo(repositories) configureRepos(settings.dependencyResolutionManagement.repositories)
repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
} }
} }
''
else '' beforeProject { project ->
gradle.projectsLoaded { configureRepos(project.buildscript.repositories)
allprojects { configureRepos(project.repositories)
offlineRepo(repositories)
}
}
''
} }
${extraInit} ${extraInit}
''; '';
buildGradlePackage = stdenv.mkDerivation (finalAttrs: { buildGradlePackage = stdenv.mkDerivation (finalAttrs: {
inherit buildJdk enableParallelBuilding enableDebug gradle gradleFlags pname version; inherit buildJdk enableParallelBuilding enableDebug gradle gradleFlags pname version;
@@ -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} \