name: CI on: push: branches: [main] pull_request: branches: [main] concurrency: group: ci-${{ github.ref }} cancel-in-progress: true jobs: build: name: typecheck + build runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v5 - name: Set up Bun uses: oven-sh/setup-bun@v2 with: bun-version: "1.3.14" - name: Install dependencies run: bun install --frozen-lockfile - name: Typecheck run: bun run typecheck - name: Build web working-directory: apps/web run: bun run build # Upload the built .next directory (hidden dir → include-hidden-files). - name: Upload web build artifact uses: actions/upload-artifact@v4 with: name: mcpedia-web-build path: apps/web/.next include-hidden-files: true if-no-files-found: error # Smoke: requires Postgres + Redis — skipped in CI without secrets. - name: MCP smoke test if: env.DATABASE_URL != '' working-directory: apps/mcp env: DATABASE_URL: ${{ secrets.DATABASE_URL }} REDIS_URL: ${{ secrets.REDIS_URL }} run: bun run smoke # Unit tests — bun:test mocks, no external services. - name: Test run: bun run test deploy: name: deploy to VPS needs: build if: github.ref == 'refs/heads/main' runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v5 - name: Download build artifact uses: actions/download-artifact@v4 with: name: mcpedia-web-build path: apps/web/.next - name: Tar .next run: tar -C apps/web -czf mcpedia-web-next.tar.gz .next - name: Deploy to VPS (SCP + SSH) uses: appleboy/scp-action@v1 with: host: ${{ secrets.SSH_DEPLOY_HOST }} port: ${{ secrets.SSH_DEPLOY_PORT }} username: ${{ secrets.SSH_DEPLOY_USER }} key: ${{ secrets.SSH_DEPLOY_KEY }} rm: true source: "mcpedia-web-next.tar.gz" target: "/tmp/" - name: Unpack and restart on VPS uses: appleboy/ssh-action@v1 with: host: ${{ secrets.SSH_DEPLOY_HOST }} port: ${{ secrets.SSH_DEPLOY_PORT }} username: ${{ secrets.SSH_DEPLOY_USER }} key: ${{ secrets.SSH_DEPLOY_KEY }} envs: SSH_DEPLOY_HOST script: | set -e cd /home/code/mcpedia # Pull latest code (content, .env, non-web changes) git pull origin main /home/code/.bun/bin/bun install --frozen-lockfile /home/code/.bun/bin/bun run scripts/indexer.ts # Unpack the pre-built .next (built in CI — no build on VPS) rm -rf apps/web/.next tar -xzf /tmp/mcpedia-web-next.tar.gz -C apps/web/ rm -f /tmp/mcpedia-web-next.tar.gz # Restart services sudo systemctl restart mcpedia-web mcpedia-api mcpedia-mcp mcpedia-worker sleep 3 systemctl --no-pager status mcpedia-web mcpedia-api mcpedia-mcp mcpedia-worker --no-legend