Merge fix/use-shared-ecosystem-ci: use bread-ecosystem's shared Arch CI image
All checks were successful
dev release / build (push) Successful in 2m17s

This commit is contained in:
Breadway 2026-08-05 08:51:43 +08:00
commit c2807a59f0
4 changed files with 27 additions and 53 deletions

View file

@ -76,14 +76,19 @@ cargo test --release --workspace
- `release.yml` — triggered on any other `v*` tag push, cuts the actual
stable release.
All of these build inside a pinned Arch Linux container (`ci/Containerfile`,
run via `ci/build.sh`) on a self-hosted runner — not the runner host's
native environment. Arch's repos carry current `gtk4`/`libadwaita`/
`gtk4-layer-shell` as prebuilt packages, so there's no from-source library
build to go stale. The image is rebuilt (and re-cached by Docker) only when
`ci/Containerfile` changes, so a plain push doesn't refetch or recompile
the toolchain. Nothing runs automatically on plain commits or PRs beyond
the jobs listed above. See
All of these build inside a pinned Arch Linux container on a self-hosted
runner — not the runner host's native environment. Arch's repos carry
current `gtk4`/`libadwaita`/`gtk4-layer-shell` as prebuilt packages, so
there's no from-source library build to go stale. The Containerfile and
build script are shared across bread-ecosystem GTK4 products, living in
`bread-ecosystem/ci/`; `ci/build.sh` here is a thin wrapper that clones
that repo at the commit pinned in `ci/bread-ecosystem.rev` (not `main`
an unrelated change there shouldn't silently affect this repo's release
builds) and delegates to it. Bump the pin deliberately when you want the
shared image or build logic updated. A `ci/deps.txt` here (currently
absent — breadpad needs nothing beyond the shared base) would layer on
extra pacman packages if that ever changes. Nothing runs automatically on
plain commits or PRs beyond the jobs listed above. See
[bread-ecosystem's docs/release-channels.md](https://git.breadway.dev/Breadway/bread-ecosystem/src/branch/main/docs/release-channels.md)
for the full policy, including how a new product gets wired onto these tracks.

View file

@ -1,22 +0,0 @@
# Pinned CI build environment for breadpad.
#
# Arch instead of Fedora because breadpad targets BOS/Arch only, and Arch's
# repos already carry current libadwaita/gtk4/gtk4-layer-shell as prebuilt
# packages — no from-source libadwaita build needed (that from-source build
# was the repeated CI breakage: rust dep mismatches, libadwaita ABI
# mismatches, and finally a removed meson option).
#
# Base image pinned by digest, package set frozen at build time: this image
# only changes when someone deliberately rebuilds it, not on every push.
FROM archlinux@sha256:fae033b815a16f930325c2697e620362be4d2e5d739a301b10ad1fc9c8643a06
RUN pacman -Syu --noconfirm --needed \
base-devel \
git \
pkgconf \
rust \
gtk4 \
libadwaita \
gtk4-layer-shell \
graphene \
&& pacman -Scc --noconfirm

1
ci/bread-ecosystem.rev Normal file
View file

@ -0,0 +1 @@
cd5da468b3782fddcb52b4eaff0755ff933524be

View file

@ -1,31 +1,21 @@
#!/usr/bin/env bash
# Builds (or reuses, via docker's own layer cache) the pinned Arch CI image
# from ci/Containerfile, then runs the given cargo command inside it against
# this repo checkout.
#
# Cargo's registry/git caches and CARGO_TARGET_DIR are persisted in named
# docker volumes so they survive across runs even though the repo checkout
# itself (a fresh --depth 1 clone per workflow run) does not.
# Delegates to bread-ecosystem's shared CI build image/script, pinned to
# the commit in ci/bread-ecosystem.rev — not `main`. bread-ecosystem's CI
# files now affect every product's release pipeline, so bumping the pin
# is a deliberate act instead of silent drift (see the bread-theme test
# that broke here for exactly that reason, before it was pinned by rev).
#
# Usage: ci/build.sh cargo build --release --locked
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT"
REV="$(cat "${ROOT}/ci/bread-ecosystem.rev")"
docker build -t breadpad-ci:archlinux -f ci/Containerfile ci
CACHE_DIR="/tmp/bread-ecosystem-ci-${REV}"
if [ ! -d "$CACHE_DIR" ]; then
rm -rf /tmp/bread-ecosystem-ci-*
git clone https://git.breadway.dev/Breadway/bread-ecosystem.git "$CACHE_DIR"
git -C "$CACHE_DIR" checkout --quiet "$REV"
fi
docker run --rm \
-v "${ROOT}:/workspace" \
-v breadpad-cargo-registry:/root/.cargo/registry \
-v breadpad-cargo-git:/root/.cargo/git \
-v breadpad-cargo-target:/cargo-target \
-w /workspace \
-e CARGO_TARGET_DIR=/cargo-target \
breadpad-ci:archlinux \
bash -c '
set -euo pipefail
"$@"
mkdir -p /workspace/target
cp -a /cargo-target/. /workspace/target/
' bash "$@"
bash "${CACHE_DIR}/ci/build.sh" "$ROOT" "$@"