diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index ac4b2a78..76a29085 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -23,7 +23,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v4 with: - node-version: '22.12.0' + node-version-file: '.node-version' - name: Install Dependencies run: npm ci diff --git a/.github/workflows/deploy-development.yml b/.github/workflows/deploy-development.yml index 31bf429f..804b5fa4 100644 --- a/.github/workflows/deploy-development.yml +++ b/.github/workflows/deploy-development.yml @@ -13,13 +13,13 @@ jobs: environment: DEPLOY_DEV steps: + - name: Checkout Code + uses: actions/checkout@v4 + - name: Setup NodeJS uses: actions/setup-node@v4 with: - node-version: '22.12.0' - - - name: Checkout Code - uses: actions/checkout@v4 + node-version-file: '.node-version' - name: Setup .env run: | diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index 53375efa..a649c792 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -18,13 +18,13 @@ jobs: contents: read steps: + - name: Checkout Code + uses: actions/checkout@v4 + - name: Setup NodeJS uses: actions/setup-node@v4 with: - node-version: '22.12.0' - - - name: Checkout Code - uses: actions/checkout@v4 + node-version-file: '.node-version' - name: Setup .env run: | diff --git a/.github/workflows/deploy-production.yml b/.github/workflows/deploy-production.yml index 9ae0df0d..605ea5d9 100644 --- a/.github/workflows/deploy-production.yml +++ b/.github/workflows/deploy-production.yml @@ -13,13 +13,13 @@ jobs: environment: DEPLOY_PROD steps: + - name: Checkout Code + uses: actions/checkout@v4 + - name: Setup NodeJS uses: actions/setup-node@v4 with: - node-version: '22.12.0' - - - name: Checkout Code - uses: actions/checkout@v4 + node-version-file: '.node-version' - name: Setup .env run: | diff --git a/.github/workflows/deploy-storybook.yml b/.github/workflows/deploy-storybook.yml index d2c5cf1a..71a361dd 100644 --- a/.github/workflows/deploy-storybook.yml +++ b/.github/workflows/deploy-storybook.yml @@ -10,16 +10,16 @@ jobs: runs-on: ubuntu-latest steps: - - name: Setup NodeJS - uses: actions/setup-node@v4 - with: - node-version: '22.12.0' - - name: Checkout Code uses: actions/checkout@v4 with: fetch-depth: 0 + - name: Setup NodeJS + uses: actions/setup-node@v4 + with: + node-version-file: '.node-version' + - name: Setup .env run: | echo "AVATAR_URL=${{ secrets.DISCORD_AVATAR_URL }}" >> $GITHUB_ENV diff --git a/.node-version b/.node-version new file mode 100644 index 00000000..df6ae337 --- /dev/null +++ b/.node-version @@ -0,0 +1 @@ +24.21.0 diff --git a/docs/README.md b/docs/README.md index 6312e40e..944e877d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -44,6 +44,16 @@ main.tsx → Router → page → 기능 전용 UI·hooks → 공용 UI·hooks `src/util/`에 있음. API 요청·응답 계약은 `src/apis/`의 전용 위치에 둠. 정확한 책임과 예외는 각 상세 문서가 소유함. +### 실행 환경 설정 + +CI·배포의 Node 버전은 공용 파일 [`.node-version`](../.node-version)의 값을 +참조함. 로컬 실행 범위는 [`package.json`](../package.json)의 `engines.node`가 +소유함. npm 버전은 명시하거나 강제하지 않음. + +CI·개발·미리보기·생산·Storybook의 Node 설정은 +[workflow](../.github/workflows/)에서 checkout 이후, `npm ci` 이전에 수행함. +환경·의존성 변경 시 위 설정을 대조함. + ## 3. 아키텍처 상세 계약 | 문서 | 읽을 때 | @@ -85,11 +95,12 @@ main.tsx → Router → page → 기능 전용 UI·hooks → 공용 UI·hooks | 오류 UI·Sentry | 오류와 관측, React·UI, 테스트·Storybook | 오류와 관측 | | 테스트·Story | 테스트·Storybook, 대상 기능의 아키텍처·컨벤션 | 테스트·Storybook 또는 대상 문서 | | 문서·템플릿 | 문서 작성, 이 문서, 관련 상세 문서 | 원칙 변경은 헌법, 계약 변경은 소유 문서 | +| 실행 환경·의존성·workflow | 실행 환경 설정, 테스트·Storybook, 문서 작성 | 실행 환경 설정 | | 코드 리뷰·리뷰 보고서 | 코드 리뷰, 변경 영역의 상세 문서 | 코드 리뷰 또는 해당 상세 문서 | | 일반 PR 준비·생성 | 일반 PR 생성, 코드 리뷰, 문서 작성 | 일반 PR 생성 또는 코드 리뷰 | -표의 문서 이름은 3~5절의 링크를 가리킴. 정확히 일치하는 행이 없으면 변경 대상과 -소비자를 기준으로 관련 문서를 선택함. 경로·기술·작업 분류가 바뀌면 이 문서의 +표의 항목은 2~5절의 설정 설명과 문서 링크를 가리킴. 정확히 일치하는 행이 없으면 +변경 대상과 소비자를 기준으로 관련 문서를 선택함. 경로·기술·작업 분류가 바뀌면 이 문서의 지도와 읽기 표를 갱신함. ## 7. 현재 코드와 목표 규칙 diff --git a/package-lock.json b/package-lock.json index 94ec8ada..790e83c2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -53,7 +53,7 @@ "@types/babel__traverse": "^7.28.0", "@types/glob": "^8.1.0", "@types/jest": "^30.0.0", - "@types/node": "^25.2.0", + "@types/node": "^24.19.2", "@types/pako": "^2.0.3", "@types/react": "^18.3.27", "@types/react-dom": "^18.3.7", @@ -86,6 +86,9 @@ "typescript-eslint": ">=8.15.0 <8.56.0", "vite": "^6.4.1", "vitest": "^4.0.18" + }, + "engines": { + "node": ">=24.12.0 <25" } }, "node_modules/@acemir/cssom": { @@ -4051,9 +4054,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.9.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.9.tgz", - "integrity": "sha512-b4e2xxj/yMeT2hNlD6x7zNFiQK2Dlmkb9CQ6v3/1G2RezKN4YS2lcEv8lzGm1mhs4f2lM4yNAMI/zUDBZBBt7w==", + "version": "24.19.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.19.2.tgz", + "integrity": "sha512-93d49wCWJkCyN87MxLpNN6KXPCwFw7bVUg79mGUV1OS40JGWwVCr8n61DXCSqz7CV6/VfPkb7xec7uP2M+QHWQ==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index d90e1726..d97a13b0 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,9 @@ "private": true, "version": "0.0.0", "type": "module", + "engines": { + "node": ">=24.12.0 <25" + }, "scripts": { "dev": "vite", "dev-mock": "vite --mode dev-mock", @@ -63,7 +66,7 @@ "@types/babel__traverse": "^7.28.0", "@types/glob": "^8.1.0", "@types/jest": "^30.0.0", - "@types/node": "^25.2.0", + "@types/node": "^24.19.2", "@types/pako": "^2.0.3", "@types/react": "^18.3.27", "@types/react-dom": "^18.3.7",