feat: ✨ Add CI workflow configuration for cross-platform testing and coverage #9
Workflow file for this run
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
| # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license | |
| name: CI | |
| permissions: | |
| contents: read | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| schedule: | |
| - cron: "0 0 * * *" | |
| env: | |
| CARGO_TERM_COLOR: always | |
| jobs: | |
| # Cross-platform tests (default features only - no video/ffmpeg required) | |
| test: | |
| name: test / ${{ matrix.os }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, macos-latest, windows-latest] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Cache build artifacts | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Format | |
| run: cargo fmt --all -- --check | |
| - name: Clippy (default features) | |
| run: cargo clippy --all-targets -- -D warnings | |
| - name: Tests (default features) | |
| run: cargo test --all | |
| # Video feature tests (requires ffmpeg) | |
| test-video: | |
| name: test / linux / ffmpeg ${{ matrix.ffmpeg_version }} | |
| runs-on: ubuntu-latest | |
| container: jrottenberg/ffmpeg:${{ matrix.ffmpeg_version }}-ubuntu | |
| strategy: | |
| matrix: | |
| ffmpeg_version: ["7.1"] | |
| fail-fast: false | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Install dependencies | |
| run: | | |
| DEBIAN_FRONTEND=noninteractive apt-get update | |
| DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential ca-certificates clang curl pkg-config | |
| - name: Setup Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: rustfmt, clippy | |
| - name: Cache build artifacts | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Clippy (all features) | |
| run: cargo clippy --all --all-features -- -D warnings | |
| - name: Tests (all features) | |
| run: cargo test --all --all-features | |
| # macOS video build test | |
| build-macos-video: | |
| name: build / macos / ffmpeg 7 | |
| runs-on: macos-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install dependencies | |
| run: brew install ffmpeg@7 pkg-config | |
| - name: Setup Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Cache build artifacts | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Build (all features) | |
| run: cargo build --all-features | |
| env: | |
| LDFLAGS: "-L/opt/homebrew/opt/ffmpeg@7/lib" | |
| CPPFLAGS: "-I/opt/homebrew/opt/ffmpeg@7/include" | |
| PKG_CONFIG_PATH: "/opt/homebrew/opt/ffmpeg@7/lib/pkgconfig" | |
| # Windows video build test | |
| build-windows-video: | |
| name: build / windows / ffmpeg 7.1 | |
| runs-on: windows-latest | |
| env: | |
| FFMPEG_DOWNLOAD_URL: https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-7.1.1-full_build-shared.7z | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install dependencies | |
| run: | | |
| $VCINSTALLDIR = $(& "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -property installationPath) | |
| Add-Content $env:GITHUB_ENV "LIBCLANG_PATH=${VCINSTALLDIR}\VC\Tools\LLVM\x64\bin" | |
| Invoke-WebRequest "${env:FFMPEG_DOWNLOAD_URL}" -OutFile ffmpeg-7.1.1-full_build-shared.7z | |
| 7z x ffmpeg-7.1.1-full_build-shared.7z | |
| mkdir ffmpeg | |
| mv ffmpeg-*/* ffmpeg/ | |
| Add-Content $env:GITHUB_ENV "FFMPEG_DIR=${pwd}\ffmpeg" | |
| Add-Content $env:GITHUB_PATH "${pwd}\ffmpeg\bin" | |
| - name: Setup Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Cache build artifacts | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Build (all features) | |
| run: cargo build --all-features | |
| # Code coverage (runs on ubuntu container with ffmpeg for all features) | |
| coverage: | |
| name: coverage | |
| runs-on: ubuntu-latest | |
| container: jrottenberg/ffmpeg:7.1-ubuntu | |
| needs: [test, test-video] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install dependencies | |
| run: | | |
| DEBIAN_FRONTEND=noninteractive apt-get update | |
| DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential ca-certificates clang curl pkg-config | |
| - name: Set up Rust | |
| uses: dtolnay/rust-toolchain@nightly | |
| - name: Cache build artifacts | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Install cargo-llvm-cov | |
| uses: taiki-e/install-action@v2 | |
| with: | |
| tool: cargo-llvm-cov | |
| - name: Coverage | |
| run: cargo llvm-cov --all-features --workspace --lcov --output-path lcov.info | |
| - name: Upload coverage to Codecov | |
| uses: codecov/codecov-action@v5 | |
| with: | |
| files: ./lcov.info | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| flags: template_coverage |