Просмотр исходного кода

Merge branch 'dev/7.5.x' into imprv/staff-credit

Yuki Takei 3 недель назад
Родитель
Сommit
a01429fbc3

+ 1 - 1
.claude/skills/tech-stack/SKILL.md

@@ -38,7 +38,7 @@ user-invocable: false
 ## Build & Development Tools
 
 ### Package Management
-- **pnpm** 10.4.1 - Package manager (faster, more efficient than npm/yarn)
+- **pnpm** Package manager (faster, more efficient than npm/yarn)
 
 ### Monorepo Orchestration
 - **Turborepo** ^2.1.3 - Build system with caching and parallelization

+ 1 - 1
.devcontainer/app/devcontainer.json

@@ -8,7 +8,7 @@
 
   "features": {
     "ghcr.io/devcontainers/features/node:1": {
-      "version": "20.18.3"
+      "version": "24.14.0"
     },
     "ghcr.io/devcontainers/features/github-cli:1": {}
   },

+ 17 - 8
.github/workflows/reusable-app-prod.yml

@@ -63,6 +63,14 @@ jobs:
         pnpm deploy out --prod --legacy --filter @growi/app
         rm -rf apps/app/node_modules && mv out/node_modules apps/app/node_modules
 
+    - name: Resolve .next/node_modules symlinks
+      run: |
+        if [ -d apps/app/.next/node_modules ]; then
+          cp -rL apps/app/.next/node_modules apps/app/.next/node_modules_resolved
+          rm -rf apps/app/.next/node_modules
+          mv apps/app/.next/node_modules_resolved apps/app/.next/node_modules
+        fi
+
     - name: Archive production files
       id: archive-prod-files
       run: |
@@ -215,14 +223,14 @@ jobs:
       with:
         name: Production Files (node${{ inputs.node-version }})
 
-    - name: Extract procution files
+    - name: Extract production files to isolated directory
       run: |
-        tar -xf ${{ needs.build-prod.outputs.PROD_FILES }}
+        mkdir -p /tmp/growi-prod
+        tar -xf ${{ needs.build-prod.outputs.PROD_FILES }} -C /tmp/growi-prod
 
     - name: Copy dotenv file for ci
-      working-directory: ./apps/app
       run: |
-        cat config/ci/.env.local.for-ci >> .env.production.local
+        cat apps/app/config/ci/.env.local.for-ci >> /tmp/growi-prod/apps/app/.env.production.local
 
     - name: Playwright Run (--project=chromium/installer)
       if: ${{ matrix.browser == 'chromium' }}
@@ -232,13 +240,13 @@ jobs:
       env:
         DEBUG: pw:api
         HOME: /root # ref: https://github.com/microsoft/playwright/issues/6500
+        GROWI_WEBSERVER_COMMAND: 'cd /tmp/growi-prod/apps/app && pnpm run server'
         MONGO_URI: mongodb://mongodb:27017/growi-playwright-installer
         ELASTICSEARCH_URI: http://localhost:${{ job.services.elasticsearch.ports['9200'] }}/growi
 
     - name: Copy dotenv file for automatic installation
-      working-directory: ./apps/app
       run: |
-        cat config/ci/.env.local.for-auto-install >> .env.production.local
+        cat apps/app/config/ci/.env.local.for-auto-install >> /tmp/growi-prod/apps/app/.env.production.local
 
     - name: Playwright Run
       working-directory: ./apps/app
@@ -247,13 +255,13 @@ jobs:
       env:
         DEBUG: pw:api
         HOME: /root # ref: https://github.com/microsoft/playwright/issues/6500
+        GROWI_WEBSERVER_COMMAND: 'cd /tmp/growi-prod/apps/app && pnpm run server'
         MONGO_URI: mongodb://mongodb:27017/growi-playwright
         ELASTICSEARCH_URI: http://localhost:${{ job.services.elasticsearch.ports['9200'] }}/growi
 
     - name: Copy dotenv file for automatic installation with allowing guest mode
-      working-directory: ./apps/app
       run: |
-        cat config/ci/.env.local.for-auto-install-with-allowing-guest >> .env.production.local
+        cat apps/app/config/ci/.env.local.for-auto-install-with-allowing-guest >> /tmp/growi-prod/apps/app/.env.production.local
 
     - name: Playwright Run (--project=${browser}/guest-mode)
       working-directory: ./apps/app
@@ -262,6 +270,7 @@ jobs:
       env:
         DEBUG: pw:api
         HOME: /root # ref: https://github.com/microsoft/playwright/issues/6500
+        GROWI_WEBSERVER_COMMAND: 'cd /tmp/growi-prod/apps/app && pnpm run server'
         MONGO_URI: mongodb://mongodb:27017/growi-playwright-guest-mode
         ELASTICSEARCH_URI: http://localhost:${{ job.services.elasticsearch.ports['9200'] }}/growi
 

+ 1 - 1
.kiro/specs/official-docker-image/design.md

@@ -39,7 +39,7 @@
 
 **Main issues:**
 - `COPY . .` includes the entire monorepo in the build layer
-- pnpm version is hardcoded (`PNPM_VERSION="10.4.1"`)
+- pnpm version is hardcoded (`PNPM_VERSION="10.32.1"`)
 - Typo in `---frozen-lockfile`
 - Base image is node:20-slim (prone to CVE accumulation)
 - No memory management flags

+ 9 - 0
apps/app/docker/Dockerfile

@@ -95,6 +95,15 @@ RUN pnpm deploy out --prod --legacy --filter @growi/app
 RUN rm -rf apps/app/node_modules && mv out/node_modules apps/app/node_modules
 RUN rm -rf apps/app/.next/cache
 
+# Resolve .next/node_modules symlinks to real files.
+# Turbopack generates symlinks pointing to the pnpm virtual store (node_modules/.pnpm/),
+# which will not exist in the release image.
+RUN if [ -d apps/app/.next/node_modules ]; then \
+      cp -rL apps/app/.next/node_modules apps/app/.next/node_modules_resolved && \
+      rm -rf apps/app/.next/node_modules && \
+      mv apps/app/.next/node_modules_resolved apps/app/.next/node_modules; \
+    fi
+
 # Stage artifacts into a clean directory for COPY --from
 RUN mkdir -p /tmp/release/apps/app && \
   cp package.json /tmp/release/ && \

+ 2 - 17
apps/app/next.config.ts

@@ -6,12 +6,8 @@
  */
 
 import type { NextConfig } from 'next';
-import {
-  PHASE_PRODUCTION_BUILD,
-  PHASE_PRODUCTION_SERVER,
-} from 'next/constants';
+import { PHASE_PRODUCTION_SERVER } from 'next/constants';
 import path from 'node:path';
-import bundleAnalyzer from '@next/bundle-analyzer';
 
 import nextI18nConfig from './config/next-i18next.config';
 import { listPrefixedPackages } from './src/utils/next.config.utils';
@@ -150,16 +146,5 @@ export default (phase: string): NextConfig => {
     },
   };
 
-  // production server — skip bundle analyzer
-  if (phase === PHASE_PRODUCTION_SERVER) {
-    return nextConfig;
-  }
-
-  const withBundleAnalyzer = bundleAnalyzer({
-    enabled:
-      phase === PHASE_PRODUCTION_BUILD &&
-      (process.env.ANALYZE === 'true' || process.env.ANALYZE === '1'),
-  });
-
-  return withBundleAnalyzer(nextConfig);
+  return nextConfig;
 };

+ 0 - 1
apps/app/package.json

@@ -272,7 +272,6 @@
     "@handsontable/react": "=2.1.0",
     "@headless-tree/core": "^1.5.3",
     "@headless-tree/react": "^1.5.3",
-    "@next/bundle-analyzer": "^16.0.0",
     "@popperjs/core": "^2.11.8",
     "@tanstack/react-virtual": "^3.13.12",
     "@testing-library/jest-dom": "^6.5.0",

+ 1 - 1
apps/app/playwright.config.ts

@@ -52,7 +52,7 @@ export default defineConfig({
   reporter: process.env.CI ? [['github'], ['blob']] : 'list',
 
   webServer: {
-    command: 'pnpm run server',
+    command: process.env.GROWI_WEBSERVER_COMMAND ?? 'pnpm run server',
     url: 'http://localhost:3000',
     reuseExistingServer: !process.env.CI,
     stdout: 'ignore',

+ 1 - 1
apps/pdf-converter/docker/Dockerfile

@@ -20,7 +20,7 @@ RUN --mount=type=cache,target=/var/lib/apt,sharing=locked \
   apt-get update && apt-get install -y ca-certificates wget --no-install-recommends
 
 # install pnpm
-RUN wget -qO- https://get.pnpm.io/install.sh | ENV="$HOME/.shrc" SHELL="$(which sh)" PNPM_VERSION="10.4.1" sh -
+RUN wget -qO- https://get.pnpm.io/install.sh | ENV="$HOME/.shrc" SHELL="$(which sh)" PNPM_VERSION="10.32.1" sh -
 ENV PNPM_HOME=$PNPM_HOME
 ENV PATH="$PNPM_HOME:$PATH"
 

+ 1 - 1
apps/slackbot-proxy/docker/Dockerfile

@@ -13,7 +13,7 @@ WORKDIR ${optDir}
 
 # install pnpm
 RUN apt-get update && apt-get install -y ca-certificates wget --no-install-recommends \
-  && wget -qO- https://get.pnpm.io/install.sh | ENV="$HOME/.shrc" SHELL="$(which sh)" PNPM_VERSION="10.4.1" sh -
+  && wget -qO- https://get.pnpm.io/install.sh | ENV="$HOME/.shrc" SHELL="$(which sh)" PNPM_VERSION="10.32.1" sh -
 ENV PNPM_HOME="/root/.local/share/pnpm"
 ENV PATH="$PNPM_HOME:$PATH"
 

+ 1 - 1
package.json

@@ -20,7 +20,7 @@
   "bugs": {
     "url": "https://github.com/growilabs/growi/issues"
   },
-  "packageManager": "pnpm@10.4.1",
+  "packageManager": "pnpm@10.32.1",
   "scripts": {
     "bootstrap": "pnpm install",
     "start": "pnpm run app:server",

Разница между файлами не показана из-за своего большого размера
+ 105 - 153
pnpm-lock.yaml


Некоторые файлы не были показаны из-за большого количества измененных файлов