From c6d471cec9dd35947f435a02e01b3bdae7cd2410 Mon Sep 17 00:00:00 2001 From: Vsevolod Volkov <73965070+StLyn4@users.noreply.github.com> Date: Sat, 17 May 2025 23:22:37 +0300 Subject: [PATCH] docker: ability to build container with theme server --- package.json | 1 + servers/themes/Dockerfile | 35 ++++++++++++++++++++++++++++ servers/themes/package-lock.json | 40 +++++++++++++++++++++++--------- servers/themes/package.json | 10 ++++---- servers/themes/src/constants.ts | 8 ++++++- 5 files changed, 78 insertions(+), 16 deletions(-) create mode 100644 servers/themes/Dockerfile diff --git a/package.json b/package.json index 89ee5dec2..3770aba3b 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "start:editor-mobile": "npm run tx editor-mobile:start", "start:editor": "npm run tx editor:start", "start:server:themes": "npm run tx themes-server:start", + "build:server:themes": "npm run tx themes-server:build", "build:intl": "npm run tx intl:build", "start:intl": "npm run tx intl:start", "prettier": "npx prettier . --write", diff --git a/servers/themes/Dockerfile b/servers/themes/Dockerfile new file mode 100644 index 000000000..0b2dc15dc --- /dev/null +++ b/servers/themes/Dockerfile @@ -0,0 +1,35 @@ +# Build stage +FROM node:22.20.0-alpine AS build + +# Install dependencies for gyp to work +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked apk add --update build-base git python3 py3-setuptools + +WORKDIR /app + +# Copy files +COPY . . + +# Install dependencies +RUN --mount=type=cache,target=/root/.npm npm ci --ignore-scripts --prefer-offline --no-audit + +# Bootstrap the project +RUN --mount=type=cache,target=/root/.npm npm run bootstrap -- --scope=themes + +# Build the server +RUN npm run build:server:themes + +# Production stage +FROM node:22.20.0-alpine AS production + +# Install git to pull the themes repo +RUN --mount=type=cache,target=/var/cache/apk,sharing=locked apk add --update git + +WORKDIR /app + +# Copy server files from previous stage +COPY --from=build /app/servers/themes/dist ./dist + +# Set default values for environment variables +ENV THEMES_REPO_URL="https://github.com/streetwriters/notesnook-themes.git" + +CMD ["node", "dist/server.mjs"] diff --git a/servers/themes/package-lock.json b/servers/themes/package-lock.json index 0d6c98ff2..9dbce6b8c 100644 --- a/servers/themes/package-lock.json +++ b/servers/themes/package-lock.json @@ -9,24 +9,24 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "@notesnook/theme": "file:../../packages/theme", "@orama/orama": "^1.0.8", "@trpc/server": "10.45.2", "async-mutex": "0.5.0", "cors": "^2.8.5", + "react": "18.3.1", "util": "^0.12.5", "zod": "3.23.8" }, "devDependencies": { - "@notesnook/theme": "file:../../packages/theme", "@types/cors": "^2.8.13", - "react": "18.3.1", + "esbuild": "^0.21.5", "vite-node": "2.1.8" } }, "../../packages/theme": { "name": "@notesnook/theme", "version": "2.1.3", - "dev": true, "license": "GPL-3.0-or-later", "devDependencies": { "@emotion/react": "11.11.1", @@ -57,6 +57,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "aix" @@ -73,6 +74,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -89,6 +91,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -105,6 +108,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -121,6 +125,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -137,6 +142,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -153,6 +159,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -169,6 +176,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -185,6 +193,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -201,6 +210,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -217,6 +227,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -233,6 +244,7 @@ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -249,6 +261,7 @@ "mips64el" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -265,6 +278,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -281,6 +295,7 @@ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -297,6 +312,7 @@ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -313,6 +329,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -329,6 +346,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -345,6 +363,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -361,6 +380,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "sunos" @@ -377,6 +397,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -393,6 +414,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -409,6 +431,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -786,6 +809,7 @@ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -983,14 +1007,12 @@ "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -1074,7 +1096,6 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "dev": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -1794,14 +1815,12 @@ "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, "requires": { "js-tokens": "^3.0.0 || ^4.0.0" } @@ -1850,7 +1869,6 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "dev": true, "requires": { "loose-envify": "^1.1.0" } diff --git a/servers/themes/package.json b/servers/themes/package.json index a3a0c3937..0bb154d39 100644 --- a/servers/themes/package.json +++ b/servers/themes/package.json @@ -5,22 +5,24 @@ "private": "true", "main": "src/index.ts", "scripts": { - "start": "vite-node -w src/server.ts" + "start": "vite-node -w src/server.ts", + "build": "esbuild src/server.ts --bundle --platform=node --sourcemap --format=esm --outfile=dist/server.mjs" }, "author": "", "license": "ISC", "dependencies": { + "@notesnook/theme": "file:../../packages/theme", "@orama/orama": "^1.0.8", "@trpc/server": "10.45.2", "async-mutex": "0.5.0", "cors": "^2.8.5", + "react": "18.3.1", "util": "^0.12.5", "zod": "3.23.8" }, "devDependencies": { - "@notesnook/theme": "file:../../packages/theme", "@types/cors": "^2.8.13", - "react": "18.3.1", + "esbuild": "0.21.5", "vite-node": "2.1.8" } -} \ No newline at end of file +} diff --git a/servers/themes/src/constants.ts b/servers/themes/src/constants.ts index b7b30d261..9b7f92c81 100644 --- a/servers/themes/src/constants.ts +++ b/servers/themes/src/constants.ts @@ -18,9 +18,15 @@ along with this program. If not, see . */ import path from "path"; +import { fileURLToPath } from "url"; import { Counter } from "./counter"; -export const THEMES_REPO_URL = `https://github.com/streetwriters/notesnook-themes.git`; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export const THEMES_REPO_URL = + process.env.THEMES_REPO_URL || + "https://github.com/streetwriters/notesnook-themes.git"; + export const THEME_REPO_DIR_NAME = "notesnook-themes"; export const THEME_METADATA_JSON = path.join(__dirname, "themes-metadata.json"); export const THEME_REPO_DIR_PATH = path.resolve(