mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2025-06-28 12:07:40 +03:00

Add a new 'zfs-qemu-packages' GH workflow for manually building RPMs and test installing ZFS RPMs from a yum repo. The workflow has a dropdown menu in the Github runners tab with two options: Build RPMs - Build release RPMs and tarballs and put them into an artifact ZIP file. The directory structure used in the ZIP file mirrors the ZFS yum repo. Test repo - Test install the ZFS RPMs from the ZFS repo. On Almalinux, this will do a DKMS and KMOD test install from both the regular and testing repos. On Fedora, it will do a DKMS install from the regular repo. All test install results will be displayed in the Github runner Summary page. Note that the workflow provides an optional text box where you can specify the full URL to an alternate repo. If left blank, it will install from the default repo from the zfs-release RPM. Most developers will never need to use this workflow. It is intended to be used by the ZFS admins for building and testing releases. This commit also modularizes many of the runner scripts so they can be used by both the zfs-qemu and zfs-qemu-packages workflows. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Tino Reichardt <milky-zfs@mcmilk.de> Signed-off-by: Tony Hutter <hutter2@llnl.gov> Closes #17005
181 lines
6.2 KiB
YAML
181 lines
6.2 KiB
YAML
name: zfs-qemu
|
|
|
|
on:
|
|
push:
|
|
pull_request:
|
|
workflow_dispatch:
|
|
inputs:
|
|
include_stream9:
|
|
type: boolean
|
|
required: false
|
|
default: false
|
|
description: 'Test on CentOS 9 stream'
|
|
include_stream10:
|
|
type: boolean
|
|
required: false
|
|
default: false
|
|
description: 'Test on CentOS 10 stream'
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
test-config:
|
|
name: Setup
|
|
runs-on: ubuntu-24.04
|
|
outputs:
|
|
test_os: ${{ steps.os.outputs.os }}
|
|
ci_type: ${{ steps.os.outputs.ci_type }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Generate OS config and CI type
|
|
id: os
|
|
run: |
|
|
FULL_OS='["almalinux8", "almalinux9", "debian11", "debian12", "fedora40", "fedora41", "freebsd13-3r", "freebsd13-4s", "freebsd14-1r", "freebsd14-2s", "freebsd15-0c", "ubuntu20", "ubuntu22", "ubuntu24"]'
|
|
QUICK_OS='["almalinux8", "almalinux9", "debian12", "fedora41", "freebsd13-3r", "freebsd14-2r", "ubuntu24"]'
|
|
# determine CI type when running on PR
|
|
ci_type="full"
|
|
if ${{ github.event_name == 'pull_request' }}; then
|
|
head=${{ github.event.pull_request.head.sha }}
|
|
base=${{ github.event.pull_request.base.sha }}
|
|
ci_type=$(python3 .github/workflows/scripts/generate-ci-type.py $head $base)
|
|
fi
|
|
if [ "$ci_type" == "quick" ]; then
|
|
os_selection="$QUICK_OS"
|
|
else
|
|
os_selection="$FULL_OS"
|
|
fi
|
|
os_json=$(echo ${os_selection} | jq -c)
|
|
|
|
# Add optional runners
|
|
if [ "${{ github.event.inputs.include_stream9 }}" == 'true' ]; then
|
|
os_json=$(echo $os_json | jq -c '. += ["centos-stream9"]')
|
|
fi
|
|
if [ "${{ github.event.inputs.include_stream10 }}" == 'true' ]; then
|
|
os_json=$(echo $os_json | jq -c '. += ["centos-stream10"]')
|
|
fi
|
|
|
|
echo $os_json
|
|
echo "os=$os_json" >> $GITHUB_OUTPUT
|
|
echo "ci_type=$ci_type" >> $GITHUB_OUTPUT
|
|
|
|
qemu-vm:
|
|
name: qemu-x86
|
|
needs: [ test-config ]
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
# rhl: almalinux8, almalinux9, centos-stream9, fedora40, fedora41
|
|
# debian: debian11, debian12, ubuntu20, ubuntu22, ubuntu24
|
|
# misc: archlinux, tumbleweed
|
|
# FreeBSD variants of 2024-12:
|
|
# FreeBSD Release: freebsd13-3r, freebsd13-4r, freebsd14-1r, freebsd14-2r
|
|
# FreeBSD Stable: freebsd13-4s, freebsd14-2s
|
|
# FreeBSD Current: freebsd15-0c
|
|
os: ${{ fromJson(needs.test-config.outputs.test_os) }}
|
|
runs-on: ubuntu-24.04
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
|
|
- name: Setup QEMU
|
|
timeout-minutes: 10
|
|
run: .github/workflows/scripts/qemu-1-setup.sh
|
|
|
|
- name: Start build machine
|
|
timeout-minutes: 10
|
|
run: .github/workflows/scripts/qemu-2-start.sh ${{ matrix.os }}
|
|
|
|
- name: Install dependencies
|
|
timeout-minutes: 20
|
|
run: .github/workflows/scripts/qemu-3-deps.sh ${{ matrix.os }}
|
|
|
|
- name: Build modules
|
|
timeout-minutes: 30
|
|
run: .github/workflows/scripts/qemu-4-build.sh --poweroff --enable-debug ${{ matrix.os }}
|
|
|
|
- name: Setup testing machines
|
|
timeout-minutes: 5
|
|
run: .github/workflows/scripts/qemu-5-setup.sh
|
|
|
|
- name: Run tests
|
|
timeout-minutes: 270
|
|
run: .github/workflows/scripts/qemu-6-tests.sh
|
|
env:
|
|
CI_TYPE: ${{ needs.test-config.outputs.ci_type }}
|
|
|
|
- name: Prepare artifacts
|
|
if: always()
|
|
timeout-minutes: 10
|
|
run: .github/workflows/scripts/qemu-7-prepare.sh
|
|
|
|
- uses: actions/upload-artifact@v4
|
|
id: artifact-upload
|
|
if: always()
|
|
with:
|
|
name: Logs-functional-${{ matrix.os }}
|
|
path: /tmp/qemu-${{ matrix.os }}.tar
|
|
if-no-files-found: ignore
|
|
|
|
- name: Test Summary
|
|
if: always()
|
|
run: .github/workflows/scripts/qemu-8-summary.sh '${{ steps.artifact-upload.outputs.artifact-url }}'
|
|
|
|
cleanup:
|
|
if: always()
|
|
name: Cleanup
|
|
runs-on: ubuntu-latest
|
|
needs: [ qemu-vm ]
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
- uses: actions/download-artifact@v4
|
|
- name: Generating summary
|
|
run: .github/workflows/scripts/qemu-9-summary-page.sh
|
|
- name: Generating summary...
|
|
run: .github/workflows/scripts/qemu-9-summary-page.sh 2
|
|
- name: Generating summary...
|
|
run: .github/workflows/scripts/qemu-9-summary-page.sh 3
|
|
- name: Generating summary...
|
|
run: .github/workflows/scripts/qemu-9-summary-page.sh 4
|
|
- name: Generating summary...
|
|
run: .github/workflows/scripts/qemu-9-summary-page.sh 5
|
|
- name: Generating summary...
|
|
run: .github/workflows/scripts/qemu-9-summary-page.sh 6
|
|
- name: Generating summary...
|
|
run: .github/workflows/scripts/qemu-9-summary-page.sh 7
|
|
- name: Generating summary...
|
|
run: .github/workflows/scripts/qemu-9-summary-page.sh 8
|
|
- name: Generating summary...
|
|
run: .github/workflows/scripts/qemu-9-summary-page.sh 9
|
|
- name: Generating summary...
|
|
run: .github/workflows/scripts/qemu-9-summary-page.sh 10
|
|
- name: Generating summary...
|
|
run: .github/workflows/scripts/qemu-9-summary-page.sh 11
|
|
- name: Generating summary...
|
|
run: .github/workflows/scripts/qemu-9-summary-page.sh 12
|
|
- name: Generating summary...
|
|
run: .github/workflows/scripts/qemu-9-summary-page.sh 13
|
|
- name: Generating summary...
|
|
run: .github/workflows/scripts/qemu-9-summary-page.sh 14
|
|
- name: Generating summary...
|
|
run: .github/workflows/scripts/qemu-9-summary-page.sh 15
|
|
- name: Generating summary...
|
|
run: .github/workflows/scripts/qemu-9-summary-page.sh 16
|
|
- name: Generating summary...
|
|
run: .github/workflows/scripts/qemu-9-summary-page.sh 17
|
|
- name: Generating summary...
|
|
run: .github/workflows/scripts/qemu-9-summary-page.sh 18
|
|
- name: Generating summary...
|
|
run: .github/workflows/scripts/qemu-9-summary-page.sh 19
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: Summary Files
|
|
path: out-*
|