CLAUDE.mdの@参照を削除してコンテキスト使用量を削減 #622
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Setup Preview | |
| on: | |
| pull_request: | |
| types: [opened, reopened, synchronize, labeled] | |
| jobs: | |
| setup-and-deploy: | |
| name: Setup Database and Deploy to Vercel | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 15 | |
| # with-previewラベルがある場合のみ実行 | |
| if: contains(github.event.pull_request.labels.*.name, 'with-preview') | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| - name: Setup workspace | |
| uses: ./.github/actions/setup-workspace | |
| - name: Pull Vercel Environment | |
| env: | |
| VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} | |
| VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} | |
| VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} | |
| run: | | |
| npx vercel pull --yes --environment=preview --token=$VERCEL_TOKEN | |
| - name: Set APP_ENV | |
| id: app-env | |
| env: | |
| PR_NUMBER: ${{ github.event.pull_request.number }} | |
| run: | | |
| APP_ENV="preview-pr${PR_NUMBER}" | |
| echo "app_env=${APP_ENV}" >> $GITHUB_OUTPUT | |
| echo "APP_ENV=${APP_ENV}" >> $GITHUB_ENV | |
| - name: Cleanup Existing Preview Databases | |
| env: | |
| TURSO_PLATFORM_API_TOKEN: ${{ secrets.TURSO_PLATFORM_API_TOKEN }} | |
| TURSO_ORGANIZATION: ${{ secrets.TURSO_ORG_SLUG }} | |
| run: | | |
| set -a | |
| source .vercel/.env.preview.local | |
| set +a | |
| CURRENT_PR_PREFIX="next-lift-${APP_ENV}-" | |
| echo "::group::Listing all preview databases" | |
| echo "Current PR prefix (to keep): ${CURRENT_PR_PREFIX}" | |
| if ! DATABASES=$(pnpm --silent --filter @next-lift/turso run db:list --prefix="next-lift-preview-pr"); then | |
| echo "::warning::Failed to list databases, skipping cleanup" | |
| exit 0 | |
| fi | |
| echo "Found databases:" | |
| echo "${DATABASES:- (none)}" | |
| echo "::endgroup::" | |
| if [ -z "$DATABASES" ]; then | |
| echo "No preview databases found" | |
| exit 0 | |
| fi | |
| KEEP_COUNT=0 | |
| DELETE_COUNT=0 | |
| echo "::group::Processing databases" | |
| for DB_NAME in $DATABASES; do | |
| if [[ "$DB_NAME" == ${CURRENT_PR_PREFIX}* ]]; then | |
| echo " ⏭ Keeping: ${DB_NAME}" | |
| KEEP_COUNT=$((KEEP_COUNT + 1)) | |
| continue | |
| fi | |
| echo " 🗑 Deleting: ${DB_NAME}" | |
| if pnpm --silent --filter @next-lift/turso run db:delete --name="${DB_NAME}"; then | |
| echo " ✓ Deleted" | |
| DELETE_COUNT=$((DELETE_COUNT + 1)) | |
| else | |
| echo " ✗ Failed to delete" | |
| fi | |
| done | |
| echo "::endgroup::" | |
| echo "" | |
| echo "=== Summary ===" | |
| echo "Kept (current PR): ${KEEP_COUNT}" | |
| echo "Deleted (old PRs): ${DELETE_COUNT}" | |
| - name: Create Preview Database | |
| id: create-db | |
| env: | |
| TURSO_PLATFORM_API_TOKEN: ${{ secrets.TURSO_PLATFORM_API_TOKEN }} | |
| TURSO_ORGANIZATION: ${{ secrets.TURSO_ORG_SLUG }} | |
| run: | | |
| set -a | |
| source .vercel/.env.preview.local | |
| set +a | |
| DB_NAME="next-lift-${APP_ENV}-auth" | |
| # データベースを作成 | |
| CREATE_OUTPUT=$(pnpm --filter @next-lift/turso run db:create --name="${DB_NAME}" 2>&1) || { | |
| # 既に存在する場合はエラーになるが続行 | |
| echo "Database creation output: ${CREATE_OUTPUT}" | |
| echo "Database may already exist, continuing..." | |
| } | |
| echo "Database creation output: ${CREATE_OUTPUT}" | |
| # Hostnameを取得(出力から抽出) | |
| DB_HOSTNAME=$(echo "${CREATE_OUTPUT}" | grep "Hostname:" | sed 's/.*Hostname: //') | |
| # 既に存在する場合は、データベース情報を取得 | |
| if [ -z "${DB_HOSTNAME}" ]; then | |
| echo "Fetching existing database info..." | |
| GET_RESPONSE=$(curl -s \ | |
| -H "Authorization: Bearer ${TURSO_PLATFORM_API_TOKEN}" \ | |
| "https://api.turso.tech/v1/organizations/${TURSO_ORGANIZATION}/databases/${DB_NAME}") | |
| echo "Database get response: ${GET_RESPONSE}" | |
| DB_HOSTNAME=$(echo "${GET_RESPONSE}" | jq -r '.database.Hostname') | |
| fi | |
| DB_URL="libsql://${DB_HOSTNAME}" | |
| echo "Database URL: ${DB_URL}" | |
| echo "db_name=${DB_NAME}" >> $GITHUB_OUTPUT | |
| echo "db_url=${DB_URL}" >> $GITHUB_ENV | |
| - name: Create Database Token | |
| id: create-token | |
| env: | |
| TURSO_PLATFORM_API_TOKEN: ${{ secrets.TURSO_PLATFORM_API_TOKEN }} | |
| TURSO_ORGANIZATION: ${{ secrets.TURSO_ORG_SLUG }} | |
| DB_NAME: ${{ steps.create-db.outputs.db_name }} | |
| run: | | |
| set -a | |
| source .vercel/.env.preview.local | |
| set +a | |
| # データベースアクセス用のトークンを作成(期限なし) | |
| TOKEN_OUTPUT=$(pnpm --filter @next-lift/turso run db:issue-token --name="${DB_NAME}" 2>&1) | |
| echo "Token creation completed (hidden for security)" | |
| # トークンを取得(出力から抽出) | |
| DB_AUTH_TOKEN=$(echo "${TOKEN_OUTPUT}" | grep "JWT:" | sed 's/.*JWT: //') | |
| echo "db_auth_token=${DB_AUTH_TOKEN}" >> $GITHUB_ENV | |
| - name: Check Environment Variables | |
| env: | |
| PREVIEW_URL: https://preview-next-lift.vercel.app | |
| run: | | |
| set -a | |
| source .vercel/.env.preview.local | |
| set +a | |
| export BETTER_AUTH_URL="${PREVIEW_URL}" | |
| export TURSO_AUTH_DATABASE_URL="${db_url}" | |
| export TURSO_AUTH_DATABASE_AUTH_TOKEN="${db_auth_token}" | |
| pnpm --filter @next-lift/env check || { | |
| echo "::error::環境変数の検証に失敗しました。Vercelの環境変数設定を確認してください。" | |
| exit 1 | |
| } | |
| - name: Run Database Migration | |
| run: | | |
| # 認証データベースのマイグレーションを実行 | |
| cd packages/authentication | |
| TURSO_AUTH_DATABASE_URL="${db_url}" \ | |
| TURSO_AUTH_DATABASE_AUTH_TOKEN="${db_auth_token}" \ | |
| pnpm migration:apply | |
| echo "Migration completed successfully" | |
| - name: Deploy to Vercel | |
| env: | |
| VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} | |
| VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} | |
| VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} | |
| PREVIEW_URL: https://preview-next-lift.vercel.app | |
| run: | | |
| echo "" >> .vercel/.env.preview.local | |
| echo "APP_ENV=\"${APP_ENV}\"" >> .vercel/.env.preview.local | |
| echo "BETTER_AUTH_URL=\"${PREVIEW_URL}\"" >> .vercel/.env.preview.local | |
| echo "TURSO_AUTH_DATABASE_URL=\"${db_url}\"" >> .vercel/.env.preview.local | |
| echo "TURSO_AUTH_DATABASE_AUTH_TOKEN=\"${db_auth_token}\"" >> .vercel/.env.preview.local | |
| set -a | |
| source .vercel/.env.preview.local | |
| set +a | |
| npx vercel build --token=$VERCEL_TOKEN | |
| npx vercel deploy --prebuilt --archive=tgz --token=$VERCEL_TOKEN \ | |
| --env APP_ENV="${APP_ENV}" \ | |
| --env BETTER_AUTH_URL="${PREVIEW_URL}" \ | |
| --env TURSO_AUTH_DATABASE_URL="${db_url}" \ | |
| --env TURSO_AUTH_DATABASE_AUTH_TOKEN="${db_auth_token}" \ | |
| > deployment-url.txt | |
| npx vercel alias $(cat deployment-url.txt) preview-next-lift.vercel.app --token=$VERCEL_TOKEN | |
| echo "DEPLOYMENT_URL=${PREVIEW_URL}" >> $GITHUB_ENV | |
| - name: Comment PR with Preview Info | |
| uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 | |
| with: | |
| script: | | |
| const dbName = '${{ steps.create-db.outputs.db_name }}'; | |
| const dbUrl = process.env.db_url; | |
| const deploymentUrl = process.env.DEPLOYMENT_URL; | |
| const body = [ | |
| '## 🚀 Preview Environment Ready', | |
| '', | |
| '✅ プレビュー環境のセットアップが完了しました!', | |
| '', | |
| '### 🗄️ Database', | |
| `**Name**: ${dbName}`, | |
| `**URL**: ${dbUrl}`, | |
| '', | |
| '### 🌐 Deployment', | |
| `**Preview URL**: ${deploymentUrl}`, | |
| '', | |
| '> ⚠️ このデータベースとデプロイメントはPRがクローズされると自動的に削除されます。' | |
| ].join('\n'); | |
| github.rest.issues.createComment({ | |
| issue_number: context.issue.number, | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| body: body | |
| }); |