Merge pull request #207 from cosmic-utils/dependabot/cargo/libcosmic-… #414
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
| name: CI | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| workflow_dispatch: | |
| inputs: | |
| build_aarch64_flatpak: | |
| description: 'Build aarch64 Flatpak (slow, ~6 hours with QEMU)' | |
| required: false | |
| default: false | |
| type: boolean | |
| build_armhf_flatpak: | |
| description: 'Build armhf Flatpak (slow, uses QEMU)' | |
| required: false | |
| default: false | |
| type: boolean | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| env: | |
| CARGO_TERM_COLOR: always | |
| jobs: | |
| check: | |
| name: Check & Test | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Free disk space | |
| uses: jlumbroso/free-disk-space@main | |
| with: | |
| tool-cache: false | |
| android: true | |
| dotnet: true | |
| haskell: true | |
| large-packages: true | |
| docker-images: true | |
| swap-storage: true | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-tags: true | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@master | |
| with: | |
| toolchain: stable | |
| components: rustfmt, clippy | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y \ | |
| pkg-config \ | |
| libglib2.0-dev \ | |
| libgstreamer1.0-dev \ | |
| libgstreamer-plugins-base1.0-dev \ | |
| libgstreamer-plugins-bad1.0-dev \ | |
| gstreamer1.0-plugins-base \ | |
| gstreamer1.0-plugins-good \ | |
| gstreamer1.0-plugins-bad \ | |
| gstreamer1.0-plugins-ugly \ | |
| gstreamer1.0-libav \ | |
| libwayland-dev \ | |
| libxkbcommon-dev \ | |
| libinput-dev \ | |
| libudev-dev \ | |
| libseat-dev | |
| - name: Install just | |
| uses: extractions/setup-just@v3 | |
| - name: Cache cargo registry | |
| uses: actions/cache@v5 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| target | |
| key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-cargo- | |
| - name: Run checks | |
| run: just check | |
| # Cross-compiled debug builds to verify compilation on all target architectures | |
| build: | |
| name: Build (${{ matrix.arch }}) | |
| runs-on: ubuntu-latest | |
| needs: check | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - arch: x86_64 | |
| target: x86_64-unknown-linux-gnu | |
| use_cross: false | |
| - arch: aarch64 | |
| target: aarch64-unknown-linux-gnu | |
| use_cross: true | |
| - arch: armhf | |
| target: armv7-unknown-linux-gnueabihf | |
| use_cross: true | |
| - arch: riscv64 | |
| target: riscv64gc-unknown-linux-gnu | |
| use_cross: true | |
| steps: | |
| - name: Free disk space | |
| uses: jlumbroso/free-disk-space@main | |
| with: | |
| tool-cache: false | |
| android: true | |
| dotnet: true | |
| haskell: true | |
| large-packages: true | |
| docker-images: true | |
| swap-storage: true | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-tags: true | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@master | |
| with: | |
| toolchain: stable | |
| targets: ${{ matrix.target }} | |
| - name: Install system dependencies (native build) | |
| if: ${{ !matrix.use_cross }} | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y \ | |
| pkg-config \ | |
| libglib2.0-dev \ | |
| libgstreamer1.0-dev \ | |
| libgstreamer-plugins-base1.0-dev \ | |
| libgstreamer-plugins-bad1.0-dev \ | |
| libwayland-dev \ | |
| libxkbcommon-dev \ | |
| libinput-dev \ | |
| libudev-dev \ | |
| libseat-dev | |
| - name: Install cross | |
| if: ${{ matrix.use_cross }} | |
| run: cargo install cross --git https://github.com/cross-rs/cross | |
| - name: Install just | |
| uses: extractions/setup-just@v3 | |
| - name: Build debug binary | |
| run: | | |
| if [ "${{ matrix.use_cross }}" = "true" ]; then | |
| cross build --target ${{ matrix.target }} | |
| else | |
| just build-debug --target ${{ matrix.target }} | |
| fi | |
| # Native Alpine/musl build (for postmarketOS compatibility) | |
| build-alpine: | |
| name: Build (Alpine/musl) | |
| runs-on: ubuntu-latest | |
| needs: check | |
| container: | |
| image: alpine:edge | |
| steps: | |
| - name: Install system dependencies | |
| run: | | |
| apk add --no-cache \ | |
| git \ | |
| curl \ | |
| build-base \ | |
| pkgconf \ | |
| glib-dev \ | |
| gstreamer-dev \ | |
| gst-plugins-base-dev \ | |
| gst-plugins-bad-dev \ | |
| wayland-dev \ | |
| libxkbcommon-dev \ | |
| libinput-dev \ | |
| eudev-dev \ | |
| libseat-dev \ | |
| mesa-dev \ | |
| vulkan-loader-dev | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-tags: true | |
| - name: Install Rust toolchain | |
| run: | | |
| curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable | |
| echo "$HOME/.cargo/bin" >> $GITHUB_PATH | |
| - name: Build debug binary | |
| run: | | |
| . "$HOME/.cargo/env" | |
| cargo build | |
| flatpak-x86_64: | |
| name: Flatpak (x86_64) | |
| runs-on: ubuntu-latest | |
| needs: check | |
| steps: | |
| - name: Free disk space | |
| uses: jlumbroso/free-disk-space@main | |
| with: | |
| tool-cache: false | |
| android: true | |
| dotnet: true | |
| haskell: true | |
| large-packages: true | |
| docker-images: true | |
| swap-storage: true | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-tags: true | |
| - name: Install Flatpak and flatpak-builder | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y flatpak flatpak-builder | |
| - name: Add Flathub remote | |
| run: sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo | |
| - name: Install just | |
| uses: extractions/setup-just@v3 | |
| - name: Install Flatpak dependencies | |
| run: just flatpak-deps x86_64 | |
| - name: Install Python dependencies | |
| run: pip install aiohttp toml tomlkit | |
| - name: Build Flatpak bundle | |
| run: just flatpak-bundle x86_64 | |
| - name: Upload Flatpak bundle | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: camera-x86_64.flatpak | |
| path: camera-x86_64.flatpak | |
| if-no-files-found: error | |
| retention-days: 7 | |
| flatpak-aarch64: | |
| name: Flatpak (aarch64) | |
| runs-on: ubuntu-latest | |
| needs: check | |
| # Only run on manual trigger with build_aarch64_flatpak=true | |
| if: github.event_name == 'workflow_dispatch' && inputs.build_aarch64_flatpak | |
| steps: | |
| - name: Free disk space | |
| uses: jlumbroso/free-disk-space@main | |
| with: | |
| tool-cache: false | |
| android: true | |
| dotnet: true | |
| haskell: true | |
| large-packages: true | |
| docker-images: true | |
| swap-storage: true | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-tags: true | |
| - name: Install Flatpak and flatpak-builder | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y flatpak flatpak-builder | |
| - name: Set up QEMU for multi-arch builds | |
| uses: docker/setup-qemu-action@v3 | |
| with: | |
| platforms: arm64 | |
| - name: Add Flathub remote | |
| run: sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo | |
| - name: Install just | |
| uses: extractions/setup-just@v3 | |
| - name: Install Flatpak dependencies | |
| run: just flatpak-deps aarch64 | |
| - name: Install Python dependencies | |
| run: pip install aiohttp toml tomlkit | |
| - name: Build Flatpak bundle | |
| run: just flatpak-bundle aarch64 | |
| - name: Upload Flatpak bundle | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: camera-aarch64.flatpak | |
| path: camera-aarch64.flatpak | |
| if-no-files-found: error | |
| retention-days: 7 | |
| flatpak-armhf: | |
| name: Flatpak (armhf) | |
| runs-on: ubuntu-latest | |
| needs: check | |
| # Only run on manual trigger with build_armhf_flatpak=true | |
| if: github.event_name == 'workflow_dispatch' && inputs.build_armhf_flatpak | |
| steps: | |
| - name: Free disk space | |
| uses: jlumbroso/free-disk-space@main | |
| with: | |
| tool-cache: false | |
| android: true | |
| dotnet: true | |
| haskell: true | |
| large-packages: true | |
| docker-images: true | |
| swap-storage: true | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-tags: true | |
| - name: Install Flatpak and flatpak-builder | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y flatpak flatpak-builder | |
| - name: Set up QEMU for multi-arch builds | |
| uses: docker/setup-qemu-action@v3 | |
| with: | |
| platforms: arm | |
| - name: Add Flathub remote | |
| run: sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo | |
| - name: Install just | |
| uses: extractions/setup-just@v3 | |
| - name: Install Flatpak dependencies | |
| run: just flatpak-deps arm | |
| - name: Install Python dependencies | |
| run: pip install aiohttp toml tomlkit | |
| - name: Build Flatpak bundle | |
| run: just flatpak-bundle arm | |
| - name: Upload Flatpak bundle | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: camera-armhf.flatpak | |
| path: camera-armhf.flatpak | |
| if-no-files-found: error | |
| retention-days: 7 |