feat: rebrand dashboard to CrewCircle design system + fix backend (CO… #15
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 | |
| # Runs on every push to main and every PR targeting main. | |
| # Backend: uv sync + smoke import + pytest collect (graceful when no tests yet). | |
| # Dashboard: npm ci + build + lint. | |
| # Both jobs are independent and run in parallel. | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| workflow_dispatch: | |
| concurrency: | |
| group: ci-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| backend: | |
| name: Backend — uv sync + pytest | |
| runs-on: ubuntu-latest | |
| defaults: | |
| run: | |
| working-directory: backend | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v3 | |
| with: | |
| enable-cache: true | |
| cache-dependency-glob: | | |
| backend/uv.lock | |
| backend/pyproject.toml | |
| - name: Set up Python 3.11 | |
| run: uv python install 3.11 | |
| - name: Sync dependencies | |
| run: uv sync --frozen || uv sync | |
| - name: Smoke-import FastAPI app | |
| run: uv run python -c "import main; assert main.app.title == 'Local Biz Automation'" | |
| env: | |
| SUPABASE_URL: https://stub.supabase.co | |
| SUPABASE_ANON_KEY: stub-anon-key | |
| SUPABASE_SERVICE_ROLE_KEY: stub-service-role-key | |
| STRIPE_SECRET_KEY: sk_stub | |
| STRIPE_PRICE_ID: price_stub | |
| STRIPE_WEBHOOK_SECRET: whsec_stub | |
| STRIPE_GST_RATE_ID: "" | |
| ANTHROPIC_API_KEY: sk-ant-stub | |
| RESEND_API_KEY: re_stub | |
| TWILIO_ACCOUNT_SID: ACstub | |
| TWILIO_AUTH_TOKEN: stub | |
| TWILIO_AU_NUMBER: "+61400000000" | |
| DATAFORSEO_LOGIN: stub@login | |
| DATAFORSEO_PASSWORD: stubpass | |
| GBP_CLIENT_ID: stub-client-id | |
| GBP_CLIENT_SECRET: stub-client-secret | |
| BASE_DOMAIN: crewcircle.co | |
| PROJECT_ID: local-biz-au | |
| ENVIRONMENT: ci | |
| - name: Run tests (collect-only if no test files yet) | |
| run: uv run pytest tests/ -q --no-header --co || echo "no tests collected (expected until Phase 10)" | |
| env: | |
| SUPABASE_URL: https://stub.supabase.co | |
| SUPABASE_ANON_KEY: stub-anon-key | |
| SUPABASE_SERVICE_ROLE_KEY: stub-service-role-key | |
| STRIPE_SECRET_KEY: sk_stub | |
| STRIPE_PRICE_ID: price_stub | |
| STRIPE_WEBHOOK_SECRET: whsec_stub | |
| STRIPE_GST_RATE_ID: "" | |
| ANTHROPIC_API_KEY: sk-ant-stub | |
| RESEND_API_KEY: re_stub | |
| TWILIO_ACCOUNT_SID: ACstub | |
| TWILIO_AUTH_TOKEN: stub | |
| TWILIO_AU_NUMBER: "+61400000000" | |
| DATAFORSEO_LOGIN: stub@login | |
| DATAFORSEO_PASSWORD: stubpass | |
| GBP_CLIENT_ID: stub-client-id | |
| GBP_CLIENT_SECRET: stub-client-secret | |
| BASE_DOMAIN: crewcircle.co | |
| PROJECT_ID: local-biz-au | |
| ENVIRONMENT: ci | |
| - name: Run unit tests if any | |
| run: uv run pytest tests/ -q --no-header || echo "tests skipped — none defined yet" | |
| env: | |
| SUPABASE_URL: https://stub.supabase.co | |
| SUPABASE_ANON_KEY: stub-anon-key | |
| SUPABASE_SERVICE_ROLE_KEY: stub-service-role-key | |
| STRIPE_SECRET_KEY: sk_stub | |
| STRIPE_PRICE_ID: price_stub | |
| STRIPE_WEBHOOK_SECRET: whsec_stub | |
| STRIPE_GST_RATE_ID: "" | |
| ANTHROPIC_API_KEY: sk-ant-stub | |
| RESEND_API_KEY: re_stub | |
| TWILIO_ACCOUNT_SID: ACstub | |
| TWILIO_AUTH_TOKEN: stub | |
| TWILIO_AU_NUMBER: "+61400000000" | |
| DATAFORSEO_LOGIN: stub@login | |
| DATAFORSEO_PASSWORD: stubpass | |
| GBP_CLIENT_ID: stub-client-id | |
| GBP_CLIENT_SECRET: stub-client-secret | |
| BASE_DOMAIN: crewcircle.co | |
| PROJECT_ID: local-biz-au | |
| ENVIRONMENT: ci | |
| - name: Run tests (collect-only if no test files yet) | |
| run: uv run pytest tests/ -q --no-header --co || echo "no tests collected (expected until Phase 10)" | |
| - name: Run unit tests if any | |
| run: uv run pytest tests/ -q --no-header || echo "tests skipped — none defined yet" | |
| dashboard: | |
| name: Dashboard — Next.js build | |
| runs-on: ubuntu-latest | |
| defaults: | |
| run: | |
| working-directory: dashboard | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: npm | |
| cache-dependency-path: dashboard/package-lock.json | |
| - name: Install deps | |
| run: npm ci | |
| - name: Lint | |
| run: npm run lint | |
| continue-on-error: true | |
| - name: Type-check + build | |
| run: npm run build | |
| env: | |
| # Required by Next.js at build time when env vars are read. | |
| NEXT_PUBLIC_API_URL: https://api.localmate.crewcircle.co |