mirror of
https://github.com/storytold/photocraft.git
synced 2026-10-20 17:26:30 +02:00
Main's CI was effectively unverified: with cancel-in-progress on every ref, each merge cancelled the run of the one before. Between 09:56 and 20:34 UTC on 2026-10-07, 80 of 83 push runs on main were cancelled, and a formatting break from two PRs that were each green alone (#663 + #700) went unnoticed until PRs updated to main started failing. - ci.yml: cancel-in-progress only for pull_request. Main runs finish; a merge that lands meanwhile waits and runs next. - ci.yml: a `platforms` job picks the test matrix. main, manual runs and PRs labelled `full-ci` get Linux, macOS and Windows. Other PRs get Linux only, unless they touch code whose behaviour differs by platform (apps/, ui-egui, text, gpu, tablet, heif, build.rs, Cargo.lock, ci.yml). - ci.yml: the second Linux test run with craft-fonts covers only the crates that use the fonts (photocraft-text, photocraft-ui-egui), not the whole workspace again. - freebsd.yml, windows-arm64.yml: nightly on main instead of on every push and every Cargo.toml change; PRs touching their own packaging still run them. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
65 lines
3.0 KiB
YAML
65 lines
3.0 KiB
YAML
# Builds and tests the workspace on FreeBSD, inside a FreeBSD VM on a Linux runner
|
|
# (GitHub has no FreeBSD runners). GPU tests skip themselves when the VM has no adapter.
|
|
# It then runs packaging/freebsd/package.sh, the script the release job runs, and checks the
|
|
# tarball, so a broken FreeBSD package fails here before it can fail a release. Nothing is
|
|
# uploaded and no secrets are used.
|
|
name: FreeBSD
|
|
|
|
# The VM build takes one to several hours, so it runs nightly on main rather than on every push
|
|
# or dependency change: a drifted dependency still shows up within a day. PRs that change the
|
|
# FreeBSD packaging itself still run it.
|
|
on:
|
|
schedule:
|
|
- cron: "17 2 * * *"
|
|
pull_request:
|
|
paths:
|
|
- .github/workflows/freebsd.yml
|
|
- packaging/freebsd/**
|
|
- packaging/env.sh
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
group: freebsd-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
freebsd:
|
|
name: FreeBSD 14 (build + test + package)
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 300
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Build, test and package in a FreeBSD VM
|
|
uses: vmactions/freebsd-vm@c46abacb49f09938ca4e1702d15d836285d694cc # v1
|
|
with:
|
|
release: "14.3"
|
|
usesh: true
|
|
cpu: 4
|
|
mem: 12288
|
|
# Nothing to bring back; copying the target dir out of the VM fails on large builds.
|
|
copyback: false
|
|
prepare: |
|
|
pkg install -y bash git curl pkgconf cmake python3 libxkbcommon wayland libX11 libXcursor libXrandr libXi libxcb mesa-libs vulkan-loader gtk3 fontconfig freetype2 alsa-lib
|
|
curl -fsSL https://sh.rustup.rs | sh -s -- -y --profile minimal
|
|
run: |
|
|
set -e
|
|
. "$HOME/.cargo/env"
|
|
# The checkout is synced in under another owner; let tests that call git read it.
|
|
git config --global --add safe.directory "*"
|
|
rustc --version
|
|
CARGO_PROFILE_DEV_DEBUG=0 cargo build --workspace --all-targets --locked --features heif
|
|
CARGO_PROFILE_DEV_DEBUG=0 cargo test --workspace --locked --features heif --exclude photocraft-ui-egui
|
|
CARGO_PROFILE_DEV_DEBUG=0 cargo test -p photocraft-ui-egui --locked --lib
|
|
CARGO_PROFILE_DEV_DEBUG=0 cargo test -p photocraft-ui-egui --locked --doc
|
|
# The VM's software Vulkan driver crashes (SIGSEGV) when several tests set up a GPU
|
|
# device at once, so the GPU integration tests run one at a time here.
|
|
CARGO_PROFILE_DEV_DEBUG=0 cargo test -p photocraft-ui-egui --locked --test '*' -- --test-threads=1
|
|
# The release package, as release.yml builds it. Free the debug build's disk first.
|
|
rm -rf target/debug
|
|
CARGO_BUILD_JOBS=4 bash packaging/freebsd/package.sh
|
|
tar -tzf dist/release/photocraft-*-freebsd-x86_64.tar.gz \
|
|
| grep -E '/bin/photocraft$|/bin/photocraft-cli$|/share/applications/ai\.storyteller\.photocraft\.desktop$|/share/doc/photocraft/LICENSE-MIT$'
|