CI/CD
DiveSuite uses GitHub Actions for continuous integration and Expo Application Services (EAS) for builds and deployment.
CI Pipeline
Section titled “CI Pipeline”Every push and pull request triggers the CI pipeline:
name: CIon: [push, pull_request]
jobs: docs: # Markdown linting typescript: # Type check + lint + test rust: # Cargo check + clippy + test build: # Expo build verificationCurrent Status
Section titled “Current Status”| Job | Status | Notes |
|---|---|---|
docs | Active | Markdown linting |
typescript | Ready | Uncomment when code exists |
rust | Ready | Uncomment when code exists |
build | Ready | Uncomment when code exists |
Quality Gates
Section titled “Quality Gates”All quality gates must pass before merge:
| Gate | Requirement |
|---|---|
| TypeScript | Zero compiler errors |
| ESLint | Zero errors (warnings allowed temporarily) |
| Tests | All pass, no skipped safety tests |
| Deco Engine | Rust test suite passes |
| Build | Expo builds for all platforms |
TypeScript CI
Section titled “TypeScript CI”typescript: name: TypeScript (Lint + Test) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version-file: ".nvmrc" cache: "npm" - run: npm ci - name: Type check run: npx tsc --noEmit - name: Lint run: npx eslint . --max-warnings 0 - name: Unit tests run: npm test -- --coverage - name: Upload coverage uses: actions/upload-artifact@v4 with: name: ts-coverage path: coverage/Rust CI
Section titled “Rust CI”rust: name: Rust Deco Engine runs-on: ubuntu-latest defaults: run: working-directory: rust-engine steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 with: workspaces: rust-engine - name: Check run: cargo check - name: Clippy run: cargo clippy -- -D warnings - name: Test run: cargo test - name: Build WASM run: | cargo install wasm-pack wasm-pack build --target webDeployment Strategy
Section titled “Deployment Strategy”Environments
Section titled “Environments”| Environment | Purpose | Trigger |
|---|---|---|
| Dev | Local development | npx expo start |
| Preview | PR testing | Expo Go |
| Staging | Pre-release testing | EAS Build -> TestFlight/Internal |
| Production | Live app | EAS Build -> App Store/Play Store |
EAS Build
Section titled “EAS Build”# Development buildnpx eas build --profile development --platform ios
# Preview buildnpx eas build --profile preview --platform all
# Production buildnpx eas build --profile production --platform alleas.json Configuration
Section titled “eas.json Configuration”{ "cli": { "version": ">= 5.0.0" }, "build": { "development": { "developmentClient": true, "distribution": "internal" }, "preview": { "distribution": "internal" }, "production": {} }, "submit": { "production": {} }}Release Process
Section titled “Release Process”graph LR A[Feature Complete] --> B[Create Release Branch] B --> C[Full Test Suite] C --> D[Manual QA] D --> E[EAS Build] E --> F[TestFlight/Internal] F --> G[Smoke Test] G --> H[Submit to Stores] H --> I[Monitor Crashes]Step by Step
Section titled “Step by Step”- Feature Complete — All planned features merged to main
- Create Release Branch —
release/v1.0.0 - Full Test Suite — CI passes, coverage meets targets
- Manual QA — Test on physical devices (iOS + Android)
- EAS Build — Production build for all platforms
- TestFlight/Internal — Submit to beta testers
- Smoke Test — Critical flows work on real devices
- Submit to Stores — App Store + Play Store submission
- Monitor — Watch crash reports, user feedback
Documentation Deployment
Section titled “Documentation Deployment”MkDocs documentation deploys to GitHub Pages:
deploy-docs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v4 with: python-version: '3.x' - run: pip install mkdocs-material - run: mkdocs gh-deploy --forceSecrets Management
Section titled “Secrets Management”Required secrets in GitHub repository settings:
| Secret | Purpose |
|---|---|
EXPO_TOKEN | EAS Build authentication |
APPLE_API_KEY | App Store Connect |
GOOGLE_SERVICE_ACCOUNT | Play Store |
CODECOV_TOKEN | Coverage reporting |
Branch Protection
Section titled “Branch Protection”Main branch protection rules:
- Require pull request reviews
- Require status checks to pass
- Require branches to be up to date
- Require linear history (squash merge)