Skip to content

CI: Add build and check on other architectures #284

CI: Add build and check on other architectures

CI: Add build and check on other architectures #284

Workflow file for this run

name: CI
on:
push:
branches:
- master
- for-master
- github-ci
tags:
- v*
pull_request:
branches:
- master
- for-master
jobs:
check_commits_job:
name: "Check commits"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: "env"
run: env | sort
- name: "Developer's Certificate of Origin"
run: |
echo
echo 'Commits to check:'
git log --no-merges --pretty='%H%x09%s%x09%ce%x09-%(trailers:key=Signed-off-by,valueonly,separator=%x00)' origin/master.. |
tee /tmp/commits |
cut -f1,2
echo ''
if grep -e '-$' /tmp/commits | cut -f1,2 | grep -e '^' > /tmp/bad-commits; then
echo 'Сommits that fail verification:'
cat /tmp/bad-commits
echo ''
echo 'The DCO Signoff Check for all commits has FAILED.'
echo 'See https://github.com/legionus/kbd/blob/master/docs/process/howto-contribute.md#patches='
echo ''
exit 1
fi
distcheck_job:
name: "Distcheck"
runs-on: ubuntu-latest
needs: [ check_commits_job ]
steps:
- name: "Check out repository"
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: "Install dependencies"
run: |
sudo apt-get update -y -qq
sudo apt-get install -y -qq gcc autoconf automake autopoint libtool libpam0g-dev bison flex gettext
- name: "Configure"
run: |
tests/configure.sh --datadir="$PWD/data"
- name: "Build"
run: |
make V=1
- name: "Distcheck"
run: |
sudo -E make distcheck
build_job:
name: "Check with ${{ matrix.compiler }} / ${{ matrix.libc }} on x86_64"
strategy:
matrix:
include:
- os: ubuntu-latest
cc: gcc
compiler: gcc
libc: glibc
configure:
check: unittest e2e
- os: ubuntu-latest
cc: clang
compiler: clang
libc: glibc
configure:
check: unittest e2e
- os: ubuntu-latest
cc: musl-gcc -static -idirafter /usr/include/ -idirafter /usr/include/x86_64-linux-gnu/
compiler: gcc
libc: musl
configure: --disable-libkeymap --disable-vlock
check: unittest e2e
fail-fast: false
runs-on: ${{ matrix.os }}
needs: [ distcheck_job ]
env:
CC: ${{ matrix.cc }}
CHECK_KEYWORDS: ${{ matrix.check }}
SANDBOX: priviliged
TTY: /dev/tty60
steps:
- name: "Check out repository"
uses: actions/checkout@v4
with:
fetch-depth: 0
- run: sudo apt-get update -y -qq
- run: sudo apt-get install -y -qq autoconf automake autopoint libtool libtool-bin libpam0g-dev bison flex gettext kbd strace
- run: sudo apt-get install -y -qq gcc clang musl musl-dev musl-tools
- name: "Configure"
run: |
tests/configure.sh --datadir="$PWD/tests/data" ${{ matrix.configure }}
- name: "Build"
run: |
make V=1
- name: "Check"
run: |
sudo -E tests/check.sh
- name: "Upload artifacts"
if: failure()
uses: actions/upload-artifact@v4
with:
name: artifact-${{ matrix.compiler }}-${{ matrix.libc }}
path: |
config.log
tests/testsuite.dir
tests/testsuite.log
if-no-files-found: ignore
retention-days: 1
build_arch_job:
name: "Build on ${{ matrix.arch }}"
strategy:
matrix:
include:
- arch: x86_64
- arch: s390x
- arch: ppc64el
fail-fast: false
runs-on: ubuntu-latest
needs: [ check_commits_job, distcheck_job, build_job ]
env:
CI_ARCH: ${{ matrix.arch }}
CI_UBUNTU_VERSION: "24.10"
steps:
- name: "Check out repository"
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: "Prepare Node"
run: |
for m in kvm kvm-amd kvm-intel; do sudo modprobe -v "$m" ||:; done
test -c /dev/kvm && sudo chmod -v 666 /dev/kvm ||:
- name: "Install dependencies"
run: |
sudo apt-get update -y -qq
sudo apt-get install -y -qq qemu-system ssh cloud-image-utils
- name: "Prepare cloud image for VM"
run: tests/ci/create-cloud-image.sh
- name: "Start VM"
run: |
tests/ci/start-qemu-vm.sh "$PWD"
while ! tests/ci/vm-ssh.sh ubuntu@localhost /bin/true; do sleep 1; done
- name: "Install dependencies into VM"
run: tests/ci/vm-ssh.sh ubuntu@localhost /opt/tests/ci/qemu-install-dependencies.sh
- name: "Copy sources into VM"
run: |
tests/ci/vm-ssh.sh ubuntu@localhost mkdir /tmp/kbd
tests/ci/vm-scp.sh -r . ubuntu@localhost:/tmp/kbd/
- name: "Build project in the VM"
run: |
rc=0
tests/ci/vm-ssh.sh ubuntu@localhost /opt/tests/ci/qemu-run-build-and-tests.sh ${{ matrix.arch }} || rc=1
tests/ci/vm-scp.sh ubuntu@localhost:artifacts.tar /tmp/${{ matrix.arch }}/ ||:
exit $rc
- name: "Upload artifacts"
if: failure()
uses: actions/upload-artifact@v4
with:
name: build-on-${{ matrix.arch }}-artifacts
path: |
/tmp/${{ matrix.arch }}/qemu.log
/tmp/${{ matrix.arch }}/artifacts.tar
if-no-files-found: ignore
retention-days: 1