create-einja-app 0.2.12 → 0.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/package.json +1 -1
- package/templates/default/.env.ci +11 -4
- package/templates/default/.env.preview +25 -0
- package/templates/default/.github/workflows/ci.yml +73 -1
- package/templates/default/AGENTS.md +3 -0
- package/templates/default/apps/web/src/lib/auth/index.ts +5 -0
- package/templates/default/scripts/env-show.ts +1 -0
- package/templates/default/scripts/lib/env-common.ts +6 -0
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ Einja Management Templateを使用したプロジェクトを素早く作成す
|
|
|
9
9
|
### 主な機能
|
|
10
10
|
|
|
11
11
|
- 🚀 **新規プロジェクト作成**: `npx create-einja-app my-project` で即座にプロジェクトを作成
|
|
12
|
-
- 🛠️ **既存プロジェクトセットアップ**:
|
|
12
|
+
- 🛠️ **既存プロジェクトセットアップ**: `setup` サブコマンドで既存プロジェクトにツールを追加
|
|
13
13
|
- 🔧 **環境ツール統合**: direnv, dotenvx, Volta, Biome, Huskyなどのツールを自動セットアップ
|
|
14
14
|
- 🔐 **認証方式選択**: NextAuth.js を使用するか選択可能
|
|
15
15
|
- 🔄 **対話式プロンプト**: わかりやすいプロンプトで設定を選択
|
|
@@ -31,7 +31,7 @@ npx create-einja-app my-project
|
|
|
31
31
|
- プロジェクト名
|
|
32
32
|
- パッケージスコープ
|
|
33
33
|
- 認証機能(NextAuth.js を使用 / なし)
|
|
34
|
-
- @einja/cli自動セットアップ
|
|
34
|
+
- @einja/dev-cli自動セットアップ
|
|
35
35
|
- Worktree設定カスタマイズ
|
|
36
36
|
|
|
37
37
|
#### オプション付き実行
|
|
@@ -50,7 +50,7 @@ npx create-einja-app my-project --skip-install
|
|
|
50
50
|
```bash
|
|
51
51
|
# 現在のディレクトリにツールを追加
|
|
52
52
|
cd existing-project
|
|
53
|
-
npx create-einja-app
|
|
53
|
+
npx create-einja-app setup
|
|
54
54
|
```
|
|
55
55
|
|
|
56
56
|
対話式プロンプトが表示され、以下を選択できます:
|
|
@@ -83,7 +83,7 @@ npx create-einja-app --setup
|
|
|
83
83
|
npx create-einja-app my-project --skip-git
|
|
84
84
|
```
|
|
85
85
|
|
|
86
|
-
### `create-einja-app
|
|
86
|
+
### `create-einja-app setup`
|
|
87
87
|
|
|
88
88
|
既存プロジェクトにツールを追加します。
|
|
89
89
|
|
|
@@ -91,7 +91,7 @@ npx create-einja-app my-project --skip-git
|
|
|
91
91
|
|
|
92
92
|
```bash
|
|
93
93
|
cd existing-project
|
|
94
|
-
npx create-einja-app
|
|
94
|
+
npx create-einja-app setup
|
|
95
95
|
```
|
|
96
96
|
|
|
97
97
|
### `create-einja-app add [options]`
|
package/package.json
CHANGED
|
@@ -15,11 +15,18 @@ DOTENV_PUBLIC_KEY_CI="02c888edf6b766c5a9781ab2966c142b5f401e9a9d534aab37d6c0fa5c
|
|
|
15
15
|
# ============================================
|
|
16
16
|
|
|
17
17
|
# NextAuth設定
|
|
18
|
-
NEXTAUTH_SECRET=encrypted:
|
|
19
|
-
NEXTAUTH_URL=encrypted:
|
|
18
|
+
NEXTAUTH_SECRET=encrypted:BE5okc8s1H3DEle7Nb1MQybvn2KcTL2gTf1+Nd513LIRisBPPrxmE53QLV30BB64jkUsvhfC7Lgp22Hv3NL9QjgOttZxiWtVvwQyIVbIHEEdd/ett7mQxSzqw851VbMvy0TUxZ+uWvmsc55vLsy9OzUjGA==
|
|
19
|
+
NEXTAUTH_URL=encrypted:BAx6JGRICeXVikbQhLPuF8v3RyvLhJpA36lcvVMWmbj73YnTX3jLhd7lWYgFoJVFnhtM/0ivfklrWSQW6sTS3iN+8LsQeOW0nR/LwBA9HtpbX9mb4eU8vs0cL0oB/Ev/duDjJdTEYtDgmStrZn+3jnUJw8gdUg==
|
|
20
20
|
|
|
21
21
|
# データベース設定(CI用SQLite/PostgreSQL)
|
|
22
|
-
DATABASE_URL="encrypted:
|
|
22
|
+
DATABASE_URL="encrypted:BGQiR+EvdBFF0QXCwpexpZX0orPNntDQAUc37se1ZLzalhQrKcAvOZMhtFwGN0CAL21rzLHxmMN7ndiTDfHy9a8hr+Gpgk2sar1miUp+CI5l3VKQFOzgcCIe9uGoHIYU/p5yYSh9ROL6HBhCTCPlqe5Jyz+md9nkNhApqyedHmdmK5Vr5yC5cmEWltG2Krj/WBDw4hAkIST+Vzh355ZS3QT5oBVr53c="
|
|
23
23
|
|
|
24
24
|
# アプリケーション設定
|
|
25
|
-
NODE_ENV=encrypted:
|
|
25
|
+
NODE_ENV=encrypted:BMz9t7QSXJ+dMA5otX1d9bLq/2JR4/j4QwAsCmfiPXtUfwANtPlyigFGcq9fCOdtmTZ5pHgKtGFsO3LQ8JmTgutx9dj0IeeVnFFaVKkEBhsrBzIsrnm4kAgvtA/PqwGXeNT5UE0=
|
|
26
|
+
|
|
27
|
+
VERCEL_TOKEN=
|
|
28
|
+
VERCEL_ORG_ID=
|
|
29
|
+
VERCEL_WEB_PROJECT_ID_WEB=
|
|
30
|
+
|
|
31
|
+
TURBO_TOKEN=encrypted:BCX+8GLR1/VqhVW3JzqOXHP8JD6PjQhkodGY3W3gDzz64H/kI2HRQyBviTa7x5gsjXF7FqggzxZ/zkC//ixrFlvLQa1beC/5odd8rBEvs+ZGHWEeLG8c5XxudVsTsHIWjA==
|
|
32
|
+
TURBO_TEAM=encrypted:BMSAczdJn8VnXxSvrIqn38ubQ334pbFtFyeKkmK2995mvj7B17YE5oCYmKIUxQdzkbD7NWLhOrjTkAqAXODpxVxi9JGjy8T2d7a8F6lurz7AY84jVY3tlcuYKWyw2RIrOA==
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#/-------------------[DOTENV_PUBLIC_KEY]--------------------/
|
|
2
|
+
#/ public-key encryption for .env files /
|
|
3
|
+
#/ [how it works](https://dotenvx.com/encryption) /
|
|
4
|
+
#/----------------------------------------------------------/
|
|
5
|
+
DOTENV_PUBLIC_KEY_PREVIEW="02c67d6a9b0801daaa8da8b6551ca9926caaabe66bc026eef21fe2978fee7885a1"
|
|
6
|
+
|
|
7
|
+
# .env.preview
|
|
8
|
+
# ============================================
|
|
9
|
+
# Preview Environment
|
|
10
|
+
# ============================================
|
|
11
|
+
# プレビュー環境用
|
|
12
|
+
# dotenvxで暗号化されます
|
|
13
|
+
#
|
|
14
|
+
# 編集方法: pnpm env:update → 「環境設定を変更」→「プレビュー環境」
|
|
15
|
+
# ============================================
|
|
16
|
+
|
|
17
|
+
# NextAuth設定
|
|
18
|
+
NEXTAUTH_SECRET=encrypted:BMKN/5u9wfDSKiM59bDYhUGJWXsfx8WK0gjBQh7lrUc3fJQq8xUU3V9nIquJp6ItgdsaLxnbYfDHDIMatqZMHywPjrRLLYjlwM3PgOQd8eyO7I5USMVoIi0zJ8OzxThFxtnRCciibEPZdc77p4hvUOd2oVJffQEVXaCFUKA=
|
|
19
|
+
NEXTAUTH_URL=encrypted:BKfwQ8NiyWCxEY3KbCkt7HylNjt2fSbzDqba46P2HXLqCrj/3fZFc9M/p29ZhQ6EiXPzsT9ULfCZwCaRA1+FmQDE5aejR4vAad5csHbozTnFJgkMmigeHpKbLJK0nhQjIQ==
|
|
20
|
+
|
|
21
|
+
# データベース設定
|
|
22
|
+
DATABASE_URL="encrypted:BFLDc6fRsdz0mfkrXWFk3p2ECSzyaTHea4IC3gSJ90uTaAPwc02JYnI5MMmj1iJFFyxgIs8gLrmINxl1dP2KYW/QnvgmqEl/cIRq1jwmFnRPLLU4Amv/AGGtmGyau9XICJgaWv3w2t8nAiPDgmZpz1cdeHXA563Qx0YJovzW3CJgWaga/sFerRUXyaQGLRy0+8r5uasBJAAWw4tn27ZlwIhsLLNVTC+kBz5EnVx+BeReEb0="
|
|
23
|
+
|
|
24
|
+
# アプリケーション設定
|
|
25
|
+
NODE_ENV=encrypted:BBJfTcYKXYjk8LsfO1qSdICzPMxhTHSg9aDFb+udaIFwAQxuIGMOrARuG2gPMv0+e8338j0NAdXdqbd2XWfD0XwYHWD3csBn7IT5aDdSZDduX23NHb6ONFSzsgUv3P9PKEBTRV4EXI4Dk0Y=
|
|
@@ -2,7 +2,6 @@ name: CI
|
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
5
|
-
branches: [main]
|
|
6
5
|
pull_request:
|
|
7
6
|
branches: [main]
|
|
8
7
|
|
|
@@ -50,3 +49,76 @@ jobs:
|
|
|
50
49
|
|
|
51
50
|
- name: Run tests
|
|
52
51
|
run: pnpm test
|
|
52
|
+
|
|
53
|
+
deploy-web:
|
|
54
|
+
needs: test
|
|
55
|
+
if: github.event_name == 'push'
|
|
56
|
+
runs-on: ubuntu-latest
|
|
57
|
+
env:
|
|
58
|
+
DOTENV_PRIVATE_KEY_CI: ${{ secrets.DOTENV_PRIVATE_KEY_CI }}
|
|
59
|
+
steps:
|
|
60
|
+
- name: Checkout code
|
|
61
|
+
uses: actions/checkout@v4
|
|
62
|
+
|
|
63
|
+
- name: Setup pnpm
|
|
64
|
+
uses: pnpm/action-setup@v4
|
|
65
|
+
with:
|
|
66
|
+
version: 10.14.0
|
|
67
|
+
|
|
68
|
+
- name: Setup Node.js
|
|
69
|
+
uses: actions/setup-node@v4
|
|
70
|
+
with:
|
|
71
|
+
node-version: '22.16.0'
|
|
72
|
+
cache: 'pnpm'
|
|
73
|
+
|
|
74
|
+
- name: Install dependencies
|
|
75
|
+
run: pnpm install --frozen-lockfile
|
|
76
|
+
|
|
77
|
+
- name: Install Vercel CLI
|
|
78
|
+
run: pnpm add -g vercel@latest
|
|
79
|
+
|
|
80
|
+
- name: Resolve deploy environment
|
|
81
|
+
id: deploy_env
|
|
82
|
+
run: |
|
|
83
|
+
BRANCH="${GITHUB_REF_NAME}"
|
|
84
|
+
if [ "$BRANCH" = "main" ]; then
|
|
85
|
+
echo "vercel_env=production" >> "$GITHUB_OUTPUT"
|
|
86
|
+
echo "dotenv_file=../../.env.production" >> "$GITHUB_OUTPUT"
|
|
87
|
+
echo "vercel_args=--prod" >> "$GITHUB_OUTPUT"
|
|
88
|
+
elif [ "$BRANCH" = "staging" ]; then
|
|
89
|
+
echo "vercel_env=preview" >> "$GITHUB_OUTPUT"
|
|
90
|
+
echo "dotenv_file=../../.env.staging" >> "$GITHUB_OUTPUT"
|
|
91
|
+
echo "vercel_args=" >> "$GITHUB_OUTPUT"
|
|
92
|
+
elif [ "$BRANCH" = "develop" ]; then
|
|
93
|
+
echo "vercel_env=preview" >> "$GITHUB_OUTPUT"
|
|
94
|
+
echo "dotenv_file=../../.env.development" >> "$GITHUB_OUTPUT"
|
|
95
|
+
echo "vercel_args=" >> "$GITHUB_OUTPUT"
|
|
96
|
+
else
|
|
97
|
+
echo "vercel_env=preview" >> "$GITHUB_OUTPUT"
|
|
98
|
+
echo "dotenv_file=../../.env.preview" >> "$GITHUB_OUTPUT"
|
|
99
|
+
echo "vercel_args=" >> "$GITHUB_OUTPUT"
|
|
100
|
+
fi
|
|
101
|
+
|
|
102
|
+
- name: Pull Vercel Environment Information
|
|
103
|
+
run: |
|
|
104
|
+
npx dotenvx run -f ../../.env.ci -- \
|
|
105
|
+
vercel pull --yes --environment=${{ steps.deploy_env.outputs.vercel_env }}
|
|
106
|
+
working-directory: apps/web
|
|
107
|
+
|
|
108
|
+
- name: Build Project Artifacts
|
|
109
|
+
run: |
|
|
110
|
+
npx dotenvx run -f ../../.env.ci -f ${{ steps.deploy_env.outputs.dotenv_file }} -- \
|
|
111
|
+
vercel build ${{ steps.deploy_env.outputs.vercel_args }}
|
|
112
|
+
working-directory: apps/web
|
|
113
|
+
env:
|
|
114
|
+
DOTENV_PRIVATE_KEY_CI: ${{ secrets.DOTENV_PRIVATE_KEY_CI }}
|
|
115
|
+
DOTENV_PRIVATE_KEY_DEVELOPMENT: ${{ secrets.DOTENV_PRIVATE_KEY_DEVELOPMENT }}
|
|
116
|
+
DOTENV_PRIVATE_KEY_STAGING: ${{ secrets.DOTENV_PRIVATE_KEY_STAGING }}
|
|
117
|
+
DOTENV_PRIVATE_KEY_PREVIEW: ${{ secrets.DOTENV_PRIVATE_KEY_PREVIEW }}
|
|
118
|
+
DOTENV_PRIVATE_KEY_PRODUCTION: ${{ secrets.DOTENV_PRIVATE_KEY_PRODUCTION }}
|
|
119
|
+
|
|
120
|
+
- name: Deploy to Vercel
|
|
121
|
+
run: |
|
|
122
|
+
npx dotenvx run -f ../../.env.ci -- \
|
|
123
|
+
vercel deploy --prebuilt ${{ steps.deploy_env.outputs.vercel_args }}
|
|
124
|
+
working-directory: apps/web
|
|
@@ -46,6 +46,9 @@
|
|
|
46
46
|
- Day-to-day dev flow and checkpoints: `docs/einja/steering/development-workflow.md`.
|
|
47
47
|
- System overview and major boundaries: `docs/einja/steering/architecture.md`.
|
|
48
48
|
- Environment variable policy and storage: `docs/einja/steering/infrastructure/environment-variables.md`.
|
|
49
|
+
- Publishing guidance:
|
|
50
|
+
- `create-einja-app`: `packages/create-einja-app/RELEASING.md`.
|
|
51
|
+
- `dev-cli`: `packages/cli/RELEASING.md` and `packages/cli/docs/PUBLISHING.md`.
|
|
49
52
|
|
|
50
53
|
## Security & Configuration Tips
|
|
51
54
|
- Manage env files via `pnpm env:update`; encrypted secrets require `.env.keys`.
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { baseAuthOptions, mergeAuthOptions } from "{{packageName}}/front-core/auth";
|
|
2
2
|
import NextAuth from "next-auth";
|
|
3
3
|
|
|
4
|
+
if (!process.env.NEXTAUTH_URL && process.env.VERCEL_URL) {
|
|
5
|
+
// Preview deployments use branch-specific URLs on Vercel.
|
|
6
|
+
process.env.NEXTAUTH_URL = `https://${process.env.VERCEL_URL}`;
|
|
7
|
+
}
|
|
8
|
+
|
|
4
9
|
/**
|
|
5
10
|
* アプリ固有のNextAuth設定
|
|
6
11
|
* baseAuthOptionsを拡張してアプリ固有の設定を追加
|
|
@@ -25,6 +25,7 @@ const ENVIRONMENTS: EnvironmentConfig[] = [
|
|
|
25
25
|
{ name: "local", file: ".env.local", privateKeyEnv: "DOTENV_PRIVATE_KEY_LOCAL" },
|
|
26
26
|
{ name: "development", file: ".env.development", privateKeyEnv: "DOTENV_PRIVATE_KEY_DEVELOPMENT" },
|
|
27
27
|
{ name: "staging", file: ".env.staging", privateKeyEnv: "DOTENV_PRIVATE_KEY_STAGING" },
|
|
28
|
+
{ name: "preview", file: ".env.preview", privateKeyEnv: "DOTENV_PRIVATE_KEY_PREVIEW" },
|
|
28
29
|
{ name: "production", file: ".env.production", privateKeyEnv: "DOTENV_PRIVATE_KEY_PRODUCTION" },
|
|
29
30
|
{ name: "ci", file: ".env.ci", privateKeyEnv: "DOTENV_PRIVATE_KEY_CI" },
|
|
30
31
|
];
|
|
@@ -45,6 +45,12 @@ export const ENVIRONMENTS: EnvironmentConfig[] = [
|
|
|
45
45
|
privateKeyEnv: "DOTENV_PRIVATE_KEY_STAGING",
|
|
46
46
|
description: "ステージング環境",
|
|
47
47
|
},
|
|
48
|
+
{
|
|
49
|
+
name: "preview",
|
|
50
|
+
file: ".env.preview",
|
|
51
|
+
privateKeyEnv: "DOTENV_PRIVATE_KEY_PREVIEW",
|
|
52
|
+
description: "プレビュー環境",
|
|
53
|
+
},
|
|
48
54
|
{
|
|
49
55
|
name: "production",
|
|
50
56
|
file: ".env.production",
|