CI #22
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 (annotate feature) | |
| run: cargo clippy --all-targets --no-default-features --features annotate -- -D warnings | |
| - name: Tests (annotate feature) | |
| run: cargo test --no-default-features --features annotate | |
| # 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 libssl-dev | |
| - name: Setup Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: rustfmt, clippy | |
| - name: Cache build artifacts | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Clippy (annotate + video) | |
| run: cargo clippy --all --features annotate,video -- -D warnings | |
| - name: Tests (annotate + video) | |
| run: cargo test --all --features annotate,video | |
| # 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 (annotate + video features) | |
| run: cargo build --features annotate,video | |
| 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 (annotate + video features) | |
| run: cargo build --features annotate,video | |
| # Code coverage (runs on macOS with ffmpeg for full feature coverage) | |
| coverage: | |
| name: coverage | |
| runs-on: macos-latest | |
| needs: [test, test-video] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install dependencies | |
| run: brew install ffmpeg@7 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 --features annotate,video --workspace --lcov --output-path lcov.info | |
| 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" | |
| - name: Upload coverage to Codecov | |
| uses: codecov/codecov-action@v5 | |
| with: | |
| files: ./lcov.info | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| flags: template_coverage |