Skip to content

Commit 82d2787

Browse files
gn-t-kclaude
andcommitted
feat: PR作成時にプレビュー環境用データベースを自動作成するworkflowを追加
- preview-db-create.ymlを追加 - PR作成時にTurso Platform APIを使用してpreview-pr{number}-authデータベースを作成 - 作成したデータベースのURLとトークンをVercelのプレビュー環境変数として設定 - PRにデータベース作成完了のコメントを投稿 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 953b15f commit 82d2787

File tree

1 file changed

+91
-0
lines changed

1 file changed

+91
-0
lines changed
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
name: Preview Database Create
2+
3+
on:
4+
pull_request:
5+
types: [opened, reopened]
6+
7+
jobs:
8+
create-preview-db:
9+
name: Create Preview Database
10+
runs-on: ubuntu-latest
11+
timeout-minutes: 10
12+
steps:
13+
- name: Checkout
14+
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
15+
16+
- name: Create Preview Database
17+
env:
18+
TURSO_API_TOKEN: ${{ secrets.TURSO_PLATFORM_API_TOKEN }}
19+
TURSO_ORG_SLUG: ${{ secrets.TURSO_ORG_SLUG }}
20+
TURSO_GROUP: ${{ secrets.TURSO_GROUP }}
21+
PR_NUMBER: ${{ github.event.pull_request.number }}
22+
run: |
23+
DB_NAME="preview-pr${PR_NUMBER}-auth"
24+
25+
# データベースを作成
26+
RESPONSE=$(curl -X POST \
27+
-H "Authorization: Bearer ${TURSO_API_TOKEN}" \
28+
-H "Content-Type: application/json" \
29+
-d "{\"name\":\"${DB_NAME}\",\"group\":\"${TURSO_GROUP}\"}" \
30+
"https://api.turso.tech/v1/organizations/${TURSO_ORG_SLUG}/databases")
31+
32+
echo "Database creation response: ${RESPONSE}"
33+
34+
# データベースのURLを取得
35+
DB_HOSTNAME=$(echo "${RESPONSE}" | jq -r '.database.Hostname')
36+
DB_URL="libsql://${DB_HOSTNAME}"
37+
38+
echo "DB_URL=${DB_URL}" >> $GITHUB_ENV
39+
echo "DB_NAME=${DB_NAME}" >> $GITHUB_ENV
40+
41+
- name: Create Database Token
42+
env:
43+
TURSO_API_TOKEN: ${{ secrets.TURSO_PLATFORM_API_TOKEN }}
44+
TURSO_ORG_SLUG: ${{ secrets.TURSO_ORG_SLUG }}
45+
run: |
46+
# データベースアクセス用のトークンを作成
47+
TOKEN_RESPONSE=$(curl -X POST \
48+
-H "Authorization: Bearer ${TURSO_API_TOKEN}" \
49+
"https://api.turso.tech/v1/organizations/${TURSO_ORG_SLUG}/databases/${DB_NAME}/auth/tokens?expiration=never")
50+
51+
echo "Token creation response (hidden for security)"
52+
53+
# トークンを取得
54+
DB_AUTH_TOKEN=$(echo "${TOKEN_RESPONSE}" | jq -r '.jwt')
55+
56+
echo "DB_AUTH_TOKEN=${DB_AUTH_TOKEN}" >> $GITHUB_ENV
57+
58+
- name: Set Vercel Environment Variables
59+
env:
60+
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
61+
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
62+
PR_NUMBER: ${{ github.event.pull_request.number }}
63+
run: |
64+
# Vercelのプレビュー環境に環境変数を設定
65+
# TURSO_AUTH_DATABASE_URL
66+
curl -X POST \
67+
-H "Authorization: Bearer ${VERCEL_TOKEN}" \
68+
-H "Content-Type: application/json" \
69+
-d "{\"key\":\"TURSO_AUTH_DATABASE_URL\",\"value\":\"${DB_URL}\",\"type\":\"encrypted\",\"target\":[\"preview\"],\"gitBranch\":\"${{ github.head_ref }}\"}" \
70+
"https://api.vercel.com/v10/projects/${VERCEL_PROJECT_ID}/env"
71+
72+
# TURSO_AUTH_DATABASE_AUTH_TOKEN
73+
curl -X POST \
74+
-H "Authorization: Bearer ${VERCEL_TOKEN}" \
75+
-H "Content-Type: application/json" \
76+
-d "{\"key\":\"TURSO_AUTH_DATABASE_AUTH_TOKEN\",\"value\":\"${DB_AUTH_TOKEN}\",\"type\":\"encrypted\",\"target\":[\"preview\"],\"gitBranch\":\"${{ github.head_ref }}\"}" \
77+
"https://api.vercel.com/v10/projects/${VERCEL_PROJECT_ID}/env"
78+
79+
- name: Comment PR with Database Info
80+
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
81+
env:
82+
DB_NAME: ${{ env.DB_NAME }}
83+
DB_URL: ${{ env.DB_URL }}
84+
with:
85+
script: |
86+
github.rest.issues.createComment({
87+
issue_number: context.issue.number,
88+
owner: context.repo.owner,
89+
repo: context.repo.repo,
90+
body: `## 🗄️ Preview Database Created\n\n✅ プレビュー環境用のデータベースを作成しました!\n\n**Database Name**: ${process.env.DB_NAME}\n**Database URL**: ${process.env.DB_URL}\n\n> ⚠️ このデータベースはPRがクローズされると自動的に削除されます。`
91+
})

0 commit comments

Comments
 (0)