OpenHuman Two-Lane CI Model: How Pull Request Validation Works
OpenHuman implements a dual-pipeline continuous integration strategy where CI Lite provides rapid feedback on changed code for main branch development, while CI Full executes exhaustive cross-platform testing for any code targeting the release branch.
The OpenHuman repository uses a sophisticated two-lane CI model to balance development velocity with release stability. This architecture, documented in AGENTS.md and implemented across .github/workflows/ci-lite.yml and .github/workflows/ci-full.yml, separates lightweight differential testing from comprehensive product validation. Understanding how these pipelines interact with branch targeting logic is essential for contributors submitting pull requests.
CI Lite: Fast Feedback for Development
CI Lite serves as the rapid validation layer for day-to-day development, executing targeted checks that avoid redundant computation.
Trigger Conditions
According to .github/workflows/ci-lite.yml, this pipeline activates on every push to the main branch and every pull request targeting either main or release. This broad trigger coverage ensures that proposed changes receive immediate feedback regardless of their ultimate merge destination.
Changed-Only Testing Strategy
The pipeline relies on differential testing scripts to minimize execution time. When a contributor opens a PR, the system invokes scripts/ci/vitest-changed-coverage.sh to run Vitest exclusively on modified frontend files, while scripts/ci/rust-coverage-changed.sh executes cargo llvm-cov only against altered Rust crates. This ensures that a frontend-only change skips unnecessary Rust compilation, and vice versa, providing results in minutes rather than hours.
CI Full: Comprehensive Release Validation
CI Full represents the exhaustive safety net required for production-ready code, enforcing strict quality gates before software reaches users.
Trigger Conditions and Merge Blocking
Defined in .github/workflows/ci-full.yml, this lane executes on every push to the long-lived release branch and any pull request specifically targeting release. The workflow implements a CI Full Gate check that explicitly blocks merging if any job in the matrix fails, preventing unstable binaries from shipping to end users.
Cross-Platform Desktop Testing
Unlike the lightweight lane, CI Full validates the entire Tauri desktop application across Linux, macOS, and Windows environments. The pipeline executes the complete Vitest suite, full Rust test coverage, Playwright UI automation tests, and native desktop integration tests. To optimize resource usage, the system employs a build-once-then-fan-out strategy: a single compilation job produces OS-specific artifacts that downstream E2E jobs download rather than rebuilding from source.
PR Handling Logic by Target Branch
The repository’s branch protection rules leverage the two-lane model to enforce appropriate validation depth based on the merge destination.
- Target
main: Pull requests undergo CI Lite validation only. The system tests solely the modified components using the changed-coverage scripts, providing rapid iteration cycles for feature development. - Target
release: Pull requests trigger CI Full execution. Regardless of the change scope or size, the entire product surface undergoes validation, including cross-platform desktop packaging and end-to-end scenarios. - Promotion Path: When maintainers trigger
promote-main-to-release.ymlto mergemainintorelease, the resulting push automatically invokes CI Full to verify the consolidated state before production deployment.
Feature Forwarding Validation
During CI Full execution, the scripts/ci/check-feature-forwarding.mjs utility verifies that product-gate features correctly propagate to the Tauri desktop shell. This script ensures conditional compilation flags and feature toggles remain consistent between the web frontend and backend, preventing runtime mismatches in shipped binaries that could bypass intended functionality gates.
Code Examples
The following workflow configurations illustrate the trigger differentiation between the two lanes:
# .github/workflows/ci-lite.yml – runs on pushes/PRs to main
name: CI Lite
on:
push:
branches: [main]
pull_request:
branches: [main, release]
jobs:
changed-tests:
runs-on: ubuntu‑latest
steps:
- uses: actions/checkout@v3
- name: Run changed Vitest tests
run: scripts/ci/vitest‑changed‑coverage.sh
- name: Run changed Rust coverage
run: scripts/ci/rust‑coverage‑changed.sh
# .github/workflows/ci-full.yml – runs on pushes/PRs to release
name: CI Full
on:
push:
branches: [release]
pull_request:
branches: [release]
jobs:
full-test:
runs-on: ubuntu‑latest
steps:
- uses: actions/checkout@v3
- name: Run full Vitest suite
run: pnpm test
- name: Run full Rust test suite
run: pnpm test:rust
- name: Run Playwright UI tests
run: pnpm test:playwright
- name: CI Full Gate (blocks merge on failure)
if: failure()
run: exit 1
Summary
- CI Lite provides rapid differential testing on pushes and PRs to
main, usingscripts/ci/vitest-changed-coverage.shandscripts/ci/rust-coverage-changed.shto validate only modified code. - CI Full enforces exhaustive validation on the
releasebranch and PRs targeting it, including cross-platform desktop builds and Playwright E2E tests gated by the CI Full Gate check. - The
promote-main-to-release.ymlworkflow triggers CI Full during branch promotion to ensure merged code meets production standards. - Build optimization uses artifact sharing to avoid redundant Tauri compilation across the desktop test matrix.
- The
scripts/ci/check-feature-forwarding.mjsscript validates feature flag consistency between frontend and desktop shell during full integration testing.
Frequently Asked Questions
What triggers CI Lite versus CI Full in OpenHuman?
CI Lite triggers on pushes to main and pull requests targeting main or release, running only tests for changed files. CI Full triggers exclusively on pushes to release and pull requests specifically targeting the release branch, executing the complete test suite regardless of change scope.
How does OpenHuman optimize desktop build times in CI Full?
The pipeline implements a build-once-then-fan-out strategy where a single job compiles the Tauri application for each operating system, uploads the resulting artifacts, and allows downstream E2E jobs to download these pre-built binaries rather than recompiling from source.
Why does a PR to the release branch require full testing even for small changes?
Since the release branch represents production-ready code, the CI Full Gate mandate ensures that every modification undergoes cross-platform validation, desktop integration testing, and feature-forwarding verification to prevent regressions in shipped applications.
Where is the two-lane CI model documented in the repository?
The architecture is documented in AGENTS.md under the "Two-lane CI model" section, with implementation details residing in .github/workflows/ci-lite.yml and .github/workflows/ci-full.yml, and supporting scripts located in scripts/ci/.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →