# TSHARPS-CI — External CI/CD Pipeline Branch-independent CI runner for the TSHARPS flight training scheduler. ## Branch Model ``` TestMain ──► TestStaging ──► TestProduction (dev) (validate) (live CI) ``` - **TestMain**: Develop CI changes here - **TestStaging**: Validate before going live - **TestProduction**: Runs against ALL TSHARPS branches on every push ## How It Works 1. Developer pushes to any TSHARPS branch (mfg, rogue, spif, staging, main) 2. Gitea webhook fires POST to `http://127.0.0.1:9500/ci` 3. `ci-webhook.py` receives the event and spawns `ci-runner.sh` 4. `ci-runner.sh` runs against the pushed branch's worktree: - Feature manifest verification - Test suite (with quarantine for known failures) - Package import check 5. `ci-notify.sh` sends results to Telegram CICD Pipeline topic ## Files | File | Purpose | |------|---------| | ci-webhook.py | HTTP server listening for Gitea push webhooks | | ci-runner.sh | Main CI script — tests, features, packages | | ci-notify.sh | Telegram notification sender | | ci-config.json | Configuration (tokens, paths, timeouts) | ## Key Rules - **Read-only**: CI runner never writes to TSHARPS repos - **Same tests for all branches**: No branch-specific CI logic - **No results stored here**: Test results handled separately - **Runner self-monitoring**: Crashes send distinct alerts ## Promoting CI Changes ```bash # 1. Develop on TestMain git checkout TestMain # make changes git commit -am "add new check" git push origin TestMain # 2. Promote to TestStaging git checkout TestStaging && git merge TestMain && git push # 3. Promote to live git checkout TestProduction && git merge TestStaging && git push # 4. Update server ssh server "cd /srv/tsharps-ci && git pull origin TestProduction" ``` ## Switch-Back to Gitea Actions If this doesn't work out: 1. Re-enable Gitea Actions: TSHARPS repo → Settings → Actions → check "Active" 2. Stop runner: `sudo systemctl stop tsharps-ci` 3. Remove webhook: TSHARPS repo → Settings → Webhooks → Delete