External CI/CD Pipeline — branch-independent test runner
Go to file
Claude BM ec02b57adc Add global lock to serialize CI runs across branches
Multiple simultaneous test runs compete for PostgreSQL connections,
causing spurious errors. Global flock ensures one branch runs at a time.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-21 09:20:11 +00:00
ci-config.json feat: TSHARPS-CI external runner — branch-independent CI pipeline 2026-04-21 03:25:31 +00:00
ci-notify.sh feat: tag @TSHARPSbm_bot in all CI notifications so Claude sees results 2026-04-21 05:18:26 +00:00
ci-runner.sh Add global lock to serialize CI runs across branches 2026-04-21 09:20:11 +00:00
ci-webhook.py feat: TSHARPS-CI external runner — branch-independent CI pipeline 2026-04-21 03:25:31 +00:00
README.md feat: TSHARPS-CI external runner — branch-independent CI pipeline 2026-04-21 03:25:31 +00:00

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

# 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