Commit Graph

9 Commits

Author SHA1 Message Date
josh 28918bad15 live-image: fix firmware so i915 actually loads at boot
CI / Lint + build + test (push) Successful in 1m35s
Release / release (push) Failing after 22s
Previous attempt (c962d6d) added firmware-linux-nonfree to mkosi.conf,
but the CI bundle was still 63 MB and Tiger Lake wedged on tgl_guc.
Two reasons: (1) firmware-linux-nonfree on bookworm is a thin
metapackage that doesn't include firmware-misc-nonfree, which is where
i915 GuC/HuC blobs actually live; (2) Ubuntu's apt-packaged mkosi is
old enough that Repositories=non-free-firmware shorthand likely isn't
wired through to the debootstrap invocation, so firmware packages
silently miss the bootstrap step entirely.

Changes:
- Enumerate firmware packages explicitly in mkosi.conf (firmware-
  misc-nonfree, firmware-iwlwifi, firmware-realtek, firmware-amd-
  graphics, firmware-intel-sound, intel/amd64-microcode).
- Ship mkosi.sources.d/debian.sources with explicit deb822 so the
  non-free-firmware component is unambiguously available.
- Install mkosi 24.3 via pip in CI instead of apt's older build.
- Pin MODULES=most and COMPRESS=zstd via a tracked initramfs-tools
  config under mkosi.extra/.
- Narrow .gitignore so only the generated agent binary is ignored,
  not the whole mkosi.extra/ tree.
- New check-initrd Makefile target asserts both size (>=150 MB) and
  actual presence of i915/tgl_guc_*.bin inside the built initrd, so
  a silent firmware-drop regression fails the build loudly.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 13:38:40 -04:00
josh d6cdb7caa9 ci: install kmod for mkosi depmod
CI / Lint + build + test (push) Successful in 1m35s
Release / release (push) Failing after 1m38s
After installing the kernel package into the live image, mkosi runs
depmod on the host against the image's module tree. depmod ships in
the kmod package, which isn't in the runner container by default.
2026-04-18 03:05:55 -04:00
josh e6aa57e839 ci: install systemd-boot for mkosi bootctl
CI / Lint + build + test (push) Successful in 1m38s
Release / release (push) Failing after 1m31s
mkosi Bootable=yes shells out to bootctl kernel-identify on the host,
which ships in the systemd-boot package on Ubuntu (not in systemd
itself). Without it, the live-image build fails at the end with
"bootctl: not found" after successfully installing all packages.
2026-04-18 03:01:30 -04:00
josh 3dc0ca0bc2 ci: install debian-archive-keyring for mkosi bootstrap
CI / Lint + build + test (push) Successful in 1m34s
Release / release (push) Failing after 1m29s
mkosi's apt-get (inside the mkosi workspace) couldn't verify Debian's
InRelease signatures because the act_runner's Ubuntu base image ships
Ubuntu's keyring, not Debian's. Adding `debian-archive-keyring` to the
apt install list exposes /usr/share/keyrings/debian-archive-keyring.gpg
which debootstrap and apt need for the bookworm repos.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 02:54:04 -04:00
josh a427640608 ci: install systemd-ukify so mkosi's Bootable=yes step succeeds
CI / Lint + build + test (push) Successful in 1m35s
Release / release (push) Failing after 1m1s
mkosi refused with "Could not find 'ukify'". The live image's mkosi.conf
sets Bootable=yes, and mkosi invokes ukify to package the Unified
Kernel Image alongside vmlinuz+initrd.img. On Debian/Ubuntu, ukify
ships in the `systemd-ukify` apt package (not in `systemd`).

Added to both release.yml and e2e.yml's live-image dep lists.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 02:50:39 -04:00
josh 74c09e9596 ci: disable setup-go cache to skip 4m Gitea cache server timeout
CI / Lint + build + test (push) Failing after 32s
Release / release (push) Has been cancelled
The action tries to restore from 172.18.0.2:36061 (Gitea's cache
server), times out, falls through to a fresh download anyway. Pure
waste since the runner already has the toolchain in
/opt/hostedtoolcache. Turn cache off.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 02:37:16 -04:00
josh 869cd78d0b ci: quote e2e.yml input description so Gitea's YAML parser accepts it
CI / Lint + build + test (push) Has been cancelled
Release / release (push) Has been cancelled
Unquoted `(default: main)` trips Gitea Actions' strict YAML parser
with "mapping values are not allowed in this context" because the
inline colon reads as a nested mapping. GitHub Actions' parser was
lenient about this; Gitea's isn't.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 02:34:35 -04:00
josh 03dcf33686 ci: switch runs-on to ubuntu-latest to match runner label
CI / Lint + build + test (push) Failing after 8m44s
Release / release (push) Has been cancelled
The self-hosted Gitea runner advertises itself as `ubuntu-latest`,
not `self-hosted`, so the jobs were never getting picked up.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 02:25:22 -04:00
josh 609ad2e383 ci: migrate to Gitea Actions + publish release bundle to package registry
CI / Lint + build + test (push) Has been cancelled
Release / release (push) Has been cancelled
Adds `.gitea/workflows/{ci,e2e,release}.yml` and removes the old
`.github/workflows/` counterparts. Gitea reads both paths, so keeping
them would double-run every job on every push.

- ci.yml / e2e.yml are 1:1 ports of the GitHub versions, just with
  `runs-on: self-hosted` (Gitea has no hosted runners).
- release.yml is new: fires on push to main, runs `make release`, then
  publishes `vetting-bundle.tar.gz` to the Gitea generic package
  registry under two versions — `sha-<short-sha>` (immutable, pinnable)
  and `latest` (rolling alias, DELETE+PUT on each run). Auth via a
  REGISTRY_TOKEN secret + REGISTRY_URL variable configured on the Gitea
  side.

The runner is being reconfigured to privileged so `mkosi` + `debootstrap`
can build the live image inside CI.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 02:14:08 -04:00