name: Build & Test on: push: branches: - main pull_request: jobs: test: name: Run Swift Tests (${{ matrix.name }}) runs-on: macos-latest strategy: fail-fast: false # Don't cancel other matrix jobs when one fails matrix: include: - name: app path: . - name: BitLogger path: localPackages/BitLogger - name: BitFoundation path: localPackages/BitFoundation steps: - name: Checkout code uses: actions/checkout@v5 - name: Set up Swift uses: swift-actions/setup-swift@v2 - name: Cache build artifacts uses: actions/cache@v4 with: path: ${{ matrix.path }}/.build key: ${{ runner.os }}-${{ matrix.name }}-${{ hashFiles(format('{0}/**/*.swift', matrix.path), format('{0}/**/Package.resolved', matrix.path)) }} restore-keys: | ${{ runner.os }}-${{ matrix.name }}-${{ hashFiles(format('{0}/**/Package.resolved', matrix.path)) }} ${{ runner.os }}-${{ matrix.name }}- - name: Run Tests run: swift test --parallel --quiet --enable-code-coverage --package-path ${{ matrix.path }} # Informational only: surfaces per-file and total line coverage in the # job log so coverage trends are visible on every PR. No thresholds — # this must never be the reason a build goes red. - name: Coverage summary run: | BIN_PATH=$(swift build --show-bin-path --package-path ${{ matrix.path }}) PROF="$BIN_PATH/codecov/default.profdata" XCTEST=$(find "$BIN_PATH" -maxdepth 1 -name '*.xctest' | head -1) BINARY="$XCTEST/Contents/MacOS/$(basename "$XCTEST" .xctest)" if [ -f "$PROF" ] && [ -f "$BINARY" ]; then xcrun llvm-cov report "$BINARY" -instr-profile "$PROF" \ -ignore-filename-regex='(Tests|\.build|checkouts|Mocks|_PreviewHelpers)' || true else echo "No coverage data found; skipping summary." fi # SPM tests above only compile the macOS slice; this job covers the # iOS-conditional code paths (UIKit, CoreBluetooth restoration, etc.). ios-build: name: Build iOS app (simulator) runs-on: macos-latest steps: - name: Checkout code uses: actions/checkout@v5 - name: Build iOS (simulator, no signing) # arm64 only: the vendored arti.xcframework has no x86_64 simulator slice. run: | set -o pipefail xcodebuild -project bitchat.xcodeproj \ -scheme "bitchat (iOS)" \ -sdk iphonesimulator \ -destination 'generic/platform=iOS Simulator' \ ARCHS=arm64 \ CODE_SIGNING_ALLOWED=NO \ build