chore: move sdk to packages (#28350)

pull/28351/head
Jason Rasmussen 2026-05-11 13:37:10 -04:00 committed by GitHub
parent b4f719653f
commit 7837d40f57
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
24 changed files with 37 additions and 44 deletions

View File

@ -30,9 +30,7 @@ machine-learning/
misc/ misc/
mobile/ mobile/
open-api/typescript-sdk/build/ packages/sdk/build/
!open-api/typescript-sdk/package.json
!open-api/typescript-sdk/package-lock.json
server/upload/ server/upload/
server/src/queries server/src/queries

4
.gitattributes vendored
View File

@ -24,7 +24,7 @@ mobile/lib/infrastructure/repositories/db.repository.steps.dart linguist-generat
mobile/test/drift/main/generated/** -diff -merge mobile/test/drift/main/generated/** -diff -merge
mobile/test/drift/main/generated/** linguist-generated=true mobile/test/drift/main/generated/** linguist-generated=true
open-api/typescript-sdk/fetch-client.ts -diff -merge packages/sdk/fetch-client.ts -diff -merge
open-api/typescript-sdk/fetch-client.ts linguist-generated=true packages/sdk/fetch-client.ts linguist-generated=true
*.sh text eol=lf *.sh text eol=lf

View File

@ -14,9 +14,6 @@ jobs:
contents: read contents: read
id-token: write id-token: write
packages: write packages: write
defaults:
run:
working-directory: ./open-api/typescript-sdk
steps: steps:
- id: token - id: token
uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0 uses: immich-app/devtools/actions/create-workflow-token@caa599d954228439ea3e8ce1c3328f41ab120ee6 # create-workflow-token-action-v2.0.0
@ -36,10 +33,10 @@ jobs:
github_token: ${{ steps.token.outputs.token }} github_token: ${{ steps.token.outputs.token }}
- name: Install deps - name: Install deps
run: pnpm install --frozen-lockfile run: pnpm --filter @immich/sdk install --frozen-lockfile
- name: Build - name: Build
run: pnpm build run: pnpm --filter @immich/sdk build
- name: Publish - name: Publish
run: pnpm publish --provenance --no-git-checks run: pnpm --filter @immich/sdk publish --provenance --no-git-checks

View File

@ -33,14 +33,14 @@ jobs:
web: web:
- 'web/**' - 'web/**'
- 'i18n/**' - 'i18n/**'
- 'open-api/typescript-sdk/**' - 'packages/sdk/**'
- 'pnpm-lock.yaml' - 'pnpm-lock.yaml'
server: server:
- 'server/**' - 'server/**'
- 'pnpm-lock.yaml' - 'pnpm-lock.yaml'
cli: cli:
- 'cli/**' - 'cli/**'
- 'open-api/typescript-sdk/**' - 'packages/sdk/**'
- 'pnpm-lock.yaml' - 'pnpm-lock.yaml'
e2e: e2e:
- 'e2e/**' - 'e2e/**'
@ -149,9 +149,9 @@ jobs:
node-version-file: '.nvmrc' node-version-file: '.nvmrc'
cache: 'pnpm' cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml' cache-dependency-path: '**/pnpm-lock.yaml'
- name: Setup typescript-sdk
run: pnpm install --frozen-lockfile && pnpm build - name: Setup @immich/sdk
working-directory: ./open-api/typescript-sdk run: pnpm --filter @immich/sdk install --frozen-lockfile && pnpm --filter @immich/sdk build
- name: Install deps - name: Install deps
run: pnpm install --frozen-lockfile run: pnpm install --frozen-lockfile
@ -194,7 +194,7 @@ jobs:
with: with:
github_token: ${{ steps.token.outputs.token }} github_token: ${{ steps.token.outputs.token }}
- name: Run setup typescript-sdk - name: Run setup @immich/sdk
run: mise run //:sdk:install && mise run //:sdk:build run: mise run //:sdk:install && mise run //:sdk:build
- name: Run pnpm install - name: Run pnpm install
@ -384,9 +384,8 @@ jobs:
cache: 'pnpm' cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml' cache-dependency-path: '**/pnpm-lock.yaml'
- name: Setup typescript-sdk - name: Setup @immich/sdk
run: pnpm install --frozen-lockfile && pnpm build run: pnpm --filter @immich/sdk install --frozen-lockfile && pnpm --filter @immich/sdk build
working-directory: ./open-api/typescript-sdk
- name: Run setup web - name: Run setup web
run: pnpm install --frozen-lockfile && pnpm exec svelte-kit sync run: pnpm install --frozen-lockfile && pnpm exec svelte-kit sync
@ -467,9 +466,8 @@ jobs:
cache: 'pnpm' cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml' cache-dependency-path: '**/pnpm-lock.yaml'
- name: Run setup typescript-sdk - name: Run setup @immich/sdk
run: pnpm install --frozen-lockfile && pnpm build run: pnpm --filter @immich/sdk install --frozen-lockfile && pnpm --filter @immich/sdk build
working-directory: ./open-api/typescript-sdk
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
- name: Install dependencies - name: Install dependencies
@ -699,7 +697,7 @@ jobs:
with: with:
files: | files: |
mobile/openapi mobile/openapi
open-api/typescript-sdk packages/sdk
open-api/immich-openapi-specs.json open-api/immich-openapi-specs.json
- name: Verify files have not changed - name: Verify files have not changed

2
.gitignore vendored
View File

@ -20,7 +20,7 @@ mobile/openapi/doc
mobile/openapi/.openapi-generator/FILES mobile/openapi/.openapi-generator/FILES
mobile/ios/build mobile/ios/build
open-api/typescript-sdk/build packages/**/build
mobile/android/fastlane/report.xml mobile/android/fastlane/report.xml
mobile/ios/fastlane/report.xml mobile/ios/fastlane/report.xml

View File

@ -63,7 +63,7 @@ VOLUME_DIRS = \
./e2e/node_modules \ ./e2e/node_modules \
./docs/node_modules \ ./docs/node_modules \
./server/node_modules \ ./server/node_modules \
./open-api/typescript-sdk/node_modules \ ./packages/sdk/node_modules \
./.github/node_modules \ ./.github/node_modules \
./node_modules \ ./node_modules \
./cli/node_modules ./cli/node_modules
@ -77,7 +77,7 @@ MODULES = e2e server web cli sdk docs .github
# cli = @immich/cli # cli = @immich/cli
# docs = documentation # docs = documentation
# e2e = immich-e2e # e2e = immich-e2e
# open-api/typescript-sdk = @immich/sdk # packages/sdk = @immich/sdk
# server = immich # server = immich
# web = immich-web # web = immich-web
map-package = $(subst sdk,@immich/sdk,$(subst cli,@immich/cli,$(subst docs,documentation,$(subst e2e,immich-e2e,$(subst server,immich,$(subst web,immich-web,$1)))))) map-package = $(subst sdk,@immich/sdk,$(subst cli,@immich/cli,$(subst docs,documentation,$(subst e2e,immich-e2e,$(subst server,immich,$(subst web,immich-web,$1))))))

View File

@ -3,7 +3,7 @@ FROM node:24.1.0-alpine3.20@sha256:8fe019e0d57dbdce5f5c27c0b63d2775cf34b00e3755a
WORKDIR /usr/src/app WORKDIR /usr/src/app
COPY package* pnpm* .pnpmfile.cjs ./ COPY package* pnpm* .pnpmfile.cjs ./
COPY ./cli ./cli/ COPY ./cli ./cli/
COPY ./open-api/typescript-sdk ./open-api/typescript-sdk/ COPY ./packages ./packages/
RUN corepack enable pnpm && \ RUN corepack enable pnpm && \
pnpm install --filter @immich/sdk --filter @immich/cli --frozen-lockfile && \ pnpm install --filter @immich/sdk --filter @immich/cli --frozen-lockfile && \
pnpm --filter @immich/sdk build && \ pnpm --filter @immich/sdk build && \

View File

@ -28,7 +28,7 @@ services:
- cli_node_modules:/usr/src/app/cli/node_modules - cli_node_modules:/usr/src/app/cli/node_modules
- docs_node_modules:/usr/src/app/docs/node_modules - docs_node_modules:/usr/src/app/docs/node_modules
- e2e_node_modules:/usr/src/app/e2e/node_modules - e2e_node_modules:/usr/src/app/e2e/node_modules
- sdk_node_modules:/usr/src/app/open-api/typescript-sdk/node_modules - sdk_node_modules:/usr/src/app/packages/sdk/node_modules
- app_node_modules:/usr/src/app/node_modules - app_node_modules:/usr/src/app/node_modules
- sveltekit:/usr/src/app/web/.svelte-kit - sveltekit:/usr/src/app/web/.svelte-kit
- coverage:/usr/src/app/web/coverage - coverage:/usr/src/app/web/coverage

View File

@ -10,4 +10,4 @@ OpenAPI is used to generate the client (Typescript, Dart) SDK. `openapi-generato
make open-api make open-api
``` ```
You can find the generated client SDK in the `open-api/typescript-sdk/client` for Typescript SDK and `mobile/openapi` for Dart SDK. You can find the generated client SDK in the `packages/sdk/client` for Typescript SDK and `mobile/openapi` for Dart SDK.

View File

@ -205,7 +205,7 @@ When the Dev Container starts, it automatically:
1. **Runs post-create script** (`container-server-post-create.sh`): 1. **Runs post-create script** (`container-server-post-create.sh`):
- Adjusts file permissions for the `node` user - Adjusts file permissions for the `node` user
- Installs dependencies: `pnpm install` in all packages - Installs dependencies: `pnpm install` in all packages
- Builds TypeScript SDK: `pnpm run build` in `open-api/typescript-sdk` - Builds TypeScript SDK: `pnpm --filter @immich/sdk build`
2. **Starts development servers** via VS Code tasks: 2. **Starts development servers** via VS Code tasks:
- `Immich API Server (Nest)` - API server with hot-reloading on port 2283 - `Immich API Server (Nest)` - API server with hot-reloading on port 2283

View File

@ -58,7 +58,7 @@ You can access the web from `http://your-machine-ip:3000` or `http://localhost:3
If you only want to do web development connected to an existing, remote backend, follow these steps: If you only want to do web development connected to an existing, remote backend, follow these steps:
1. Build the Immich SDK - `cd open-api/typescript-sdk && pnpm i && pnpm run build && cd -` 1. Build the Immich SDK - `pnpm --filter @immich/sdk install && pnpm --filter @immich/sdk build`
2. Enter the web directory - `cd web/` 2. Enter the web directory - `cd web/`
3. Install web dependencies - `pnpm i` 3. Install web dependencies - `pnpm i`
4. Start the web development server 4. Start the web development server

View File

@ -68,7 +68,7 @@ if [ "$CURRENT_SERVER" != "$NEXT_SERVER" ]; then
pnpm version "$NEXT_SERVER" --no-git-tag-version --prefix cli pnpm version "$NEXT_SERVER" --no-git-tag-version --prefix cli
pnpm version "$NEXT_SERVER" --no-git-tag-version --prefix web pnpm version "$NEXT_SERVER" --no-git-tag-version --prefix web
pnpm version "$NEXT_SERVER" --no-git-tag-version --prefix e2e pnpm version "$NEXT_SERVER" --no-git-tag-version --prefix e2e
pnpm version "$NEXT_SERVER" --no-git-tag-version --prefix open-api/typescript-sdk pnpm version "$NEXT_SERVER" --no-git-tag-version --prefix packages/sdk
# copy version to open-api spec # copy version to open-api spec
pnpm install --frozen-lockfile --prefix server pnpm install --frozen-lockfile --prefix server

View File

@ -42,11 +42,11 @@ pin = true
# SDK tasks # SDK tasks
[tasks."sdk:install"] [tasks."sdk:install"]
dir = "open-api/typescript-sdk" dir = "packages/sdk"
run = "pnpm install --filter @immich/sdk --frozen-lockfile" run = "pnpm install --filter @immich/sdk --frozen-lockfile"
[tasks."sdk:build"] [tasks."sdk:build"]
dir = "open-api/typescript-sdk" dir = "packages/sdk"
run = "pnpm run build" run = "pnpm run build"
# i18n tasks # i18n tasks

View File

@ -30,7 +30,7 @@ function dart {
} }
function typescript { function typescript {
pnpm dlx oazapfts --optimistic --argumentStyle=object --useEnumType --allSchemas immich-openapi-specs.json typescript-sdk/src/fetch-client.ts pnpm dlx oazapfts --optimistic --argumentStyle=object --useEnumType --allSchemas immich-openapi-specs.json ../packages/sdk/src/fetch-client.ts
pnpm --filter @immich/sdk install --frozen-lockfile pnpm --filter @immich/sdk install --frozen-lockfile
pnpm --filter @immich/sdk build pnpm --filter @immich/sdk build
} }

View File

@ -5,7 +5,7 @@
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/immich-app/immich.git", "url": "git+https://github.com/immich-app/immich.git",
"directory": "open-api/typescript-sdk" "directory": "packages/sdk"
}, },
"type": "module", "type": "module",
"main": "./build/index.js", "main": "./build/index.js",

View File

@ -47,7 +47,7 @@ importers:
version: 10.0.1(eslint@10.2.1(jiti@2.6.1)) version: 10.0.1(eslint@10.2.1(jiti@2.6.1))
'@immich/sdk': '@immich/sdk':
specifier: workspace:* specifier: workspace:*
version: link:../open-api/typescript-sdk version: link:../packages/sdk
'@types/byte-size': '@types/byte-size':
specifier: ^8.1.0 specifier: ^8.1.0
version: 8.1.2 version: 8.1.2
@ -207,7 +207,7 @@ importers:
version: link:../e2e-auth-server version: link:../e2e-auth-server
'@immich/sdk': '@immich/sdk':
specifier: workspace:* specifier: workspace:*
version: link:../open-api/typescript-sdk version: link:../packages/sdk
'@playwright/test': '@playwright/test':
specifier: ^1.44.1 specifier: ^1.44.1
version: 1.59.1 version: 1.59.1
@ -314,7 +314,7 @@ importers:
specifier: ^4.1.1 specifier: ^4.1.1
version: 4.2.0(prettier@3.8.3) version: 4.2.0(prettier@3.8.3)
open-api/typescript-sdk: packages/sdk:
dependencies: dependencies:
'@oazapfts/runtime': '@oazapfts/runtime':
specifier: ^1.0.2 specifier: ^1.0.2
@ -731,7 +731,7 @@ importers:
version: 0.4.3 version: 0.4.3
'@immich/sdk': '@immich/sdk':
specifier: workspace:* specifier: workspace:*
version: link:../open-api/typescript-sdk version: link:../packages/sdk
'@immich/ui': '@immich/ui':
specifier: ^0.76.0 specifier: ^0.76.0
version: 0.76.2(@sveltejs/kit@2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.2)(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.2) version: 0.76.2(@sveltejs/kit@2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.2)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.2)(typescript@6.0.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.99.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.2)

View File

@ -1,10 +1,10 @@
packages: packages:
- packages/**
- cli - cli
- docs - docs
- e2e - e2e
- e2e-auth-server - e2e-auth-server
- i18n - i18n
- open-api/typescript-sdk
- server - server
- plugins - plugins
- web - web

View File

@ -29,7 +29,7 @@ ENV IMMICH_BUILD=${BUILD_ID}
WORKDIR /usr/src/app WORKDIR /usr/src/app
COPY ./web ./web/ COPY ./web ./web/
COPY ./i18n ./i18n/ COPY ./i18n ./i18n/
COPY ./open-api ./open-api/ COPY ./packages ./packages/
RUN --mount=type=cache,id=pnpm-web,target=/buildcache/pnpm-store \ RUN --mount=type=cache,id=pnpm-web,target=/buildcache/pnpm-store \
--mount=type=bind,source=package.json,target=package.json \ --mount=type=bind,source=package.json,target=package.json \
--mount=type=bind,source=.pnpmfile.cjs,target=.pnpmfile.cjs \ --mount=type=bind,source=.pnpmfile.cjs,target=.pnpmfile.cjs \
@ -41,7 +41,7 @@ RUN --mount=type=cache,id=pnpm-web,target=/buildcache/pnpm-store \
FROM builder AS cli FROM builder AS cli
COPY ./cli ./cli/ COPY ./cli ./cli/
COPY ./open-api ./open-api/ COPY ./packages ./packages/
RUN --mount=type=cache,id=pnpm-cli,target=/buildcache/pnpm-store \ RUN --mount=type=cache,id=pnpm-cli,target=/buildcache/pnpm-store \
--mount=type=bind,source=package.json,target=package.json \ --mount=type=bind,source=package.json,target=package.json \
--mount=type=bind,source=.pnpmfile.cjs,target=.pnpmfile.cjs \ --mount=type=bind,source=.pnpmfile.cjs,target=.pnpmfile.cjs \