nixpkgs/pkgs/by-name/li/libeufin/package.nix
2024-09-04 12:45:21 +02:00

124 lines
2.9 KiB
Nix

{
lib,
stdenv,
fetchgit,
python3,
jdk17_headless,
gradle,
makeWrapper,
postgresql,
postgresqlTestHook,
}:
let
customPython = python3.withPackages (p: [ p.setuptools ]);
in
stdenv.mkDerivation (finalAttrs: {
pname = "libeufin";
version = "0.13.0";
src = fetchgit {
url = "https://git.taler.net/libeufin.git/";
rev = "v${finalAttrs.version}";
hash = "sha256-whGcFZYuyeFfhu+mIi7oUNJRXjaVGuL67sfUrHF85Fs=";
fetchSubmodules = true;
leaveDotGit = true; # required for correct submodule fetching
# Delete .git folder for reproducibility (otherwise, the hash changes unexpectedly after fetching submodules)
# Save the HEAD short commit hash in a file so it can be retrieved later for versioning.
postFetch = ''
pushd $out
git rev-parse --short HEAD > ./common/src/main/resources/HEAD.txt
rm -rf .git
popd
'';
};
patchPhase = ''
runHook prePatch
# The .git folder had to be deleted. Read hash from file instead of using the git command.
substituteInPlace build.gradle \
--replace-fail "commandLine 'git', 'rev-parse', '--short', 'HEAD'" 'commandLine "cat", "$projectDir/common/src/main/resources/HEAD.txt"'
# Use gradle repo to download dependencies
substituteInPlace build.gradle \
--replace-fail 'mavenCentral()' "gradlePluginPortal()"
runHook postPatch
'';
preConfigure = ''
cp build-system/taler-build-scripts/configure ./configure
'';
mitmCache = gradle.fetchDeps {
inherit (finalAttrs) pname;
data = ./deps.json;
};
# this is required for using mitm-cache on Darwin
__darwinAllowLocalNetworking = true;
gradleFlags = [ "-Dorg.gradle.java.home=${jdk17_headless}" ];
gradleBuildTask = [
"bank:installShadowDist"
"nexus:installShadowDist"
];
nativeBuildInputs = [
customPython
jdk17_headless
gradle
makeWrapper
];
installPhase = ''
runHook preInstall
make install-nobuild
for exe in libeufin-nexus libeufin-bank ; do
wrapProgram $out/bin/$exe \
--set JAVA_HOME ${jdk17_headless.home} \
--prefix PATH : $out/bin \
--prefix PATH : ${lib.makeBinPath [ jdk17_headless ]} \
done
runHook postInstall
'';
# Tests need a database to run
nativeCheckInputs = [
postgresql
postgresqlTestHook
];
env = {
PGUSER = "nixbld";
PGDATABASE = "libeufincheck";
postgresqlTestUserOptions = "LOGIN SUPERUSER";
};
gradleCheckTask = [
"common:test"
"bank:test"
"nexus:test"
"testbench:test"
];
# TODO: tests are currently failing
doCheck = false;
meta = {
homepage = "https://git.taler.net/libeufin.git/";
description = "Integration and sandbox testing for FinTech APIs and data formats";
license = lib.licenses.agpl3Plus;
maintainers = with lib.maintainers; [ atemu ];
mainProgram = "libeufin-bank";
sourceProvenance = with lib.sourceTypes; [
fromSource
binaryBytecode # mitm cache
];
};
})