mirror of
https://github.com/systemd/systemd.git
synced 2024-12-25 01:34:28 +03:00
ecf8468dd4
We drop the Fedora 40 job as the latest rawhide spec introduced dependencies that are not available in Fedora 40.
206 lines
6.3 KiB
YAML
206 lines
6.3 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: rawhide
|
|
- distro: opensuse
|
|
release: tumbleweed
|
|
- distro: centos
|
|
release: "9"
|
|
|
|
steps:
|
|
- uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633
|
|
- uses: systemd/mkosi@55f17a8ae67ece9712324c3107804daad94ad0d9
|
|
|
|
# Freeing up disk space with rm -rf can take multiple minutes. Since we don't need the extra free space
|
|
# immediately, we remove the files in the background. However, we first move them to a different location
|
|
# so that nothing tries to use anything in these directories anymore while we're busy deleting them.
|
|
- name: Free disk space
|
|
run: |
|
|
sudo mv /usr/local /usr/local.trash
|
|
sudo mv /opt/hostedtoolcache /opt/hostedtoolcache.trash
|
|
sudo systemd-run rm -rf /usr/local.trash /opt/hostedtoolcache.trash
|
|
|
|
- name: Btrfs
|
|
run: |
|
|
truncate --size=100G btrfs.raw
|
|
mkfs.btrfs btrfs.raw
|
|
sudo mkdir /mnt/mkosi
|
|
LOOP="$(sudo losetup --find --show --direct-io=on btrfs.raw)"
|
|
sudo mount "$LOOP" /mnt/mkosi --options compress=zstd:1,user_subvol_rm_allowed,noatime,discard=async,space_cache=v2
|
|
sudo chown "$(id -u):$(id -g)" /mnt/mkosi
|
|
mkdir /mnt/mkosi/tmp
|
|
echo "TMPDIR=/mnt/mkosi/tmp" >>"$GITHUB_ENV"
|
|
ln -s /mnt/mkosi/build build
|
|
|
|
- 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
|
|
UseSubvolumes=yes
|
|
|
|
WorkspaceDirectory=$TMPDIR
|
|
PackageCacheDirectory=$TMPDIR/cache
|
|
|
|
[Content]
|
|
Environment=
|
|
# mkfs.erofs is extremely noisy when not connected to a tty.
|
|
SYSTEMD_REPART_MKFS_OPTIONS_EROFS="--quiet"
|
|
# Build debuginfo packages since we'll be publishing the packages as artifacts.
|
|
WITH_DEBUG=1
|
|
# Enabling optimizations significantly speeds up integration tests.
|
|
OPTIMIZATION=g
|
|
|
|
[Host]
|
|
ToolsTree=default
|
|
ToolsTreeDistribution=fedora
|
|
# TODO: Drop once https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2038777 is fixed in Github Actions
|
|
QemuFirmware=uefi
|
|
# We build with debuginfo so there's no point in mounting the sources into the machine.
|
|
RuntimeBuildSources=no
|
|
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=
|
|
# Root device can take a long time to appear, so let's bump the timeout.
|
|
systemd.default_device_timeout_sec=180
|
|
EOF
|
|
|
|
- name: Generate secure boot key
|
|
run: mkosi --debug genkey
|
|
|
|
- name: Show image summary
|
|
run: mkosi summary
|
|
|
|
- name: Install build dependencies
|
|
run: |
|
|
sudo apt-get install \
|
|
meson \
|
|
gperf \
|
|
libfdisk-dev \
|
|
libtss2-dev \
|
|
libblkid-dev \
|
|
libmicrohttpd-dev \
|
|
libcap-dev \
|
|
libcurl4-openssl-dev \
|
|
libcryptsetup-dev \
|
|
erofs-utils \
|
|
dosfstools \
|
|
python3-pefile \
|
|
sbsigntool \
|
|
mtools
|
|
|
|
- name: Configure meson
|
|
run: |
|
|
meson setup build \
|
|
--buildtype=debugoptimized \
|
|
-Dintegration-tests=true \
|
|
-Dremote=enabled \
|
|
-Dopenssl=enabled \
|
|
-Dblkid=enabled \
|
|
-Dtpm2=enabled \
|
|
-Dlibcryptsetup=enabled \
|
|
-Dlibcurl=enabled \
|
|
-Drepart=disabled \
|
|
-Dfirstboot=true \
|
|
-Dsysusers=true \
|
|
-Dtmpfiles=true \
|
|
-Dhwdb=true \
|
|
-Dvmspawn=enabled
|
|
|
|
- name: Build image
|
|
run: meson compile -C build mkosi
|
|
|
|
- name: Run integration tests
|
|
run: meson test -C build --no-rebuild --suite integration-tests --print-errorlogs --no-stdsplit --num-processes "$(($(nproc) - 1))"
|
|
|
|
- name: Archive failed test journals
|
|
uses: actions/upload-artifact@v4
|
|
if: failure() && (github.repository == 'systemd/systemd' || github.repository == 'systemd/systemd-stable')
|
|
with:
|
|
name: ci-mkosi-${{ github.run_id }}-${{ github.run_attempt }}-${{ matrix.distro }}-${{ matrix.release }}-failed-test-journals
|
|
path: |
|
|
build/test/journal/*.journal
|
|
build/meson-logs/*
|
|
retention-days: 7
|
|
|
|
- name: Archive packages
|
|
uses: actions/upload-artifact@v4
|
|
if: (success() || failure()) && (github.repository == 'systemd/systemd' || github.repository == 'systemd/systemd-stable')
|
|
with:
|
|
name: ci-mkosi-${{ github.run_id }}-${{ github.run_attempt }}-${{ matrix.distro }}-${{ matrix.release }}-packages
|
|
path: |
|
|
build/mkosi.output/*.rpm
|
|
build/mkosi.output/*.deb
|
|
build/mkosi.output/*.ddeb
|
|
build/mkosi.output/*.pkg.tar
|
|
retention-days: 4
|