It happned again,

also add metadata

gradle2nix doesnt put the 1.3.0 version of the forms library, so I had to add it to the gradle-env.json myself
This commit is contained in:
Daniel Løvbrøtte Olsen 2020-02-25 10:29:52 +00:00
parent fcf78b5e80
commit fd0a67450d
3 changed files with 3596 additions and 2664 deletions

View File

@ -27,6 +27,14 @@ buildGradle {
cat ./bin/source | sed 's~$JAVA_HOME~${openjdk11}~' > $out/bin/JAVMovieScraper cat ./bin/source | sed 's~$JAVA_HOME~${openjdk11}~' > $out/bin/JAVMovieScraper
chmod +x $out/bin/JAVMovieScraper chmod +x $out/bin/JAVMovieScraper
''; '';
meta = with pkgs.stdenv.lib; {
broken = true;
description = "A program to fetch metadata for Japanese Adult Video";
homepage = "https://github.com/DoctorD1501/JAVMovieScraper";
license = licenses.gpl2;
};
} }

File diff suppressed because it is too large Load Diff

View File

@ -19,7 +19,7 @@
# ''; # '';
# } # }
{ stdenv, lib, buildEnv, fetchurl, gradleGen, writeText }: { stdenv, buildEnv, fetchurl, gradleGen, writeText, writeTextDir }:
{ envSpec { envSpec
, pname ? null , pname ? null
@ -27,9 +27,18 @@
, enableParallelBuilding ? true , enableParallelBuilding ? true
, gradleFlags ? [ "build" ] , gradleFlags ? [ "build" ]
, gradlePackage ? null , gradlePackage ? null
, enableDebug ? false
, ... } @ args: , ... } @ args:
let let
inherit (builtins)
filter sort replaceStrings attrValues match fromJSON
concatStringsSep;
inherit (stdenv.lib)
versionOlder unique mapAttrs last concatMapStringsSep removeSuffix
optionalString groupBy' readFile hasSuffix;
mkDep = depSpec: stdenv.mkDerivation { mkDep = depSpec: stdenv.mkDerivation {
inherit (depSpec) name; inherit (depSpec) name;
@ -41,39 +50,170 @@ let
installPhase = '' installPhase = ''
mkdir -p $out/${depSpec.path} mkdir -p $out/${depSpec.path}
ln -s $src $out/${depSpec.path}/${depSpec.filename} ln -s $src $out/${depSpec.path}/${depSpec.name}
''; '';
}; };
mkModuleMetadata = deps:
let
ids = filter
(id: id.type == "pom")
(map (dep: dep.id) deps);
modules = groupBy'
(meta: id:
let
isNewer = versionOlder meta.latest id.version;
isNewerRelease =
!(hasSuffix "-SNAPSHOT" id.version) &&
versionOlder meta.release id.version;
in {
groupId = id.group;
artifactId = id.name;
latest = if isNewer then id.version else meta.latest;
release = if isNewerRelease then id.version else meta.release;
versions = meta.versions ++ [id.version];
}
)
{
latest = "";
release = "";
versions = [];
}
(id: "${replaceStrings ["."] ["/"] id.group}/${id.name}/maven-metadata.xml")
ids;
in
attrValues (mapAttrs (path: meta:
let
versions' = sort versionOlder (unique meta.versions);
in
with meta; writeTextDir path ''
<?xml version="1.0" encoding="UTF-8"?>
<metadata modelVersion="1.1">
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<versioning>
${optionalString (latest != "") "<latest>${latest}</latest>"}
${optionalString (release != "") "<release>${release}</release>"}
<versions>
${concatMapStringsSep "\n " (v: "<version>${v}</version>") versions'}
</versions>
</versioning>
</metadata>
''
) modules);
mkSnapshotMetadata = deps:
let
snapshotDeps = filter (dep: dep ? build && dep ? timestamp) deps;
modules = groupBy'
(meta: dep:
let
id = dep.id;
isNewer = dep.build > meta.buildNumber;
# Timestamp values can be bogus, e.g. jitpack.io
updated = if (match "[0-9]{8}\.[0-9]{6}" dep.timestamp) != null
then replaceStrings ["."] [""] dep.timestamp
else "";
in {
groupId = id.group;
artifactId = id.name;
version = id.version;
timestamp = if isNewer then dep.timestamp else meta.timestamp;
buildNumber = if isNewer then dep.build else meta.buildNumber;
lastUpdated = if isNewer then updated else meta.lastUpdated;
versions = meta.versions or [] ++ [{
classifier = id.classifier or "";
extension = id.extension;
value = "${removeSuffix "-SNAPSHOT" id.version}-${dep.timestamp}-${toString dep.build}";
updated = updated;
}];
}
)
{
timestamp = "";
buildNumber = -1;
lastUpdated = "";
}
(dep: "${replaceStrings ["."] ["/"] dep.id.group}/${dep.id.name}/${dep.id.version}/maven-metadata.xml")
snapshotDeps;
mkSnapshotVersion = version: ''
<snapshotVersion>
${optionalString (version.classifier != "") "<classifier>${version.classifier}</classifier>"}
<extension>${version.extension}</extension>
<value>${version.value}</value>
${optionalString (version.updated != "") "<updated>${version.updated}</updated>"}
</snapshotVersion>
'';
in
attrValues (mapAttrs (path: meta:
with meta; writeTextDir path ''
<?xml version="1.0" encoding="UTF-8"?>
<metadata modelVersion="1.1">
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${version}</version>
<versioning>
<snapshot>
${optionalString (timestamp != "") "<timestamp>${timestamp}</timestamp>"}
${optionalString (buildNumber != -1) "<buildNumber>${toString buildNumber}</buildNumber>"}
</snapshot>
${optionalString (lastUpdated != "") "<lastUpdated>${lastUpdated}</lastUpdated>"}
<snapshotVersions>
${concatMapStringsSep "\n " mkSnapshotVersion versions}
</snapshotVersions>
</versioning>
</metadata>
''
) modules);
mkRepo = project: type: deps: buildEnv { mkRepo = project: type: deps: buildEnv {
name = "${project}-gradle-${type}-env"; name = "${project}-gradle-${type}-env";
paths = map mkDep deps; paths = map mkDep deps ++ mkModuleMetadata deps ++ mkSnapshotMetadata deps;
}; };
mkInitScript = projectSpec: mkInitScript = projectSpec:
let let
repos = builtins.mapAttrs (mkRepo projectSpec.name) projectSpec.dependencies; repos = mapAttrs (mkRepo projectSpec.name) projectSpec.dependencies;
in in
writeText "init.gradle" '' writeText "init.gradle" ''
gradle.settingsEvaluated { static def offlineRepo(RepositoryHandler repositories, String env, String path) {
it.pluginManagement.repositories { repositories.clear()
clear() repositories.maven {
maven { url = uri("${repos.plugin}") } name "Nix''${env.capitalize()}MavenOffline"
url path
metadataSources {
it.gradleMetadata()
it.mavenPom()
it.artifact()
} }
} }
repositories.ivy {
name "Nix''${env.capitalize()}IvyOffline"
url path
layout "maven"
metadataSources {
it.gradleMetadata()
it.ivyDescriptor()
it.artifact()
}
}
}
gradle.settingsEvaluated {
offlineRepo(it.pluginManagement.repositories, "plugin", "${repos.plugin}")
}
gradle.projectsLoaded { gradle.projectsLoaded {
allprojects { allprojects {
buildscript { buildscript {
repositories { offlineRepo(repositories, "buildscript", "${repos.buildscript}")
clear()
maven { url = uri("${repos.buildscript}") }
}
}
repositories {
clear()
maven { url = uri("${repos.project}") }
} }
offlineRepo(repositories, "project", "${repos.project}")
} }
} }
''; '';
@ -95,9 +235,9 @@ let
gradle = args.gradlePackage or mkGradle projectSpec.gradle; gradle = args.gradlePackage or mkGradle projectSpec.gradle;
}; };
gradleEnv = builtins.mapAttrs gradleEnv = mapAttrs
(_: p: mkProjectEnv p) (_: p: mkProjectEnv p)
(builtins.fromJSON (builtins.readFile envSpec)); (fromJSON (readFile envSpec));
projectEnv = gradleEnv.""; projectEnv = gradleEnv."";
pname = args.pname or projectEnv.name; pname = args.pname or projectEnv.name;
@ -118,9 +258,10 @@ in stdenv.mkDerivation (args // {
"GRADLE_USER_HOME=$(mktemp -d)" \ "GRADLE_USER_HOME=$(mktemp -d)" \
gradle --offline --no-daemon --no-build-cache \ gradle --offline --no-daemon --no-build-cache \
--info --full-stacktrace --warning-mode=all \ --info --full-stacktrace --warning-mode=all \
${lib.optionalString enableParallelBuilding "--parallel"} \ ${optionalString enableParallelBuilding "--parallel"} \
${optionalString enableDebug "-Dorg.gradle.debug=true"} \
--init-script ${projectEnv.initScript} \ --init-script ${projectEnv.initScript} \
${builtins.concatStringsSep " " gradleFlags} ${concatStringsSep " " gradleFlags}
) )
runHook postBuild runHook postBuild