mirror of
				https://github.com/immich-app/immich.git
				synced 2025-10-31 10:37:11 -04:00 
			
		
		
		
	Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
		
			
				
	
	
		
			508 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			TOML
		
	
	
	
	
	
			
		
		
	
	
			508 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			TOML
		
	
	
	
	
	
| [tools]
 | |
| node = "22.20.0"
 | |
| flutter = "3.35.5"
 | |
| pnpm = "10.18.0"
 | |
| 
 | |
| [tools."github:CQLabs/homebrew-dcm"]
 | |
| version = "1.30.0"
 | |
| bin = "dcm"
 | |
| postinstall = "chmod +x $MISE_TOOL_INSTALL_PATH/dcm"
 | |
| 
 | |
| [settings]
 | |
| experimental = true
 | |
| pin = true
 | |
| 
 | |
| # .github
 | |
| [tasks."github:install"]
 | |
| run = "pnpm install --filter github --frozen-lockfile"
 | |
| 
 | |
| [tasks."github:format"]
 | |
| env._.path = "./.github/node_modules/.bin"
 | |
| dir = ".github"
 | |
| run = "prettier --check ."
 | |
| 
 | |
| [tasks."github:format-fix"]
 | |
| env._.path = "./.github/node_modules/.bin"
 | |
| dir = ".github"
 | |
| run = "prettier --write ."
 | |
| 
 | |
| # @immich/cli
 | |
| [tasks."cli:install"]
 | |
| run = "pnpm install --filter @immich/cli --frozen-lockfile"
 | |
| 
 | |
| [tasks."cli:build"]
 | |
| env._.path = "./cli/node_modules/.bin"
 | |
| dir = "cli"
 | |
| run = "vite build"
 | |
| 
 | |
| [tasks."cli:test"]
 | |
| env._.path = "./cli/node_modules/.bin"
 | |
| dir = "cli"
 | |
| run = "vite"
 | |
| 
 | |
| [tasks."cli:lint"]
 | |
| env._.path = "./cli/node_modules/.bin"
 | |
| dir = "cli"
 | |
| run = "eslint \"src/**/*.ts\" --max-warnings 0"
 | |
| 
 | |
| [tasks."cli:lint-fix"]
 | |
| run = "mise run cli:lint --fix"
 | |
| 
 | |
| [tasks."cli:format"]
 | |
| env._.path = "./cli/node_modules/.bin"
 | |
| dir = "cli"
 | |
| run = "prettier --check ."
 | |
| 
 | |
| [tasks."cli:format-fix"]
 | |
| env._.path = "./cli/node_modules/.bin"
 | |
| dir = "cli"
 | |
| run = "prettier --write ."
 | |
| 
 | |
| [tasks."cli:check"]
 | |
| env._.path = "./cli/node_modules/.bin"
 | |
| dir = "cli"
 | |
| run = "tsc --noEmit"
 | |
| 
 | |
| # @immich/sdk
 | |
| [tasks."sdk:install"]
 | |
| run = "pnpm install --filter @immich/sdk --frozen-lockfile"
 | |
| 
 | |
| [tasks."sdk:build"]
 | |
| env._.path = "./open-api/typescript-sdk/node_modules/.bin"
 | |
| dir = "./open-api/typescript-sdk"
 | |
| run = "tsc"
 | |
| 
 | |
| # docs
 | |
| [tasks."docs:install"]
 | |
| run = "pnpm install --filter documentation --frozen-lockfile"
 | |
| 
 | |
| [tasks."docs:start"]
 | |
| env._.path = "./docs/node_modules/.bin"
 | |
| dir = "docs"
 | |
| run = "docusaurus --port 3005"
 | |
| 
 | |
| [tasks."docs:build"]
 | |
| env._.path = "./docs/node_modules/.bin"
 | |
| dir = "docs"
 | |
| run = [
 | |
|   "jq -c < ../open-api/immich-openapi-specs.json > ./static/openapi.json || exit 0",
 | |
|   "docusaurus build",
 | |
| ]
 | |
| 
 | |
| 
 | |
| [tasks."docs:preview"]
 | |
| env._.path = "./docs/node_modules/.bin"
 | |
| dir = "docs"
 | |
| run = "docusaurus serve"
 | |
| 
 | |
| 
 | |
| [tasks."docs:format"]
 | |
| env._.path = "./docs/node_modules/.bin"
 | |
| dir = "docs"
 | |
| run = "prettier --check ."
 | |
| 
 | |
| [tasks."docs:format-fix"]
 | |
| env._.path = "./docs/node_modules/.bin"
 | |
| dir = "docs"
 | |
| run = "prettier --write ."
 | |
| 
 | |
| 
 | |
| # e2e
 | |
| [tasks."e2e:install"]
 | |
| run = "pnpm install --filter immich-e2e --frozen-lockfile"
 | |
| 
 | |
| [tasks."e2e:test"]
 | |
| env._.path = "./e2e/node_modules/.bin"
 | |
| dir = "e2e"
 | |
| run = "vitest --run"
 | |
| 
 | |
| [tasks."e2e:test-web"]
 | |
| env._.path = "./e2e/node_modules/.bin"
 | |
| dir = "e2e"
 | |
| run = "playwright test"
 | |
| 
 | |
| [tasks."e2e:format"]
 | |
| env._.path = "./e2e/node_modules/.bin"
 | |
| dir = "e2e"
 | |
| run = "prettier --check ."
 | |
| 
 | |
| [tasks."e2e:format-fix"]
 | |
| env._.path = "./e2e/node_modules/.bin"
 | |
| dir = "e2e"
 | |
| run = "prettier --write ."
 | |
| 
 | |
| [tasks."e2e:lint"]
 | |
| env._.path = "./e2e/node_modules/.bin"
 | |
| dir = "e2e"
 | |
| run = "eslint \"src/**/*.ts\" --max-warnings 0"
 | |
| 
 | |
| [tasks."e2e:lint-fix"]
 | |
| run = "mise run e2e:lint --fix"
 | |
| 
 | |
| [tasks."e2e:check"]
 | |
| env._.path = "./e2e/node_modules/.bin"
 | |
| dir = "e2e"
 | |
| run = "tsc --noEmit"
 | |
| 
 | |
| # i18n
 | |
| [tasks."i18n:format"]
 | |
| run = "mise run i18n:format-fix"
 | |
| 
 | |
| [tasks."i18n:format-fix"]
 | |
| run = "pnpm dlx sort-json ./i18n/*.json"
 | |
| 
 | |
| 
 | |
| # server
 | |
| [tasks."server:install"]
 | |
| run = "pnpm install --filter immich --frozen-lockfile"
 | |
| 
 | |
| [tasks."server:build"]
 | |
| env._.path = "./server/node_modules/.bin"
 | |
| dir = "server"
 | |
| run = "nest build"
 | |
| 
 | |
| [tasks."server:test"]
 | |
| env._.path = "./server/node_modules/.bin"
 | |
| dir = "server"
 | |
| run = "vitest --config test/vitest.config.mjs"
 | |
| 
 | |
| [tasks."server:test-medium"]
 | |
| env._.path = "./server/node_modules/.bin"
 | |
| dir = "server"
 | |
| run = "vitest --config test/vitest.config.medium.mjs"
 | |
| 
 | |
| [tasks."server:format"]
 | |
| env._.path = "./server/node_modules/.bin"
 | |
| dir = "server"
 | |
| run = "prettier --check ."
 | |
| 
 | |
| [tasks."server:format-fix"]
 | |
| env._.path = "./server/node_modules/.bin"
 | |
| dir = "server"
 | |
| run = "prettier --write ."
 | |
| 
 | |
| [tasks."server:lint"]
 | |
| env._.path = "./server/node_modules/.bin"
 | |
| dir = "server"
 | |
| run = "eslint \"src/**/*.ts\" \"test/**/*.ts\" --max-warnings 0"
 | |
| 
 | |
| [tasks."server:lint-fix"]
 | |
| run = "mise run server:lint --fix"
 | |
| 
 | |
| [tasks."server:check"]
 | |
| env._.path = "./server/node_modules/.bin"
 | |
| dir = "server"
 | |
| run = "tsc --noEmit"
 | |
| 
 | |
| [tasks."server:sql"]
 | |
| dir = "server"
 | |
| run = "node ./dist/bin/sync-open-api.js"
 | |
| 
 | |
| [tasks."server:open-api"]
 | |
| dir = "server"
 | |
| run = "node ./dist/bin/sync-open-api.js"
 | |
| 
 | |
| [tasks."server:migrations"]
 | |
| dir = "server"
 | |
| run = "node ./dist/bin/migrations.js"
 | |
| description = "Run database migration commands (create, generate, run, debug, or query)"
 | |
| 
 | |
| [tasks."server:schema-drop"]
 | |
| run = "mise run server:migrations query 'DROP schema public cascade; CREATE schema public;'"
 | |
| 
 | |
| [tasks."server:schema-reset"]
 | |
| run = "mise run server:schema-drop && mise run server:migrations run"
 | |
| 
 | |
| [tasks."server:email-dev"]
 | |
| env._.path = "./server/node_modules/.bin"
 | |
| dir = "server"
 | |
| run = "email dev -p 3050 --dir src/emails"
 | |
| 
 | |
| [tasks."server:checklist"]
 | |
| run = [
 | |
|   "mise run server:install",
 | |
|   "mise run server:format",
 | |
|   "mise run server:lint",
 | |
|   "mise run server:check",
 | |
|   "mise run server:test-medium --run",
 | |
|   "mise run server:test --run",
 | |
| ]
 | |
| 
 | |
| 
 | |
| # web
 | |
| [tasks."web:install"]
 | |
| run = "pnpm install --filter immich-web --frozen-lockfile"
 | |
| 
 | |
| [tasks."web:svelte-kit-sync"]
 | |
| env._.path = "./web/node_modules/.bin"
 | |
| dir = "web"
 | |
| run = "svelte-kit sync"
 | |
| 
 | |
| [tasks."web:build"]
 | |
| env._.path = "./web/node_modules/.bin"
 | |
| dir = "web"
 | |
| run = "vite build"
 | |
| 
 | |
| [tasks."web:build-stats"]
 | |
| env.BUILD_STATS = "true"
 | |
| env._.path = "./web/node_modules/.bin"
 | |
| dir = "web"
 | |
| run = "vite build"
 | |
| 
 | |
| [tasks."web:preview"]
 | |
| env._.path = "./web/node_modules/.bin"
 | |
| dir = "web"
 | |
| run = "vite preview"
 | |
| 
 | |
| [tasks."web:start"]
 | |
| env._.path = "web/node_modules/.bin"
 | |
| dir = "web"
 | |
| run = "vite dev --host 0.0.0.0 --port 3000"
 | |
| 
 | |
| [tasks."web:test"]
 | |
| depends = "web:svelte-kit-sync"
 | |
| env._.path = "web/node_modules/.bin"
 | |
| dir = "web"
 | |
| run = "vitest"
 | |
| 
 | |
| [tasks."web:format"]
 | |
| env._.path = "web/node_modules/.bin"
 | |
| dir = "web"
 | |
| run = "prettier --check ."
 | |
| 
 | |
| [tasks."web:format-fix"]
 | |
| env._.path = "web/node_modules/.bin"
 | |
| dir = "web"
 | |
| run = "prettier --write ."
 | |
| 
 | |
| [tasks."web:lint"]
 | |
| env._.path = "web/node_modules/.bin"
 | |
| dir = "web"
 | |
| run = "eslint . --max-warnings 0 --concurrency 4"
 | |
| 
 | |
| [tasks."web:lint-fix"]
 | |
| run = "mise run web:lint --fix"
 | |
| 
 | |
| [tasks."web:check"]
 | |
| depends = "web:svelte-kit-sync"
 | |
| env._.path = "web/node_modules/.bin"
 | |
| dir = "web"
 | |
| run = "tsc --noEmit"
 | |
| 
 | |
| [tasks."web:check-svelte"]
 | |
| depends = "web:svelte-kit-sync"
 | |
| env._.path = "web/node_modules/.bin"
 | |
| dir = "web"
 | |
| run = "svelte-check --no-tsconfig --fail-on-warnings"
 | |
| 
 | |
| [tasks."web:checklist"]
 | |
| run = [
 | |
|   "mise run web:install",
 | |
|   "mise run web:format",
 | |
|   "mise run web:check",
 | |
|   "mise run web:test --run",
 | |
|   "mise run web:lint",
 | |
| ]
 | |
| 
 | |
| 
 | |
| # mobile
 | |
| [tasks."mobile:codegen:dart"]
 | |
| alias = "mobile:codegen"
 | |
| description = "Execute build_runner to auto-generate dart code"
 | |
| dir = "mobile"
 | |
| sources = [
 | |
|   "pubspec.yaml",
 | |
|   "build.yaml",
 | |
|   "lib/**/*.dart",
 | |
|   "infrastructure/**/*.drift",
 | |
| ]
 | |
| outputs = { auto = true }
 | |
| run = "dart run build_runner build --delete-conflicting-outputs"
 | |
| 
 | |
| [tasks."mobile:codegen:pigeon"]
 | |
| alias = "mobile:pigeon"
 | |
| description = "Generate pigeon platform code"
 | |
| dir = "mobile"
 | |
| depends = [
 | |
|   "mobile:pigeon:native-sync",
 | |
|   "mobile:pigeon:thumbnail",
 | |
|   "mobile:pigeon:background-worker",
 | |
|   "mobile:pigeon:background-worker-lock",
 | |
|   "mobile:pigeon:connectivity",
 | |
| ]
 | |
| 
 | |
| [tasks."mobile:codegen:translation"]
 | |
| alias = "mobile:translation"
 | |
| description = "Generate translations from i18n JSONs"
 | |
| dir = "mobile"
 | |
| run = [
 | |
|   { task = "i18n:format-fix" },
 | |
|   { tasks = [
 | |
|     "mobile:i18n:loader",
 | |
|     "mobile:i18n:keys",
 | |
|   ] },
 | |
| ]
 | |
| 
 | |
| [tasks."mobile:codegen:app-icon"]
 | |
| description = "Generate app icons"
 | |
| dir = "mobile"
 | |
| run = "flutter pub run flutter_launcher_icons:main"
 | |
| 
 | |
| [tasks."mobile:codegen:splash"]
 | |
| description = "Generate splash screen"
 | |
| dir = "mobile"
 | |
| run = "flutter pub run flutter_native_splash:create"
 | |
| 
 | |
| [tasks."mobile:test"]
 | |
| description = "Run mobile tests"
 | |
| dir = "mobile"
 | |
| run = "flutter test"
 | |
| 
 | |
| [tasks."mobile:lint"]
 | |
| description = "Analyze Dart code"
 | |
| dir = "mobile"
 | |
| depends = ["mobile:analyze:dart", "mobile:analyze:dcm"]
 | |
| 
 | |
| [tasks."mobile:lint-fix"]
 | |
| description = "Auto-fix Dart code"
 | |
| dir = "mobile"
 | |
| depends = ["mobile:analyze:fix:dart", "mobile:analyze:fix:dcm"]
 | |
| 
 | |
| [tasks."mobile:format"]
 | |
| description = "Format Dart code"
 | |
| dir = "mobile"
 | |
| run = "dart format --set-exit-if-changed $(find lib -name '*.dart' -not \\( -name '*.g.dart' -o -name '*.drift.dart' -o -name '*.gr.dart' \\))"
 | |
| 
 | |
| [tasks."mobile:build:android"]
 | |
| description = "Build Android release"
 | |
| dir = "mobile"
 | |
| run = "flutter build appbundle"
 | |
| 
 | |
| [tasks."mobile:drift:migration"]
 | |
| alias = "mobile:migration"
 | |
| description = "Generate database migrations"
 | |
| dir = "mobile"
 | |
| run = "dart run drift_dev make-migrations"
 | |
| 
 | |
| 
 | |
| # mobile internal tasks
 | |
| [tasks."mobile:pigeon:native-sync"]
 | |
| description = "Generate native sync API pigeon code"
 | |
| dir = "mobile"
 | |
| hide = true
 | |
| sources = ["pigeon/native_sync_api.dart"]
 | |
| outputs = [
 | |
|   "lib/platform/native_sync_api.g.dart",
 | |
|   "ios/Runner/Sync/Messages.g.swift",
 | |
|   "android/app/src/main/kotlin/app/alextran/immich/sync/Messages.g.kt",
 | |
| ]
 | |
| run = [
 | |
|   "dart run pigeon --input pigeon/native_sync_api.dart",
 | |
|   "dart format lib/platform/native_sync_api.g.dart",
 | |
| ]
 | |
| 
 | |
| [tasks."mobile:pigeon:thumbnail"]
 | |
| description = "Generate thumbnail API pigeon code"
 | |
| dir = "mobile"
 | |
| hide = true
 | |
| sources = ["pigeon/thumbnail_api.dart"]
 | |
| outputs = [
 | |
|   "lib/platform/thumbnail_api.g.dart",
 | |
|   "ios/Runner/Images/Thumbnails.g.swift",
 | |
|   "android/app/src/main/kotlin/app/alextran/immich/images/Thumbnails.g.kt",
 | |
| ]
 | |
| run = [
 | |
|   "dart run pigeon --input pigeon/thumbnail_api.dart",
 | |
|   "dart format lib/platform/thumbnail_api.g.dart",
 | |
| ]
 | |
| 
 | |
| [tasks."mobile:pigeon:background-worker"]
 | |
| description = "Generate background worker API pigeon code"
 | |
| dir = "mobile"
 | |
| hide = true
 | |
| sources = ["pigeon/background_worker_api.dart"]
 | |
| outputs = [
 | |
|   "lib/platform/background_worker_api.g.dart",
 | |
|   "ios/Runner/Background/BackgroundWorker.g.swift",
 | |
|   "android/app/src/main/kotlin/app/alextran/immich/background/BackgroundWorker.g.kt",
 | |
| ]
 | |
| run = [
 | |
|   "dart run pigeon --input pigeon/background_worker_api.dart",
 | |
|   "dart format lib/platform/background_worker_api.g.dart",
 | |
| ]
 | |
| 
 | |
| [tasks."mobile:pigeon:background-worker-lock"]
 | |
| description = "Generate background worker lock API pigeon code"
 | |
| dir = "mobile"
 | |
| hide = true
 | |
| sources = ["pigeon/background_worker_lock_api.dart"]
 | |
| outputs = [
 | |
|   "lib/platform/background_worker_lock_api.g.dart",
 | |
|   "android/app/src/main/kotlin/app/alextran/immich/background/BackgroundWorkerLock.g.kt",
 | |
| ]
 | |
| run = [
 | |
|   "dart run pigeon --input pigeon/background_worker_lock_api.dart",
 | |
|   "dart format lib/platform/background_worker_lock_api.g.dart",
 | |
| ]
 | |
| 
 | |
| [tasks."mobile:pigeon:connectivity"]
 | |
| description = "Generate connectivity API pigeon code"
 | |
| dir = "mobile"
 | |
| hide = true
 | |
| sources = ["pigeon/connectivity_api.dart"]
 | |
| outputs = [
 | |
|   "lib/platform/connectivity_api.g.dart",
 | |
|   "ios/Runner/Connectivity/Connectivity.g.swift",
 | |
|   "android/app/src/main/kotlin/app/alextran/immich/connectivity/Connectivity.g.kt",
 | |
| ]
 | |
| run = [
 | |
|   "dart run pigeon --input pigeon/connectivity_api.dart",
 | |
|   "dart format lib/platform/connectivity_api.g.dart",
 | |
| ]
 | |
| 
 | |
| [tasks."mobile:i18n:loader"]
 | |
| description = "Generate i18n loader"
 | |
| dir = "mobile"
 | |
| hide = true
 | |
| sources = ["i18n/"]
 | |
| outputs = "lib/generated/codegen_loader.g.dart"
 | |
| run = [
 | |
|   "dart run easy_localization:generate -S ../i18n",
 | |
|   "dart format lib/generated/codegen_loader.g.dart",
 | |
| ]
 | |
| 
 | |
| [tasks."mobile:i18n:keys"]
 | |
| description = "Generate i18n keys"
 | |
| dir = "mobile"
 | |
| hide = true
 | |
| sources = ["i18n/en.json"]
 | |
| outputs = "lib/generated/intl_keys.g.dart"
 | |
| run = [
 | |
|   "dart run bin/generate_keys.dart",
 | |
|   "dart format lib/generated/intl_keys.g.dart",
 | |
| ]
 | |
| 
 | |
| [tasks."mobile:analyze:dart"]
 | |
| description = "Run Dart analysis"
 | |
| dir = "mobile"
 | |
| hide = true
 | |
| run = "dart analyze --fatal-infos"
 | |
| 
 | |
| [tasks."mobile:analyze:dcm"]
 | |
| description = "Run Dart Code Metrics"
 | |
| dir = "mobile"
 | |
| hide = true
 | |
| run = "dcm analyze lib --fatal-style --fatal-warnings"
 | |
| 
 | |
| [tasks."mobile:analyze:fix:dart"]
 | |
| description = "Auto-fix Dart analysis"
 | |
| dir = "mobile"
 | |
| hide = true
 | |
| run = "dart fix --apply"
 | |
| 
 | |
| [tasks."mobile:analyze:fix:dcm"]
 | |
| description = "Auto-fix Dart Code Metrics"
 | |
| dir = "mobile"
 | |
| hide = true
 | |
| run = "dcm fix lib"
 |