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') }} 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 - minix3 - nbsd3 - nbsd4 - nbsd8 - nbsd9 - 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: 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: unmount stale workspace if: env.SSHFS == 'true' run: fusermount -u ${GITHUB_WORKSPACE} || true working-directory: ${{ runner.temp }} - 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: shutdown VM if: always() && env.VM == 'true' run: vmshutdown