Conversation
Adds required CI workflow with lint, test, build gates for Go backend and React Native/Expo frontend per coding-standards.md §7. Closes #46 Co-authored-by: don-petry <don-petry@users.noreply.github.com>
|
Warning Rate limit exceeded
Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 10 minutes and 35 seconds. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
The detect job uses actions/checkout which requires contents: read.
The workflow-level permissions: {} denied it implicitly.
Co-authored-by: don-petry <don-petry@users.noreply.github.com>
|
There was a problem hiding this comment.
Pull request overview
Adds the required GitHub Actions ci.yml workflow to bring the repo into compliance with the org CI workflow standard, running backend (Go) and frontend (Node/Expo) quality gates when corresponding ecosystems are present.
Changes:
- Introduces a
CIworkflow with ecosystem detection and conditional execution. - Adds a Go backend job (lint, build, gqlgen validate, unit/integration tests, coverage gate).
- Adds a Node frontend job (typecheck, lint, prettier, codegen check, jest coverage gate).
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| if find . -name 'package.json' -not -path '*/node_modules/*' | grep -q .; then | ||
| echo "node=true" >> "$GITHUB_OUTPUT" | ||
| else | ||
| echo "node=false" >> "$GITHUB_OUTPUT" | ||
| fi |
There was a problem hiding this comment.
The Node ecosystem detection is based on package.json, but the frontend job runs npm ci (which requires a lockfile) and the PR description says this mirrors dependency-audit.yml (which detects via package-lock.json). This can cause CI to run and then fail for repos that have a package.json but no package-lock.json (or where the lockfile is in a subdirectory). Detect package-lock.json instead (or switch install to npm install / run per found project directory).
| if find . -name 'go.mod' -not -path '*/vendor/*' | grep -q .; then | ||
| echo "go=true" >> "$GITHUB_OUTPUT" | ||
| else | ||
| echo "go=false" >> "$GITHUB_OUTPUT" | ||
| fi |
There was a problem hiding this comment.
detect sets go=true if any go.mod exists anywhere in the repo, but the backend job assumes a root-module layout (go-version-file: go.mod and go build ./cmd/api/). In a monorepo (or if the Go module lives in a subdir), this will run and then fail because go.mod/cmd/api aren’t at repo root. Either restrict detection to the expected module path, or iterate over each go.mod directory and run setup/build/tests within that working directory (similar to how dependency-audit.yml loops projects).
| - name: Install dependencies | ||
| run: npm ci | ||
|
|
||
| - name: Type check | ||
| run: npx tsc --noEmit | ||
|
|
||
| - name: Lint | ||
| run: npx eslint . --max-warnings 0 | ||
|
|
||
| - name: Format check | ||
| run: npx prettier --check . |
There was a problem hiding this comment.
The frontend job runs all commands at repository root (npm ci, npx tsc, eslint, prettier, jest, graphql-codegen). If the repo contains a package.json in a subdirectory (which detect would find), the job will run but fail because it isn’t cd’d into that project. Consider restricting detection to a root package.json/lockfile, or looping over each detected Node project directory and running the gates within it.
| - name: Coverage check (≥80% line) | ||
| run: | | ||
| go test ./... -short -count=1 -coverprofile=coverage.out | ||
| pct=$(go tool cover -func=coverage.out \ | ||
| | awk '/^total:/ { gsub(/%/, "", $NF); print $NF }') | ||
| echo "Coverage: ${pct}%" | ||
| awk -v p="$pct" 'BEGIN { | ||
| if (p+0 < 80) { print "Coverage " p "% is below required 80%"; exit 1 } | ||
| }' |
There was a problem hiding this comment.
The coverage gate runs go test with -short (and re-runs tests after the unit/integration steps). Per _bmad-output/planning-artifacts/coding-standards.md §7, the CI coverage command is go test -coverprofile=coverage.out (no -short). Using -short can make the enforced coverage diverge from the documented standard and from local CI expectations. Align the coverage command with the standard (and ideally avoid re-running the same tests multiple times).
|
Closing as stale — predates the standards PR. This PR was generated by Claude during the original bulk-toggle yesterday, before petry-projects/.github#86 landed. That standards PR added prompt rules that:
Re-toggling the underlying issue will let Claude regenerate this fix using the new rules. The next run should produce a workflow that is byte-identical to the standard template (verified with the canary on TalkTerm#51 → PR #78 yesterday). |


Summary
ci.ymlworkflow per ci-standards.md#required-workflowsdependency-audit.yml— jobs are skipped when the corresponding source tree is absentCloses #46
Generated with Claude Code