repath-studio: also fetch git dependencies in FOD (#524015)

This commit is contained in:
nixpkgs-ci[bot]
2026-05-30 08:17:13 +00:00
committed by GitHub
3 changed files with 46 additions and 71 deletions
@@ -1,14 +0,0 @@
diff --git a/deps.edn b/deps.edn
index 158801e..9456964 100644
--- a/deps.edn
+++ b/deps.edn
@@ -1,8 +1,7 @@
{:paths ["src"]
:deps {binaryage/devtools {:mvn/version "1.0.7"}
camel-snake-kebab/camel-snake-kebab {:mvn/version "0.4.3"}
- clj-kdtree/clj-kdtree {:git/url "https://github.com/abscondment/clj-kdtree.git"
- :sha "5ec321c5e8006db00fa8b45a8ed9eb0b8f3dd56d"
+ clj-kdtree/clj-kdtree {:local/root "@clj-kdtree_src@"
:deps/manifest :deps}
com.taoensso/tempura {:mvn/version "1.5.4"}
day8.re-frame/test {:mvn/version "0.1.7"}
+39 -22
View File
@@ -7,14 +7,15 @@
pkg-config,
electron,
chromium,
cacert,
clojure,
git,
vips,
writeShellScriptBin,
copyDesktopItems,
makeDesktopItem,
makeWrapper,
replaceVars,
nixosTests,
}:
@@ -30,15 +31,7 @@ buildNpmPackage (finalAttrs: {
};
patches = [
(replaceVars ./hardcode-git-paths.patch {
clj-kdtree_src = fetchFromGitHub {
owner = "abscondment";
repo = "clj-kdtree";
rev = "5ec321c5e8006db00fa8b45a8ed9eb0b8f3dd56d";
hash = "sha256-ZOv+9TxBsOnSSbfM7kJLP3cQH9FpgA15aETszg7YSes=";
};
})
# outputHash of manvenDeps changes each time `clojure` is updated
# outputHash of clojureHome changes each time `clojure` is updated
# https://github.com/ngi-nix/ngipkgs/pull/1727#discussion_r2470180998
./pin-clojure.patch
];
@@ -48,7 +41,7 @@ buildNpmPackage (finalAttrs: {
npmDepsHash = "sha256-gOk/hHWGLwAxPIBqasoUzfszPv911afb/VLn7w7g5KE=";
nativeBuildInputs = [
finalAttrs.passthru.clojureWithCache
finalAttrs.passthru.clojureWithHome
makeWrapper
copyDesktopItems
pkg-config # sharp
@@ -138,48 +131,72 @@ buildNpmPackage (finalAttrs: {
passthru = {
# this was taken and adapted from "logseq" package's nixpkgs derivation
mavenRepo = stdenv.mkDerivation {
name = "repath-studio-${finalAttrs.version}-maven-deps";
clojureHome = stdenv.mkDerivation {
name = "repath-studio-${finalAttrs.version}-clojure-home";
inherit (finalAttrs) src patches;
nativeBuildInputs = [ clojure ];
nativeBuildInputs = [
cacert
clojure
git
];
buildPhase = ''
runHook preBuild
export HOME="$(mktemp -d)"
mkdir -p "$out"
export HOME="$out"
export JAVA_TOOL_OPTIONS="-Duser.home=$out"
# -P -> resolve all normal deps
# -M:alias -> resolve extra-deps of the listed aliases
clj -Sdeps "{:mvn/local-repo \"$out\"}" -P -M:dev:cljs
clojure -P -M:dev:cljs
runHook postBuild
'';
# copied from buildMavenPackage
# keep only *.{pom,jar,sha1,nbm} and delete all ephemeral files with lastModified timestamps inside
installPhase = ''
runHook preInstall
find $out -type f \( \
# copied from buildMavenPackage
# keep only *.{pom,jar,sha1,nbm} and delete all ephemeral files with lastModified timestamps inside
find "$out/.m2/repository" -type f \( \
-name \*.lastUpdated \
-o -name resolver-status.properties \
-o -name _remote.repositories \) \
-delete
# remove .git pointers to the bare repos in _repos
find "$out/.gitlibs/libs" -type f -name .git -delete
# keep only the bare repo config files so the clojure CLI doesn't want to fetch the repos again
# but make them be empty for reproducibility
find "$out/.gitlibs/_repos" -type f -name "config" -print0 | while read -d "" f; do
rm -rf "$(dirname "$f")"
mkdir "$(dirname "$f")"
touch "$f"
done
# recreate .clojure with empty settings
rm -r "$out/.clojure"
mkdir -p "$out/.clojure/tools"
echo "{}" > "$out/.clojure/deps.edn"
echo "{}" > "$out/.clojure/tools/tools.edn"
runHook postInstall
'';
dontFixup = true;
outputHash = "sha256-fwKeKfOIAWj9HQdXpEafZuJz5jwXNKpkS0JmuP3FXo0=";
outputHash = "sha256-wpE6MAWXxrDq3Y8a+rr9PhBz9Qnj23HB+a+eselUf4Y=";
outputHashMode = "recursive";
outputHashAlgo = "sha256";
};
clojureWithCache = writeShellScriptBin "clojure" ''
exec ${lib.getExe' clojure "clojure"} -Sdeps '{:mvn/local-repo "${finalAttrs.passthru.mavenRepo}"}' "$@"
clojureWithHome = writeShellScriptBin "clojure" ''
export HOME="${finalAttrs.passthru.clojureHome}"
export JAVA_TOOL_OPTIONS="-Duser.home=${finalAttrs.passthru.clojureHome}"
exec ${lib.getExe' clojure "clojure"} "$@"
'';
updateScript = ./update.sh;
+7 -35
View File
@@ -24,7 +24,6 @@ NIXPKGS_PATH="$(git rev-parse --show-toplevel)"
PACKAGE_DIR="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
PACKAGE_FILE="$PACKAGE_DIR/package.nix"
PATCH_GIT_FILE="$PACKAGE_DIR/hardcode-git-paths.patch"
PATCH_CLJ_FILE="$PACKAGE_DIR/pin-clojure.patch"
pushd $NIXPKGS_PATH
@@ -58,55 +57,28 @@ cp deps.edn b/deps.edn
# insert clojure dep at start of :deps map
sed -i "0,/:deps {/s|:deps {|:deps {org.clojure/clojure {:mvn/version \"$clj_version\"}\n |" b/deps.edn
git diff --no-index --no-prefix a/deps.edn b/deps.edn >"$PATCH_CLJ_FILE" || true
git --no-pager diff --no-index --no-prefix a/deps.edn b/deps.edn >"$PATCH_CLJ_FILE" || true
rm -rf a b
# patches a dependency to be prefetched by nix
# clojure otherwise tries to fetch it at buildtime
# extract sha from clean deps.edn
clj_sha=$(grep -A 2 "clj-kdtree/clj-kdtree" deps.edn | grep -oP ':sha "\K[^"]+')
if [[ -z "$clj_sha" ]]; then
echo "Error: Could not extract clj-kdtree SHA from deps.edn" >&2
exit 1
fi
clj_hash=$(nix-prefetch-url --unpack "https://github.com/abscondment/clj-kdtree/archive/$clj_sha.tar.gz" --type sha256)
clj_hash=$(nix hash convert --hash-algo sha256 --from nix32 "$clj_hash")
sed -i "/owner = \"abscondment\"/,/hash =/ s/rev = \".*\"/rev = \"$clj_sha\"/" "$PACKAGE_FILE"
sed -i "/owner = \"abscondment\"/,/hash =/ s|hash = \".*\"|hash = \"$clj_hash\"|" "$PACKAGE_FILE"
mkdir -p a b
cp deps.edn a/deps.edn
cp deps.edn b/deps.edn
sed -i '/clj-kdtree\/clj-kdtree/,/:sha/c\ clj-kdtree/clj-kdtree {:local/root "@clj-kdtree_src@"' b/deps.edn
git diff --no-index --no-prefix a/deps.edn b/deps.edn >"$PATCH_GIT_FILE" || true
rm -rf a b
popd
# maven deps
# clojure home
dummy_hash="sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
sed -i "s|outputHash = \".*\";|outputHash = \"$dummy_hash\";|" "$PACKAGE_FILE"
# expect failure to get new hash
set +e
new_mvn_hash="$(
nix-build --no-link -A repath-studio.passthru.mavenRepo "$NIXPKGS_PATH" 2>&1 >/dev/null |
new_clj_home_hash="$(
nix-build --no-link -A repath-studio.passthru.clojureHome "$NIXPKGS_PATH" 2>&1 >/dev/null |
grep "got:" | cut -d':' -f2 | sed 's| ||g'
)"
set -e
if [[ -z "$new_mvn_hash" ]]; then
echo "Failed to get new maven hash." >&2
if [[ -z "$new_clj_home_hash" ]]; then
echo "Failed to get new clojure home hash." >&2
exit 1
fi
sed -i "s|\"$dummy_hash\"|\"$new_mvn_hash\"|g" "$PACKAGE_FILE"
sed -i "s|\"$dummy_hash\"|\"$new_clj_home_hash\"|g" "$PACKAGE_FILE"
echo "Update to $version complete."