Fix building packages with bin targets #146
Workflow file for this run
This file contains 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: Rust | |
on: [push, pull_request] | |
jobs: | |
formatting: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Format | |
run: cargo fmt --all -- --check | |
clippy: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install aarch64-linux-android Rust target | |
run: rustup target add aarch64-linux-android | |
- name: Clippy | |
# Use one of our supported targets to lint all crates including | |
# the target-specific `ndk` in one go. | |
# This assumes our host-tools (cargo-apk and dependencies) | |
# also compile cleanly under this target. | |
run: cargo clippy --all --all-targets --all-features --target aarch64-linux-android -- -Dwarnings | |
check_msrv: | |
name: Check MSRV (1.70.0) | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@1.70.0 | |
with: | |
target: aarch64-linux-android | |
- name: Check | |
# See comment above about using one of our supported targets. | |
run: cargo check --workspace --all-targets --all-features --target aarch64-linux-android | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest] | |
rust-channel: ["stable", "nightly"] | |
rust-target: | |
- "armv7-linux-androideabi" | |
- "aarch64-linux-android" | |
- "i686-linux-android" | |
- "x86_64-linux-android" | |
include: | |
- os: windows-latest | |
rust-channel: "stable" | |
rust-target: "aarch64-linux-android" | |
- os: windows-latest | |
rust-channel: "stable" | |
rust-target: "x86_64-linux-android" | |
runs-on: ${{ matrix.os }} | |
name: Build apk | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Installing Rust ${{ matrix.rust-channel }} w/ ${{ matrix.rust-target }} | |
run: | | |
rustup toolchain install ${{ matrix.rust-channel }} | |
rustup default ${{ matrix.rust-channel }} | |
rustup target add ${{ matrix.rust-target }} | |
- name: Install cargo-apk | |
run: cargo install --path cargo-apk | |
- name: Cargo apk build for target ${{ matrix.rust-target }} | |
run: cargo apk build -p ndk-examples --target ${{ matrix.rust-target }} --examples | |
- uses: actions/upload-artifact@v3 | |
# Only need this for CI, unless users are interested in downloading | |
# a ready-made app that does nothing but printing "hello world". | |
if: ${{ matrix.rust-target == 'x86_64-linux-android' }} | |
name: Upload hello_world apk | |
with: | |
name: hello_world_${{ matrix.os }}_${{ matrix.rust-target }} | |
path: ./target/debug/apk/examples/hello_world.apk | |
android_emulator: | |
name: hello_world example on emulator | |
needs: build | |
runs-on: macos-latest | |
strategy: | |
matrix: | |
source_os: [ubuntu-latest, windows-latest, local] | |
env: | |
api-level: 29 | |
emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none | |
arch: x86_64 | |
# the `googleapis` emulator target is considerably slower on CI. | |
target: default | |
profile: Nexus 6 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- uses: actions/download-artifact@v3 | |
name: Download hello_world APK | |
if: ${{ matrix.source_os != 'local' }} | |
id: download | |
with: | |
name: hello_world_${{ matrix.source_os }}_x86_64-linux-android | |
- name: Install `cargo-apk` and add `x86_64-linux-android` target | |
if: ${{ matrix.source_os == 'local' }} | |
run: | | |
cargo install --path cargo-apk | |
rustup target add x86_64-linux-android | |
- name: AVD cache | |
uses: actions/cache@v3 | |
id: avd-cache | |
with: | |
path: | | |
~/.android/avd/* | |
~/.android/adb* | |
# Bump the trailing number when making changes to the emulator setup below | |
key: avd-${{ env.api-level }}-1 | |
- name: create AVD and generate snapshot for caching | |
if: steps.avd-cache.outputs.cache-hit != 'true' | |
uses: reactivecircus/android-emulator-runner@v2 | |
with: | |
api-level: ${{ env.api-level }} | |
arch: ${{ env.arch }} | |
target: ${{ env.target }} | |
profile: ${{ env.profile }} | |
emulator-options: ${{ env.emulator-options }} | |
disable-animations: true | |
force-avd-creation: false | |
script: echo "Generated AVD snapshot for caching." | |
- name: Start hello_world example | |
uses: reactivecircus/android-emulator-runner@v2 | |
with: | |
api-level: ${{ env.api-level }} | |
arch: ${{ env.arch }} | |
target: ${{ env.target }} | |
profile: ${{ env.profile }} | |
emulator-options: -no-snapshot-save ${{ env.emulator-options }} | |
disable-animations: true | |
force-avd-creation: false | |
script: ./.github/workflows/android_test.sh "${{ steps.download.outputs.download-path }}" | |
- name: Upload emulator logs | |
uses: actions/upload-artifact@v3 | |
if: ${{ always() }} | |
with: | |
name: log | |
path: ~/logcat.log | |
build-host: | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest] | |
rust-channel: ["stable", "nightly"] | |
runs-on: ${{ matrix.os }} | |
name: Host-side tests | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Installing Rust ${{ matrix.rust-channel }} | |
run: | | |
rustup toolchain install ${{ matrix.rust-channel }} | |
rustup default ${{ matrix.rust-channel }} | |
- name: Test ndk-build | |
run: cargo test -p ndk-build --all-features | |
- name: Test cargo-apk | |
run: cargo test -p cargo-apk --all-features | |
docs: | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest] | |
rust-channel: ["stable", "nightly"] | |
runs-on: ${{ matrix.os }} | |
name: Build-test docs | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Installing Rust ${{ matrix.rust-channel }} | |
run: | | |
rustup toolchain install ${{ matrix.rust-channel }} | |
rustup default ${{ matrix.rust-channel }} | |
- name: Document all crates | |
env: | |
RUSTDOCFLAGS: -Dwarnings | |
run: cargo doc --all --all-features |