diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +node_modules diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..bc5a998 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,40 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + branches: [main] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + docker-publish: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + attestations: write + id-token: write + steps: + - uses: actions/checkout@v4 + + # Enable QEMU for cross-building arm64 on amd64 runner + - uses: docker/setup-qemu-action@v3 + + - uses: docker/setup-buildx-action@v3 + + - uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - uses: docker/build-push-action@v6 + with: + context: . + push: true + tags: ghcr.io/${{ github.repository }}:latest + platforms: linux/amd64,linux/arm64 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4433b39 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +FROM node:22-slim + +WORKDIR /app + +RUN apt-get update && apt-get install -y python3 make g++ \ + && rm -rf /var/lib/apt/lists/* + +COPY package.json yarn.lock .yarnrc.yml ./ + +RUN corepack enable yarn +RUN yarn install --immutable + +COPY . . + +ENV NODE_ENV=production +ENV VITE_TARGET=docker +RUN yarn build + +EXPOSE 3000 + +CMD ["yarn", "start:prod"] diff --git a/package.json b/package.json index eddd4eb..e68a34a 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "dev": "vite dev", "build": "vite build && tsc --noEmit", "start": "vite start", + "start:prod": "node .output/server/index.mjs", "lint": "yarn lint:biome && yarn lint:tsc", "lint:biome": "biome check .", "lint:tsc": "tsc --noEmit", @@ -66,7 +67,7 @@ "globals": "^16.0.0", "motion": "^12.4.7", "postcss": "^8.5.3", - "rollup": "^4.34.8", + "rollup": "^4.52.4", "tailwindcss": "^4.0.11", "ts-unused-exports": "^11.0.1", "tsc": "^2.0.4", diff --git a/vite.config.ts b/vite.config.ts index aad2f9c..31a4bec 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -5,6 +5,14 @@ import viteReact from "@vitejs/plugin-react"; import { defineConfig } from "vite"; import tsConfigPaths from "vite-tsconfig-paths"; +const target = process.env.VITE_TARGET; + +const nitroConfig: Record = {}; + +if (target !== "docker") { + nitroConfig.preset = "vercel"; +} + export default defineConfig({ server: { port: 3000, @@ -14,9 +22,7 @@ export default defineConfig({ projects: ["./tsconfig.json"], }), tanstackStart(), - nitroV2Plugin({ - preset: "vercel", - }), + nitroV2Plugin(nitroConfig), tailwindcss(), viteReact(), ], diff --git a/yarn.lock b/yarn.lock index ba2e61d..11ef42d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1366,7 +1366,7 @@ __metadata: react-dom: "npm:^19.0.0" react-hook-form: "npm:^7.56.1" react-hot-toast: "npm:^2.5.2" - rollup: "npm:^4.34.8" + rollup: "npm:^4.52.4" tailwind-merge: "npm:^3.0.2" tailwindcss: "npm:^4.0.11" titleize: "npm:^4.0.0" @@ -3679,13 +3679,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.40.1" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - "@rollup/rollup-android-arm-eabi@npm:4.50.0": version: 4.50.0 resolution: "@rollup/rollup-android-arm-eabi@npm:4.50.0" @@ -3700,13 +3693,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-android-arm64@npm:4.40.1" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - "@rollup/rollup-android-arm64@npm:4.50.0": version: 4.50.0 resolution: "@rollup/rollup-android-arm64@npm:4.50.0" @@ -3721,13 +3707,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-darwin-arm64@npm:4.40.1" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - "@rollup/rollup-darwin-arm64@npm:4.50.0": version: 4.50.0 resolution: "@rollup/rollup-darwin-arm64@npm:4.50.0" @@ -3742,13 +3721,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-darwin-x64@npm:4.40.1" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - "@rollup/rollup-darwin-x64@npm:4.50.0": version: 4.50.0 resolution: "@rollup/rollup-darwin-x64@npm:4.50.0" @@ -3763,13 +3735,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-freebsd-arm64@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-freebsd-arm64@npm:4.40.1" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - "@rollup/rollup-freebsd-arm64@npm:4.50.0": version: 4.50.0 resolution: "@rollup/rollup-freebsd-arm64@npm:4.50.0" @@ -3784,13 +3749,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-freebsd-x64@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-freebsd-x64@npm:4.40.1" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - "@rollup/rollup-freebsd-x64@npm:4.50.0": version: 4.50.0 resolution: "@rollup/rollup-freebsd-x64@npm:4.50.0" @@ -3805,13 +3763,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.40.1" - conditions: os=linux & cpu=arm & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-arm-gnueabihf@npm:4.50.0": version: 4.50.0 resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.50.0" @@ -3826,13 +3777,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.40.1" - conditions: os=linux & cpu=arm & libc=musl - languageName: node - linkType: hard - "@rollup/rollup-linux-arm-musleabihf@npm:4.50.0": version: 4.50.0 resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.50.0" @@ -3847,13 +3791,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.40.1" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-arm64-gnu@npm:4.50.0": version: 4.50.0 resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.50.0" @@ -3868,13 +3805,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.40.1" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - "@rollup/rollup-linux-arm64-musl@npm:4.50.0": version: 4.50.0 resolution: "@rollup/rollup-linux-arm64-musl@npm:4.50.0" @@ -3896,13 +3826,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-loongarch64-gnu@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.40.1" - conditions: os=linux & cpu=loong64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-loongarch64-gnu@npm:4.50.0": version: 4.50.0 resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.50.0" @@ -3910,13 +3833,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.40.1" - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-ppc64-gnu@npm:4.50.0": version: 4.50.0 resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.50.0" @@ -3931,13 +3847,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.40.1" - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-riscv64-gnu@npm:4.50.0": version: 4.50.0 resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.50.0" @@ -3952,13 +3861,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-musl@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.40.1" - conditions: os=linux & cpu=riscv64 & libc=musl - languageName: node - linkType: hard - "@rollup/rollup-linux-riscv64-musl@npm:4.50.0": version: 4.50.0 resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.50.0" @@ -3973,13 +3875,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.40.1" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-s390x-gnu@npm:4.50.0": version: 4.50.0 resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.50.0" @@ -3994,13 +3889,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.40.1" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-x64-gnu@npm:4.50.0": version: 4.50.0 resolution: "@rollup/rollup-linux-x64-gnu@npm:4.50.0" @@ -4015,13 +3903,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.40.1" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - "@rollup/rollup-linux-x64-musl@npm:4.50.0": version: 4.50.0 resolution: "@rollup/rollup-linux-x64-musl@npm:4.50.0" @@ -4050,13 +3931,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.40.1" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - "@rollup/rollup-win32-arm64-msvc@npm:4.50.0": version: 4.50.0 resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.50.0" @@ -4071,13 +3945,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.40.1" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - "@rollup/rollup-win32-ia32-msvc@npm:4.50.0": version: 4.50.0 resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.50.0" @@ -4099,13 +3966,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.40.1" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - "@rollup/rollup-win32-x64-msvc@npm:4.50.0": version: 4.50.0 resolution: "@rollup/rollup-win32-x64-msvc@npm:4.50.0" @@ -5048,7 +4908,7 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:*, @types/estree@npm:1.0.7, @types/estree@npm:^1.0.0": +"@types/estree@npm:*, @types/estree@npm:^1.0.0": version: 1.0.7 resolution: "@types/estree@npm:1.0.7" checksum: 10c0/be815254316882f7c40847336cd484c3bc1c3e34f710d197160d455dc9d6d050ffbf4c3bc76585dba86f737f020ab20bdb137ebe0e9116b0c86c7c0342221b8c @@ -11172,81 +11032,6 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^4.34.8": - version: 4.40.1 - resolution: "rollup@npm:4.40.1" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.40.1" - "@rollup/rollup-android-arm64": "npm:4.40.1" - "@rollup/rollup-darwin-arm64": "npm:4.40.1" - "@rollup/rollup-darwin-x64": "npm:4.40.1" - "@rollup/rollup-freebsd-arm64": "npm:4.40.1" - "@rollup/rollup-freebsd-x64": "npm:4.40.1" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.40.1" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.40.1" - "@rollup/rollup-linux-arm64-gnu": "npm:4.40.1" - "@rollup/rollup-linux-arm64-musl": "npm:4.40.1" - "@rollup/rollup-linux-loongarch64-gnu": "npm:4.40.1" - "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.40.1" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.40.1" - "@rollup/rollup-linux-riscv64-musl": "npm:4.40.1" - "@rollup/rollup-linux-s390x-gnu": "npm:4.40.1" - "@rollup/rollup-linux-x64-gnu": "npm:4.40.1" - "@rollup/rollup-linux-x64-musl": "npm:4.40.1" - "@rollup/rollup-win32-arm64-msvc": "npm:4.40.1" - "@rollup/rollup-win32-ia32-msvc": "npm:4.40.1" - "@rollup/rollup-win32-x64-msvc": "npm:4.40.1" - "@types/estree": "npm:1.0.7" - fsevents: "npm:~2.3.2" - dependenciesMeta: - "@rollup/rollup-android-arm-eabi": - optional: true - "@rollup/rollup-android-arm64": - optional: true - "@rollup/rollup-darwin-arm64": - optional: true - "@rollup/rollup-darwin-x64": - optional: true - "@rollup/rollup-freebsd-arm64": - optional: true - "@rollup/rollup-freebsd-x64": - optional: true - "@rollup/rollup-linux-arm-gnueabihf": - optional: true - "@rollup/rollup-linux-arm-musleabihf": - optional: true - "@rollup/rollup-linux-arm64-gnu": - optional: true - "@rollup/rollup-linux-arm64-musl": - optional: true - "@rollup/rollup-linux-loongarch64-gnu": - optional: true - "@rollup/rollup-linux-powerpc64le-gnu": - optional: true - "@rollup/rollup-linux-riscv64-gnu": - optional: true - "@rollup/rollup-linux-riscv64-musl": - optional: true - "@rollup/rollup-linux-s390x-gnu": - optional: true - "@rollup/rollup-linux-x64-gnu": - optional: true - "@rollup/rollup-linux-x64-musl": - optional: true - "@rollup/rollup-win32-arm64-msvc": - optional: true - "@rollup/rollup-win32-ia32-msvc": - optional: true - "@rollup/rollup-win32-x64-msvc": - optional: true - fsevents: - optional: true - bin: - rollup: dist/bin/rollup - checksum: 10c0/11c44b5ef9b3fd521c5501b3f1c36af4ca07821aeff41d41f45336eee324d8f5b46c1a92189f5c8cd146bc21ac10418d57cb4571637ea09aced1ae831a2a4ae0 - languageName: node - linkType: hard - "rollup@npm:^4.43.0": version: 4.50.0 resolution: "rollup@npm:4.50.0"