Local CI and Release Gate
Last update: 2026-06-03
This guide defines the minimum validation path before publishing changes.
Goals
- Keep CI deterministic in GitHub-hosted runners.
- Detect metadata/changelog mismatches before release publication.
- Keep local and remote checks aligned.
Validation Layers
- Fast syntax and compatibility checks.
- Parsing and fixture tests that do not require a physical device.
- Release metadata gate (version, versionCode, changelog, zipUrl consistency).
Main Commands
Run full local verification (same base used by CI):
sh tools/test_all_local.sh
Run release gate without tests (metadata only):
sh tools/release_gate_local.sh –skip-tests
Run release gate with tests:
sh tools/release_gate_local.sh
What CI Runs
Workflow file: .github/workflows/ci.yml
- Trigger: push to main and pull_request.
- Runner: ubuntu-latest.
- Python setup for HTTP fixture mock tests.
- Command executed: sh ./tools/test_all_local.sh
When CI fails, logs are uploaded as artifact local-suite-logs.
Failure Triage
- Open CI logs and locate the first [FAIL] marker.
- Reproduce locally with the same script shown in logs.
- If failure is in runtime fixtures:
- Run: sh testing/run.sh
- Then run only the failing script under testing/runtime or testing/network.
- If failure is in release metadata:
- Compare module.prop, update.json, and CHANGELOG.md.
Release Checklist
- Update module.prop version and versionCode.
- Update update.json version, versionCode, and zipUrl tag.
- Add changelog section header in CHANGELOG.md:
- Run sh tools/release_gate_local.sh.
- Push and confirm GitHub workflow success.
Notes
- Runtime fixture tests are host-based and intentionally independent from Android services.
- Keep test fixtures under testdata and testing tracked in git for reproducibility.