diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d783f07..fa59d70 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,35 +18,19 @@ env: RUSTFLAGS: -D warnings jobs: - fmt: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - run: cargo fmt --check - - check: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: Swatinem/rust-cache@v2 - - run: cargo check --locked --workspace --all-targets - - clippy: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: Swatinem/rust-cache@v2 - - run: cargo clippy --locked --workspace --all-targets - - test: + rust: + name: Rust runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: Swatinem/rust-cache@v2 - uses: taiki-e/install-action@nextest + - run: cargo fmt --all --check + - run: cargo clippy --locked --workspace --all-targets - run: cargo nextest run --locked --workspace - js-lint: + js: + name: JS runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -55,20 +39,32 @@ jobs: node-version-file: .node-version cache: npm - run: npm ci + - run: npm --workspaces run format - run: npm --workspaces run lint - js-format: + coverage: + name: Coverage runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - run: rustup component add llvm-tools-preview + - uses: Swatinem/rust-cache@v2 + - uses: taiki-e/install-action@cargo-llvm-cov + - uses: taiki-e/install-action@nextest + - name: Generate coverage + run: cargo llvm-cov nextest --workspace --cobertura --output-path cobertura.xml + env: + RUSTFLAGS: "" + - name: Coverage report + uses: clearlyip/code-coverage-report-action@v6 + id: coverage with: - node-version-file: .node-version - cache: npm - - run: npm ci - - run: npm --workspaces run format + filename: cobertura.xml + - name: Coverage summary + run: echo "${{ steps.coverage.outputs.markdownReport }}" >> $GITHUB_STEP_SUMMARY bindings: + name: Native / Generate bindings runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -84,14 +80,17 @@ jobs: path: packages/app-mobile/android/src/main/java/uniffi/ build-ios: + name: Native / Build iOS + if: false runs-on: macos-26 - needs: bindings + timeout-minutes: 30 + needs: [rust, js, bindings] steps: - uses: actions/checkout@v4 - uses: Swatinem/rust-cache@v2 - run: >- - rustup target add - aarch64-apple-ios + rustup target add + aarch64-apple-ios aarch64-apple-ios-sim - uses: actions/download-artifact@v4 with: @@ -136,8 +135,10 @@ jobs: path: packages/app-mobile/example/artifact/appmobileexample.zip build-android: + name: Native / Build Android runs-on: ubuntu-latest - needs: bindings + timeout-minutes: 30 + needs: [rust, js, bindings] steps: - uses: actions/checkout@v4 - uses: Swatinem/rust-cache@v2 @@ -175,3 +176,12 @@ jobs: with: name: appmobileexample-android path: packages/app-mobile/example/android/app/build/outputs/apk/debug/app-debug.apk + + ci-pass: + name: CI + if: always() + needs: [rust, js, coverage, build-ios, build-android] + runs-on: ubuntu-latest + steps: + - run: exit 1 + if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}