mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-07-13 21:50:33 +03:00
memos: 0.13.2 -> 0.24.2, move to by-name, adopt
special thanks to @tecosaur for https://github.com/NixOS/nixpkgs/issues/257131#issuecomment-2643372737, which i used as inspiration for my changes Co-authored-by: TEC <git@tecosaur.net>
This commit is contained in:
parent
f1ecab6995
commit
29373c41f0
6 changed files with 145 additions and 6070 deletions
23
pkgs/by-name/me/memos/nixbuild-check.patch
Normal file
23
pkgs/by-name/me/memos/nixbuild-check.patch
Normal file
|
@ -0,0 +1,23 @@
|
|||
diff --git a/plugin/httpgetter/html_meta_test.go b/plugin/httpgetter/html_meta_test.go
|
||||
index d0b0d903..d1668db1 100644
|
||||
--- a/plugin/httpgetter/html_meta_test.go
|
||||
+++ b/plugin/httpgetter/html_meta_test.go
|
||||
@@ -2,7 +2,6 @@ package httpgetter
|
||||
|
||||
import (
|
||||
"errors"
|
||||
- "strings"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
@@ -30,10 +29,4 @@ func TestGetHTMLMetaForInternal(t *testing.T) {
|
||||
if _, err := GetHTMLMeta("http://localhost"); !errors.Is(err, ErrInternalIP) {
|
||||
t.Errorf("Expected error for resolved internal IP, got %v", err)
|
||||
}
|
||||
-
|
||||
- // test for redirected internal IP
|
||||
- // 49.232.126.226:1110 will redirects to 127.0.0.1
|
||||
- if _, err := GetHTMLMeta("http://49.232.126.226:1110"); !(errors.Is(err, ErrInternalIP) && strings.Contains(err.Error(), "redirect")) {
|
||||
- t.Errorf("Expected error for redirected internal IP, got %v", err)
|
||||
- }
|
||||
}
|
122
pkgs/by-name/me/memos/package.nix
Normal file
122
pkgs/by-name/me/memos/package.nix
Normal file
|
@ -0,0 +1,122 @@
|
|||
{
|
||||
fetchFromGitHub,
|
||||
buildGoModule,
|
||||
stdenvNoCC,
|
||||
nix-update-script,
|
||||
nodejs,
|
||||
lib,
|
||||
pnpm,
|
||||
buf,
|
||||
cacert,
|
||||
grpc-gateway,
|
||||
protoc-gen-go,
|
||||
protoc-gen-go-grpc,
|
||||
protoc-gen-validate,
|
||||
}:
|
||||
let
|
||||
version = "0.24.2";
|
||||
src = fetchFromGitHub {
|
||||
owner = "usememos";
|
||||
repo = "memos";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-DWOJ6+lUTbOzMLsfTDNZfhgNomajNCnNi7U1A+tqXm4=";
|
||||
};
|
||||
|
||||
protobufsGenerated = stdenvNoCC.mkDerivation {
|
||||
name = "memos-protobuf-gen";
|
||||
inherit src;
|
||||
|
||||
nativeBuildInputs = [
|
||||
buf
|
||||
cacert
|
||||
grpc-gateway
|
||||
protoc-gen-go
|
||||
protoc-gen-go-grpc
|
||||
protoc-gen-validate
|
||||
];
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
pushd proto
|
||||
HOME=$TMPDIR buf generate
|
||||
popd
|
||||
runHook postBuild
|
||||
'';
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
mkdir -p $out/{proto,web/src/types}
|
||||
cp -r {.,$out}/proto/gen
|
||||
cp -r {.,$out}/web/src/types/proto
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
outputHashMode = "recursive";
|
||||
outputHashAlgo = "sha256";
|
||||
outputHash = "sha256-u+Wq/fXvWTjXdhC2h6RCsn7pjdFJ+gUdTPRvrn9cZ+k=";
|
||||
};
|
||||
|
||||
frontend = stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = "memos-web";
|
||||
inherit version src;
|
||||
pnpmDeps = pnpm.fetchDeps {
|
||||
inherit (finalAttrs) pname version src;
|
||||
sourceRoot = "${finalAttrs.src.name}/web";
|
||||
hash = "sha256-lopCa7F/foZ42cAwCxE+TWAnglTZg8jY8eRWmeck/W8=";
|
||||
};
|
||||
pnpmRoot = "web";
|
||||
nativeBuildInputs = [
|
||||
nodejs
|
||||
pnpm.configHook
|
||||
];
|
||||
preBuild = ''
|
||||
cp -r {${protobufsGenerated},.}/web/src/types/proto
|
||||
'';
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
pnpm -C web build
|
||||
runHook postBuild
|
||||
'';
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
cp -r web/dist $out
|
||||
runHook postInstall
|
||||
'';
|
||||
});
|
||||
in
|
||||
buildGoModule {
|
||||
pname = "memos";
|
||||
inherit version src;
|
||||
|
||||
vendorHash = "sha256-hdL4N0tg/lYGTeiKl9P2QsV8HTxlvHfsSqsqq/C0cg8=";
|
||||
|
||||
preBuild = ''
|
||||
rm -rf server/router/frontend/dist
|
||||
cp -r ${frontend} server/router/frontend/dist
|
||||
cp -r {${protobufsGenerated},.}/proto/gen
|
||||
'';
|
||||
|
||||
patches = [
|
||||
# to be removed in next release (test was removed upstream as part of a bigger commit)
|
||||
./nixbuild-check.patch
|
||||
];
|
||||
|
||||
passthru.updateScript = nix-update-script {
|
||||
extraArgs = [
|
||||
"--subpackage"
|
||||
"memos-web"
|
||||
"--subpackage"
|
||||
"memos-protobuf-gen"
|
||||
];
|
||||
};
|
||||
|
||||
meta = {
|
||||
homepage = "https://usememos.com";
|
||||
description = "Lightweight, self-hosted memo hub";
|
||||
maintainers = with lib.maintainers; [
|
||||
indexyz
|
||||
kuflierl
|
||||
];
|
||||
license = lib.licenses.mit;
|
||||
mainProgram = "memos";
|
||||
};
|
||||
}
|
|
@ -1,61 +0,0 @@
|
|||
{
|
||||
fetchFromGitHub,
|
||||
buildGoModule,
|
||||
jq,
|
||||
buildNpmPackage,
|
||||
lib,
|
||||
makeWrapper,
|
||||
}:
|
||||
|
||||
let
|
||||
version = "0.13.2";
|
||||
src = fetchFromGitHub {
|
||||
owner = "usememos";
|
||||
repo = "memos";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-lcOZg5mlFPp04ZCm5GDhQfSwE2ahSmGhmdAw+pygK0A=";
|
||||
};
|
||||
|
||||
frontend = buildNpmPackage {
|
||||
pname = "memos-web";
|
||||
inherit version;
|
||||
|
||||
src = "${src}/web";
|
||||
|
||||
npmDepsHash = "sha256-36UcHE98dsGvYQWLIc/xgP8Q0IyJ7la0Qoo3lZqUcmw=";
|
||||
|
||||
postPatch = ''
|
||||
cp ${./package-lock.json} package-lock.json
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
cp -r dist $out
|
||||
'';
|
||||
};
|
||||
in
|
||||
buildGoModule {
|
||||
pname = "memos";
|
||||
inherit version src;
|
||||
|
||||
# check will unable to access network in sandbox
|
||||
doCheck = false;
|
||||
vendorHash = "sha256-UM/xeRvfvlq+jGzWpc3EU5GJ6Dt7RmTbSt9h3da6f8w=";
|
||||
|
||||
# Inject frontend assets into go embed
|
||||
prePatch = ''
|
||||
rm -rf server/dist
|
||||
cp -r ${frontend} server/dist
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
updateScript = ./update.sh;
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://usememos.com";
|
||||
description = "Lightweight, self-hosted memo hub";
|
||||
maintainers = with maintainers; [ indexyz ];
|
||||
license = licenses.mit;
|
||||
mainProgram = "memos";
|
||||
};
|
||||
}
|
5951
pkgs/servers/memos/package-lock.json
generated
5951
pkgs/servers/memos/package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -1,56 +0,0 @@
|
|||
#!/usr/bin/env nix-shell
|
||||
#!nix-shell -i bash -p nix wget nix-prefetch-github moreutils jq prefetch-npm-deps nodejs
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
TARGET_VERSION_REMOTE=$(curl -s https://api.github.com/repos/usememos/memos/releases/latest | jq -r ".tag_name")
|
||||
TARGET_VERSION=${TARGET_VERSION_REMOTE#v}
|
||||
|
||||
if [[ "$UPDATE_NIX_OLD_VERSION" == "$TARGET_VERSION" ]]; then
|
||||
echo "memos is up-to-date: ${UPDATE_NIX_OLD_VERSION}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
extractVendorHash() {
|
||||
original="${1?original hash missing}"
|
||||
result="$(nix-build -A memos.goModules 2>&1 | tail -n3 | grep 'got:' | cut -d: -f2- | xargs echo || true)"
|
||||
[ -z "$result" ] && { echo "$original"; } || { echo "$result"; }
|
||||
}
|
||||
|
||||
replaceHash() {
|
||||
old="${1?old hash missing}"
|
||||
new="${2?new hash missing}"
|
||||
awk -v OLD="$old" -v NEW="$new" '{
|
||||
if (i=index($0, OLD)) {
|
||||
$0 = substr($0, 1, i-1) NEW substr($0, i+length(OLD));
|
||||
}
|
||||
print $0;
|
||||
}' ./pkgs/servers/memos/default.nix | sponge ./pkgs/servers/memos/default.nix
|
||||
}
|
||||
|
||||
# change version number
|
||||
sed -e "s/version =.*;/version = \"$TARGET_VERSION\";/g" \
|
||||
-i ./pkgs/servers/memos/default.nix
|
||||
|
||||
# update hash
|
||||
SRC_HASH="$(nix-instantiate --eval -A memos.src.outputHash | tr -d '"')"
|
||||
NEW_HASH="$(nix-prefetch-github usememos memos --rev v$TARGET_VERSION | jq -r .hash)"
|
||||
|
||||
replaceHash "$SRC_HASH" "$NEW_HASH"
|
||||
|
||||
GO_HASH="$(nix-instantiate --eval -A memos.vendorHash | tr -d '"')"
|
||||
EMPTY_HASH="$(nix-instantiate --eval -A lib.fakeHash | tr -d '"')"
|
||||
replaceHash "$GO_HASH" "$EMPTY_HASH"
|
||||
replaceHash "$EMPTY_HASH" "$(extractVendorHash "$GO_HASH")"
|
||||
|
||||
# update src yarn lock
|
||||
SRC_FILE_BASE="https://raw.githubusercontent.com/usememos/memos/v$TARGET_VERSION"
|
||||
|
||||
trap 'rm -rf ./pkgs/servers/memos/package.json' EXIT
|
||||
pushd ./pkgs/servers/memos
|
||||
wget -q "$SRC_FILE_BASE/web/package.json"
|
||||
npm install --package-lock-only
|
||||
NPM_HASH=$(prefetch-npm-deps ./package-lock.json)
|
||||
popd
|
||||
|
||||
sed -i -E -e "s#npmDepsHash = \".*\"#npmDepsHash = \"$NPM_HASH\"#" ./pkgs/servers/memos/default.nix
|
|
@ -1125,8 +1125,6 @@ with pkgs;
|
|||
};
|
||||
};
|
||||
|
||||
memos = callPackage ../servers/memos { };
|
||||
|
||||
mkosi = python3Packages.callPackage ../tools/virtualization/mkosi { inherit systemd; };
|
||||
|
||||
mkosi-full = mkosi.override { withQemu = true; };
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue