Merge pull request #15 from Aubrey-M-ops/fix-cicd #30
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: CI | |
| on: | |
| push: | |
| branches: ["master", "main", "develop"] | |
| pull_request: | |
| branches: ["develop"] | |
| jobs: | |
| check-skip: | |
| name: Check Skip Conditions | |
| runs-on: ubuntu-latest | |
| outputs: | |
| should_skip: ${{ steps.check.outputs.should_skip }} | |
| steps: | |
| - name: Check commit message | |
| id: check | |
| env: | |
| MSG: ${{ github.event.head_commit.message }} | |
| run: | | |
| PATTERN='^docs?: ' | |
| if [[ "$MSG" =~ $PATTERN ]]; then | |
| echo "should_skip=true" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "should_skip=false" >> "$GITHUB_OUTPUT" | |
| fi | |
| lint-and-typecheck: | |
| name: Lint & Type Check | |
| needs: check-skip | |
| if: needs.check-skip.outputs.should_skip != 'true' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: "20" | |
| cache: "npm" | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Generate Prisma Client | |
| run: npx prisma generate | |
| - name: Run ESLint | |
| run: npm run lint | |
| - name: Run Type Check | |
| run: npx tsc --noEmit | |
| - name: Check Supabase Configuration | |
| run: | | |
| echo "Checking Supabase environment variables..." | |
| if [ -z "$NEXT_PUBLIC_SUPABASE_URL" ]; then | |
| echo "❌ NEXT_PUBLIC_SUPABASE_URL is not set" | |
| exit 1 | |
| fi | |
| if [ -z "$NEXT_PUBLIC_SUPABASE_ANON_KEY" ]; then | |
| echo "❌ NEXT_PUBLIC_SUPABASE_ANON_KEY is not set" | |
| exit 1 | |
| fi | |
| echo "✅ Supabase environment variables are configured" | |
| env: | |
| NEXT_PUBLIC_SUPABASE_URL: "https://mock.supabase.co" | |
| NEXT_PUBLIC_SUPABASE_ANON_KEY: "mock-anon-key" | |
| - name: Validate Prisma Schema | |
| run: npx prisma validate | |
| build: | |
| name: Build Check | |
| runs-on: ubuntu-latest | |
| needs: [check-skip, lint-and-typecheck] | |
| if: needs.check-skip.outputs.should_skip != 'true' | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: "20" | |
| cache: "npm" | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Generate Prisma Client | |
| run: npx prisma generate | |
| - name: Verify Supabase Integration | |
| run: | | |
| echo "Verifying Supabase package installation..." | |
| if grep -q "@supabase/supabase-js" package.json; then | |
| echo "✅ @supabase/supabase-js is installed" | |
| else | |
| echo "⚠️ @supabase/supabase-js is not in package.json" | |
| fi | |
| - name: Build project | |
| run: npm run build | |
| env: | |
| # 使用 mock 环境变量用于构建验证 | |
| DATABASE_URL: "postgresql://mock:mock@localhost:5432/mock" | |
| SECONDME_CLIENT_ID: "mock-client-id" | |
| SECONDME_CLIENT_SECRET: "mock-client-secret" | |
| SECONDME_REDIRECT_URI: "http://localhost:3000/api/auth/callback" | |
| SECONDME_API_BASE_URL: "https://app.mindos.com/gate/lab" | |
| SECONDME_OAUTH_URL: "https://go.second.me/oauth/" | |
| SECONDME_TOKEN_ENDPOINT: "https://app.mindos.com/gate/lab/api/oauth/token/code" | |
| NEXT_PUBLIC_APP_URL: "http://localhost:3000" | |
| NEXT_PUBLIC_SUPABASE_URL: "https://mock.supabase.co" | |
| NEXT_PUBLIC_SUPABASE_ANON_KEY: "mock-anon-key" | |
| SUPABASE_SERVICE_ROLE_KEY: "mock-service-role-key" |