Compare commits

...
Sign in to create a new pull request.

105 commits

Author SHA1 Message Date
67d692bdaa ii
Some checks failed
Release Charts / release (push) Has been cancelled
2025-06-05 22:01:55 +02:00
a4117cd560 ingres fix
Some checks are pending
Release Charts / release (push) Waiting to run
2025-06-05 21:59:01 +02:00
renovate[bot]
6b6e1f8d65
chore(deps): update dependency vitest to v3.2.1 (#110)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-03 18:27:19 +00:00
renovate[bot]
fb08ba9c2b
chore(deps): update dependency helm/helm to v3.18.2 (#107)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-02 15:22:11 +00:00
renovate[bot]
b1a8081799
chore(deps): update dependency vitest to v3.2.0 (#109)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
2025-06-02 15:20:57 +00:00
renovate[bot]
bf224da04d
chore(deps): update pnpm to v10.11.1 (#108)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-02 14:33:39 +00:00
renovate[bot]
069185b2b9
chore(deps): update dependency @types/node to v22.15.29 (#106)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-30 22:56:12 +00:00
renovate[bot]
283ddc1cfe
chore(deps): update dependency @types/node to v22.15.28 (#105)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-30 17:53:10 +00:00
renovate[bot]
40c7391711
chore(deps): update dependency @types/node to v22.15.27 (#104)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-30 07:05:35 +00:00
renovate[bot]
af057882b9
chore(deps): update dependency @types/node to v22.15.26 (#103)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-30 03:15:51 +00:00
Sebastian Poxhofer
907f2d1c6c
ci: fix unsupported minus by ArtifactHub.io (#102) 2025-05-29 16:40:29 +00:00
Sebastian Poxhofer
fa736054bb
ci: fix unsupported codeblock by ArtifactHub.io (#101) 2025-05-29 15:48:09 +00:00
renovate[bot]
9a36bf1c82
chore(deps): update dependency helm/helm to v3.18.1 (#100)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-29 08:35:36 +02:00
renovate[bot]
e33a31bd9b
chore(deps): update dependency @types/node to v22.15.24 (#99)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-28 19:44:21 +00:00
renovate[bot]
93c361bec8
chore(deps): update ghcr.io/immich-app/immich-server docker tag to v1.134.0 (#98)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-27 21:45:46 +00:00
renovate[bot]
1c421a1d4e
chore(deps): update dependency @types/node to v22.15.23 (#97)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-27 20:52:18 +00:00
Sebastian Poxhofer
e27e8b1bc6
ci: fix unsupported link by ArtifactHub.io (#96) 2025-05-25 23:08:58 +00:00
renovate[bot]
692b76f7f7
chore(deps): update ghcr.io/immich-app/immich-server docker tag to v1.133.1 (#95)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: secustor <sebastian@poxhofer.at>
2025-05-25 23:05:33 +02:00
renovate[bot]
c8f0df0754
chore(deps): update node.js to v22.16.0 (#94)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-21 19:29:13 +00:00
renovate[bot]
5e80bf9c41
chore(deps): update dependency @types/node to v22.15.21 (#93)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-20 23:23:18 +00:00
renovate[bot]
fc4613037c
chore(deps): update dependency @types/node to v22.15.20 (#92)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-20 20:07:28 +00:00
renovate[bot]
af5b75514a
chore(deps): update dependency helm/helm to v3.18.0 (#91)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-20 08:10:42 +02:00
renovate[bot]
ea51f043b0
chore(deps): update dependency vitest to v3.1.4 (#90)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-19 16:29:54 +00:00
renovate[bot]
715747c9c8
chore(deps): update dependency @types/node to v22.15.19 (#89)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-19 04:07:36 +00:00
renovate[bot]
f242232286
chore(deps): update node.js to v22.15.1 (#88)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-14 23:18:28 +00:00
renovate[bot]
43c77d95d3
chore(deps): update dependency @types/node to v22.15.18 (#87)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-14 08:41:01 +00:00
renovate[bot]
c692da620a
chore(deps): update pnpm to v10.11.0 (#86)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-13 19:48:37 +00:00
Sebastian Poxhofer
5fd8ee89b2
chore(renovate): add bumpVersions (#84) 2025-05-08 21:11:41 +00:00
renovate[bot]
1a42da071d
chore(deps): update dependency @types/node to v22.15.17 (#83)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-08 15:26:35 +00:00
renovate[bot]
994cd6ddda
chore(deps): update dependency @types/node to v22.15.16 (#82)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-08 07:33:59 +00:00
renovate[bot]
f3a23946ee
chore(deps): update dependency @types/node to v22.15.15 (#81)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-07 17:33:09 +00:00
renovate[bot]
8c7559fd5c
chore(deps): update dependency @types/node to v22.15.14 (#80)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-06 19:56:18 +00:00
renovate[bot]
4b02f948de
chore(deps): update dependency @types/node to v22.15.12 (#79)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-06 07:22:04 +00:00
renovate[bot]
96138e221b
chore(deps): update dependency @types/node to v22.15.11 (#78)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-06 04:14:13 +00:00
renovate[bot]
f7a71df21e
chore(deps): update dependency @types/node to v22.15.8 (#77)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-05 22:23:21 +00:00
renovate[bot]
c1d3681820
chore(deps): update dependency vitest to v3.1.3 (#76)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-05 15:47:26 +00:00
renovate[bot]
69f9cb0c11
chore(deps): update ghcr.io/immich-app/immich-server docker tag to v1.132.3 (#75)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
2025-04-29 12:21:11 +02:00
renovate[bot]
5d909b7b37
chore(deps): update dependency @types/node to v22.15.3 (#74)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-28 08:27:10 +00:00
renovate[bot]
6b89f088da
chore(deps): update pnpm to v10.10.0 (#73)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-28 03:11:46 +00:00
renovate[bot]
e5152f200c
chore(deps): update dependency @types/node to v22.15.2 (#72)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-25 07:31:18 +00:00
renovate[bot]
067318d9d3
chore(deps): update dependency @types/node to v22.15.1 (#71)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-25 03:58:25 +00:00
renovate[bot]
5ab52e0e67
chore(deps): update dependency @types/node to v22.15.0 (#70)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-24 20:41:03 +00:00
renovate[bot]
01fcc0c9bd
chore(deps): update ghcr.io/immich-app/immich-server docker tag to v1.132.1 (#69)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
2025-04-24 09:41:45 +02:00
renovate[bot]
35a9e2a613
chore(deps): update ghcr.io/immich-app/immich-server docker tag to v1.132.0 (#68)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
2025-04-23 23:31:40 +02:00
renovate[bot]
685ea72c87
chore(deps): update node.js to v22.15.0 (#67)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-23 12:29:30 +00:00
renovate[bot]
cf2760ff09
chore(deps): update pnpm to v10.9.0 (#66)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
2025-04-21 11:42:15 +00:00
renovate[bot]
fad214ed16
chore(deps): update dependency vitest to v3.1.2 (#65)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-21 09:39:34 +00:00
renovate[bot]
0ecec28059
chore(deps): update pnpm to v10.8.1 (#64)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-14 12:27:40 +00:00
renovate[bot]
850d1a9a5e
chore(deps): update actions/setup-node action to v4.4.0 (#63)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-14 07:11:11 +00:00
renovate[bot]
1d53922c99
chore(deps): update dependency @types/node to v22.14.1 (#62)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-11 22:16:57 +00:00
renovate[bot]
872c1231cf
chore(deps): update dependency helm/helm to v3.17.3 (#61)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-10 07:59:27 +02:00
renovate[bot]
d94f8d9e8d
chore(deps): update pnpm to v10.8.0 (#60)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-07 22:22:12 +00:00
renovate[bot]
39a90f09cb
chore(deps): update dependency vitest-mock-extended to v3.1.0 (#59)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-04 22:23:42 +00:00
renovate[bot]
d3e6110b1a
chore(deps): update dependency @types/node to v22.14.0 (#58)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-02 19:05:40 +00:00
renovate[bot]
50d15b2c7b
chore(deps): update ghcr.io/immich-app/immich-server docker tag to v1.131.3 (#57)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
2025-04-02 10:31:36 +01:00
renovate[bot]
b4dae6c438
chore(deps): update dependency @types/node to v22.13.17 (#56)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-01 18:11:40 +00:00
renovate[bot]
0cb7b3055d
chore(deps): update ghcr.io/immich-app/immich-server docker tag to v1.131.2 (#54)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
2025-04-01 18:10:45 +00:00
renovate[bot]
f3e2ab1fcc
chore(deps): update pnpm to v10.7.1 (#55)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-01 16:28:50 +00:00
renovate[bot]
f7d56bc654
chore(deps): update dependency @types/node to v22.13.16 (#53)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-01 10:41:29 +00:00
renovate[bot]
28ed2fa8dc
chore(deps): update ghcr.io/immich-app/immich-server docker tag to v1.131.1 (#52)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
2025-04-01 06:38:15 +01:00
renovate[bot]
eef6fbf448
chore(deps): update dependency vitest to v3.1.1 (#51)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-31 10:48:22 +00:00
renovate[bot]
44e93e3196
chore(deps): update ghcr.io/immich-app/immich-server docker tag to v1.130.3 (#50)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
2025-03-28 08:05:14 +01:00
renovate[bot]
3043fb5d08
chore(deps): update ghcr.io/immich-app/immich-server docker tag to v1.130.2 (#48)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
2025-03-27 06:25:24 +00:00
renovate[bot]
1ed00522fc
chore(deps): update dependency @types/node to v22.13.14 (#49)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-27 06:22:07 +00:00
renovate[bot]
b80180e5f4
chore(deps): update pnpm to v10.7.0 (#47)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-26 13:03:08 +00:00
renovate[bot]
21ffb09116
chore(deps): update ghcr.io/immich-app/immich-server docker tag to v1.130.1 (#46)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
2025-03-25 22:29:00 +01:00
renovate[bot]
cb4b507234
chore(deps): update dependency @types/node to v22.13.13 (#45)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-24 16:06:23 +00:00
renovate[bot]
3523727e9c
chore(deps): update dependency @types/node to v22.13.12 (#44)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-24 08:07:27 +00:00
renovate[bot]
1c663c2ad1
chore(deps): update pnpm to v10.6.5 (#41)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-21 18:22:36 +00:00
renovate[bot]
2c653d691d
chore(deps): update dependency @types/node to v22.13.11 (#43)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-21 18:21:44 +00:00
Sebastian Poxhofer
1e8f60da05
chore(renovate): use central config (#42) 2025-03-21 19:20:40 +01:00
renovate[bot]
128090ad04
chore(deps): update dependency vitest to v3.0.9 (#40)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-19 09:59:19 +00:00
renovate[bot]
d36ac827b2
chore(deps): update pnpm to v10.6.4 (#39)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-18 08:10:49 +01:00
renovate[bot]
184dbb3fe3
chore(deps): update actions/setup-node action to v4.3.0 (#38)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-17 07:47:11 +01:00
renovate[bot]
bf84049cfa
chore(deps): update docker/login-action action to v3.4.0 (#37)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-14 12:25:47 +01:00
renovate[bot]
fbeba37acf
chore(deps): update dependency helm/helm to v3.17.2 (#36)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-13 19:36:55 +01:00
renovate[bot]
14e800c83e
chore(deps): update pnpm to v10.6.3 (#35)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-13 17:13:26 +01:00
renovate[bot]
b396d40b82
chore(deps): update pnpm to v10.6.2 (#34)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-10 21:53:12 +01:00
renovate[bot]
0e16544870
chore(deps): update pnpm to v10.6.1 (#33)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-08 22:24:35 +00:00
renovate[bot]
9a2f67859a
chore(deps): update dependency prettier to v3.5.3 (#29)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-08 22:17:34 +00:00
renovate[bot]
64c435da49
chore(deps): update dependency vitest to v3.0.8 (#31)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-08 22:15:37 +00:00
renovate[bot]
3e9ecce90b
chore(deps): update ghcr.io/immich-app/immich-server docker tag to v1.129.0 (#32)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
2025-03-08 22:14:41 +00:00
renovate[bot]
c61d7239b4
chore(deps): update dependency @types/node to v22.13.10 (#28)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-08 22:08:08 +00:00
Sebastian Poxhofer
ef9927d030
chore(renovate): automerge dev dependencies (#30) 2025-03-08 22:07:02 +00:00
Sebastian Poxhofer
bf4743acac
ci(release): handle no folder gracefully (#27) 2025-03-01 01:20:00 +01:00
Sebastian Poxhofer
66adc32ff7
ci(release): skip if git tag already exists (#26) 2025-03-01 01:08:28 +01:00
Sebastian Poxhofer
3bcdef40e2
chore(immich): bump chart version (#25) 2025-02-28 23:30:45 +00:00
renovate[bot]
0863246c79
chore(deps): update ghcr.io/immich-app/immich-server docker tag to v1.128.0 (#22)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
2025-02-28 23:24:01 +00:00
renovate[bot]
a182d8e419
chore(deps): update dependency @types/node to v22.13.7 (#24)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-01 00:10:40 +01:00
Sebastian Poxhofer
394ce954f7
ci: use push-charts nodejs tool to manage push to GHCR.io (#23) 2025-02-28 23:56:34 +01:00
secustor
8994c62db5
ci(releaser): fix double charts prefix 2025-02-28 19:27:34 +01:00
secustor
e6c682248b
ci(releaser): use changed_charts output so only these charts are pushed 2025-02-28 19:26:06 +01:00
Sebastian Poxhofer
0f393d1fbf
ci: fix incorrectly set skip_existing flag 2025-02-28 13:49:43 +01:00
Sebastian Poxhofer
b39ac6c167
docs(immich): fix examples redis instance 2025-02-28 13:45:20 +01:00
renovate[bot]
23c6019427
chore(deps): update ghcr.io/immich-app/immich-server docker tag to v1.127.0 (#21) 2025-02-26 22:29:57 +01:00
renovate[bot]
d8796aadf7
chore(deps): update azure/setup-helm action to v4.3.0 (#20)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-18 13:42:38 +01:00
renovate[bot]
ed6ea37e8b
chore(deps): update dependency helm/helm to v3.17.1 (#19)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-13 00:53:14 +01:00
secustor
a09aa67b34
docs(immich): use absolute URL so it is rendered on ArtifactHub 2025-02-11 21:25:38 +01:00
renovate[bot]
4f11ac25c7
chore(deps): update ghcr.io/immich-app/immich-server docker tag to v1.126.1 (#18)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
2025-02-10 21:57:20 +01:00
renovate[bot]
e8056abbda
chore(deps): update ghcr.io/immich-app/immich-server docker tag to v1.125.7 (#17)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
2025-01-29 22:43:29 +01:00
renovate[bot]
75cec55e56
chore(deps): update ghcr.io/immich-app/immich-server docker tag to v1.125.6 (#16)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
2025-01-28 11:30:23 +01:00
secustor
57d46d5c89
chore(immich): add chart metadata 2025-01-26 18:40:09 +01:00
Sebastian Poxhofer
44d62ab64e
Update README.md 2025-01-26 18:31:09 +01:00
renovate[bot]
5dac2294e3
chore(deps): update ghcr.io/immich-app/immich-server docker tag to v1.125.3 (#15)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
2025-01-26 17:53:17 +01:00
renovate[bot]
c1c55ee741
chore(deps): update ghcr.io/immich-app/immich-server docker tag to v1.125.2 (#14)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
2025-01-26 17:26:25 +01:00
16 changed files with 1355 additions and 73 deletions

36
.github/workflows/ci.yaml vendored Normal file
View file

@ -0,0 +1,36 @@
name: CI
on:
pull_request:
merge_group:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
# renovate: datasource=node-version depName=node
NODE_VERSION: 22.16.0
jobs:
test:
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Install pnpm
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
- name: Setup Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: ${{ env.NODE_VERSION }}
cache: pnpm
- name: Install dev dependencies
run: pnpm install --frozen-lockfile
- run: pnpm run prettier:check
- run: pnpm run test

View file

@ -5,53 +5,57 @@ on:
branches: branches:
- main - main
env:
# renovate: datasource=node-version depName=node
NODE_VERSION: 22.16.0
permissions: {} permissions: {}
jobs: jobs:
release: release:
permissions: permissions:
contents: write # to push chart release and create a release (helm/chart-releaser-action) contents: write # to push chart release and create a release (helm/chart-releaser-action)
packages: write # needed for ghcr access packages: write # needed for ghcr access
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with: with:
fetch-depth: 0 fetch-depth: 0
- name: Configure Git - name: Configure Git
run: | run: |
git config user.name "$GITHUB_ACTOR" git config user.name "$GITHUB_ACTOR"
git config user.email "$GITHUB_ACTOR@users.noreply.github.com" git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
- name: Set up Helm - name: Set up Helm
uses: azure/setup-helm@fe7b79cd5ee1e45176fcad797de68ecaf3ca4814 # v4.2.0 uses: azure/setup-helm@b9e51907a09c216f16ebe8536097933489208112 # v4.3.0
with: with:
# renovate: datasource=github-releases depName=helm/helm # renovate: datasource=github-releases depName=helm/helm
version: v3.17.0 version: v3.18.2
- name: Run chart-releaser - name: Run chart-releaser
id: releaser
uses: helm/chart-releaser-action@cae68fefc6b5f367a0275617c9f83181ba54714f # v1.7.0 uses: helm/chart-releaser-action@cae68fefc6b5f367a0275617c9f83181ba54714f # v1.7.0
with: with:
charts_dir: charts charts_dir: charts
config: cr.yaml config: cr.yaml
skip_existing: true
env: env:
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}" CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
CR_SKIP_EXISTING: "true"
- name: Login to GHCR - name: Login to GHCR
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0 uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
with: with:
registry: ghcr.io registry: ghcr.io
username: ${{ github.actor }} username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }} password: ${{ secrets.GITHUB_TOKEN }}
- name: Setup Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: ${{ env.NODE_VERSION }}
- name: Push charts to GHCR - name: Push charts to GHCR
run: | run: "node --experimental-strip-types scripts/push-charts.ts ${{ steps.releaser.outputs.changed_charts }}"
shopt -s nullglob
for pkg in .cr-release-packages/*.tgz; do
if [ -z "${pkg:-}" ]; then
break
fi
helm push "${pkg}" "oci://ghcr.io/${GITHUB_REPOSITORY}"
done

4
.gitignore vendored
View file

@ -6,3 +6,7 @@
# Helm # Helm
output output
.cr-release-packages
# Node
node_modules

2
.prettierignore Normal file
View file

@ -0,0 +1,2 @@
templates
pnpm-lock.yaml

View file

@ -4,12 +4,13 @@
Contains Helm charts maintained with love by myself. Contains Helm charts maintained with love by myself.
> [!INFO] > [!NOTE]
> The code is provided as-is with no warranties. > The code is provided as-is with no warranties.
See the README.md in each chart directory for more information. See the README.md in each chart directory for more information.
## Usage ## Usage
You can add this repository to your [Helm](https://helm.sh/) installation by running the following command: You can add this repository to your [Helm](https://helm.sh/) installation by running the following command:
```bash ```bash

View file

@ -1,8 +1,24 @@
apiVersion: v2 apiVersion: v2
name: immich name: immich
description: A Immich Helm chart targeted at advanced users description: A Immich Helm chart targeted at advanced users
home: https://immich.app/
icon: https://raw.githubusercontent.com/immich-app/immich/main/design/immich-logo.svg
sources:
- https://github.com/secustor/helm-charts/tree/main/charts/immich
- https://github.com/immich-app/immich
maintainers:
- name: secustor
email: sebastian@poxhofer.at
type: application type: application
version: 0.2.1 version: 0.6.3
# renovate: image=ghcr.io/immich-app/immich-server # renovate: image=ghcr.io/immich-app/immich-server
appVersion: "v1.125.1" appVersion: "v1.134.0"
annotations:
artifacthub.io/category: storage
artifacthub.io/links: |
- name: support
url: https://github.com/secustor/helm-charts/issues
artifacthub.io/changes: |
Immich version update

View file

@ -1,14 +1,17 @@
# Immich # Immich
This chart deploys [Immich](https://immich.app/) and This **unofficial** chart deploys [Immich](https://immich.app/) and
is targeted at an audience which wants to have some lower level control over the deployment. is targeted at an audience which wants to have some lower level control over the deployment.
## Prerequisites ## Prerequisites
This chart requires: This chart requires:
- a PostgreSQL database with `pgvector` or `pgvector.rs` extension installed
- a PostgreSQL database with `pgvector` or [`VectorChord`](https://immich.app/docs/administration/postgres-standalone/#migrating-to-vectorchord) extension installed
- a Redis instance - a Redis instance
## Usage ## Usage
You can install this chart by running the following command: You can install this chart by running the following command:
```bash ```bash
@ -19,17 +22,20 @@ helm install my-release oci://ghcr.io/secustor/helm-charts/immich
``` ```
## Example ## Example
This example assumes that the CloudNativePG operator has been deployed and configured. This example assumes that the CloudNativePG operator has been deployed and configured.
You will: You will:
- Create secrets for PostgreSQL and Redis - Create secrets for PostgreSQL and Redis
- Request a PostgreSQL instance with the `pgvector` extension - Request a PostgreSQL instance with the `pgvector` extension
- Deploy a Redis instance - Deploy a Redis instance
- Deploy Immich - Deploy Immich
value files can be found in the [`example`](./example) directory. Value files can be found in the [`example` directory](https://github.com/secustor/helm-charts/tree/main/charts/immich/example).
### PostgreSQL ### PostgreSQL
This assumes you have [CloudNativePG](https://cloudnative-pg.io/) This assumes you have [CloudNativePG](https://cloudnative-pg.io/)
installed and configured. installed and configured.
@ -38,18 +44,23 @@ kubectl create -f example/postgres.yaml
``` ```
### Redis ### Redis
Create the static password secret for Redis. Create the static password secret for Redis.
```bash ```bash
kubectl create -f example/redis-secret.yaml kubectl create -f example/redis-secret.yaml
``` ```
Install the Redis chart. Install the Redis chart.
```bash ```bash
helm install immich-redis registry-1.docker.io/bitnamicharts/redis -f example/redis-values.yaml helm install immich-redis registry-1.docker.io/bitnamicharts/redis -f example/redis-values.yaml
``` ```
### Immich ### Immich
Install the Immich chart. Install the Immich chart.
```bash ```bash
helm install immich oci://ghcr.io/secustor/helm-charts/immich -f example/immich-values.yaml helm install immich oci://ghcr.io/secustor/helm-charts/immich -f example/immich-values.yaml
``` ```

View file

@ -1,5 +1,6 @@
architecture: standalone architecture: standalone
auth: auth:
enabled: true enabled: true
usePasswordFiles: false
existingSecret: immich-redis-access existingSecret: immich-redis-access
existingSecretPasswordKey: password existingSecretPasswordKey: password

View file

@ -35,7 +35,7 @@ spec:
{{- end }} {{- end }}
backend: backend:
service: service:
name: {{ include "immich.fullname" $ }} name: immich-server
port: port:
number: {{ $.Values.service.port }} number: {{ $.Values.service.port }}
{{- end }} {{- end }}

View file

@ -4,7 +4,6 @@ fullnameOverride: ""
imagePullSecrets: [] imagePullSecrets: []
# Configurations that are relevant for all the components of the chart # Configurations that are relevant for all the components of the chart
common: common:
config: config:
@ -21,7 +20,7 @@ common:
createSecret: createSecret:
username: "" username: ""
password: "" password: ""
redis: redis:
host: immich-redis host: immich-redis
existingSecret: existingSecret:
@ -41,7 +40,7 @@ server:
maxReplicas: 100 maxReplicas: 100
targetCPUUtilizationPercentage: 80 targetCPUUtilizationPercentage: 80
# targetMemoryUtilizationPercentage: 80 # targetMemoryUtilizationPercentage: 80
image: image:
repository: ghcr.io/immich-app/immich-server repository: ghcr.io/immich-app/immich-server
pullPolicy: IfNotPresent pullPolicy: IfNotPresent
@ -50,29 +49,31 @@ server:
podAnnotations: {} podAnnotations: {}
podLabels: {} podLabels: {}
resources: {} resources:
{}
# limits: # limits:
# cpu: 100m # cpu: 100m
# memory: 128Mi # memory: 128Mi
# requests: # requests:
# cpu: 100m # cpu: 100m
# memory: 128Mi # memory: 128Mi
service: service:
type: ClusterIP type: ClusterIP
port: 2283 port: 2283
nodeSelector: {} nodeSelector: {}
tolerations: [] tolerations: []
affinity: {} affinity: {}
podSecurityContext: {} podSecurityContext: {}
# fsGroup: 2000 # fsGroup: 2000
securityContext: {} securityContext:
{}
# capabilities: # capabilities:
# drop: # drop:
# - ALL # - ALL
@ -81,7 +82,8 @@ server:
# runAsUser: 1000 # runAsUser: 1000
# Additional environment variables to set on the container. # Additional environment variables to set on the container.
env: [] env:
[]
# - name: DB_VECTOR_EXTENSION # - name: DB_VECTOR_EXTENSION
# value: "pgvector" # value: "pgvector"
# - name: SOME_OTHER_ENV # - name: SOME_OTHER_ENV
@ -99,12 +101,11 @@ server:
# secret: # secret:
# secretName: mysecret # secretName: mysecret
# optional: false # optional: false
# Additional volumeMounts on the output Deployment definition. # Additional volumeMounts on the output Deployment definition.
volumeMounts: [] volumeMounts: []
# - name: uploads # - name: uploads
# mountPath: /usr/src/app/upload # mountPath: /usr/src/app/upload
machineLearning: machineLearning:
enabled: false enabled: false
@ -113,49 +114,52 @@ machineLearning:
# If enabled the cache will be stored in memory, rather than local disk. This will increase performance but will require more memory. # If enabled the cache will be stored in memory, rather than local disk. This will increase performance but will require more memory.
useMemory: false useMemory: false
sizeLimit: 10Gi sizeLimit: 10Gi
replicaCount: 1 replicaCount: 1
image: image:
repository: ghcr.io/immich-app/immich-machine-learning repository: ghcr.io/immich-app/immich-machine-learning
pullPolicy: IfNotPresent pullPolicy: IfNotPresent
# Overrides the image tag whose default is the chart appVersion. # Overrides the image tag whose default is the chart appVersion.
tag: "" tag: ""
podAnnotations: {} podAnnotations: {}
podLabels: {} podLabels: {}
resources: {} resources:
{}
# limits: # limits:
# cpu: 100m # cpu: 100m
# memory: 128Mi # memory: 128Mi
# requests: # requests:
# cpu: 100m # cpu: 100m
# memory: 128Mi # memory: 128Mi
service: service:
type: ClusterIP type: ClusterIP
port: 3003 port: 3003
nodeSelector: {} nodeSelector: {}
tolerations: [] tolerations: []
affinity: {} affinity: {}
podSecurityContext: {} podSecurityContext: {}
# fsGroup: 2000 # fsGroup: 2000
securityContext: {} securityContext:
{}
# capabilities: # capabilities:
# drop: # drop:
# - ALL # - ALL
# readOnlyRootFilesystem: true # readOnlyRootFilesystem: true
# runAsNonRoot: true # runAsNonRoot: true
# runAsUser: 1000 # runAsUser: 1000
# Additional environment variables to set on the container. # Additional environment variables to set on the container.
env: [] env:
[]
# - name: DB_VECTOR_EXTENSION # - name: DB_VECTOR_EXTENSION
# value: "pgvector" # value: "pgvector"
# - name: SOME_OTHER_ENV # - name: SOME_OTHER_ENV
@ -163,7 +167,7 @@ machineLearning:
# secretKeyRef: # secretKeyRef:
# name: mySecret # name: mySecret
# key: secretField # key: secretField
# Additional volumes on the output Deployment definition. # Additional volumes on the output Deployment definition.
volumes: [] volumes: []
# - name: uploads # - name: uploads
@ -173,7 +177,7 @@ machineLearning:
# secret: # secret:
# secretName: mysecret # secretName: mysecret
# optional: false # optional: false
# Additional volumeMounts on the output Deployment definition. # Additional volumeMounts on the output Deployment definition.
volumeMounts: [] volumeMounts: []
# - name: uploads # - name: uploads
@ -195,7 +199,8 @@ serviceAccount:
ingress: ingress:
enabled: false enabled: false
className: "" className: ""
annotations: {} annotations:
{}
# kubernetes.io/ingress.class: nginx # kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true" # kubernetes.io/tls-acme: "true"
hosts: hosts:
@ -208,7 +213,6 @@ ingress:
# hosts: # hosts:
# - chart-example.local # - chart-example.local
# This block is for setting up the HTTPROUTE for more information can be found here: https://kubernetes.io/docs/concepts/services-networking/gateway/#api-kind-httproute # This block is for setting up the HTTPROUTE for more information can be found here: https://kubernetes.io/docs/concepts/services-networking/gateway/#api-kind-httproute
httpRoute: httpRoute:
enabled: false enabled: false

21
package.json Normal file
View file

@ -0,0 +1,21 @@
{
"name": "helm-charts",
"type": "module",
"packageManager": "pnpm@10.11.1",
"volta": {
"node": "22.16.0",
"pnpm": "10.11.1"
},
"scripts": {
"fix": "pnpm run prettier:fix",
"test": "vitest",
"prettier:check": "prettier --check .",
"prettier:fix": "prettier --write ."
},
"devDependencies": {
"@types/node": "22.15.29",
"prettier": "3.5.3",
"vitest": "3.2.1",
"vitest-mock-extended": "3.1.0"
}
}

963
pnpm-lock.yaml generated Normal file
View file

@ -0,0 +1,963 @@
lockfileVersion: '9.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
importers:
.:
devDependencies:
'@types/node':
specifier: 22.15.29
version: 22.15.29
prettier:
specifier: 3.5.3
version: 3.5.3
vitest:
specifier: 3.2.1
version: 3.2.1(@types/node@22.15.29)
vitest-mock-extended:
specifier: 3.1.0
version: 3.1.0(typescript@5.8.2)(vitest@3.2.1(@types/node@22.15.29))
packages:
'@esbuild/aix-ppc64@0.25.0':
resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
'@esbuild/android-arm64@0.25.0':
resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
'@esbuild/android-arm@0.25.0':
resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
'@esbuild/android-x64@0.25.0':
resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
'@esbuild/darwin-arm64@0.25.0':
resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
'@esbuild/darwin-x64@0.25.0':
resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
'@esbuild/freebsd-arm64@0.25.0':
resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
'@esbuild/freebsd-x64@0.25.0':
resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
'@esbuild/linux-arm64@0.25.0':
resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
'@esbuild/linux-arm@0.25.0':
resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
'@esbuild/linux-ia32@0.25.0':
resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
'@esbuild/linux-loong64@0.25.0':
resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
'@esbuild/linux-mips64el@0.25.0':
resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
'@esbuild/linux-ppc64@0.25.0':
resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
'@esbuild/linux-riscv64@0.25.0':
resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
'@esbuild/linux-s390x@0.25.0':
resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
'@esbuild/linux-x64@0.25.0':
resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
'@esbuild/netbsd-arm64@0.25.0':
resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
'@esbuild/netbsd-x64@0.25.0':
resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
'@esbuild/openbsd-arm64@0.25.0':
resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
'@esbuild/openbsd-x64@0.25.0':
resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
'@esbuild/sunos-x64@0.25.0':
resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
'@esbuild/win32-arm64@0.25.0':
resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
'@esbuild/win32-ia32@0.25.0':
resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
'@esbuild/win32-x64@0.25.0':
resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
'@jridgewell/sourcemap-codec@1.5.0':
resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
'@rollup/rollup-android-arm-eabi@4.34.8':
resolution: {integrity: sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==}
cpu: [arm]
os: [android]
'@rollup/rollup-android-arm64@4.34.8':
resolution: {integrity: sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==}
cpu: [arm64]
os: [android]
'@rollup/rollup-darwin-arm64@4.34.8':
resolution: {integrity: sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==}
cpu: [arm64]
os: [darwin]
'@rollup/rollup-darwin-x64@4.34.8':
resolution: {integrity: sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==}
cpu: [x64]
os: [darwin]
'@rollup/rollup-freebsd-arm64@4.34.8':
resolution: {integrity: sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==}
cpu: [arm64]
os: [freebsd]
'@rollup/rollup-freebsd-x64@4.34.8':
resolution: {integrity: sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==}
cpu: [x64]
os: [freebsd]
'@rollup/rollup-linux-arm-gnueabihf@4.34.8':
resolution: {integrity: sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==}
cpu: [arm]
os: [linux]
'@rollup/rollup-linux-arm-musleabihf@4.34.8':
resolution: {integrity: sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==}
cpu: [arm]
os: [linux]
'@rollup/rollup-linux-arm64-gnu@4.34.8':
resolution: {integrity: sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==}
cpu: [arm64]
os: [linux]
'@rollup/rollup-linux-arm64-musl@4.34.8':
resolution: {integrity: sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==}
cpu: [arm64]
os: [linux]
'@rollup/rollup-linux-loongarch64-gnu@4.34.8':
resolution: {integrity: sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==}
cpu: [loong64]
os: [linux]
'@rollup/rollup-linux-powerpc64le-gnu@4.34.8':
resolution: {integrity: sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==}
cpu: [ppc64]
os: [linux]
'@rollup/rollup-linux-riscv64-gnu@4.34.8':
resolution: {integrity: sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==}
cpu: [riscv64]
os: [linux]
'@rollup/rollup-linux-s390x-gnu@4.34.8':
resolution: {integrity: sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==}
cpu: [s390x]
os: [linux]
'@rollup/rollup-linux-x64-gnu@4.34.8':
resolution: {integrity: sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==}
cpu: [x64]
os: [linux]
'@rollup/rollup-linux-x64-musl@4.34.8':
resolution: {integrity: sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==}
cpu: [x64]
os: [linux]
'@rollup/rollup-win32-arm64-msvc@4.34.8':
resolution: {integrity: sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==}
cpu: [arm64]
os: [win32]
'@rollup/rollup-win32-ia32-msvc@4.34.8':
resolution: {integrity: sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==}
cpu: [ia32]
os: [win32]
'@rollup/rollup-win32-x64-msvc@4.34.8':
resolution: {integrity: sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==}
cpu: [x64]
os: [win32]
'@types/chai@5.2.2':
resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==}
'@types/deep-eql@4.0.2':
resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
'@types/estree@1.0.6':
resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
'@types/node@22.15.29':
resolution: {integrity: sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==}
'@vitest/expect@3.2.1':
resolution: {integrity: sha512-FqS/BnDOzV6+IpxrTg5GQRyLOCtcJqkwMwcS8qGCI2IyRVDwPAtutztaf1CjtPHlZlWtl1yUPCd7HM0cNiDOYw==}
'@vitest/mocker@3.2.1':
resolution: {integrity: sha512-OXxMJnx1lkB+Vl65Re5BrsZEHc90s5NMjD23ZQ9NlU7f7nZiETGoX4NeKZSmsKjseuMq2uOYXdLOeoM0pJU+qw==}
peerDependencies:
msw: ^2.4.9
vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0
peerDependenciesMeta:
msw:
optional: true
vite:
optional: true
'@vitest/pretty-format@3.2.1':
resolution: {integrity: sha512-xBh1X2GPlOGBupp6E1RcUQWIxw0w/hRLd3XyBS6H+dMdKTAqHDNsIR2AnJwPA3yYe9DFy3VUKTe3VRTrAiQ01g==}
'@vitest/runner@3.2.1':
resolution: {integrity: sha512-kygXhNTu/wkMYbwYpS3z/9tBe0O8qpdBuC3dD/AW9sWa0LE/DAZEjnHtWA9sIad7lpD4nFW1yQ+zN7mEKNH3yA==}
'@vitest/snapshot@3.2.1':
resolution: {integrity: sha512-5xko/ZpW2Yc65NVK9Gpfg2y4BFvcF+At7yRT5AHUpTg9JvZ4xZoyuRY4ASlmNcBZjMslV08VRLDrBOmUe2YX3g==}
'@vitest/spy@3.2.1':
resolution: {integrity: sha512-Nbfib34Z2rfcJGSetMxjDCznn4pCYPZOtQYox2kzebIJcgH75yheIKd5QYSFmR8DIZf2M8fwOm66qSDIfRFFfQ==}
'@vitest/utils@3.2.1':
resolution: {integrity: sha512-KkHlGhePEKZSub5ViknBcN5KEF+u7dSUr9NW8QsVICusUojrgrOnnY3DEWWO877ax2Pyopuk2qHmt+gkNKnBVw==}
assertion-error@2.0.1:
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
engines: {node: '>=12'}
cac@6.7.14:
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
engines: {node: '>=8'}
chai@5.2.0:
resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==}
engines: {node: '>=12'}
check-error@2.1.1:
resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
engines: {node: '>= 16'}
debug@4.4.1:
resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
supports-color:
optional: true
deep-eql@5.0.2:
resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
engines: {node: '>=6'}
es-module-lexer@1.7.0:
resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
esbuild@0.25.0:
resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==}
engines: {node: '>=18'}
hasBin: true
estree-walker@3.0.3:
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
expect-type@1.2.1:
resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==}
engines: {node: '>=12.0.0'}
fdir@6.4.4:
resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==}
peerDependencies:
picomatch: ^3 || ^4
peerDependenciesMeta:
picomatch:
optional: true
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
loupe@3.1.3:
resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==}
magic-string@0.30.17:
resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
nanoid@3.3.8:
resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
pathe@2.0.3:
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
pathval@2.0.0:
resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
engines: {node: '>= 14.16'}
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
picomatch@4.0.2:
resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
engines: {node: '>=12'}
postcss@8.5.3:
resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
engines: {node: ^10 || ^12 || >=14}
prettier@3.5.3:
resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==}
engines: {node: '>=14'}
hasBin: true
rollup@4.34.8:
resolution: {integrity: sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
siginfo@2.0.0:
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
stackback@0.0.2:
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
std-env@3.9.0:
resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==}
tinybench@2.9.0:
resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
tinyexec@0.3.2:
resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
tinyglobby@0.2.14:
resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
engines: {node: '>=12.0.0'}
tinypool@1.1.0:
resolution: {integrity: sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==}
engines: {node: ^18.0.0 || >=20.0.0}
tinyrainbow@2.0.0:
resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
engines: {node: '>=14.0.0'}
tinyspy@4.0.3:
resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==}
engines: {node: '>=14.0.0'}
ts-essentials@10.0.4:
resolution: {integrity: sha512-lwYdz28+S4nicm+jFi6V58LaAIpxzhg9rLdgNC1VsdP/xiFBseGhF1M/shwCk6zMmwahBZdXcl34LVHrEang3A==}
peerDependencies:
typescript: '>=4.5.0'
peerDependenciesMeta:
typescript:
optional: true
typescript@5.8.2:
resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==}
engines: {node: '>=14.17'}
hasBin: true
undici-types@6.21.0:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
vite-node@3.2.1:
resolution: {integrity: sha512-V4EyKQPxquurNJPtQJRZo8hKOoKNBRIhxcDbQFPFig0JdoWcUhwRgK8yoCXXrfYVPKS6XwirGHPszLnR8FbjCA==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
hasBin: true
vite@6.2.0:
resolution: {integrity: sha512-7dPxoo+WsT/64rDcwoOjk76XHj+TqNTIvHKcuMQ1k4/SeHDaQt5GFAeLYzrimZrMpn/O6DtdI03WUjdxuPM0oQ==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
hasBin: true
peerDependencies:
'@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
jiti: '>=1.21.0'
less: '*'
lightningcss: ^1.21.0
sass: '*'
sass-embedded: '*'
stylus: '*'
sugarss: '*'
terser: ^5.16.0
tsx: ^4.8.1
yaml: ^2.4.2
peerDependenciesMeta:
'@types/node':
optional: true
jiti:
optional: true
less:
optional: true
lightningcss:
optional: true
sass:
optional: true
sass-embedded:
optional: true
stylus:
optional: true
sugarss:
optional: true
terser:
optional: true
tsx:
optional: true
yaml:
optional: true
vitest-mock-extended@3.1.0:
resolution: {integrity: sha512-vCM0VkuocOUBwwqwV7JB7YStw07pqeKvEIrZnR8l3PtwYi6rAAJAyJACeC1UYNfbQWi85nz7EdiXWBFI5hll2g==}
peerDependencies:
typescript: 3.x || 4.x || 5.x
vitest: '>=3.0.0'
vitest@3.2.1:
resolution: {integrity: sha512-VZ40MBnlE1/V5uTgdqY3DmjUgZtIzsYq758JGlyQrv5syIsaYcabkfPkEuWML49Ph0D/SoqpVFd0dyVTr551oA==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
hasBin: true
peerDependencies:
'@edge-runtime/vm': '*'
'@types/debug': ^4.1.12
'@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
'@vitest/browser': 3.2.1
'@vitest/ui': 3.2.1
happy-dom: '*'
jsdom: '*'
peerDependenciesMeta:
'@edge-runtime/vm':
optional: true
'@types/debug':
optional: true
'@types/node':
optional: true
'@vitest/browser':
optional: true
'@vitest/ui':
optional: true
happy-dom:
optional: true
jsdom:
optional: true
why-is-node-running@2.3.0:
resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
engines: {node: '>=8'}
hasBin: true
snapshots:
'@esbuild/aix-ppc64@0.25.0':
optional: true
'@esbuild/android-arm64@0.25.0':
optional: true
'@esbuild/android-arm@0.25.0':
optional: true
'@esbuild/android-x64@0.25.0':
optional: true
'@esbuild/darwin-arm64@0.25.0':
optional: true
'@esbuild/darwin-x64@0.25.0':
optional: true
'@esbuild/freebsd-arm64@0.25.0':
optional: true
'@esbuild/freebsd-x64@0.25.0':
optional: true
'@esbuild/linux-arm64@0.25.0':
optional: true
'@esbuild/linux-arm@0.25.0':
optional: true
'@esbuild/linux-ia32@0.25.0':
optional: true
'@esbuild/linux-loong64@0.25.0':
optional: true
'@esbuild/linux-mips64el@0.25.0':
optional: true
'@esbuild/linux-ppc64@0.25.0':
optional: true
'@esbuild/linux-riscv64@0.25.0':
optional: true
'@esbuild/linux-s390x@0.25.0':
optional: true
'@esbuild/linux-x64@0.25.0':
optional: true
'@esbuild/netbsd-arm64@0.25.0':
optional: true
'@esbuild/netbsd-x64@0.25.0':
optional: true
'@esbuild/openbsd-arm64@0.25.0':
optional: true
'@esbuild/openbsd-x64@0.25.0':
optional: true
'@esbuild/sunos-x64@0.25.0':
optional: true
'@esbuild/win32-arm64@0.25.0':
optional: true
'@esbuild/win32-ia32@0.25.0':
optional: true
'@esbuild/win32-x64@0.25.0':
optional: true
'@jridgewell/sourcemap-codec@1.5.0': {}
'@rollup/rollup-android-arm-eabi@4.34.8':
optional: true
'@rollup/rollup-android-arm64@4.34.8':
optional: true
'@rollup/rollup-darwin-arm64@4.34.8':
optional: true
'@rollup/rollup-darwin-x64@4.34.8':
optional: true
'@rollup/rollup-freebsd-arm64@4.34.8':
optional: true
'@rollup/rollup-freebsd-x64@4.34.8':
optional: true
'@rollup/rollup-linux-arm-gnueabihf@4.34.8':
optional: true
'@rollup/rollup-linux-arm-musleabihf@4.34.8':
optional: true
'@rollup/rollup-linux-arm64-gnu@4.34.8':
optional: true
'@rollup/rollup-linux-arm64-musl@4.34.8':
optional: true
'@rollup/rollup-linux-loongarch64-gnu@4.34.8':
optional: true
'@rollup/rollup-linux-powerpc64le-gnu@4.34.8':
optional: true
'@rollup/rollup-linux-riscv64-gnu@4.34.8':
optional: true
'@rollup/rollup-linux-s390x-gnu@4.34.8':
optional: true
'@rollup/rollup-linux-x64-gnu@4.34.8':
optional: true
'@rollup/rollup-linux-x64-musl@4.34.8':
optional: true
'@rollup/rollup-win32-arm64-msvc@4.34.8':
optional: true
'@rollup/rollup-win32-ia32-msvc@4.34.8':
optional: true
'@rollup/rollup-win32-x64-msvc@4.34.8':
optional: true
'@types/chai@5.2.2':
dependencies:
'@types/deep-eql': 4.0.2
'@types/deep-eql@4.0.2': {}
'@types/estree@1.0.6': {}
'@types/node@22.15.29':
dependencies:
undici-types: 6.21.0
'@vitest/expect@3.2.1':
dependencies:
'@types/chai': 5.2.2
'@vitest/spy': 3.2.1
'@vitest/utils': 3.2.1
chai: 5.2.0
tinyrainbow: 2.0.0
'@vitest/mocker@3.2.1(vite@6.2.0(@types/node@22.15.29))':
dependencies:
'@vitest/spy': 3.2.1
estree-walker: 3.0.3
magic-string: 0.30.17
optionalDependencies:
vite: 6.2.0(@types/node@22.15.29)
'@vitest/pretty-format@3.2.1':
dependencies:
tinyrainbow: 2.0.0
'@vitest/runner@3.2.1':
dependencies:
'@vitest/utils': 3.2.1
pathe: 2.0.3
'@vitest/snapshot@3.2.1':
dependencies:
'@vitest/pretty-format': 3.2.1
magic-string: 0.30.17
pathe: 2.0.3
'@vitest/spy@3.2.1':
dependencies:
tinyspy: 4.0.3
'@vitest/utils@3.2.1':
dependencies:
'@vitest/pretty-format': 3.2.1
loupe: 3.1.3
tinyrainbow: 2.0.0
assertion-error@2.0.1: {}
cac@6.7.14: {}
chai@5.2.0:
dependencies:
assertion-error: 2.0.1
check-error: 2.1.1
deep-eql: 5.0.2
loupe: 3.1.3
pathval: 2.0.0
check-error@2.1.1: {}
debug@4.4.1:
dependencies:
ms: 2.1.3
deep-eql@5.0.2: {}
es-module-lexer@1.7.0: {}
esbuild@0.25.0:
optionalDependencies:
'@esbuild/aix-ppc64': 0.25.0
'@esbuild/android-arm': 0.25.0
'@esbuild/android-arm64': 0.25.0
'@esbuild/android-x64': 0.25.0
'@esbuild/darwin-arm64': 0.25.0
'@esbuild/darwin-x64': 0.25.0
'@esbuild/freebsd-arm64': 0.25.0
'@esbuild/freebsd-x64': 0.25.0
'@esbuild/linux-arm': 0.25.0
'@esbuild/linux-arm64': 0.25.0
'@esbuild/linux-ia32': 0.25.0
'@esbuild/linux-loong64': 0.25.0
'@esbuild/linux-mips64el': 0.25.0
'@esbuild/linux-ppc64': 0.25.0
'@esbuild/linux-riscv64': 0.25.0
'@esbuild/linux-s390x': 0.25.0
'@esbuild/linux-x64': 0.25.0
'@esbuild/netbsd-arm64': 0.25.0
'@esbuild/netbsd-x64': 0.25.0
'@esbuild/openbsd-arm64': 0.25.0
'@esbuild/openbsd-x64': 0.25.0
'@esbuild/sunos-x64': 0.25.0
'@esbuild/win32-arm64': 0.25.0
'@esbuild/win32-ia32': 0.25.0
'@esbuild/win32-x64': 0.25.0
estree-walker@3.0.3:
dependencies:
'@types/estree': 1.0.6
expect-type@1.2.1: {}
fdir@6.4.4(picomatch@4.0.2):
optionalDependencies:
picomatch: 4.0.2
fsevents@2.3.3:
optional: true
loupe@3.1.3: {}
magic-string@0.30.17:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
ms@2.1.3: {}
nanoid@3.3.8: {}
pathe@2.0.3: {}
pathval@2.0.0: {}
picocolors@1.1.1: {}
picomatch@4.0.2: {}
postcss@8.5.3:
dependencies:
nanoid: 3.3.8
picocolors: 1.1.1
source-map-js: 1.2.1
prettier@3.5.3: {}
rollup@4.34.8:
dependencies:
'@types/estree': 1.0.6
optionalDependencies:
'@rollup/rollup-android-arm-eabi': 4.34.8
'@rollup/rollup-android-arm64': 4.34.8
'@rollup/rollup-darwin-arm64': 4.34.8
'@rollup/rollup-darwin-x64': 4.34.8
'@rollup/rollup-freebsd-arm64': 4.34.8
'@rollup/rollup-freebsd-x64': 4.34.8
'@rollup/rollup-linux-arm-gnueabihf': 4.34.8
'@rollup/rollup-linux-arm-musleabihf': 4.34.8
'@rollup/rollup-linux-arm64-gnu': 4.34.8
'@rollup/rollup-linux-arm64-musl': 4.34.8
'@rollup/rollup-linux-loongarch64-gnu': 4.34.8
'@rollup/rollup-linux-powerpc64le-gnu': 4.34.8
'@rollup/rollup-linux-riscv64-gnu': 4.34.8
'@rollup/rollup-linux-s390x-gnu': 4.34.8
'@rollup/rollup-linux-x64-gnu': 4.34.8
'@rollup/rollup-linux-x64-musl': 4.34.8
'@rollup/rollup-win32-arm64-msvc': 4.34.8
'@rollup/rollup-win32-ia32-msvc': 4.34.8
'@rollup/rollup-win32-x64-msvc': 4.34.8
fsevents: 2.3.3
siginfo@2.0.0: {}
source-map-js@1.2.1: {}
stackback@0.0.2: {}
std-env@3.9.0: {}
tinybench@2.9.0: {}
tinyexec@0.3.2: {}
tinyglobby@0.2.14:
dependencies:
fdir: 6.4.4(picomatch@4.0.2)
picomatch: 4.0.2
tinypool@1.1.0: {}
tinyrainbow@2.0.0: {}
tinyspy@4.0.3: {}
ts-essentials@10.0.4(typescript@5.8.2):
optionalDependencies:
typescript: 5.8.2
typescript@5.8.2: {}
undici-types@6.21.0: {}
vite-node@3.2.1(@types/node@22.15.29):
dependencies:
cac: 6.7.14
debug: 4.4.1
es-module-lexer: 1.7.0
pathe: 2.0.3
vite: 6.2.0(@types/node@22.15.29)
transitivePeerDependencies:
- '@types/node'
- jiti
- less
- lightningcss
- sass
- sass-embedded
- stylus
- sugarss
- supports-color
- terser
- tsx
- yaml
vite@6.2.0(@types/node@22.15.29):
dependencies:
esbuild: 0.25.0
postcss: 8.5.3
rollup: 4.34.8
optionalDependencies:
'@types/node': 22.15.29
fsevents: 2.3.3
vitest-mock-extended@3.1.0(typescript@5.8.2)(vitest@3.2.1(@types/node@22.15.29)):
dependencies:
ts-essentials: 10.0.4(typescript@5.8.2)
typescript: 5.8.2
vitest: 3.2.1(@types/node@22.15.29)
vitest@3.2.1(@types/node@22.15.29):
dependencies:
'@types/chai': 5.2.2
'@vitest/expect': 3.2.1
'@vitest/mocker': 3.2.1(vite@6.2.0(@types/node@22.15.29))
'@vitest/pretty-format': 3.2.1
'@vitest/runner': 3.2.1
'@vitest/snapshot': 3.2.1
'@vitest/spy': 3.2.1
'@vitest/utils': 3.2.1
chai: 5.2.0
debug: 4.4.1
expect-type: 1.2.1
magic-string: 0.30.17
pathe: 2.0.3
picomatch: 4.0.2
std-env: 3.9.0
tinybench: 2.9.0
tinyexec: 0.3.2
tinyglobby: 0.2.14
tinypool: 1.1.0
tinyrainbow: 2.0.0
vite: 6.2.0(@types/node@22.15.29)
vite-node: 3.2.1(@types/node@22.15.29)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/node': 22.15.29
transitivePeerDependencies:
- jiti
- less
- lightningcss
- msw
- sass
- sass-embedded
- stylus
- sugarss
- supports-color
- terser
- tsx
- yaml
why-is-node-running@2.3.0:
dependencies:
siginfo: 2.0.0
stackback: 0.0.2

View file

@ -1,23 +1,27 @@
{ {
$schema: 'https://docs.renovatebot.com/renovate-schema.json', $schema: "https://docs.renovatebot.com/renovate-schema.json",
extends: [ extends: [
'config:recommended', "github>secustor/renovate-config",
'customManagers:helmChartYamlAppVersions', "customManagers:helmChartYamlAppVersions",
'helpers:pinGitHubActionDigests',
], ],
helmv3: {
// bump chart version if the appVersion changes bumpVersions: [
bumpVersion: "minor", {
}, filePatterns: ["{{packageFileDir}}/Chart.{yaml,yml}"],
matchStrings: ["version:\\s(?<version>[^\\s]+)"],
bumpType: "{{#if isMajor}}major{{else}}patch{{/if}}",
},
],
customManagers: [ customManagers: [
{ {
customType: "regex", customType: "regex",
fileMatch: ['\\.github\/workflows\/release\\.ya?ml'], fileMatch: ["\\.github\/workflows\/release\\.ya?ml"],
matchStrings: [ matchStrings: [
// this is mostly a copy from https://docs.renovatebot.com/presets-customManagers/#custommanagersgithubactionsversions // this is mostly a copy from https://docs.renovatebot.com/presets-customManagers/#custommanagersgithubactionsversions
// and only changes the expected version prefix // and only changes the expected version prefix
"# renovate: datasource=(?<datasource>[a-z-.]+?) depName=(?<depName>[^\\s]+?)(?: (?:lookupName|packageName)=(?<packageName>[^\\s]+?))?(?: versioning=(?<versioning>[^\\s]+?))?(?: extractVersion=(?<extractVersion>[^\\s]+?))?\\s+version\\s*:\\s*[\"']?(?<currentValue>.+?)[\"']?\\s" "# renovate: datasource=(?<datasource>[a-z-.]+?) depName=(?<depName>[^\\s]+?)(?: (?:lookupName|packageName)=(?<packageName>[^\\s]+?))?(?: versioning=(?<versioning>[^\\s]+?))?(?: extractVersion=(?<extractVersion>[^\\s]+?))?\\s+version\\s*:\\s*[\"']?(?<currentValue>.+?)[\"']?\\s",
] ],
} },
] ],
} }

122
scripts/push-charts.test.ts Normal file
View file

@ -0,0 +1,122 @@
import { describe, assert, expect, test, vi, beforeEach } from "vitest";
import { mockDeep } from "vitest-mock-extended";
import { getChangedChartsArchives, main } from "./push-charts.ts";
import { Dirent } from "node:fs";
vi.mock("node:fs/promises");
import * as _fs from "node:fs/promises";
const fs = vi.mocked(_fs);
vi.mock("node:child_process");
import * as _child_process from "node:child_process";
import { exec } from "child_process";
const child_process = vi.mocked(_child_process);
process.env.GITHUB_REPOSITORY = "lore/ipsum";
describe("push-charts", () => {
const myChartDirentMock = mockDeep<Dirent>();
myChartDirentMock.name = "my-chart-1.0.0.tgz";
const fooChartDirentMock = mockDeep<Dirent>();
fooChartDirentMock.name = "foo-2.0.0.tgz";
beforeEach(() => {
vi.resetAllMocks();
myChartDirentMock.isFile.mockReturnValue(true);
fooChartDirentMock.isFile.mockReturnValue(true);
});
describe("main", () => {
test("should push single chart", async () => {
fs.readdir.mockResolvedValue([myChartDirentMock]);
// mock `git tag` to return empty string
child_process.execSync.mockReturnValue(Buffer.from(""));
await main(["node", "push-chart.ts", "charts/my-chart"]);
expect(child_process.execSync).toHaveBeenNthCalledWith(
2,
`helm push ".cr-release-packages/my-chart-1.0.0.tgz" "oci://ghcr.io/lore/ipsum"`,
);
});
test("should push multiple charts", async () => {
fs.readdir.mockResolvedValue([myChartDirentMock, fooChartDirentMock]);
child_process.execSync.mockReturnValue(Buffer.from(""));
await main(["node", "push-chart.ts", "charts/my-chart,charts/foo"]);
expect(child_process.execSync).toHaveBeenNthCalledWith(
2,
`helm push ".cr-release-packages/my-chart-1.0.0.tgz" "oci://ghcr.io/lore/ipsum"`,
);
expect(child_process.execSync).toHaveBeenNthCalledWith(
3,
`helm push ".cr-release-packages/foo-2.0.0.tgz" "oci://ghcr.io/lore/ipsum"`,
);
});
});
describe("getChangedCharts", () => {
test("should return empty if archive folder does not exist", async () => {
fs.access.mockRejectedValue(new Error("not found"));
child_process.execSync.mockReturnValue(Buffer.from(""));
await expect(getChangedChartsArchives(["my-chart"])).resolves.toEqual([]);
});
test("should return changed chart if only one exists", async () => {
fs.readdir.mockResolvedValue([myChartDirentMock]);
child_process.execSync.mockReturnValue(Buffer.from(""));
await expect(getChangedChartsArchives(["my-chart"])).resolves.toEqual([
{
path: ".cr-release-packages/my-chart-1.0.0.tgz",
fileName: "my-chart-1.0.0",
},
]);
});
test("should return multiple", async () => {
fs.readdir.mockResolvedValue([fooChartDirentMock, myChartDirentMock]);
child_process.execSync.mockReturnValue(Buffer.from(""));
await expect(getChangedChartsArchives(["foo"])).resolves.toEqual([
{
path: ".cr-release-packages/foo-2.0.0.tgz",
fileName: "foo-2.0.0",
},
{
path: ".cr-release-packages/my-chart-1.0.0.tgz",
fileName: "my-chart-1.0.0",
},
]);
});
test("should return multiple changed charts if multiple exists and changed", async () => {
fs.readdir.mockResolvedValue([fooChartDirentMock, myChartDirentMock]);
child_process.execSync.mockReturnValue(Buffer.from(""));
await expect(getChangedChartsArchives(["my-chart,foo"])).resolves.toEqual(
[
{
path: ".cr-release-packages/foo-2.0.0.tgz",
fileName: "foo-2.0.0",
},
{
path: ".cr-release-packages/my-chart-1.0.0.tgz",
fileName: "my-chart-1.0.0",
},
],
);
});
test("should skip already existing image", async () => {
fs.readdir.mockResolvedValue([fooChartDirentMock, myChartDirentMock]);
child_process.execSync.mockReturnValue(Buffer.from("my-chart-1.0.0\n"));
await expect(getChangedChartsArchives(["my-chart,foo"])).resolves.toEqual(
[
{
path: ".cr-release-packages/foo-2.0.0.tgz",
fileName: "foo-2.0.0",
},
],
);
});
});
});

86
scripts/push-charts.ts Normal file
View file

@ -0,0 +1,86 @@
import * as fs from "node:fs/promises";
import * as process from "node:process";
import * as path from "node:path";
import { execSync } from "node:child_process";
const CR_RELEASE_PACKAGE_PATH = ".cr-release-packages";
interface Archive {
path: string;
fileName: string;
}
export async function main(rawArgs: string[]) {
// remove file path node and script name
const args = rawArgs.slice(2);
const archives = await getChangedChartsArchives(args);
if (archives.length === 0) {
console.log("No charts to push");
return;
}
console.log("Pushing charts");
for (const archive of archives) {
const cmd = `helm push "${archive.path}" "oci://ghcr.io/${process.env.GITHUB_REPOSITORY}"`;
console.log(cmd);
console.log(execSync(cmd).toString());
}
}
export async function getChangedChartsArchives(
args: string[],
): Promise<Archive[]> {
const chartArchives = await getChartArchives();
const tags = getGitTags();
// translate chart names to chart archives
const changedChartArchives: Archive[] = [];
for (const [, value] of Object.entries(chartArchives)) {
if (tags.includes(value.fileName)) {
// the chart has already pushed
console.log(
`Skipping ${value.path}. Tag ${value.fileName} already exists`,
);
continue;
}
changedChartArchives.push(value);
}
return changedChartArchives;
}
async function getChartArchives(): Promise<Record<string, Archive>> {
try {
await fs.access(CR_RELEASE_PACKAGE_PATH);
} catch (e) {
console.log("No chart archives found");
return {};
}
const archiveList = await fs.readdir(CR_RELEASE_PACKAGE_PATH, {
withFileTypes: true,
});
const chartNames: Record<string, Archive> = {};
for (const dirent of archiveList) {
if (dirent.isFile() && dirent.name.endsWith(".tgz")) {
const parsed = /^(?<name>[\w-]+?)-\d/.exec(dirent.name);
// immich --> .cr-release-packages/immich-1.0.0.tgz
chartNames[parsed.groups.name] = {
path: path.join(CR_RELEASE_PACKAGE_PATH, dirent.name),
fileName: path.parse(dirent.name).name,
};
}
}
return chartNames;
}
export function getGitTags(): string[] {
const result = execSync("git tag");
const tagString = result.toString();
return tagString.split("\n");
}
// do not run main if this script is being tested
if (!process.env.VITEST_WORKER_ID) {
main(process.argv);
}

7
tsconfig.json Normal file
View file

@ -0,0 +1,7 @@
{
"compilerOptions": {
"moduleResolution": "nodenext",
"allowImportingTsExtensions": true,
"target": "esnext"
}
}