repath-studio: also fetch git dependencies in FOD (#524015)
This commit is contained in:
@@ -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"}
|
||||
@@ -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;
|
||||
|
||||
@@ -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."
|
||||
|
||||
Reference in New Issue
Block a user