Open GetPsyched opened 3 months ago
Thanks for testing! I was able to build this with the following flake:
{
inputs = {
gradle2nix.url = "github:tadfisher/gradle2nix/v2";
};
outputs = { self, gradle2nix }: {
packages.x86_64-linux.default = gradle2nix.builders.x86_64-linux.buildGradlePackage {
pname = "ATLauncher";
version = "3.4.37.0";
src = ./.;
# Generated with:
# nix run github:tadfisher/gradle2nix -- -t build -- -x test
lockFile = ./gradle.lock;
gradleFlags = [ "build" "-x" "test" ];
installPhase = ''
# TODO
'';
};
};
}
Note the build flags build -x test
, which is the same as used in their CI.
The install phase will probably have to recreate what they do in packaging/aur/atlauncher/PKGBUILD
.
As far as the Gradle Enterprise plugin goes, I don't see any references to it in the repo and I didn't run into the build attempting to use it, so I think it may be leaking from your environment (e.g. it's in ~/.gradle/init.gradle
, ~/.gradle/init.d/*
, or similar). If you're using a Nix shell, try the --ignore-environment
flag, or set GRADLE_USER_HOME
to a different directory.
Running nix run github:tadfisher/gradle2nix -- -t build -- -x test
on the default branch gives this error:
λ nix run github:tadfisher/gradle2nix -- -t build -- -x test
error: hash mismatch in fixed-output derivation '/nix/store/a56mz008i9cnfmxrqszlfcvb3ysjq79l-jackson-parent-2.12.pom.drv':
specified: sha256-Z749r6r4zhcX56fefbkrpDPfkjtpekDJdDpUzJ/FNjc=
got: sha256-YqocFnmt4J8XPb8bbDLTXFXnWAAjj9XkjxOqQzfAh1s=
error: 1 dependencies of derivation '/nix/store/dgfnxv0as8q7f6qfc0slqw66wxg5c3ph-jackson-parent-2.12.pom.drv' failed to build
error: 1 dependencies of derivation '/nix/store/17sz3jbmcmsgd1hwqlzsm9bkl7amf9g5-gradle2nix-gradle-plugin-env.drv' failed to build
error: 1 dependencies of derivation '/nix/store/a5zyny6vhxx4l2jiz812qwiysy1a54fx-init.gradle.drv' failed to build
error: 1 dependencies of derivation '/nix/store/s7rbzczmbqbwjkig6qk1p5m4g8n70nd8-gradle2nix-1.0.0-rc2.drv' failed to build
I tried running it with v2
and I at least got through the hash error, but with these new flags I can't generate the lock file.
My initial guess was that you're using a different version of ATLauncher so you didn't get errors; but I noticed the version you're using is from the future haha. So, versioning is not the issue. Hmm.
As far as the Gradle Enterprise thing goes, I don't have Gradle globally on my system => no .gradle/
directory. Not sure what caused that error.
D'oh! The command should be nix run github:tadfisher/gradle2nix/v2 -- -t build -- -x test
.
Yes, I did run that; but that failed with some other errors. I've attached them in the little > Error
in my previous message.
Hmm, createExe
isn't going to work unless you're on a Windows system. Does ./gradlew build -x test
work when you check out the repo?
Another thing I just thought of is that I have nix-ld
installed on my system, so I'm wondering if that leaks into the nix sandbox. This would be really important to test, preferably in a CI job.
Hmm,
createExe
isn't going to work unless you're on a Windows system. Does./gradlew build -x test
work when you check out the repo?
I've tried it locally and I get the same error. However, I copy pasted the exact command it's trying to run:
/home/getpsyched/ATLauncher/build/tmp/launch4j/3.50/bin/windres --preprocessor=cat -J rc -O coff -F pe-i386 /tmp/launch4j11778579013791295609rc /tmp/launch4j9271147981423588548o
And I get the following output:
Could not start dynamically linked executable: /home/getpsyched/ATLauncher/build/tmp/launch4j/3.50/bin/windres
NixOS cannot run dynamically linked executables intended for generic
linux environments out of the box. For more information, see:
https://nix.dev/permalink/stub-ld
I'm guessing that's exactly why createExe
fails.
createExe
is likely not Windows-only since running ./gradlew build -x test -x createExe
completes successfully except there's no executable in dist/
.
I've got a package running with the following build flags:
gradleFlags = [ "build" "--exclude-task" "test" "--exclude-task" "createExe" ];
See: https://github.com/GetPsyched/homeless-shelter/blob/atlauncher/packages/atlauncher.nix
But since we're excluding createExe
, we don't get any executables in dist/
, only the JAR
which I can wrap into an executable. This isn't ideal.
Yeah, so the problem isn't gradle2nix per se, it's that launchj
runs a binary that links against system libraries. This is unfortunate but could be hacked around. First step for me is to disable nix-ld
and raise an issue on nixpkgs, then try to reproduce the problem.
Raise an issue for what exactly? Also, should I close this issue? The problem is out of scope of gradle2nix now.
I have tried packaging ATLauncher with a simple script given below:
FWIW, I ran
nix build -f "https://github.com/tadfisher/gradle2nix/archive/v2.tar.gz"
to get thegradle2nix
executable to generate the lock file.When I run this derivation, I get the following error:
Error
``` @nix { "action": "setPhase", "phase": "unpackPhase" } Running phase: unpackPhase unpacking source archive /nix/store/0rdrzs99vwzxd2wm0c8fsln7aplinqxw-source source root is source @nix { "action": "setPhase", "phase": "patchPhase" } Running phase: patchPhase @nix { "action": "setPhase", "phase": "updateAutotoolsGnuConfigScriptsPhase" } Running phase: updateAutotoolsGnuConfigScriptsPhase @nix { "action": "setPhase", "phase": "configurePhase" } Running phase: configurePhase no configure script, doing nothing @nix { "action": "setPhase", "phase": "buildPhase" } Running phase: buildPhase ++ export NIX_OFFLINE_REPO=/nix/store/nxs0r7zli8sjl9y4vzf1wi5hdl5bmcfg-atlauncher-3.4.36.5-gradle-repo ++ NIX_OFFLINE_REPO=/nix/store/nxs0r7zli8sjl9y4vzf1wi5hdl5bmcfg-atlauncher-3.4.36.5-gradle-repo +++ mktemp -d ++ export GRADLE_USER_HOME=/build/tmp.USK9zYbGAj ++ GRADLE_USER_HOME=/build/tmp.USK9zYbGAj ++ gradle --console=plain --no-build-cache --no-configuration-cache --no-daemon --no-watch-fs --offline --parallel --init-script=/nix/store/b91yhihd33ripfhcblgf24v1rb3jnck8-init.gradle --inf> Initialized native services in: /build/tmp.USK9zYbGAj/native Initialized jansi services in: /build/tmp.USK9zYbGAj/native Welcome to Gradle 8.7! Here are the highlights of this release: - Compiling and testing with Java 22 - Cacheable Groovy script compilation - New methods in lazy collection properties For more details see https://docs.gradle.org/8.7/release-notes.html Received JVM installation metadata from '/nix/store/2vwkssqpzykk37r996cafq7x63imf4sp-openjdk-21+35/lib/openjdk': {JAVA_HOME=/nix/store/2vwkssqpzykk37r996cafq7x63imf4sp-openjdk-21+35/lib/open> Checking if the launcher JVM can be re-used for build. To be re-used, the launcher JVM needs to match the parameters required for the build process: --add-opens=java.base/java.util=ALL-UNNAM> To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to https://docs.gradle.org/8.7/userguide/gradle_daemon.html#sec:disabling> Starting process 'Gradle build daemon'. Working directory: /build/tmp.USK9zYbGAj/daemon/8.7 Command: /nix/store/2vwkssqpzykk37r996cafq7x63imf4sp-openjdk-21+35/lib/openjdk/bin/java --add-open> Successfully started process 'Gradle build daemon' An attempt to start the daemon took 0.505 secs. The client will now receive all logging from the daemon (pid: 66). The daemon log file: /build/tmp.USK9zYbGAj/daemon/8.7/daemon-66.out.log Closing daemon's stdin at end of input. The daemon will no longer process any standard input. Daemon will be stopped at the end of the build Using 16 worker leases. Received JVM installation metadata from '/nix/store/2vwkssqpzykk37r996cafq7x63imf4sp-openjdk-21+35/lib/openjdk': {JAVA_HOME=/nix/store/2vwkssqpzykk37r996cafq7x63imf4sp-openjdk-21+35/lib/open> Watching the file system is configured to be disabled File system watching is inactive Caching disabled for Groovy DSL script compilation (cp_init) because: Build cache is disabled Compiling initialization script '/nix/store/b91yhihd33ripfhcblgf24v1rb3jnck8-init.gradle' using SubsetScriptTransformer. Caching disabled for Groovy DSL script compilation (init) because: Build cache is disabled Compiling initialization script '/nix/store/b91yhihd33ripfhcblgf24v1rb3jnck8-init.gradle' using BuildScriptTransformer. Starting Build Caching disabled for Groovy DSL script compilation (cp_settings) because: Build cache is disabled Compiling settings file '/build/source/settings.gradle' using SubsetScriptTransformer. FAILURE: Build failed with an exception. * What went wrong: Could not resolve all artifacts for configuration 'classpath'. > Could not find com.gradle:gradle-enterprise-gradle-plugin:3.16.2. Required by: unspecified:unspecified:unspecified * Try: > Run with --stacktrace option to get the stack trace. > Run with --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. BUILD FAILED in 2s ```The error is pretty straightforward: It couldn't find
com.gradle:gradle-enterprise-gradle-plugin:3.16.2
. I tried finding this in the generatedgradle.lock
file and it wasn't there. So the executable couldn't find all the deps, perhaps?