From e427282234b79b718f5cb051a7ba693e8126a092 Mon Sep 17 00:00:00 2001 From: saravanakumardb1 Date: Sun, 22 Mar 2026 20:56:03 -0700 Subject: [PATCH] docs(ci): update Gitea CI docs + add /gitea-ci workflow - Add key settings, runner log path, detailed repo/job matrix to GITEA_LOCAL_CI.md - Add /gitea-ci Windsurf workflow: start, push all, check status, view logs - Add learning_ai_local_memory_gpt to repos.txt --- .windsurf/workflows/gitea-ci.md | 107 ++++++++++++++++++++++++++++++++ .windsurf/workflows/repos.txt | 1 + docs/devops/GITEA_LOCAL_CI.md | 37 +++++++++-- 3 files changed, 140 insertions(+), 5 deletions(-) create mode 100644 .windsurf/workflows/gitea-ci.md diff --git a/.windsurf/workflows/gitea-ci.md b/.windsurf/workflows/gitea-ci.md new file mode 100644 index 00000000..d1859026 --- /dev/null +++ b/.windsurf/workflows/gitea-ci.md @@ -0,0 +1,107 @@ +--- +description: Start Gitea local CI, check status, or push all repos to trigger CI runs +--- + +# Gitea Local CI Workflow + +Manages the self-hosted Gitea + act_runner CI infrastructure for all ByteLyst repos. +See `docs/devops/GITEA_LOCAL_CI.md` for full documentation. + +## 1. Ensure Gitea and act_runner are running + +// turbo + +```bash +brew services start gitea && brew services start act_runner && sleep 2 && brew services list | grep -E "gitea|act_runner" +``` + +## 2. Verify Gitea is responding + +// turbo + +```bash +curl -s http://localhost:3300/api/v1/version | python3 -c "import sys,json; print('Gitea', json.load(sys.stdin)['version'])" +``` + +## 3. Push all workspace repos to Gitea to trigger CI + +This pushes `main` to the `gitea` remote for every repo that has one configured. +Each push triggers the `.gitea/workflows/ci.yml` workflow on the local runner. + +```bash +REPOS_DIR="/Users/sd9235/code/mygh" +for repo in \ + learning_ai_common_plat \ + learning_voice_ai_agent \ + learning_multimodal_memory_agents \ + learning_ai_clock \ + learning_ai_fastgap \ + learning_ai_jarvis_jr \ + learning_ai_peakpulse \ + learning_ai_notes \ + learning_ai_flowmonk \ + learning_ai_trails \ + learning_ai_local_memory_gpt; do + echo "=== $repo ===" + cd "$REPOS_DIR/$repo" + git push gitea main 2>&1 | tail -2 +done +``` + +## 4. Wait for jobs to process, then check results + +Wait ~2 minutes per repo for the runner (capacity=1) to process the queue, then check results. + +```bash +REPOS_DIR="/Users/sd9235/code/mygh" +for repo in \ + learning_ai_common_plat \ + learning_ai_clock \ + learning_ai_trails \ + learning_ai_flowmonk \ + learning_ai_notes \ + learning_ai_fastgap \ + learning_ai_jarvis_jr \ + learning_ai_peakpulse \ + learning_ai_local_memory_gpt \ + learning_voice_ai_agent \ + learning_multimodal_memory_agents; do + echo "=== $repo ===" + curl -s -u "bytelyst:bytelyst123" "http://localhost:3300/api/v1/repos/bytelyst/$repo/actions/jobs" | python3 -c " +import sys, json +jobs = json.load(sys.stdin).get('jobs', []) +if not jobs: + print(' (no jobs)') +else: + max_run = max(j['run_id'] for j in jobs) + for j in jobs: + if j['run_id'] == max_run: + c = j.get('conclusion','pending') + icon = '✅' if c == 'success' else '❌' if c == 'failure' else '⏳' + print(f' {icon} {c:12} {j[\"name\"]}') +" 2>/dev/null +done +``` + +## 5. (Optional) View logs for a failing job + +Replace REPO and JOB_ID with the repo name and job number from step 4. + +```bash +REPO="learning_ai_clock" +JOB_ID="76" +curl -s -u "bytelyst:bytelyst123" "http://localhost:3300/api/v1/repos/bytelyst/$REPO/actions/jobs/$JOB_ID/logs" | tail -30 +``` + +## 6. (Optional) Stop Gitea services + +```bash +brew services stop act_runner && brew services stop gitea +``` + +## Troubleshooting + +- **Runner not picking up jobs:** `brew services restart act_runner` +- **Stale .next/lock:** `rm -f /Users/sd9235/code/mygh/learning_ai_common_plat/dashboards/*-web/.next/lock` +- **Permission denied on tsc:** `chmod +x /Users/sd9235/code/mygh/learning_ai_common_plat/node_modules/.bin/*` +- **Check runner log:** `tail -30 /opt/homebrew/var/log/act_runner.err` diff --git a/.windsurf/workflows/repos.txt b/.windsurf/workflows/repos.txt index df66e8dc..a7546012 100644 --- a/.windsurf/workflows/repos.txt +++ b/.windsurf/workflows/repos.txt @@ -12,6 +12,7 @@ learning_ai_peakpulse learning_ai_notes learning_ai_flowmonk learning_ai_trails +learning_ai_local_memory_gpt learning_ai_smart_auth learning_ai_auth_app learning_ai_productivity_web diff --git a/docs/devops/GITEA_LOCAL_CI.md b/docs/devops/GITEA_LOCAL_CI.md index a2475dae..65c22d97 100644 --- a/docs/devops/GITEA_LOCAL_CI.md +++ b/docs/devops/GITEA_LOCAL_CI.md @@ -44,11 +44,20 @@ git push gitea main | ------------------- | --------------------------------------------- | | Gitea config | `/opt/homebrew/var/gitea/custom/conf/app.ini` | | Runner config | `/opt/homebrew/etc/act_runner/config.yaml` | -| Runner registration | `/opt/homebrew/var/act_runner/.runner` | +| Runner registration | `/opt/homebrew/var/lib/act_runner/.runner` | +| Runner stderr log | `/opt/homebrew/var/log/act_runner.err` | | Gitea data | `/opt/homebrew/var/gitea/data/` | | Gitea logs | `/opt/homebrew/var/gitea/log/` | | Job work dir | `~/.cache/act/` | +## Key Settings + +- **Runner capacity:** 1 (sequential jobs — prevents concurrent builds conflicting on shared common-plat) +- **Runner labels:** `ubuntu-latest:host`, `macos-latest:host`, `macos-15:host`, `self-hosted:host` +- **Gitea port:** 3300 (avoids conflict with Next.js dev servers on 3000) +- **Actions URL:** `github` (Gitea resolves action references via GitHub mirror) +- **Git credential helper:** Configured globally for `localhost:3300` to auto-authenticate + ## How It Works 1. You `git push gitea main` from any repo @@ -59,11 +68,29 @@ git push gitea main ## Repos Configured -All 14 repos have: +All 14 repos have a `gitea` remote → `http://localhost:3300/bytelyst/.git`. -- `gitea` remote → `http://localhost:3300/bytelyst/.git` -- `.gitea/workflows/ci.yml` — Gitea Actions workflow (adapted from GitHub Actions) -- `.github/workflows/ci.yml.disabled` — GitHub Actions disabled +11 repos with CI workflows (`.gitea/workflows/ci.yml`): + +| Repo | Jobs | +| ----------------------------------- | --------------------------------- | +| `learning_ai_common_plat` | Build, Test & Typecheck | +| `learning_ai_clock` | Backend + Web | +| `learning_ai_trails` | Backend + SDK + Web | +| `learning_ai_flowmonk` | Backend + Web | +| `learning_ai_notes` | Backend + Web + Mobile | +| `learning_ai_fastgap` | Mobile + Backend + Web | +| `learning_ai_jarvis_jr` | Backend + Web | +| `learning_ai_peakpulse` | Backend | +| `learning_ai_local_memory_gpt` | Backend + Web | +| `learning_voice_ai_agent` | Backend + Python + User Dashboard | +| `learning_multimodal_memory_agents` | Backend + Web + KMP | + +3 repos without CI workflows (docs/config only): + +- `learning_ai_auth_app`, `learning_ai_smart_auth`, `learning_ai_productivity_web` + +GitHub Actions disabled via `.github/workflows/ci.yml.disabled` in all repos. ## Differences from GitHub Actions