2026-07-22 12:55:47 +02:00
|
|
|
monorepo_root = true
|
2025-11-10 15:55:15 +01:00
|
|
|
|
2026-01-28 14:55:11 +01:00
|
|
|
[monorepo]
|
|
|
|
|
config_roots = [
|
2026-05-18 11:09:33 -04:00
|
|
|
"packages/plugin-core",
|
2026-01-28 14:55:11 +01:00
|
|
|
"server",
|
2026-05-11 14:49:45 -04:00
|
|
|
"packages/cli",
|
2026-01-28 14:55:11 +01:00
|
|
|
"deployment",
|
|
|
|
|
"mobile",
|
|
|
|
|
"e2e",
|
|
|
|
|
"web",
|
|
|
|
|
"docs",
|
|
|
|
|
".github",
|
2026-05-06 17:03:54 +02:00
|
|
|
"machine-learning",
|
2026-01-28 14:55:11 +01:00
|
|
|
]
|
|
|
|
|
|
2025-09-04 18:58:42 +02:00
|
|
|
[tools]
|
2026-04-21 09:47:32 +00:00
|
|
|
node = "24.15.0"
|
2026-08-11 11:39:38 +02:00
|
|
|
pnpm = "11.20.0"
|
2026-07-22 11:16:09 +02:00
|
|
|
terragrunt = "1.1.1"
|
2026-07-30 15:56:24 -04:00
|
|
|
opentofu = "1.12.5"
|
2026-07-27 06:07:31 -07:00
|
|
|
"npm:@openapitools/openapi-generator-cli" = "2.40.1"
|
2026-05-12 14:12:27 +02:00
|
|
|
"npm:oazapfts" = "7.5.0"
|
2026-05-18 11:09:33 -04:00
|
|
|
"github:extism/cli" = "1.6.3"
|
|
|
|
|
"github:webassembly/binaryen" = "version_124"
|
|
|
|
|
"github:extism/js-pdk" = "1.6.0"
|
2026-06-07 15:36:28 +02:00
|
|
|
java = "21.0.2"
|
2025-11-10 19:50:19 +00:00
|
|
|
|
2026-05-01 13:03:49 -04:00
|
|
|
[tools."github:jellyfin/jellyfin-ffmpeg"]
|
|
|
|
|
version = "7.1.3-6"
|
|
|
|
|
|
|
|
|
|
[tools."github:jellyfin/jellyfin-ffmpeg".platforms]
|
|
|
|
|
linux-x64 = { asset_pattern = "jellyfin-ffmpeg_*_portable_linux64-gpl.tar.xz" }
|
|
|
|
|
linux-arm64 = { asset_pattern = "jellyfin-ffmpeg_*_portable_linuxarm64-gpl.tar.xz" }
|
|
|
|
|
macos-x64 = { asset_pattern = "jellyfin-ffmpeg_*_portable_mac64-gpl.tar.xz" }
|
|
|
|
|
macos-arm64 = { asset_pattern = "jellyfin-ffmpeg_*_portable_macarm64-gpl.tar.xz" }
|
|
|
|
|
|
2025-09-04 18:58:42 +02:00
|
|
|
[settings]
|
|
|
|
|
pin = true
|
2026-05-20 13:37:33 +02:00
|
|
|
lockfile = true
|
2025-09-04 18:10:36 -04:00
|
|
|
|
2026-06-26 12:45:06 -04:00
|
|
|
[tasks.release]
|
|
|
|
|
run = [
|
|
|
|
|
"pnpm --filter @immich/scripts install --frozen-lockfile",
|
|
|
|
|
"pnpm --filter @immich/scripts build",
|
|
|
|
|
"pnpm --filter @immich/scripts cli release {{arg(name='args', var=true)}}",
|
|
|
|
|
{ task = "//:open-api" },
|
|
|
|
|
]
|
|
|
|
|
|
2026-05-18 11:09:33 -04:00
|
|
|
[tasks.plugins]
|
|
|
|
|
run = [
|
2026-05-28 18:04:15 -04:00
|
|
|
"pnpm --filter @immich/sdk --filter @immich/plugin-sdk --filter @immich/plugin-core install --frozen-lockfile",
|
|
|
|
|
"pnpm --filter @immich/sdk --filter @immich/plugin-sdk --filter @immich/plugin-core build",
|
2026-05-18 11:09:33 -04:00
|
|
|
]
|
|
|
|
|
|
2026-05-11 17:46:02 -04:00
|
|
|
[tasks.open-api-typescript]
|
|
|
|
|
run = [
|
2026-05-12 14:12:27 +02:00
|
|
|
"oazapfts --optimistic --argumentStyle=object --useEnumType --allSchemas open-api/immich-openapi-specs.json packages/sdk/src/fetch-client.ts",
|
2026-05-11 17:46:02 -04:00
|
|
|
{ task = "//:sdk:install" },
|
|
|
|
|
{ task = "//:sdk:build" },
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[tasks.open-api-dart]
|
|
|
|
|
dir = "open-api"
|
2026-07-27 06:07:31 -07:00
|
|
|
sources = [
|
|
|
|
|
"immich-openapi-specs.json",
|
|
|
|
|
"openapitools.json",
|
|
|
|
|
"templates/**/*",
|
|
|
|
|
"patch/*",
|
|
|
|
|
"bin/generate-dart-sdk.sh",
|
|
|
|
|
]
|
2026-07-31 05:52:59 -07:00
|
|
|
outputs = ["../mobile/generated/openapi/"]
|
2026-05-11 17:46:02 -04:00
|
|
|
run = "bash ./bin/generate-dart-sdk.sh"
|
|
|
|
|
|
|
|
|
|
[tasks.open-api]
|
|
|
|
|
env = { SHARP_IGNORE_GLOBAL_LIBVIPS = true }
|
|
|
|
|
run = [
|
2026-05-18 11:09:33 -04:00
|
|
|
{ task = "//:plugins" },
|
2026-05-11 17:46:02 -04:00
|
|
|
{ task = "//server:install" },
|
|
|
|
|
{ task = "//server:build" },
|
|
|
|
|
{ task = "//server:sync-open-api" },
|
2026-05-20 16:43:30 +02:00
|
|
|
{ task = ":open-api-typescript" },
|
|
|
|
|
{ task = ":open-api-dart" },
|
2026-05-11 17:46:02 -04:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[tasks.sql]
|
|
|
|
|
dir = "server"
|
|
|
|
|
run = "node ./dist/bin/sync-sql.js"
|
|
|
|
|
|
2026-05-28 11:31:02 +02:00
|
|
|
# TODO dev, prod, and e2e should be de-duplicated by using env but for some reason I ran into issues
|
|
|
|
|
[tasks.dev]
|
|
|
|
|
depends = "//:plugins"
|
|
|
|
|
dir = "docker"
|
|
|
|
|
interactive = true
|
|
|
|
|
env = { COMPOSE_BAKE = true }
|
|
|
|
|
run = "docker compose -f ./docker-compose.dev.yml up --remove-orphans"
|
|
|
|
|
depends_post = "//:dev-down"
|
|
|
|
|
|
|
|
|
|
[tasks.dev-update]
|
|
|
|
|
run = { task = "//:dev", args = ["--build", "-V"] }
|
|
|
|
|
|
|
|
|
|
[tasks.dev-scale]
|
|
|
|
|
run = { task = "//:dev", args = ["--build", "-V", "--scale immich-server=3"] }
|
|
|
|
|
|
|
|
|
|
[tasks.dev-down]
|
|
|
|
|
dir = "docker"
|
|
|
|
|
run = "docker compose -f ./docker-compose.dev.yml down --remove-orphans"
|
|
|
|
|
|
|
|
|
|
[tasks.prod]
|
|
|
|
|
depends = "//:plugins"
|
|
|
|
|
dir = "docker"
|
|
|
|
|
interactive = true
|
|
|
|
|
env = { COMPOSE_BAKE = true }
|
2026-05-28 18:04:15 -04:00
|
|
|
run = "docker compose -f ./docker-compose.prod.yml up --build --remove-orphans"
|
2026-05-28 11:31:02 +02:00
|
|
|
depends_post = "//:prod-down"
|
|
|
|
|
|
|
|
|
|
[tasks.prod-scale]
|
|
|
|
|
run = { task = "//:prod", args = [
|
|
|
|
|
"--build",
|
|
|
|
|
"-V",
|
|
|
|
|
"--scale immich-server=3",
|
|
|
|
|
"--scale immich-microservices",
|
|
|
|
|
] }
|
|
|
|
|
|
|
|
|
|
[tasks.prod-down]
|
|
|
|
|
dir = "docker"
|
|
|
|
|
run = "docker compose -f ./docker-compose.prod.yml down --remove-orphans"
|
|
|
|
|
|
|
|
|
|
[tasks.e2e]
|
|
|
|
|
depends = "//:plugins"
|
|
|
|
|
dir = "e2e"
|
|
|
|
|
interactive = true
|
|
|
|
|
env = { COMPOSE_BAKE = true }
|
|
|
|
|
run = "docker compose -f ./docker-compose.yml up --remove-orphans"
|
|
|
|
|
depends_post = "//:e2e-down"
|
|
|
|
|
|
|
|
|
|
[tasks.e2e-dev]
|
|
|
|
|
depends = "//:plugins"
|
|
|
|
|
dir = "e2e"
|
|
|
|
|
interactive = true
|
|
|
|
|
env = { COMPOSE_BAKE = true }
|
|
|
|
|
run = "docker compose -f ./docker-compose.dev.yml up --remove-orphans"
|
|
|
|
|
depends_post = "//:e2e-dev-down"
|
|
|
|
|
|
|
|
|
|
[tasks.e2e-update]
|
|
|
|
|
run = { task = "//:e2e", args = ["--build", '-V'] }
|
|
|
|
|
|
|
|
|
|
[tasks.e2e-down]
|
|
|
|
|
dir = "e2e"
|
|
|
|
|
run = "docker compose -f ./docker-compose.yml down --remove-orphans"
|
|
|
|
|
|
|
|
|
|
[tasks.e2e-dev-down]
|
|
|
|
|
dir = "e2e"
|
|
|
|
|
run = "docker compose -f ./docker-compose.dev.yml down --remove-orphans"
|
|
|
|
|
|
2025-11-10 15:55:15 +01:00
|
|
|
# SDK tasks
|
2025-09-04 18:10:36 -04:00
|
|
|
[tasks."sdk:install"]
|
2026-05-11 13:37:10 -04:00
|
|
|
dir = "packages/sdk"
|
2026-05-12 15:21:04 -04:00
|
|
|
run = "pnpm --filter @immich/sdk install --frozen-lockfile"
|
2025-09-04 18:10:36 -04:00
|
|
|
|
|
|
|
|
[tasks."sdk:build"]
|
2026-05-11 13:37:10 -04:00
|
|
|
dir = "packages/sdk"
|
2026-05-12 15:21:04 -04:00
|
|
|
run = "pnpm build"
|
2025-09-04 18:10:36 -04:00
|
|
|
|
2025-11-10 15:55:15 +01:00
|
|
|
# i18n tasks
|
2025-09-04 18:10:36 -04:00
|
|
|
[tasks."i18n:format"]
|
2026-05-12 15:21:04 -04:00
|
|
|
run = "pnpm format"
|
2025-09-04 18:10:36 -04:00
|
|
|
|
|
|
|
|
[tasks."i18n:format-fix"]
|
2026-05-12 15:21:04 -04:00
|
|
|
run = "pnpm format:fix"
|
2026-05-28 14:33:57 +02:00
|
|
|
|
|
|
|
|
[tasks.clean]
|
|
|
|
|
run = [
|
|
|
|
|
"find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +",
|
|
|
|
|
"find . -name 'dist' -type d -prune -exec rm -rf '{}' +",
|
|
|
|
|
"find . -name 'build' -type d -prune -exec rm -rf '{}' +",
|
|
|
|
|
"find . -name '.svelte-kit' -type d -prune -exec rm -rf '{}' +",
|
|
|
|
|
"find . -name 'coverage' -type d -prune -exec rm -rf '{}' +",
|
|
|
|
|
"find . -name '.pnpm-store' -type d -prune -exec rm -rf '{}' +",
|
|
|
|
|
{ task = "//:*-down" },
|
|
|
|
|
]
|