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 - dfly58 29 - dfly60 30 - dfly62 31 - fbsd10 32 - fbsd12 33 - fbsd13 34 - minix3 35 - nbsd3 36 - nbsd4 37 - nbsd8 38 - nbsd9 39 - obsd51 40 - obsd67 41 - obsd69 42 - obsd70 43 - obsdsnap 44 - obsdsnap-i386 45 - openindiana 46 - sol10 47 - sol11 48 config: 49 - default 50 host: 51 - libvirt 52 include: 53 # Then we include extra libvirt test configs. 54 - { target: aix51, config: default, host: libvirt } 55 - { target: centos7, config: pam, host: libvirt } 56 - { target: debian-i386, config: pam, host: libvirt } 57 - { target: dfly30, config: without-openssl, host: libvirt} 58 - { target: dfly48, config: pam ,host: libvirt } 59 - { target: dfly58, config: pam, host: libvirt } 60 - { target: dfly60, config: pam, host: libvirt } 61 - { target: dfly62, config: pam, host: libvirt } 62 - { target: fbsd10, config: pam, host: libvirt } 63 - { target: fbsd12, config: pam, host: libvirt } 64 - { target: fbsd13, config: pam, host: libvirt } 65 - { target: nbsd8, config: pam, host: libvirt } 66 - { target: nbsd9, config: pam, host: libvirt } 67 - { target: openindiana, config: pam, host: libvirt } 68 - { target: sol10, config: pam, host: libvirt } 69 - { target: sol11, config: pam-krb5, host: libvirt } 70 - { target: sol11, config: sol64, host: libvirt } 71 # VMs with persistent disks that have their own runner. 72 - { target: win10, config: default, host: win10 } 73 - { target: win10, config: cygwin-release, host: win10 } 74 # Physical hosts, with either native runners or remote via ssh. 75 - { target: ARM, config: default, host: ARM } 76 - { target: ARM64, config: default, host: ARM64 } 77 - { target: ARM64, config: pam, host: ARM64 } 78 - { target: debian-riscv64, config: default, host: debian-riscv64 } 79 - { target: openwrt-mips, config: default, host: openwrt-mips } 80 - { target: openwrt-mipsel, config: default, host: openwrt-mipsel } 81 steps: 82 - name: shutdown VM if running 83 run: vmshutdown 84 working-directory: ${{ runner.temp }} 85 - uses: actions/checkout@main 86 - name: autoreconf 87 run: autoreconf 88 - name: startup VM 89 run: vmstartup 90 working-directory: ${{ runner.temp }} 91 - name: configure 92 run: vmrun ./.github/configure.sh ${{ matrix.config }} 93 - name: save config 94 uses: actions/upload-artifact@main 95 with: 96 name: ${{ matrix.target }}-${{ matrix.config }}-config 97 path: config.h 98 - name: make clean 99 run: vmrun make clean 100 - name: make 101 run: vmrun make 102 - name: make tests 103 run: vmrun ./.github/run_test.sh ${{ matrix.config }} 104 timeout-minutes: 600 105 - name: save logs 106 if: failure() 107 uses: actions/upload-artifact@main 108 with: 109 name: ${{ matrix.target }}-${{ matrix.config }}-logs 110 path: | 111 config.h 112 config.log 113 regress/*.log 114 regress/log/* 115 regress/valgrind-out/ 116 - name: shutdown VM 117 if: always() 118 run: vmshutdown 119 working-directory: ${{ runner.temp }} 120