Skip to content

1898 byoi

1898 byoi #4912

Workflow file for this run

name: Build and test images
on:
pull_request:
paths:
- '**'
push:
branches:
- master
paths:
- '**'
concurrency:
group: ci-image-${{ github.head_ref || github.ref }}-${{ github.repository }}
cancel-in-progress: true
env:
FORCE_COLOR: 1
jobs:
get-matrix:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- uses: actions/checkout@v4
- run: |
git fetch --prune --unshallow
sudo apt update && sudo apt install -y jq
- id: set-matrix
run: |
content=`cat .github/flavors.json | jq 'map(select(.frameworkonly != "true"))'`
# the following lines are only required for multi line json
# the following lines are only required for multi line json
content="${content//'%'/'%25'}"
content="${content//$'\n'/'%0A'}"
content="${content//$'\r'/'%0D'}"
# end of optional handling for multi line json
# end of optional handling for multi line json
echo "::set-output name=matrix::{\"include\": $content }"
get-framework-matrix:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- uses: actions/checkout@v4
- run: |
git fetch --prune --unshallow
- id: set-matrix
run: |
content=`cat .github/flavors.json`
# the following lines are only required for multi line json
# the following lines are only required for multi line json
content="${content//'%'/'%25'}"
content="${content//$'\n'/'%0A'}"
content="${content//$'\r'/'%0D'}"
# end of optional handling for multi line json
# end of optional handling for multi line json
echo "::set-output name=matrix::{\"include\": $content }"
core:
uses: ./.github/workflows/reusable-build-flavor.yaml
secrets: inherit
with:
flavor: ${{ matrix.flavor }}
flavor_release: ${{ matrix.flavor_release }}
family: ${{ matrix.family }}
base_image: ${{ matrix.base_image }}
model: ${{ matrix.model }}
variant: ${{ matrix.variant }}
needs:
- get-matrix
strategy:
fail-fast: false
matrix: ${{fromJson(needs.get-matrix.outputs.matrix)}}
framework:
uses: ./.github/workflows/reusable-build-framework-flavor.yaml
secrets: inherit
with:
flavor: ${{ matrix.flavor }}
needs:
- get-framework-matrix
strategy:
fail-fast: false
matrix: ${{fromJson(needs.get-framework-matrix.outputs.matrix)}}
install:
uses: ./.github/workflows/reusable-install-test.yaml
with:
flavor: ${{ matrix.flavor }}
flavor_release: ${{ matrix.flavor_release }}
needs:
- core
strategy:
fail-fast: true
matrix:
include:
- flavor: opensuse
flavor_release: leap-15.5
zfs:
uses: ./.github/workflows/reusable-zfs-test.yaml
with:
flavor: ${{ matrix.flavor }}
flavor_release: ${{ matrix.flavor_release }}
needs:
- core
strategy:
fail-fast: false
matrix:
include:
- flavor: "ubuntu"
flavor_release: "23.04"
acceptance:
uses: ./.github/workflows/reusable-qemu-acceptance-test.yaml
with:
flavor: ${{ matrix.flavor }}
flavor_release: ${{ matrix.flavor_release }}
needs:
- core
strategy:
fail-fast: false
matrix:
include:
- flavor: "alpine"
flavor_release: "3.18-opensuse-leap"
- flavor: "opensuse"
flavor_release: "leap-15.5"
- flavor: "opensuse"
flavor_release: "tumbleweed"
- flavor: "ubuntu"
flavor_release: "23.04"
- flavor: "debian"
flavor_release: "testing"
- flavor: "ubuntu"
flavor_release: "20.04"
- flavor: "ubuntu-22-lts"
flavor_release: "22.04"
bundles:
uses: ./.github/workflows/reusable-qemu-bundles-test.yaml
with:
flavor: ${{ matrix.flavor }}
flavor_release: ${{ matrix.flavor_release }}
needs:
- core
strategy:
fail-fast: false
matrix:
include:
- flavor: opensuse # Kubo test needs systemd version 252+ which atm is not available in Leap
flavor_release: opensuse
reset:
uses: ./.github/workflows/reusable-qemu-reset-test.yaml
with:
flavor: ${{ matrix.flavor }}
flavor_release: ${{ matrix.flavor_release }}
needs:
- core
strategy:
fail-fast: false
matrix:
include:
- flavor: alpine
flavor_release: 3.18-opensuse-leap
- flavor: opensuse
flavor_release: leap-15.5
netboot:
uses: ./.github/workflows/reusable-qemu-netboot-test.yaml

Check failure on line 164 in .github/workflows/image.yaml

View workflow run for this annotation

GitHub Actions / Build and test images

Invalid workflow file

The workflow is not valid. .github/workflows/image.yaml (Line: 164, Col: 11): Input family is required, but not provided while calling. .github/workflows/image.yaml (Line: 164, Col: 11): Input base_image is required, but not provided while calling.
with:
flavor: ${{ matrix.flavor }}
flavor_release: ${{ matrix.flavor_release }}
needs:
- core
strategy:
fail-fast: false
matrix:
include:
- flavor: alpine
flavor_release: 3.18-opensuse-leap
- flavor: opensuse
flavor_release: leap-15.5
- flavor: ubuntu
flavor_release: "23.04"
upgrade:
uses: ./.github/workflows/reusable-upgrade-with-cli-test.yaml
with:
flavor: ${{ matrix.flavor }}
flavor_release: ${{ matrix.flavor_release }}
needs:
- core
strategy:
fail-fast: false
matrix:
include:
- flavor: alpine
flavor_release: 3.18-opensuse-leap
- flavor: opensuse
flavor_release: leap-15.5
upgrade-latest:
uses: ./.github/workflows/reusable-upgrade-latest-test.yaml
with:
flavor: ${{ matrix.flavor }}
flavor_release: ${{ matrix.flavor_release }}
needs:
- core
strategy:
fail-fast: false
matrix:
include:
- flavor: alpine
flavor_release: 3.18-opensuse-leap
- flavor: opensuse
flavor_release: leap-15.5
encryption:
uses: ./.github/workflows/reusable-encryption-test.yaml
with:
flavor: ${{ matrix.flavor }}
flavor_release: ${{ matrix.flavor_release }}
label: ${{ matrix.label }}
needs:
- core
strategy:
fail-fast: true
matrix:
label:
- "local-encryption"
- "remote-auto"
- "remote-static"
- "remote-https-pinned"
- "remote-https-bad-cert"
flavor:
- "opensuse"
flavor_release:
- "leap-15.5"
standard:
uses: ./.github/workflows/reusable-build-provider.yaml
with:
flavor: ${{ matrix.flavor }}
flavor_release: ${{ matrix.flavor_release }}
family: ${{ matrix.family }}
base_image: ${{ matrix.base_image }}
variant: standard
model: generic
strategy:
fail-fast: false
matrix:
include:
- flavor: opensuse
flavor_release: leap-15.5
family: opensuse-leap
base_image: opensuse/leap:15.5
- flavor: alpine
flavor_release: 3.18-opensuse-leap
family: alpine
base_image: alpine:3.18
# TODO: Continue here
various:
uses: ./.github/workflows/reusable-provider-tests.yaml
with:
flavor: ${{ matrix.flavor }}
label: ${{ matrix.label }}
needs:
- standard
strategy:
fail-fast: false
max-parallel: 2
matrix:
label:
- "provider-qrcode-install"
- "provider-upgrade"
- "provider-decentralized-k8s"
- "provider-upgrade-k8s"
flavor:
- "opensuse-leap"
- "alpine-opensuse-leap"
exclude: # looks like only the k8s stuff is tested on both flavors
- label: "provider-qrcode-install"
flavor: "alpine-opensuse-leap"
- label: "provider-upgrade"
flavor: "alpine-opensuse-leap"
standard-upgrade-latest:
uses: ./.github/workflows/reusable-provider-upgrade-latest-test.yaml
with:
flavor: ${{ matrix.flavor }}
needs:
- standard
strategy:
fail-fast: false
max-parallel: 2
matrix:
flavor:
- "opensuse-leap"
- "alpine-opensuse-leap"
test-uki:
runs-on: kvm
steps:
- uses: actions/checkout@v4
- name: Install Go
uses: actions/setup-go@v4
with:
go-version-file: tests/go.mod
cache-dependency-path: tests/go.sum
- name: Enable KVM group perms
run: |
sudo apt-get update
sudo apt-get install -y libvirt-clients libvirt-daemon-system libvirt-daemon virtinst bridge-utils qemu qemu-system-x86 qemu-system-x86 qemu-utils qemu-kvm acl udev
# https://github.blog/changelog/2023-02-23-hardware-accelerated-android-virtualization-on-actions-windows-and-linux-larger-hosted-runners/
# echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
# sudo udevadm control --reload-rules
# sudo udevadm trigger --name-match=kvm
# sudo usermod -a -G kvm,libvirt $USER
#
# TODO: Switch back to the above solution when we switch to the github runners
# https://askubuntu.com/a/1081326
sudo setfacl -m u:runner:rwx /dev/kvm
- name: Install earthly
uses: Luet-lab/[email protected]
with:
repository: quay.io/kairos/packages
packages: utils/earthly
- name: Build uki disk 🔧
run: |
# Do fedora as its the smaller uki possible
earthly +prepare-uki-disk-image --FLAVOR=fedora
- name: Run tests
env:
USE_QEMU: true
KVM: true
MEMORY: 4000
CPUS: 2
FIRMWARE: /usr/share/OVMF/OVMF_CODE.fd
run: |
export UKI_DRIVE=${PWD}/build/disk.img
cp tests/go.* .
go run github.com/onsi/ginkgo/v2/ginkgo -v --label-filter "uki" --fail-fast -r ./tests/
notify:
runs-on: ubuntu-latest
if: failure()
needs:
- core
- standard
- framework
- install
- zfs
- acceptance
- bundles
- reset
- netboot
- upgrade
- upgrade-latest
- encryption
- various
- standard-upgrade-latest
- test-uki
steps:
- uses: actions/checkout@v4
- run: |
git fetch --prune --unshallow
- name: save commit-message
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} && failure()
run: echo "COMMIT_MSG=$(git log -1 --pretty=format:%s)" >> $GITHUB_ENV
- name: notify if failure
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} && failure()
uses: slackapi/[email protected]
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK
with:
payload: |
{
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "Job failure on master branch for job ${{ github.job }} in workflow \"${{ github.workflow }}\"\n\nCommit message is \"${{ env.COMMIT_MSG }}\"\n\n Commit sha is <https://github.com/${{ github.repository }}/commit/${{ github.sha }}|${{ github.sha }}>"
}
},
{
"type": "divider"
},
{
"type": "actions",
"elements": [
{
"type": "button",
"text": {
"type": "plain_text",
"text": ":thisisfine: Failed Run",
"emoji": true
},
"url": "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
},
{
"type": "button",
"text": {
"type": "plain_text",
"text": ":kairos: Repository link",
"emoji": true
},
"url": "https://github.com/${{ github.repository }}"
}
]
}
]
}