name: Code QA Roo Code on: workflow_dispatch: push: branches: [main] pull_request: types: [opened, reopened, ready_for_review, synchronize] branches: [main] jobs: check-translations: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js and pnpm uses: ./.github/actions/setup-node-pnpm - name: Verify all translations are complete run: node scripts/find-missing-translations.js knip: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js and pnpm uses: ./.github/actions/setup-node-pnpm - name: Run knip checks run: pnpm knip compile: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js and pnpm uses: ./.github/actions/setup-node-pnpm - name: Lint run: pnpm lint - name: Check types run: pnpm check-types unit-test: name: platform-unit-test (${{ matrix.name }}) runs-on: ${{ matrix.os }} strategy: matrix: include: - os: ubuntu-latest name: ubuntu-latest - os: windows-latest name: windows-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js and pnpm uses: ./.github/actions/setup-node-pnpm - name: Run unit tests run: pnpm test check-openrouter-api-key: runs-on: ubuntu-latest outputs: exists: ${{ steps.openrouter-api-key-check.outputs.defined }} steps: - name: Check if OpenRouter API key exists id: openrouter-api-key-check shell: bash run: | if [ "${{ secrets.OPENROUTER_API_KEY }}" != '' ]; then echo "defined=true" >> $GITHUB_OUTPUT; else echo "defined=false" >> $GITHUB_OUTPUT; fi integration-test: runs-on: ubuntu-latest needs: [check-openrouter-api-key] if: needs.check-openrouter-api-key.outputs.exists == 'true' steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js and pnpm uses: ./.github/actions/setup-node-pnpm - name: Create .env.local file working-directory: apps/vscode-e2e run: echo "OPENROUTER_API_KEY=${{ secrets.OPENROUTER_API_KEY }}" > .env.local - name: Run integration tests working-directory: apps/vscode-e2e run: xvfb-run -a pnpm test:ci notify-slack-on-failure: runs-on: ubuntu-latest needs: [check-translations, knip, compile, unit-test, integration-test] if: ${{ always() && github.event_name == 'push' && github.ref == 'refs/heads/main' && contains(needs.*.result, 'failure') }} steps: - name: Checkout code uses: actions/checkout@v4 - name: Send Slack notification on failure uses: ./.github/actions/slack-notify with: webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }} channel: "#ci" workflow-name: "Code QA" failed-jobs: ${{ toJSON(needs) }}