124 lines
2.9 KiB
Nix
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
|
||
|
];
|
||
|
};
|
||
|
})
|