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