Add bottom-end override UI with phase boundary display #200
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| # ───────────────────────────────────────────────────────── | |
| # Detect which components changed to skip unnecessary jobs | |
| # ───────────────────────────────────────────────────────── | |
| changes: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| pull-requests: read | |
| outputs: | |
| rust: ${{ steps.filter.outputs.rust }} | |
| swift: ${{ steps.filter.outputs.swift }} | |
| app: ${{ steps.filter.outputs.app }} | |
| ci: ${{ steps.filter.outputs.ci }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dorny/paths-filter@v3 | |
| id: filter | |
| with: | |
| filters: | | |
| rust: | |
| - 'core/**' | |
| - 'Cargo.toml' | |
| - 'VERSION' | |
| swift: | |
| - 'apple/**' | |
| - 'VERSION' | |
| app: | |
| - 'Profundum/**' | |
| ci: | |
| - '.github/workflows/**' | |
| - 'Makefile' | |
| - 'scripts/**' | |
| # ───────────────────────────────────────────────────────── | |
| # Rust: lint + test (Linux, fast) | |
| # ───────────────────────────────────────────────────────── | |
| rust-lint: | |
| needs: changes | |
| if: needs.changes.outputs.rust == 'true' || needs.changes.outputs.ci == 'true' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: rustfmt, clippy | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| workspaces: core -> target | |
| - name: Check formatting | |
| run: cargo fmt --check | |
| working-directory: core | |
| - name: Clippy | |
| run: cargo clippy --all-targets --all-features -- -D warnings | |
| working-directory: core | |
| rust-test: | |
| needs: changes | |
| if: needs.changes.outputs.rust == 'true' || needs.changes.outputs.ci == 'true' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| workspaces: core -> target | |
| - name: Run tests | |
| run: cargo test | |
| working-directory: core | |
| # ───────────────────────────────────────────────────────── | |
| # Swift: lint (Linux, fast — catches style issues early) | |
| # ───────────────────────────────────────────────────────── | |
| swift-lint: | |
| needs: changes | |
| if: | | |
| needs.changes.outputs.swift == 'true' || | |
| needs.changes.outputs.app == 'true' || | |
| needs.changes.outputs.ci == 'true' | |
| runs-on: macos-14 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install SwiftLint | |
| run: brew install swiftlint | |
| - name: Run SwiftLint | |
| run: swiftlint lint --strict --config .swiftlint.yml | |
| # ───────────────────────────────────────────────────────── | |
| # Swift: build + test (macOS) | |
| # Runs when Rust OR Swift sources change, since Swift | |
| # links the Rust XCFramework. | |
| # ───────────────────────────────────────────────────────── | |
| swift-test: | |
| needs: [changes, rust-test] | |
| # Run if Rust, Swift, app, or CI files changed. | |
| # Also always run on push to main for safety. | |
| if: | | |
| always() && | |
| (needs.rust-test.result == 'success' || needs.rust-test.result == 'skipped') && | |
| ( | |
| needs.changes.outputs.rust == 'true' || | |
| needs.changes.outputs.swift == 'true' || | |
| needs.changes.outputs.app == 'true' || | |
| needs.changes.outputs.ci == 'true' | |
| ) | |
| runs-on: macos-14 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: aarch64-apple-darwin,x86_64-apple-darwin,aarch64-apple-ios,aarch64-apple-ios-sim,x86_64-apple-ios | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| workspaces: core -> target | |
| - name: Cache Swift SPM | |
| uses: actions/cache@v4 | |
| with: | |
| path: apple/DivelogCore/.build | |
| key: spm-${{ runner.os }}-${{ hashFiles('apple/DivelogCore/Package.resolved') }} | |
| restore-keys: spm-${{ runner.os }}- | |
| - name: Build XCFramework (includes UniFFI binding generation) | |
| run: make xcframework | |
| - name: Run Swift tests | |
| run: cd apple/DivelogCore && swift test | |
| # ───────────────────────────────────────────────────────── | |
| # Security: dependency audit + license/advisory compliance | |
| # ───────────────────────────────────────────────────────── | |
| security: | |
| needs: changes | |
| if: needs.changes.outputs.rust == 'true' || needs.changes.outputs.ci == 'true' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - name: Generate Cargo.lock | |
| run: cargo generate-lockfile | |
| working-directory: core | |
| - name: Check for known vulnerabilities | |
| uses: rustsec/audit-check@v2.0.0 | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| working-directory: core | |
| - name: Check licenses, advisories, and bans | |
| uses: EmbarkStudios/cargo-deny-action@v2 | |
| with: | |
| manifest-path: core/Cargo.toml | |
| # ───────────────────────────────────────────────────────── | |
| # Coverage: collect and upload to Codecov | |
| # ───────────────────────────────────────────────────────── | |
| coverage: | |
| needs: [changes, rust-test, swift-test] | |
| if: | | |
| always() && | |
| (needs.rust-test.result == 'success' || needs.rust-test.result == 'skipped') && | |
| (needs.swift-test.result == 'success' || needs.swift-test.result == 'skipped') && | |
| ( | |
| needs.changes.outputs.rust == 'true' || | |
| needs.changes.outputs.swift == 'true' || | |
| needs.changes.outputs.app == 'true' || | |
| needs.changes.outputs.ci == 'true' | |
| ) | |
| runs-on: macos-14 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: llvm-tools-preview | |
| targets: aarch64-apple-darwin,x86_64-apple-darwin,aarch64-apple-ios,aarch64-apple-ios-sim,x86_64-apple-ios | |
| - uses: taiki-e/install-action@cargo-llvm-cov | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| workspaces: core -> target | |
| - name: Cache Swift SPM | |
| uses: actions/cache@v4 | |
| with: | |
| path: apple/DivelogCore/.build | |
| key: spm-${{ runner.os }}-${{ hashFiles('apple/DivelogCore/Package.resolved') }} | |
| restore-keys: spm-${{ runner.os }}- | |
| - name: Build XCFramework | |
| run: make xcframework | |
| - name: Rust coverage | |
| run: make rust-coverage | |
| - name: Swift coverage | |
| run: make swift-coverage | |
| - name: Upload Rust coverage to Codecov | |
| uses: codecov/codecov-action@v4 | |
| with: | |
| files: coverage/rust-lcov.info | |
| flags: rust | |
| fail_ci_if_error: true | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| - name: Upload Swift coverage to Codecov | |
| uses: codecov/codecov-action@v4 | |
| with: | |
| files: coverage/swift-lcov.info | |
| flags: swift | |
| fail_ci_if_error: true | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| # ───────────────────────────────────────────────────────── | |
| # Version check: ensure VERSION file, Cargo.toml, and | |
| # Xcode project are in sync. | |
| # ───────────────────────────────────────────────────────── | |
| version-check: | |
| needs: changes | |
| if: needs.changes.outputs.rust == 'true' || needs.changes.outputs.swift == 'true' || needs.changes.outputs.app == 'true' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Check version consistency | |
| run: make version-check |