Sometimes when a test times out the workspace is still busy when we try to unmount it, which leaves the runner unusable until it's cleaned up manually. We try to unmount this in the first step, but that usually doesn't work since it fails during setup before it starts our workflow. Move it to the end and make it a lazy unmount so it hopefully works eventually.
204 lines
7.8 KiB
YAML
204 lines
7.8 KiB
YAML
name: C/C++ CI self-hosted
|
|
|
|
on:
|
|
push:
|
|
paths: [ '**.c', '**.h', '**.m4', '**.sh', '**/Makefile.in', 'configure.ac', '.github/configs', '.github/workflows/selfhosted.yml' ]
|
|
|
|
jobs:
|
|
selfhosted:
|
|
name: "${{ matrix.target }} ${{ matrix.config }}"
|
|
if: github.repository == 'openssh/openssh-portable-selfhosted'
|
|
runs-on: ${{ matrix.host }}
|
|
timeout-minutes: 600
|
|
env:
|
|
DEBUG_ACTIONS: false
|
|
HOST: ${{ matrix.host }}
|
|
TARGET_HOST: ${{ matrix.target }}
|
|
TARGET_CONFIG: ${{ matrix.config }}
|
|
TARGET_DOMAIN: ${{ startsWith(matrix.host, 'libvirt') && format('{0}-{1}-{2}', matrix.target, matrix.config, github.run_id) || matrix.target }}
|
|
EPHEMERAL: ${{ startsWith(matrix.host, 'libvirt') }}
|
|
PERSISTENT: ${{ startsWith(matrix.host, 'persist') }}
|
|
REMOTE: ${{ startsWith(matrix.host, 'remote') }}
|
|
VM: ${{ startsWith(matrix.host, 'libvirt') || startsWith(matrix.host, 'persist') }}
|
|
SSHFS: ${{ startsWith(matrix.host, 'libvirt') || startsWith(matrix.host, 'persist') || startsWith(matrix.host, 'remote') }}
|
|
BIGENDIAN: ${{ matrix.target == 'aix51' || matrix.target == 'fbsd14-ppc64' || matrix.target == 'openwrt-mips' }}
|
|
strategy:
|
|
fail-fast: false
|
|
# We use a matrix in two parts: firstly all of the VMs are tested with the
|
|
# default config. "target" corresponds to a label associated with the
|
|
# worker. The default is an ephemeral VM running under libvirt.
|
|
matrix:
|
|
target:
|
|
- alpine
|
|
- centos7
|
|
- debian-i386
|
|
- dfly30
|
|
- dfly48
|
|
- dfly60
|
|
- dfly62
|
|
- dfly64
|
|
- fbsd10
|
|
- fbsd12
|
|
- fbsd13
|
|
- fbsd14
|
|
- nbsd3
|
|
- nbsd4
|
|
- nbsd8
|
|
- nbsd9
|
|
- nbsd10
|
|
- obsd51
|
|
- obsd67
|
|
- obsd72
|
|
- obsd73
|
|
- obsd74
|
|
- obsdsnap
|
|
- obsdsnap-i386
|
|
- omnios
|
|
- openindiana
|
|
- ubuntu-2204
|
|
config:
|
|
- default
|
|
host:
|
|
- libvirt
|
|
include:
|
|
# Long-running/slow tests have access to high priority runners.
|
|
- { target: aix51, config: default, host: libvirt-hipri }
|
|
- { target: fbsd14-ppc64, config: default, host: libvirt-hipri }
|
|
- { target: openindiana, config: pam, host: libvirt-hipri }
|
|
- { target: sol10, config: default, host: libvirt-hipri }
|
|
- { target: sol10, config: pam, host: libvirt-hipri }
|
|
- { target: sol11, config: default, host: libvirt-hipri }
|
|
- { target: sol11, config: pam-krb5, host: libvirt-hipri }
|
|
- { target: sol11, config: sol64, host: libvirt-hipri }
|
|
# Then we include extra libvirt test configs.
|
|
- { target: centos7, config: pam, host: libvirt }
|
|
- { target: debian-i386, config: pam, host: libvirt }
|
|
- { target: dfly30, config: without-openssl, host: libvirt}
|
|
- { target: dfly48, config: pam ,host: libvirt }
|
|
- { target: dfly58, config: pam, host: libvirt }
|
|
- { target: dfly60, config: pam, host: libvirt }
|
|
- { target: dfly62, config: pam, host: libvirt }
|
|
- { target: dfly64, config: pam, host: libvirt }
|
|
- { target: fbsd10, config: pam, host: libvirt }
|
|
- { target: fbsd12, config: pam, host: libvirt }
|
|
- { target: fbsd13, config: pam, host: libvirt }
|
|
- { target: fbsd14, config: pam, host: libvirt }
|
|
- { target: nbsd8, config: pam, host: libvirt }
|
|
- { target: nbsd9, config: pam, host: libvirt }
|
|
- { target: nbsd10, config: pam, host: libvirt }
|
|
- { target: omnios, config: pam, host: libvirt }
|
|
# ARM64 VMs
|
|
- { target: obsd-arm64, config: default, host: libvirt-arm64 }
|
|
# VMs with persistent disks that have their own runner.
|
|
- { target: win10, config: default, host: persist-win10 }
|
|
- { target: win10, config: cygwin-release, host: persist-win10 }
|
|
# Physical hosts with native runners.
|
|
- { target: ARM, config: default, host: ARM }
|
|
- { target: ARM64, config: default, host: ARM64 }
|
|
- { target: ARM64, config: pam, host: ARM64 }
|
|
# Physical hosts with remote runners.
|
|
- { target: debian-riscv64, config: default, host: remote-debian-riscv64 }
|
|
- { target: openwrt-mips, config: default, host: remote-openwrt-mips }
|
|
- { target: openwrt-mipsel, config: default, host: remote-openwrt-mipsel }
|
|
steps:
|
|
- name: shutdown VM if running
|
|
if: env.VM == 'true'
|
|
run: vmshutdown
|
|
- uses: actions/checkout@main
|
|
- name: autoreconf
|
|
run: autoreconf
|
|
- name: startup VM
|
|
if: env.VM == 'true'
|
|
run: vmstartup
|
|
working-directory: ${{ runner.temp }}
|
|
- name: copy and mount workspace
|
|
if: env.SSHFS == 'true'
|
|
run: sshfs_mount
|
|
working-directory: ${{ runner.temp }}
|
|
- name: configure
|
|
run: vmrun ./.github/configure.sh ${{ matrix.config }}
|
|
# - name: save config
|
|
# uses: actions/upload-artifact@main
|
|
# with:
|
|
# name: ${{ matrix.target }}-${{ matrix.config }}-config
|
|
# path: config.h
|
|
- name: make clean
|
|
run: vmrun make clean
|
|
- name: make
|
|
run: vmrun make
|
|
- name: make tests
|
|
run: vmrun ./.github/run_test.sh ${{ matrix.config }}
|
|
timeout-minutes: 600
|
|
- name: save logs
|
|
if: failure()
|
|
uses: actions/upload-artifact@main
|
|
with:
|
|
name: ${{ matrix.target }}-${{ matrix.config }}-logs
|
|
path: |
|
|
config.h
|
|
config.log
|
|
regress/*.log
|
|
regress/log/*
|
|
regress/valgrind-out/
|
|
- name: unmount workspace
|
|
if: always() && env.SSHFS == 'true'
|
|
run: fusermount -u ${GITHUB_WORKSPACE} || true
|
|
working-directory: ${{ runner.temp }}
|
|
|
|
- name: bigendian interop - mount regress
|
|
if: env.SSHFS == 'true' && env.BIGENDIAN == 'true'
|
|
run: |
|
|
set -x
|
|
vmrun sudo chown -R $LOGNAME ~/$(basename ${GITHUB_WORKSPACE}) || true
|
|
vmrun "cd $(basename ${GITHUB_WORKSPACE}/regress) && sudo make clean"
|
|
sshfs_mount regress
|
|
vmrun "sudo mkdir -p $(dirname ${GITHUB_WORKSPACE})"
|
|
vmrun "sudo ln -s ~/$(basename ${GITHUB_WORKSPACE}) ${GITHUB_WORKSPACE}"
|
|
working-directory: ${{ runner.temp }}
|
|
|
|
- name: bigendian interop - host build
|
|
if: env.SSHFS == 'true' && env.BIGENDIAN == 'true'
|
|
run: |
|
|
set -x
|
|
./.github/configure.sh ${{ matrix.config }}
|
|
pwd
|
|
ls -ld regress || true
|
|
ls -l regress/check-perm || true
|
|
make clean
|
|
make
|
|
|
|
- name: bigendian interop - test
|
|
if: env.SSHFS == 'true' && env.BIGENDIAN == 'true'
|
|
env:
|
|
TEST_SSH_UNSAFE_PERMISSIONS: 1
|
|
run: |
|
|
set -x
|
|
echo "#!/bin/sh" >remote_sshd
|
|
echo "exec /usr/bin/ssh ${TARGET_DOMAIN} exec /home/builder/$(basename ${GITHUB_WORKSPACE})/sshd "'$@' >>remote_sshd
|
|
chmod 755 remote_sshd
|
|
make t-exec TEST_SSH_SSHD=`pwd`/remote_sshd LTESTS="try-ciphers kextype keytype"
|
|
|
|
- name: bigendian interop - save logs
|
|
if: failure() && env.BIGENDIAN == 'true'
|
|
uses: actions/upload-artifact@main
|
|
with:
|
|
name: ${{ matrix.target }}-${{ matrix.config }}-interop-logs
|
|
path: |
|
|
config.h
|
|
config.log
|
|
regress/*.log
|
|
regress/log/*
|
|
|
|
- name: bigendian interop - unmount regress
|
|
if: always() && env.SSHFS == 'true' && env.BIGENDIAN == 'true'
|
|
run: fusermount -z -u ${GITHUB_WORKSPACE}/regress || true
|
|
working-directory: ${{ runner.temp }}
|
|
|
|
- name: lazily unmount workspace
|
|
if: always() && env.SSHFS == 'true'
|
|
run: fusermount -z -u ${GITHUB_WORKSPACE} || true
|
|
working-directory: ${{ runner.temp }}
|
|
- name: shutdown VM
|
|
if: always() && env.VM == 'true'
|
|
run: vmshutdown
|