Commit Graph
100 Commits
Author SHA1 Message Date
bo0tzzandCodex 1707635743 fix(server): require update access on the motion video when linking a live photo (#32606)
* fix(server): require update access on the motion video when linking a live photo

* chore: allow linking with existing shared link assets

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
(cherry picked from commit a7afb4c9e9d2f099f9204a41f62e17b54fca3b17)
2026-10-27 23:12:41 +03:00
bo0tzzandCodex d35a6613e6 chore: tighten auto-close template check (#32719)
(cherry picked from commit 2400de96668d3510a1a50dd1c658d483e9ad01aa)
2026-10-27 23:12:21 +03:00
bo0tzzandCodex 9669f7cc6e perf(server): use a createdAt range for "recently added" time buckets (#32434)
(cherry picked from commit cf719e733e6250e0fcd8f45d2e2c46f166d3557d)
2026-10-25 16:23:45 +03:00
bo0tzzandCodex b3bd5d1fd1 feat(server): remove deprecated password field from update-me (#32623)
* feat(server): remove deprecated password field from update-me

* fix: tests for removed password field

(cherry picked from commit 3f6a071203187681b6c06b977665dc624c431336)
2026-10-22 05:25:45 +03:00
bo0tzzandCodex ad9b368cb8 fix(server): exclude partners' locked assets from legacy search (#32604)
(cherry picked from commit 8dab52c7491c79cba742315dea8d7f5212915875)
2026-10-22 05:25:45 +03:00
bo0tzzandCodex 1332a30630 chore(deps): update dependency certifi to v2026.10.19 (#32636)
(cherry picked from commit cda02c46e6cb36cf17d54570b2a024c51111cdf0)
2026-10-22 05:25:15 +03:00
bo0tzzandCodex 648e5608b7 chore(deps): update python docker digests (#32635)
(cherry picked from commit f97b00284d5752c2cddced549527ae692e820957)
2026-10-22 05:25:14 +03:00
bo0tzzandCodex 01ba579766 perf(server): index updateId on asset_face, stack and workflow (#32432)
asset_face, stack and workflow were the only tables with an updateId
column but no index on it. Face and stack sync (AssetFacesV1/V2,
StacksV1, PartnerStacksV1) filter and order on updateId, so every mobile
sync seq-scanned every face on the instance and walked all of the user's
(or partners') stacks, even when nothing had changed. workflow isn't
synced; it gets the index for consistency.

Incremental sync with nothing changed, PG 14:

| query                              | before   | after    |
| ---------------------------------- | -------- | -------- |
| assetFace.getUpserts (425k faces)  | 33-37 ms | 0.15 ms  |
| stack.getUpserts (6k stacks)       | 0.8 ms   | 0.004 ms |
| partnerStack.getUpserts (6k)       | 0.6 ms   | 0.007 ms |

The face scan grows with the instance's face count (~10x that at 4M
faces); the stack one with the user's stack count.

(cherry picked from commit 9df807ed4a9536a28dad463270082095ec1fe94d)
2026-10-22 05:23:22 +03:00
bo0tzzandCodex e2864b6664 fix(server): do not expose album members to shared link viewers (#32607)
(cherry picked from commit 380f3e74e622938b6b6c450859df8655be4e21ba)
2026-10-22 05:23:22 +03:00
bo0tzzandCodex 1756d70fda fix(server): only set OAuth cookies for server-generated state (#32600)
(cherry picked from commit d468c468867edcbafd4d934d3ba97bee2414050f)
2026-10-22 05:23:22 +03:00
bo0tzzandCodex 5c0f0b498a fix(ci): remove scope labels when they no longer match (#31026)
(cherry picked from commit 5d7556fe6d0699fc932b94a328ecb5e5145a0fce)
2026-10-22 05:21:00 +03:00
bo0tzzandCodex c46f748412 chore: link CONTRIBUTING.md in issue and feature request templates (#32514)
(cherry picked from commit f1984aa0905626ee05b5fd9fdef3cf35b77d951e)
2026-10-22 05:21:00 +03:00
bo0tzzandCodex 59be6583b8 fix(server): only serve edited assets to shared links in archive downloads (#32562)
(cherry picked from commit cd47ee30676e8575a5048d12cde2ee86fc02b965)
2026-10-22 05:21:00 +03:00
bo0tzzandCodex aeefb962d4 fix(server): sanitize EXIF template variables and tighten storage path check (#32566)
(cherry picked from commit 6141f8bdbf6d21a14558d9f7d7325918023d1037)
2026-10-22 05:21:00 +03:00
bo0tzzandCodex f80be1030b fix(server): restrict partner timeline requests to timeline assets (#32565)
* fix(server): restrict partner timeline requests to timeline assets

* test(server): update medium timeline tests for consolidated check

(cherry picked from commit e9fb180f466a687cebda9b7e17cef403de4b81fa)
2026-10-22 05:21:00 +03:00
bo0tzzandCodex 7df744b684 fix(cli): only act on files that were sent in the bulk upload check (#32564)
(cherry picked from commit 9e20805e21c72b95f8c23f4985c8a20b4c3da12a)
2026-10-22 05:21:00 +03:00
bo0tzzandCodex c66634fcfd fix(server): escape template variables in custom email templates (#32563)
* fix(server): escape template variables in custom email templates

* fix(server): strip preview tags until stable

(cherry picked from commit 616839e8d43a9de21d0c9391847fba97ac41a759)
2026-10-22 05:21:00 +03:00
bo0tzzandCodex d92248c664 fix(server): require upload access for checksum duplicate check (#32559)
* fix(server): require upload access for checksum duplicate check

* fix(server): use the upload access check for the checksum short circuit

(cherry picked from commit 5c02b17495947d7332cce13273226082bd8ae2a1)
2026-10-22 05:21:00 +03:00
bo0tzzandCodex 67152772d2 fix(server): anchor plugin allowedHosts matching (#32560)
(cherry picked from commit 4acf935ba3ee7b6171e3965cb3ce47b2ba9bad1a)
2026-10-22 05:21:00 +03:00
bo0tzzandCodex 43848a7d68 fix: locking around concurrency-1 jobs (#28410)
* fix: locking around concurrency-1 jobs

* fix: no lock on queue duplicates

(cherry picked from commit 477452b5c51ca71ecdf74205e0004eaec4e18874)
2026-10-22 05:19:10 +03:00
bo0tzzandCodex c4c5b8ae3a fix(server): apply shared link metadata visibility in asset mapper (#32561) 2026-10-19 20:31:26 +03:00
bo0tzzandCodex 8b288f9ee0 fix(ci): docs deploy and destroy terragrunt arguments (#32557) 2026-10-19 20:27:19 +03:00
bo0tzzandCodex 4fe7d42cfc perf(server): stop aggregating every album asset when loading a shared link (#32412)
SharedLinkRepository.get (shared link page load, /shared-links/me, and the
OpenGraph tags rendered for /share/:key) json_agg'd every asset of the
album, with its full exif row, ordered by fileCreatedAt. The only things
used from it are the asset count and the first/last localDateTime.

Load the album without assets and fill assetCount/startDate/endDate from
getMetadataForIds, which is what GET /albums/:id already uses. The counts
now also respect the default visibility filter, and the dates are
formatted the same as on /albums/:id.

150k-asset album link, PG 14:

|                        | before          | after  |
|------------------------|-----------------|--------|
| query                  | 4.2-6.5 s       | ~0.26 s (metadata aggregate) |
| JSON built by postgres | 261 MB          | -      |
| GET /shared-links/me   | -               | 0.28 s, 961 B |

(cherry picked from commit ac453b5557e42ad45962d3079a4e4450671053e9)
2026-10-14 21:24:13 +03:00
bo0tzzandCodex 1978b77a40 perf(server): stop loading every album asset to build album responses (#32413)
* perf(server): stop loading every album asset to build album responses

Album create, update (rename, description, cover, sort order, activity
toggle) and add-users json_agg'd every asset of the album with its exif
row, only for mapAlbum to read the count and the first/last
localDateTime. Use getMetadataForIds for those fields, as GET /albums/:id
already does, and drop the now unused withAssets option from getById.

The responses now carry the same date format and lastModifiedAssetTimestamp
as GET /albums/:id.

PATCH /albums/:id on a 150k-asset album, PG 14 (response is ~900 B either
way): 3.4-3.6 s -> 0.13-0.16 s.

* refactor(server): share album metadata mapping

(cherry picked from commit 2a4e876ec990a4a8d5fdca00291cbeebd3d1bccf)
2026-10-14 21:24:13 +03:00
bo0tzzandCodex c7a5ac3d11 perf(server): check shared link asset access without scanning the album (#32411)
* perf(server): check shared link asset access without scanning the album

checkSharedLinkAccess runs on every thumbnail, preview, playback and asset
info request made through a shared link. It joined every asset of the
link's album and only then filtered on an array overlap across four
outer-joined columns, so each request cost O(album size).

Split it into two branches (link assets, album assets) that find the
requested ids through the asset pkey / livePhotoVideoId index and then
probe the album_asset pkey.

Median per request, PG 14, 1.36M-asset instance:

| album behind the link | before | after   |
|-----------------------|--------|---------|
| 290 assets            | 2.1 ms | 0.17 ms |
| 150k assets           | 296 ms | 0.19 ms |

* chore: clean up

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
(cherry picked from commit bb024c862609c9e2baffc08fef795cfa3418df16)
2026-10-14 21:24:13 +03:00
bo0tzzandCodex 49cf2fdff2 chore: add compose textarea description to issue template (#32402)
Hopefully this stops people from just dropping "n/a" when they're using an unsupported deployment

(cherry picked from commit 5380498debd853191d46a8cf5322778d0c0d1b5c)
2026-10-13 21:49:29 +03:00
8ede1d54d8 fix(server): exclude hidden assets from large files search (#31479)
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-09-28 18:21:44 +02:00
bo0tzzandGitHub 6b978d0c0d chore: clean up hwaccel device_cgroup_rules (#31812) 2026-09-26 18:12:26 -04:00
bo0tzzandGitHub 9566fb7c74 fix: page path in better face clusters guide (#31671) 2026-09-22 16:31:32 -04:00
bo0tzzandGitHub f30488596c docs: link to the docker compose builder (#31610) 2026-09-16 09:22:15 -04:00
bo0tzzandGitHub 72f1034c58 fix: only run version check in production env (#31443) 2026-09-11 10:19:45 -04:00
bo0tzzandGitHub 86ae0dd06c fix: backport PRs requested review team (#31377) 2026-09-09 11:27:16 +00:00
bo0tzzGitHubgithub-actions <41898282+github-actions[bot]@users.noreply.github.com>
743770c8ab feat: new FAQ entries (#31227)
* feat: new FAQ entries

* chore: fix formatting

* add suggestion

* nit: wording

---------

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2026-09-03 12:08:36 -05:00
bo0tzzandGitHub b48266c3bb fix: don't force builds on release-base PRs (#31225) 2026-09-02 20:41:06 +02:00
bo0tzzandGitHub 9e1e595939 fix: add discussions perm to release publish token (#31167) 2026-09-01 15:41:42 +02:00
bo0tzzandGitHub 935c32e54a fix: workflows write perm on backport job (#31191) 2026-09-01 14:58:01 +02:00
bo0tzzandGitHub 5666d57f15 fix: open an announcement discussion for each release line (#31101) 2026-08-31 20:32:11 +02:00
bo0tzzandGitHub 469a870a22 fix: generate release notes from the previous release on the line (#31080) 2026-08-28 16:56:12 +02:00
bo0tzzandGitHub 6b478924b2 fix(e2e): wait out the duplicate #asset-grid during navigation (#31088) 2026-08-28 12:45:13 +02:00
bo0tzzandGitHub 1a8fcf1b9f fix(web): face editor coordinates on a not-yet-loaded video (#31083) 2026-08-28 09:20:54 +00:00
bo0tzzandGitHub 762f93798d chore: drop backport description header (#31067) 2026-08-27 22:53:14 +02:00
bo0tzzandGitHub 8a00ecda43 chore: drop backport label description (#31062) 2026-08-27 22:52:41 +02:00
bo0tzzandGitHub b912dcfab8 fix: avoid a concurrency deadlock when drafting a release (#31069) 2026-08-27 20:31:02 +00:00
bo0tzzandGitHub bbf201d16b fix: run codeql and weblate checks on release branches (#31065) 2026-08-27 20:17:42 +00:00
bo0tzzandGitHub 5baf181409 fix: build release branch images instead of re-tagging main (#31063) 2026-08-27 22:01:31 +02:00
bo0tzzandGitHub b8400dfe30 fix: check out the branch tip when preparing a release (#31061) 2026-08-27 21:40:55 +02:00
bo0tzzandGitHub 2ba343e138 fix: only run backport for labelled pull requests (#31052) 2026-08-27 14:39:55 +00:00
bo0tzzandGitHub b22483de33 feat: backport pull requests to release branches (#31035) 2026-08-27 15:10:07 +02:00
bo0tzzandGitHub a366db1494 feat: cut releases from release branches (#31033) 2026-08-27 15:10:07 +02:00
bo0tzzandGitHub 3be6b12292 feat: gate release publishing behind an approval (#31025) 2026-08-27 15:10:07 +02:00
bo0tzzandGitHub 0179e612a1 feat: split release preparation from drafting (#31024) 2026-08-27 15:10:06 +02:00
bo0tzzandGitHub 2c0f415a56 feat: only move floating docker tags for the newest release (#31030) 2026-08-27 12:30:39 +02:00
bo0tzzandGitHub 291ccdae95 feat: verify migration ORDER on every PR (#30998) 2026-08-26 15:25:00 +02:00
bo0tzzandGitHub a8c79469e5 feat(server): document and guard migration ORDER maintenance (#30997)
feat(server): add a migrations ORDER manifest
2026-08-26 15:24:59 +02:00
bo0tzzandGitHub f264573847 fix(server): point the migrations mise task at sql-tools (#30996) 2026-08-26 15:24:59 +02:00
bo0tzzandGitHub 6221e29c70 fix: throw a typed error on malformed api responses (#31006)
* fix: throw a typed error on malformed api responses

* fix: drop response body parse check

* fix(web): keep json response validation when overriding fetch (#31008)

* fix(cli): report malformed api responses (#31007)
2026-08-26 00:38:39 +00:00
bo0tzzandGitHub fbd5dc2c61 fix: don't swallow fetch errors (#30496) 2026-08-25 17:47:25 +02:00
bo0tzzandGitHub 821c933c51 fix(cli): enforce node engine version on start (#30437) 2026-08-18 16:17:43 -04:00
bo0tzzandGitHub 0344c61e4c feat: use version service for docs archive switcher (#30675) 2026-08-12 13:36:33 +02:00
bo0tzzandGitHub c7d7889ed0 fix: pass secrets to build-mobile (#29031) 2026-08-11 14:41:40 -04:00
bo0tzzandGitHub 9773d72428 chore: use gh release create instead of softprops action (#30577) 2026-08-11 14:55:27 +02:00
bo0tzzandGitHub cf17dcbfee feat: derive mobile build number from semver (#30569) 2026-08-11 12:45:32 +00:00
bo0tzzandGitHub 9273a4ca2a chore: rework docker build workflow (#30626) 2026-08-11 14:40:12 +02:00
bo0tzzandGitHub 8d086d61c4 chore: add good-first-issue llm rule to contributing.md (#30645) 2026-08-08 10:54:48 -05:00
bo0tzzandGitHub f361dbbb77 chore: clean up last mergify remnant (#30600) 2026-08-06 12:42:12 +02:00
bo0tzzandGitHub 46c42e0935 chore: delete mergify config (#30521) 2026-08-03 16:50:28 +02:00
bo0tzzandGitHub f1a90b7f36 feat: log hint about downgrades when migration is missing (#30493) 2026-08-03 11:06:38 +02:00
bo0tzzandGitHub 56fbca910e chore: skip e2e tests when the stack fails to start (#30414) 2026-07-30 15:17:57 -04:00
bo0tzzandGitHub 4a68a87531 fix: use trixie-slim base image for cli and e2e-auth-server (#30411)
The alpine suffix part wasn't getting updated by renovate, and the 3.20
chain stopped getting node updates too. This also just aligns the base
image distro with what we use elsewere.
2026-07-30 15:14:18 -04:00
bo0tzzandGitHub 7c44c29a8f chore: deflake album to asset backfill sync test (#30417) 2026-07-30 15:13:44 -04:00
bo0tzzandGitHub 6e1e79585e chore: install mise tools from the lockfile in the server image (#30416) 2026-07-30 15:13:12 -04:00
bo0tzzandGitHub 6afcc39fb2 chore: sequence pnpm installs in mise tasks (#30412) 2026-07-30 15:12:42 -04:00
bo0tzzandGitHub a316ba35ca fix: shared check for server setup availability (#30311)
* fix: shared check for server setup availability

* chore: add medium test

* feat: require @Authenticated decorator everywhere

* fix: lints
2026-07-30 15:12:25 -04:00
bo0tzzandGitHub 1f16fe16c2 chore: enable merge queue batching (#30410)
This waits for up to 2 min to group up to 3 PRs into the same draft. That should cut down on the amount of draft PRs that get created. The main downsides are the 2 minute wait when only queueing one PR, and less failure isolation: on an error, mergify has to do bisect runs to figure out which PR failed the batch, which takes more time than purely sequential operation. All of this can be tuned further of course.
2026-07-30 15:58:08 +00:00
bo0tzzandGitHub 4988c0a4c2 chore: update merge queue configuration (#30381)
Signed-off-by: null <null>
2026-07-29 20:39:37 +00:00
bo0tzzandGitHub af5ff4983a chore: skip release label validation on merge queue PRs (#30361) 2026-07-29 15:08:35 +00:00
bo0tzzandGitHub 3ab09352eb feat: add spam rule to CONTRIBUTING.md genAI section (#30355) 2026-07-29 14:17:49 +00:00
bo0tzzandGitHub b468459b1a chore: add test for admin controller permissions (#30316) 2026-07-28 15:44:51 +02:00
bo0tzzandGitHub 3606144190 chore: clarify MediaRepository extract logging (#30249) 2026-07-26 13:02:57 -04:00
bo0tzzandGitHub 4a5f13d0e5 fix: don't skip person thumbnail generation if ML is disabled (#30194) 2026-07-24 10:06:32 -04:00
bo0tzzandGitHub 457da17c5d fix: always set extension from provided file (#29839)
* fix: always set extension from provided file

The livephoto case can also happen with other files; for example, we
receive a DNG file as JPEG but then still call it .dng

Fixes #29805, partially addresses #28602

* chore: test cases for file extension naming
2026-07-22 18:29:54 +05:30
bo0tzzandGitHub 26e07548a7 chore: add GHSA as contact in security.txt (#29940) 2026-07-16 12:30:44 +02:00
bo0tzzandGitHub 2237078bd5 chore: bump create-workflow-token action to v3 (#29571) 2026-07-15 14:33:23 +02:00
bo0tzzandGitHub 89d31aaba1 feat: publish app releases to FUTO F-Droid repo (#29804)
* feat: publish app releases to FUTO F-Droid repo

* chore: separate parse step
2026-07-13 14:57:40 -05:00
f6d6dbc3c7 chore: remove pgvecto.rs from docs footnote (#29729)
* chore: remove pgvecto.rs from docs footnote

* Update docs/docs/install/environment-variables.md

Co-authored-by: Matthew Momjian <50788000+mmomjian@users.noreply.github.com>

---------

Co-authored-by: Matthew Momjian <50788000+mmomjian@users.noreply.github.com>
2026-07-09 11:36:26 -05:00
bo0tzzandGitHub d2a46ade78 chore: webhook headers ordering (#29695) 2026-07-07 12:09:57 +00:00
bo0tzzandGitHub 13d17b3a11 fix: re-add gCastEnabled negation (#29499) 2026-07-03 11:05:22 +02:00
bo0tzzandGitHub d3680871ef feat: warn if microservices worker is missing (#28869)
* feat: warn if microservices worker is missing

* fix: ci
2026-06-10 09:31:32 -04:00
bo0tzzandGitHub 70bb7e4b7e fix: step name reference in fix-format.yml (#28912) 2026-06-08 14:32:34 -04:00
bo0tzzandGitHub 98961a1d36 fix: filter close-duplicates for org members (#28856) 2026-06-05 10:34:29 -05:00
bo0tzzandGitHub 7155bb1e80 chore: fix up docs placeholders (#28814) 2026-06-04 08:19:40 -04:00
bo0tzzandGitHub 69b1946484 feat: handle prereleases in publish workflows (#28701) 2026-06-01 17:11:45 +02:00
bo0tzzandGitHub 61cd69a286 fix: strip rc suffix from iOS marketing version (#28741) 2026-06-01 09:56:43 -05:00
bo0tzzandGitHub a5a7380a26 feat: use lockfile for mise tools (#28503) 2026-05-20 11:37:33 +00:00
bo0tzzandGitHub 915d865ce2 chore: use custom sticky-comment action (#28505) 2026-05-19 20:25:46 +00:00
bo0tzzandGitHub e323e778cd fix: update server-commands subcommand list (#28402) 2026-05-13 09:27:25 -04:00
bo0tzzandGitHub 4791313def fix: manage oazapfts through mise (#28380) 2026-05-12 08:12:27 -04:00
bo0tzzandGitHub b4f719653f fix: indentation and typo (#28349)
* fix: indentation and typo

* neline
2026-05-11 09:17:39 -05:00
bo0tzzandGitHub f370b4bac6 chore: fold apk comment qr in <details> (#28348) 2026-05-11 09:40:19 -04:00
bo0tzzandGitHub bfdff12ee0 chore: use app token for mise in workflows (#28270) 2026-05-06 14:51:25 -04:00