mirror of
https://github.com/systemd/systemd.git
synced 2025-01-07 21:18:41 +03:00
4d0f1451b5
Instead of running meson install and hoping for the best, let's build distribution packages from the downstream packaging specs. This gets us the following: - Vastly simplified mkosi scripts since we don't need a separate initrd image anymore but can just reuse the default mkosi initrd. - Almost everything can move to the base image as its not the basis anymore for the initrd and as such we don't need to care about the size anymore. - The systemd packages that get pulled in as dependencies of other packages get properly uninstalled and replaced with our packages that we built instead of just installing on top of an existing systemd installation with no guarantee that everything from that previous installation was removed. - Much better testing coverage as what we're testing is much closer to what will actually be deployed in distributions. - Immediate feedback if something we change breaks distribution packaging - We get integration with the distribution for free as we'll automatically use the proper directories and such instead of having to hack this into a mkosi build script. - ...
155 lines
4.7 KiB
YAML
155 lines
4.7 KiB
YAML
---
|
|
# vi: ts=2 sw=2 et:
|
|
# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
# Simple boot tests that build and boot the mkosi images generated by the mkosi config files in mkosi.conf.d/.
|
|
name: mkosi
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
- v[0-9]+-stable
|
|
paths:
|
|
- '**'
|
|
- '!README*'
|
|
- '!LICENSE*'
|
|
- '!LICENSES/**'
|
|
- '!TODO'
|
|
- '!docs/**'
|
|
- '!man/**'
|
|
- '!catalog/**'
|
|
- '!shell-completion/**'
|
|
- '!po/**'
|
|
- '!.**'
|
|
- '.github/**'
|
|
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
- v[0-9]+-stable
|
|
paths:
|
|
- '**'
|
|
- '!README*'
|
|
- '!LICENSE*'
|
|
- '!LICENSES/**'
|
|
- '!TODO'
|
|
- '!docs/**'
|
|
- '!man/**'
|
|
- '!catalog/**'
|
|
- '!shell-completion/**'
|
|
- '!po/**'
|
|
- '!.**'
|
|
- '.github/**'
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
ci:
|
|
runs-on: ubuntu-22.04
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ matrix.distro }}-${{ matrix.release }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- distro: arch
|
|
release: rolling
|
|
- distro: debian
|
|
release: testing
|
|
- distro: ubuntu
|
|
release: noble
|
|
- distro: fedora
|
|
release: "39"
|
|
- distro: fedora
|
|
release: rawhide
|
|
# TODO: Re-enable once https://lists.opensuse.org/archives/list/factory@lists.opensuse.org/thread/AU4NWTBXNA7MVAUXWR74XYCHCSZN4Z4K/
|
|
# is resolved or https://build.opensuse.org/request/show/1152118 is merged.
|
|
# - distro: opensuse
|
|
# release: tumbleweed
|
|
- distro: centos
|
|
release: "9"
|
|
|
|
env:
|
|
SYSTEMD_LOG_LEVEL: debug
|
|
|
|
steps:
|
|
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
|
|
- uses: systemd/mkosi@ea1b00c3dba12662214b2e95dd1fe837cb13664b
|
|
|
|
- name: Free disk space
|
|
run: |
|
|
sudo rm -rf /usr/local
|
|
sudo rm -rf /opt/hostedtoolcache
|
|
|
|
- name: Configure
|
|
run: |
|
|
tee mkosi.local.conf <<EOF
|
|
[Distribution]
|
|
Distribution=${{ matrix.distro }}
|
|
Release=${{ matrix.release }}
|
|
|
|
[Output]
|
|
# Build a disk image in CI as this logic is much more prone to breakage.
|
|
Format=disk
|
|
|
|
[Host]
|
|
ToolsTree=default
|
|
ToolsTreeDistribution=fedora
|
|
QemuVsock=yes
|
|
# Sometimes we run on a host with /dev/kvm, but it is broken, so explicitly disable it
|
|
QemuKvm=no
|
|
Ephemeral=yes
|
|
EOF
|
|
|
|
# These should override the options from mkosi.conf so we put them in a dropin that's ordered later
|
|
# instead.
|
|
tee mkosi.conf.d/99-ci.conf <<EOF
|
|
[Host]
|
|
KernelCommandLineExtra=systemd.unit=mkosi-check-and-shutdown.service
|
|
systemd.journald.max_level_console=debug
|
|
# udev's debug log output is very verbose, so up it to info in CI.
|
|
udev.log_level=info
|
|
# Root device can take a long time to appear, so let's bump the timeout.
|
|
systemd.default_device_timeout_sec=180
|
|
EOF
|
|
|
|
# For erofs, we have to install linux-modules-extra-azure, but that doesn't match the running kernel
|
|
# version, so we can't load the erofs module. squashfs is a builtin module so we use that instead.
|
|
|
|
mkdir -p mkosi.images/system/mkosi.repart/10-usr.conf.d
|
|
tee mkosi.images/system/mkosi.repart/10-usr.conf.d/squashfs.conf <<EOF
|
|
[Partition]
|
|
Format=squashfs
|
|
EOF
|
|
|
|
# The emergency shell is not useful in the CI, as it just blocks for a long time before the job
|
|
# eventually times out. Override it to just shutdown immediately.
|
|
mkdir -p mkosi.images/initrd/mkosi.extra/usr/lib/systemd/system/emergency.service.d/
|
|
mkdir -p mkosi.images/system/mkosi.extra/usr/lib/systemd/system/emergency.service.d/
|
|
tee mkosi.images/initrd/mkosi.extra/usr/lib/systemd/system/emergency.service.d/poweroff.conf <<EOF
|
|
[Unit]
|
|
FailureAction=exit
|
|
[Service]
|
|
ExecStartPre=
|
|
ExecStart=
|
|
ExecStart=false
|
|
EOF
|
|
cp mkosi.images/initrd/mkosi.extra/usr/lib/systemd/system/emergency.service.d/poweroff.conf mkosi.images/system/mkosi.extra/usr/lib/systemd/system/emergency.service.d/poweroff.conf
|
|
|
|
- name: Generate secure boot key
|
|
run: mkosi --debug genkey
|
|
|
|
- name: Show image summary
|
|
run: mkosi summary
|
|
|
|
- name: Build
|
|
run: mkosi --debug
|
|
|
|
- name: Boot systemd-nspawn
|
|
run: test "$(sudo mkosi --debug boot 1>&2; echo $?)" -eq 123
|
|
|
|
- name: Boot QEMU
|
|
run: timeout -k 30 10m test "$(mkosi --debug qemu 1>&2; echo $?)" -eq 123
|