Loading nixos/modules/services/web-apps/immich.nix +15 −0 Original line number Diff line number Diff line Loading @@ -323,7 +323,11 @@ in "vchord" ]; sqlFile = pkgs.writeText "immich-pgvectors-setup.sql" ( # save previous version of vectorchord to trigger reindex on update lib.optionalString cfg.database.enableVectorChord '' SELECT COALESCE(installed_version, ''') AS vchord_version_before FROM pg_available_extensions WHERE name = 'vchord' \gset '' + '' ${lib.concatMapStringsSep "\n" (ext: "CREATE EXTENSION IF NOT EXISTS \"${ext}\";") extensions} ${lib.concatMapStringsSep "\n" (ext: "ALTER EXTENSION \"${ext}\" UPDATE;") extensions} ALTER SCHEMA public OWNER TO ${cfg.database.user}; Loading @@ -332,6 +336,17 @@ in ALTER SCHEMA vectors OWNER TO ${cfg.database.user}; GRANT SELECT ON TABLE pg_vector_index_stat TO ${cfg.database.user}; '' # trigger reindex if vectorchord updates # https://docs.immich.app/administration/postgres-standalone/#updating-vectorchord + lib.optionalString cfg.database.enableVectorChord '' SELECT COALESCE(installed_version, ''') AS vchord_version_after FROM pg_available_extensions WHERE name = 'vchord' \gset SELECT (:'vchord_version_before' != ''' AND :'vchord_version_before' != :'vchord_version_after') AS has_vchord_updated \gset \if :has_vchord_updated REINDEX INDEX face_index; REINDEX INDEX clip_index; \endif '' ); in [ Loading nixos/tests/all-tests.nix +1 −0 Original line number Diff line number Diff line Loading @@ -733,6 +733,7 @@ in immich = runTest ./web-apps/immich.nix; immich-public-proxy = runTest ./web-apps/immich-public-proxy.nix; immich-vectorchord-migration = runTest ./web-apps/immich-vectorchord-migration.nix; immich-vectorchord-reindex = runTest ./web-apps/immich-vectorchord-reindex.nix; incron = runTest ./incron.nix; incus = pkgs.recurseIntoAttrs ( handleTest ./incus { Loading nixos/tests/web-apps/immich-vectorchord-reindex.nix 0 → 100644 +74 −0 Original line number Diff line number Diff line { ... }: { name = "immich-vectorchord-reindex"; nodes.machine = { lib, pkgs, ... }: { # These tests need a little more juice virtualisation = { cores = 2; memorySize = 2048; diskSize = 4096; }; services.immich = { enable = true; environment.IMMICH_LOG_LEVEL = "verbose"; }; services.postgresql.extensions = lib.mkForce (ps: [ ps.pgvector # pin vectorchord to an older version simulate version bump (ps.vectorchord.overrideAttrs (prevAttrs': rec { version = "0.5.2"; src = pkgs.fetchFromGitHub { owner = "tensorchord"; repo = "vectorchord"; tag = version; hash = "sha256-KGwiY5t1ivFiYex3D20y3sdiu3CT9LCDd2fPnRE56jM="; }; cargoDeps = pkgs.rustPlatform.fetchCargoVendor { inherit src; hash = "sha256-Vn3c/xuUpQzERJ74I0qbvufTZtW3goefPa5B/nOUO48="; }; })) ]); specialisation."immich-vectorchord-upgraded".configuration = { # needs to be lower than mkForce, otherwise it does not get rid of the previous version services.postgresql.extensions = lib.mkOverride 40 (ps: [ ps.pgvector ps.vectorchord ]); }; }; testScript = { nodes, ... }: let specBase = "${nodes.machine.system.build.toplevel}/specialisation"; vectorchordUpgraded = "${specBase}/immich-vectorchord-upgraded"; in '' def immich_works(): machine.wait_for_unit("immich-server.service") machine.wait_for_open_port(2283) # Server machine.wait_for_open_port(3003) # Machine learning machine.succeed("curl --fail http://localhost:2283/") immich_works() machine.succeed("${vectorchordUpgraded}/bin/switch-to-configuration test") # just tests that reindexing is triggered machine.wait_until_succeeds( "journalctl -o cat -u postgresql-setup.service | grep 'REINDEX'" ) immich_works() ''; } pkgs/by-name/im/immich/package.nix +1 −1 Original line number Diff line number Diff line Loading @@ -251,7 +251,7 @@ stdenv.mkDerivation { passthru = { tests = { inherit (nixosTests) immich immich-vectorchord-migration; inherit (nixosTests) immich immich-vectorchord-migration immich-vectorchord-reindex; }; machine-learning = immich-machine-learning; Loading Loading
nixos/modules/services/web-apps/immich.nix +15 −0 Original line number Diff line number Diff line Loading @@ -323,7 +323,11 @@ in "vchord" ]; sqlFile = pkgs.writeText "immich-pgvectors-setup.sql" ( # save previous version of vectorchord to trigger reindex on update lib.optionalString cfg.database.enableVectorChord '' SELECT COALESCE(installed_version, ''') AS vchord_version_before FROM pg_available_extensions WHERE name = 'vchord' \gset '' + '' ${lib.concatMapStringsSep "\n" (ext: "CREATE EXTENSION IF NOT EXISTS \"${ext}\";") extensions} ${lib.concatMapStringsSep "\n" (ext: "ALTER EXTENSION \"${ext}\" UPDATE;") extensions} ALTER SCHEMA public OWNER TO ${cfg.database.user}; Loading @@ -332,6 +336,17 @@ in ALTER SCHEMA vectors OWNER TO ${cfg.database.user}; GRANT SELECT ON TABLE pg_vector_index_stat TO ${cfg.database.user}; '' # trigger reindex if vectorchord updates # https://docs.immich.app/administration/postgres-standalone/#updating-vectorchord + lib.optionalString cfg.database.enableVectorChord '' SELECT COALESCE(installed_version, ''') AS vchord_version_after FROM pg_available_extensions WHERE name = 'vchord' \gset SELECT (:'vchord_version_before' != ''' AND :'vchord_version_before' != :'vchord_version_after') AS has_vchord_updated \gset \if :has_vchord_updated REINDEX INDEX face_index; REINDEX INDEX clip_index; \endif '' ); in [ Loading
nixos/tests/all-tests.nix +1 −0 Original line number Diff line number Diff line Loading @@ -733,6 +733,7 @@ in immich = runTest ./web-apps/immich.nix; immich-public-proxy = runTest ./web-apps/immich-public-proxy.nix; immich-vectorchord-migration = runTest ./web-apps/immich-vectorchord-migration.nix; immich-vectorchord-reindex = runTest ./web-apps/immich-vectorchord-reindex.nix; incron = runTest ./incron.nix; incus = pkgs.recurseIntoAttrs ( handleTest ./incus { Loading
nixos/tests/web-apps/immich-vectorchord-reindex.nix 0 → 100644 +74 −0 Original line number Diff line number Diff line { ... }: { name = "immich-vectorchord-reindex"; nodes.machine = { lib, pkgs, ... }: { # These tests need a little more juice virtualisation = { cores = 2; memorySize = 2048; diskSize = 4096; }; services.immich = { enable = true; environment.IMMICH_LOG_LEVEL = "verbose"; }; services.postgresql.extensions = lib.mkForce (ps: [ ps.pgvector # pin vectorchord to an older version simulate version bump (ps.vectorchord.overrideAttrs (prevAttrs': rec { version = "0.5.2"; src = pkgs.fetchFromGitHub { owner = "tensorchord"; repo = "vectorchord"; tag = version; hash = "sha256-KGwiY5t1ivFiYex3D20y3sdiu3CT9LCDd2fPnRE56jM="; }; cargoDeps = pkgs.rustPlatform.fetchCargoVendor { inherit src; hash = "sha256-Vn3c/xuUpQzERJ74I0qbvufTZtW3goefPa5B/nOUO48="; }; })) ]); specialisation."immich-vectorchord-upgraded".configuration = { # needs to be lower than mkForce, otherwise it does not get rid of the previous version services.postgresql.extensions = lib.mkOverride 40 (ps: [ ps.pgvector ps.vectorchord ]); }; }; testScript = { nodes, ... }: let specBase = "${nodes.machine.system.build.toplevel}/specialisation"; vectorchordUpgraded = "${specBase}/immich-vectorchord-upgraded"; in '' def immich_works(): machine.wait_for_unit("immich-server.service") machine.wait_for_open_port(2283) # Server machine.wait_for_open_port(3003) # Machine learning machine.succeed("curl --fail http://localhost:2283/") immich_works() machine.succeed("${vectorchordUpgraded}/bin/switch-to-configuration test") # just tests that reindexing is triggered machine.wait_until_succeeds( "journalctl -o cat -u postgresql-setup.service | grep 'REINDEX'" ) immich_works() ''; }
pkgs/by-name/im/immich/package.nix +1 −1 Original line number Diff line number Diff line Loading @@ -251,7 +251,7 @@ stdenv.mkDerivation { passthru = { tests = { inherit (nixosTests) immich immich-vectorchord-migration; inherit (nixosTests) immich immich-vectorchord-migration immich-vectorchord-reindex; }; machine-learning = immich-machine-learning; Loading