Commit 3f3d22a7 authored by kuflierl's avatar kuflierl Committed by github-actions[bot]
Browse files

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: default avatarTEC <git@tecosaur.net>
(cherry picked from commit 29373c41)
parent 2e1496bf
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
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 −0
Original line number Diff line number Diff line
{
  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";
  };
}

pkgs/servers/memos/default.nix

deleted100644 → 0
+0 −61
Original line number Diff line number Diff line
{
  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";
  };
}
+0 −5951

File deleted.

Preview size limit exceeded, changes collapsed.

pkgs/servers/memos/update.sh

deleted100755 → 0
+0 −56
Original line number Diff line number Diff line
#!/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
Loading