1name: C/C++ CI self-hosted 2 3on: 4 push: 5 paths: [ '**.c', '**.h', '**.m4', '**.sh', '.github/**', '**/Makefile.in', 'configure.ac' ] 6 7jobs: 8 selfhosted: 9 if: github.repository == 'openssh/openssh-portable-selfhosted' 10 runs-on: ${{ matrix.host }} 11 timeout-minutes: 600 12 env: 13 HOST: ${{ matrix.host }} 14 TARGET_HOST: ${{ matrix.target }} 15 TARGET_CONFIG: ${{ matrix.config }} 16 strategy: 17 fail-fast: false 18 # We use a matrix in two parts: firstly all of the VMs are tested with the 19 # default config. "target" corresponds to a label associated with the 20 # worker. The default is an ephemeral VM running under libvirt. 21 matrix: 22 target: 23 - alpine 24 - centos7 25 - debian-i386 26 - dfly30 27 - dfly48 28 - dfly60 29 - dfly62 30 - dfly64 31 - fbsd10 32 - fbsd12 33 - fbsd13 34 - fbsd14 35 - minix3 36 - nbsd3 37 - nbsd4 38 - nbsd8 39 - nbsd9 40 - obsd51 41 - obsd67 42 - obsd72 43 - obsd73 44 - obsd74 45 - obsdsnap 46 - obsdsnap-i386 47 - openindiana 48 - ubuntu-2204 49 config: 50 - default 51 host: 52 - libvirt 53 include: 54 # Long-running/slow tests have access to high priority runners. 55 - { target: aix51, config: default, host: libvirt-hipri } 56 - { target: openindiana, config: pam, host: libvirt-hipri } 57 - { target: sol10, config: default, host: libvirt-hipri } 58 - { target: sol10, config: pam, host: libvirt-hipri } 59 - { target: sol11, config: default, host: libvirt-hipri } 60 - { target: sol11, config: pam-krb5, host: libvirt-hipri } 61 - { target: sol11, config: sol64, host: libvirt-hipri } 62 # Then we include extra libvirt test configs. 63 - { target: centos7, config: pam, host: libvirt } 64 - { target: debian-i386, config: pam, host: libvirt } 65 - { target: dfly30, config: without-openssl, host: libvirt} 66 - { target: dfly48, config: pam ,host: libvirt } 67 - { target: dfly58, config: pam, host: libvirt } 68 - { target: dfly60, config: pam, host: libvirt } 69 - { target: dfly62, config: pam, host: libvirt } 70 - { target: fbsd10, config: pam, host: libvirt } 71 - { target: fbsd12, config: pam, host: libvirt } 72 - { target: fbsd13, config: pam, host: libvirt } 73 - { target: fbsd14, config: pam, host: libvirt } 74 - { target: nbsd8, config: pam, host: libvirt } 75 - { target: nbsd9, config: pam, host: libvirt } 76 # VMs with persistent disks that have their own runner. 77 - { target: win10, config: default, host: win10 } 78 - { target: win10, config: cygwin-release, host: win10 } 79 # Physical hosts, with either native runners or remote via ssh. 80 - { target: ARM, config: default, host: ARM } 81 - { target: ARM64, config: default, host: ARM64 } 82 - { target: ARM64, config: pam, host: ARM64 } 83 - { target: debian-riscv64, config: default, host: debian-riscv64 } 84 - { target: obsd-arm64, config: default, host: obsd-arm64 } 85 - { target: openwrt-mips, config: default, host: openwrt-mips } 86 - { target: openwrt-mipsel, config: default, host: openwrt-mipsel } 87 steps: 88 - name: shutdown VM if running 89 run: vmshutdown 90 working-directory: ${{ runner.temp }} 91 - uses: actions/checkout@main 92 - name: autoreconf 93 run: autoreconf 94 - name: startup VM 95 run: vmstartup 96 working-directory: ${{ runner.temp }} 97 - name: configure 98 run: vmrun ./.github/configure.sh ${{ matrix.config }} 99 - name: save config 100 uses: actions/upload-artifact@main 101 with: 102 name: ${{ matrix.target }}-${{ matrix.config }}-config 103 path: config.h 104 - name: make clean 105 run: vmrun make clean 106 - name: make 107 run: vmrun make 108 - name: make tests 109 run: vmrun ./.github/run_test.sh ${{ matrix.config }} 110 timeout-minutes: 600 111 - name: save logs 112 if: failure() 113 uses: actions/upload-artifact@main 114 with: 115 name: ${{ matrix.target }}-${{ matrix.config }}-logs 116 path: | 117 config.h 118 config.log 119 regress/*.log 120 regress/log/* 121 regress/valgrind-out/ 122 - name: shutdown VM 123 if: always() 124 run: vmshutdown 125 working-directory: ${{ runner.temp }} 126