Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 0 additions & 14 deletions pkgs/by-name/re/repath-studio/hardcode-git-paths.patch

This file was deleted.

61 changes: 39 additions & 22 deletions pkgs/by-name/re/repath-studio/package.nix
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,15 @@
pkg-config,
electron,
chromium,
cacert,
clojure,
git,
vips,

writeShellScriptBin,
copyDesktopItems,
makeDesktopItem,
makeWrapper,
replaceVars,

nixosTests,
}:
Expand All @@ -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
];
Expand All @@ -48,7 +41,7 @@ buildNpmPackage (finalAttrs: {
npmDepsHash = "sha256-gOk/hHWGLwAxPIBqasoUzfszPv911afb/VLn7w7g5KE=";

nativeBuildInputs = [
finalAttrs.passthru.clojureWithCache
finalAttrs.passthru.clojureWithHome
makeWrapper
copyDesktopItems
pkg-config # sharp
Expand Down Expand Up @@ -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;
Expand Down
42 changes: 7 additions & 35 deletions pkgs/by-name/re/repath-studio/update.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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."
Loading