mirror of
https://github.com/whyour/qinglong.git
synced 2026-09-20 16:07:11 +08:00
feat(ql3): add downloadable local alpha operator
This commit is contained in:
@@ -0,0 +1,146 @@
|
||||
FROM node:24.18.0-bookworm-slim@sha256:6f7b03f7c2c8e2e784dcf9295400527b9b1270fd37b7e9a7285cf83b6951452d AS dependency-manifest
|
||||
|
||||
WORKDIR /opt/qinglong
|
||||
|
||||
COPY deploy/containers/ql3-local-operator/package.json ./
|
||||
COPY deploy/containers/ql3-local-operator/package-lock.json ./
|
||||
|
||||
FROM dependency-manifest AS build-dependencies
|
||||
|
||||
RUN npm ci --ignore-scripts --no-audit --no-fund \
|
||||
&& npm cache clean --force
|
||||
|
||||
FROM dependency-manifest AS runtime-dependency-manifest
|
||||
|
||||
COPY deploy/containers/ql3-local-operator/runtime-dependencies/package.json \
|
||||
package.json
|
||||
COPY deploy/containers/ql3-local-operator/runtime-dependencies/package-lock.json \
|
||||
package-lock.json
|
||||
|
||||
FROM build-dependencies AS workspace
|
||||
|
||||
WORKDIR /workspace
|
||||
|
||||
COPY packages/ql3-ai packages/ql3-ai
|
||||
COPY packages/ql3-local-admin packages/ql3-local-admin
|
||||
COPY packages/ql3-local-command-file packages/ql3-local-command-file
|
||||
COPY packages/ql3-local-owner-cli packages/ql3-local-owner-cli
|
||||
COPY packages/ql3-local-owner-console packages/ql3-local-owner-console
|
||||
COPY packages/ql3-local-secret packages/ql3-local-secret
|
||||
COPY packages/ql3-local-sqlite packages/ql3-local-sqlite
|
||||
COPY packages/ql3-runtime-core packages/ql3-runtime-core
|
||||
|
||||
RUN ln -s /opt/qinglong/node_modules node_modules \
|
||||
&& mkdir -p /opt/qinglong/node_modules/@qinglong \
|
||||
&& ln -s /workspace/packages/ql3-ai \
|
||||
/opt/qinglong/node_modules/@qinglong/ai \
|
||||
&& ln -s /workspace/packages/ql3-local-admin \
|
||||
/opt/qinglong/node_modules/@qinglong/local-admin \
|
||||
&& ln -s /workspace/packages/ql3-local-command-file \
|
||||
/opt/qinglong/node_modules/@qinglong/local-command-file \
|
||||
&& ln -s /workspace/packages/ql3-local-owner-cli \
|
||||
/opt/qinglong/node_modules/@qinglong/local-owner-cli \
|
||||
&& ln -s /workspace/packages/ql3-local-owner-console \
|
||||
/opt/qinglong/node_modules/@qinglong/local-owner-console \
|
||||
&& ln -s /workspace/packages/ql3-local-secret \
|
||||
/opt/qinglong/node_modules/@qinglong/local-secret \
|
||||
&& ln -s /workspace/packages/ql3-local-sqlite \
|
||||
/opt/qinglong/node_modules/@qinglong/local-sqlite \
|
||||
&& ln -s /workspace/packages/ql3-runtime-core \
|
||||
/opt/qinglong/node_modules/@qinglong/runtime-core \
|
||||
&& /opt/qinglong/node_modules/.bin/tsc \
|
||||
-p packages/ql3-runtime-core/tsconfig.json \
|
||||
&& /opt/qinglong/node_modules/.bin/tsc \
|
||||
-p packages/ql3-local-command-file/tsconfig.json \
|
||||
&& /opt/qinglong/node_modules/.bin/tsc \
|
||||
-p packages/ql3-local-sqlite/tsconfig.json \
|
||||
&& /opt/qinglong/node_modules/.bin/tsc \
|
||||
-p packages/ql3-ai/tsconfig.json \
|
||||
&& /opt/qinglong/node_modules/.bin/tsc \
|
||||
-p packages/ql3-local-secret/tsconfig.json \
|
||||
&& /opt/qinglong/node_modules/.bin/tsc \
|
||||
-p packages/ql3-local-admin/tsconfig.json \
|
||||
&& /opt/qinglong/node_modules/.bin/tsc \
|
||||
-p packages/ql3-local-owner-console/tsconfig.json \
|
||||
&& /opt/qinglong/node_modules/.bin/tsc \
|
||||
-p packages/ql3-local-owner-cli/tsconfig.json
|
||||
|
||||
FROM runtime-dependency-manifest AS external-dependencies
|
||||
|
||||
RUN npm ci --omit=dev --ignore-scripts --no-audit --no-fund \
|
||||
&& npm cache clean --force
|
||||
|
||||
FROM external-dependencies AS assembled
|
||||
|
||||
RUN mkdir -p \
|
||||
node_modules/@qinglong/ai \
|
||||
node_modules/@qinglong/local-admin \
|
||||
node_modules/@qinglong/local-command-file \
|
||||
node_modules/@qinglong/local-owner-cli \
|
||||
node_modules/@qinglong/local-owner-console \
|
||||
node_modules/@qinglong/local-secret \
|
||||
node_modules/@qinglong/local-sqlite \
|
||||
node_modules/@qinglong/runtime-core
|
||||
|
||||
COPY --from=workspace /workspace/packages/ql3-ai/package.json \
|
||||
node_modules/@qinglong/ai/package.json
|
||||
COPY --from=workspace /workspace/packages/ql3-ai/dist \
|
||||
node_modules/@qinglong/ai/dist
|
||||
COPY --from=workspace /workspace/packages/ql3-local-admin/package.json \
|
||||
node_modules/@qinglong/local-admin/package.json
|
||||
COPY --from=workspace /workspace/packages/ql3-local-admin/dist \
|
||||
node_modules/@qinglong/local-admin/dist
|
||||
COPY --from=workspace /workspace/packages/ql3-local-command-file/package.json \
|
||||
node_modules/@qinglong/local-command-file/package.json
|
||||
COPY --from=workspace /workspace/packages/ql3-local-command-file/dist \
|
||||
node_modules/@qinglong/local-command-file/dist
|
||||
COPY --from=workspace /workspace/packages/ql3-local-owner-cli/package.json \
|
||||
node_modules/@qinglong/local-owner-cli/package.json
|
||||
COPY --from=workspace /workspace/packages/ql3-local-owner-cli/dist \
|
||||
node_modules/@qinglong/local-owner-cli/dist
|
||||
COPY --from=workspace /workspace/packages/ql3-local-owner-console/package.json \
|
||||
node_modules/@qinglong/local-owner-console/package.json
|
||||
COPY --from=workspace /workspace/packages/ql3-local-owner-console/dist \
|
||||
node_modules/@qinglong/local-owner-console/dist
|
||||
COPY --from=workspace /workspace/packages/ql3-local-secret/package.json \
|
||||
node_modules/@qinglong/local-secret/package.json
|
||||
COPY --from=workspace /workspace/packages/ql3-local-secret/dist \
|
||||
node_modules/@qinglong/local-secret/dist
|
||||
COPY --from=workspace /workspace/packages/ql3-local-sqlite/package.json \
|
||||
node_modules/@qinglong/local-sqlite/package.json
|
||||
COPY --from=workspace /workspace/packages/ql3-local-sqlite/dist \
|
||||
node_modules/@qinglong/local-sqlite/dist
|
||||
COPY --from=workspace /workspace/packages/ql3-runtime-core/package.json \
|
||||
node_modules/@qinglong/runtime-core/package.json
|
||||
COPY --from=workspace /workspace/packages/ql3-runtime-core/dist \
|
||||
node_modules/@qinglong/runtime-core/dist
|
||||
|
||||
RUN rm -rf node_modules/.bin \
|
||||
&& find node_modules/@qinglong -type f \
|
||||
\( -name '*.d.ts' -o -name '*.map' \) -delete \
|
||||
&& find node_modules/@qinglong -type f -name '*.js' -exec \
|
||||
sed -i '/^\/\/# sourceMappingURL=[A-Za-z0-9_.-]*\.map$/d' {} +
|
||||
|
||||
FROM node:24.18.0-alpine3.23@sha256:595398b0081eacda8e1c4c5b97b76cd1020e4d58a8ebcb4843b9bca1e79e7436 AS runtime
|
||||
|
||||
ARG SOURCE_REVISION=uncommitted
|
||||
|
||||
LABEL org.opencontainers.image.title="QingLong 3.0 Local Operator" \
|
||||
org.opencontainers.image.description="QingLong 3.0 short-lived Local management authority" \
|
||||
org.opencontainers.image.source="https://github.com/whyour/qinglong" \
|
||||
org.opencontainers.image.revision="${SOURCE_REVISION}" \
|
||||
org.opencontainers.image.licenses="Apache-2.0" \
|
||||
org.opencontainers.image.version="3.0.0-alpha.2" \
|
||||
io.qinglong.lifecycle="short-lived" \
|
||||
io.qinglong.authority="local-owner-management" \
|
||||
io.qinglong.network="none-by-default"
|
||||
|
||||
ENV NODE_ENV=production
|
||||
|
||||
WORKDIR /opt/qinglong
|
||||
|
||||
COPY --from=assembled --chown=65532:65532 /opt/qinglong ./
|
||||
|
||||
USER 65532:65532
|
||||
|
||||
ENTRYPOINT ["node", "/opt/qinglong/node_modules/@qinglong/local-owner-cli/dist/product-cli/cli.js"]
|
||||
+265
@@ -0,0 +1,265 @@
|
||||
{
|
||||
"name": "@qinglong/local-operator-image",
|
||||
"version": "3.0.0-alpha.2",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@qinglong/local-operator-image",
|
||||
"version": "3.0.0-alpha.2",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"drizzle-orm": "1.0.0-rc.4",
|
||||
"semver": "7.7.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "24.13.3",
|
||||
"typescript": "5.9.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=24.18.0 <25"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "24.13.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.3.tgz",
|
||||
"integrity": "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"undici-types": "~7.18.0"
|
||||
}
|
||||
},
|
||||
"node_modules/drizzle-orm": {
|
||||
"version": "1.0.0-rc.4",
|
||||
"resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-1.0.0-rc.4.tgz",
|
||||
"integrity": "sha512-BT+pf+qoiYHqltoA88Jmf6ilGMXPlpfE0hEJKc2adRtMCAl25Swk/t5gXcWxZNAwdtf3F5gCd2FpeOyP/pT0Hw==",
|
||||
"license": "Apache-2.0",
|
||||
"peerDependencies": {
|
||||
"@aws-sdk/client-rds-data": ">=3",
|
||||
"@cloudflare/workers-types": ">=4",
|
||||
"@effect/sql-d1": ">=4.0.0-beta.83 || >=4.0.0",
|
||||
"@effect/sql-libsql": ">=4.0.0-beta.83 || >=4.0.0",
|
||||
"@effect/sql-mysql2": ">=4.0.0-beta.83 || >=4.0.0",
|
||||
"@effect/sql-pg": ">=4.0.0-beta.83 || >=4.0.0",
|
||||
"@effect/sql-pglite": ">=4.0.0-beta.83 || >=4.0.0",
|
||||
"@effect/sql-sqlite-bun": ">=4.0.0-beta.83 || >=4.0.0",
|
||||
"@effect/sql-sqlite-do": ">=4.0.0-beta.83 || >=4.0.0",
|
||||
"@effect/sql-sqlite-node": ">=4.0.0-beta.83 || >=4.0.0",
|
||||
"@effect/sql-sqlite-wasm": ">=4.0.0-beta.83 || >=4.0.0",
|
||||
"@electric-sql/pglite": ">=0.2.0",
|
||||
"@libsql/client": ">=0.10.0",
|
||||
"@libsql/client-wasm": ">=0.10.0",
|
||||
"@neondatabase/serverless": ">=0.10.0",
|
||||
"@op-engineering/op-sqlite": ">=2",
|
||||
"@opentelemetry/api": "^1.4.1",
|
||||
"@planetscale/database": ">=1.13",
|
||||
"@sinclair/typebox": ">=0.34.8",
|
||||
"@sqlitecloud/drivers": ">=1.0.653",
|
||||
"@tidbcloud/serverless": "*",
|
||||
"@tursodatabase/database": ">=0.6.0-pre.28 || >=0.6.0",
|
||||
"@tursodatabase/database-common": ">=0.6.0-pre.28 || >=0.6.0",
|
||||
"@tursodatabase/database-wasm": ">=0.6.0-pre.28 || >=0.6.0",
|
||||
"@tursodatabase/serverless": ">=1.1.3",
|
||||
"@tursodatabase/sync": ">=0.6.0-pre.28 || >=0.6.0",
|
||||
"@types/better-sqlite3": "*",
|
||||
"@types/mssql": "^9.1.4",
|
||||
"@types/pg": "*",
|
||||
"@types/sql.js": "*",
|
||||
"@upstash/redis": ">=1.34.7",
|
||||
"@vercel/postgres": ">=0.8.0",
|
||||
"@xata.io/client": "*",
|
||||
"arktype": ">=2.0.0",
|
||||
"better-sqlite3": ">=9.3.0",
|
||||
"bun-types": "*",
|
||||
"effect": ">=4.0.0-beta.83 || >=4.0.0",
|
||||
"expo-sqlite": ">=14.0.0",
|
||||
"mssql": "^11.0.1",
|
||||
"mysql2": ">=2",
|
||||
"pg": ">=8",
|
||||
"postgres": ">=3",
|
||||
"sql.js": ">=1",
|
||||
"sqlite3": ">=5",
|
||||
"typebox": ">=1.0.0",
|
||||
"valibot": ">=1.0.0-beta.7",
|
||||
"zod": "^3.25.0 || ^4.0.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@aws-sdk/client-rds-data": {
|
||||
"optional": true
|
||||
},
|
||||
"@cloudflare/workers-types": {
|
||||
"optional": true
|
||||
},
|
||||
"@effect/sql-d1": {
|
||||
"optional": true
|
||||
},
|
||||
"@effect/sql-libsql": {
|
||||
"optional": true
|
||||
},
|
||||
"@effect/sql-mysql2": {
|
||||
"optional": true
|
||||
},
|
||||
"@effect/sql-pg": {
|
||||
"optional": true
|
||||
},
|
||||
"@effect/sql-pglite": {
|
||||
"optional": true
|
||||
},
|
||||
"@effect/sql-sqlite-bun": {
|
||||
"optional": true
|
||||
},
|
||||
"@effect/sql-sqlite-do": {
|
||||
"optional": true
|
||||
},
|
||||
"@effect/sql-sqlite-node": {
|
||||
"optional": true
|
||||
},
|
||||
"@effect/sql-sqlite-wasm": {
|
||||
"optional": true
|
||||
},
|
||||
"@electric-sql/pglite": {
|
||||
"optional": true
|
||||
},
|
||||
"@libsql/client": {
|
||||
"optional": true
|
||||
},
|
||||
"@libsql/client-wasm": {
|
||||
"optional": true
|
||||
},
|
||||
"@neondatabase/serverless": {
|
||||
"optional": true
|
||||
},
|
||||
"@op-engineering/op-sqlite": {
|
||||
"optional": true
|
||||
},
|
||||
"@opentelemetry/api": {
|
||||
"optional": true
|
||||
},
|
||||
"@planetscale/database": {
|
||||
"optional": true
|
||||
},
|
||||
"@sinclair/typebox": {
|
||||
"optional": true
|
||||
},
|
||||
"@sqlitecloud/drivers": {
|
||||
"optional": true
|
||||
},
|
||||
"@tidbcloud/serverless": {
|
||||
"optional": true
|
||||
},
|
||||
"@tursodatabase/database": {
|
||||
"optional": true
|
||||
},
|
||||
"@tursodatabase/database-common": {
|
||||
"optional": true
|
||||
},
|
||||
"@tursodatabase/database-wasm": {
|
||||
"optional": true
|
||||
},
|
||||
"@tursodatabase/serverless": {
|
||||
"optional": true
|
||||
},
|
||||
"@tursodatabase/sync": {
|
||||
"optional": true
|
||||
},
|
||||
"@types/better-sqlite3": {
|
||||
"optional": true
|
||||
},
|
||||
"@types/mssql": {
|
||||
"optional": true
|
||||
},
|
||||
"@types/pg": {
|
||||
"optional": true
|
||||
},
|
||||
"@types/sql.js": {
|
||||
"optional": true
|
||||
},
|
||||
"@upstash/redis": {
|
||||
"optional": true
|
||||
},
|
||||
"@vercel/postgres": {
|
||||
"optional": true
|
||||
},
|
||||
"@xata.io/client": {
|
||||
"optional": true
|
||||
},
|
||||
"arktype": {
|
||||
"optional": true
|
||||
},
|
||||
"better-sqlite3": {
|
||||
"optional": true
|
||||
},
|
||||
"bun-types": {
|
||||
"optional": true
|
||||
},
|
||||
"effect": {
|
||||
"optional": true
|
||||
},
|
||||
"expo-sqlite": {
|
||||
"optional": true
|
||||
},
|
||||
"mssql": {
|
||||
"optional": true
|
||||
},
|
||||
"mysql2": {
|
||||
"optional": true
|
||||
},
|
||||
"pg": {
|
||||
"optional": true
|
||||
},
|
||||
"postgres": {
|
||||
"optional": true
|
||||
},
|
||||
"sql.js": {
|
||||
"optional": true
|
||||
},
|
||||
"sqlite3": {
|
||||
"optional": true
|
||||
},
|
||||
"typebox": {
|
||||
"optional": true
|
||||
},
|
||||
"valibot": {
|
||||
"optional": true
|
||||
},
|
||||
"zod": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/semver": {
|
||||
"version": "7.7.4",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
|
||||
"integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/typescript": {
|
||||
"version": "5.9.3",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
|
||||
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
"tsserver": "bin/tsserver"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.17"
|
||||
}
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "7.18.2",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz",
|
||||
"integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "@qinglong/local-operator-image",
|
||||
"version": "3.0.0-alpha.2",
|
||||
"private": true,
|
||||
"description": "Locked build dependencies for the QingLong 3.0 short-lived Local operator image",
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
"node": ">=24.18.0 <25"
|
||||
},
|
||||
"dependencies": {
|
||||
"drizzle-orm": "1.0.0-rc.4",
|
||||
"semver": "7.7.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "24.13.3",
|
||||
"typescript": "5.9.3"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"name": "@qinglong/local-operator-image",
|
||||
"version": "3.0.0-alpha.2",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@qinglong/local-operator-image",
|
||||
"version": "3.0.0-alpha.2",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"semver": "7.7.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=24.18.0 <25"
|
||||
}
|
||||
},
|
||||
"node_modules/semver": {
|
||||
"version": "7.7.4",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
|
||||
"integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"name": "@qinglong/local-operator-image",
|
||||
"version": "3.0.0-alpha.2",
|
||||
"private": true,
|
||||
"description": "Production-only external dependency root for the QingLong 3.0 short-lived Local operator image",
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
"node": ">=24.18.0 <25"
|
||||
},
|
||||
"dependencies": {
|
||||
"semver": "7.7.4"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user