Skip to content

Merge pull request #207 from cosmic-utils/dependabot/cargo/libcosmic-… #414

Merge pull request #207 from cosmic-utils/dependabot/cargo/libcosmic-…

Merge pull request #207 from cosmic-utils/dependabot/cargo/libcosmic-… #414

Workflow file for this run

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