1name: OpenBSD 2 3on: 4 push: 5 branches: [ master ] 6 paths: [ '**.c', '**.h', '**.sh', '.github/workflows/upstream.yml' ] 7 8jobs: 9 selfhosted: 10 name: "upstream ${{ matrix.target }} ${{ matrix.config }}" 11 if: github.repository == 'openssh/openssh-portable-selfhosted' 12 runs-on: ${{ matrix.host }} 13 env: 14 EPHEMERAL: true 15 HOST: ${{ matrix.host }} 16 TARGET_HOST: ${{ matrix.target }} 17 TARGET_CONFIG: ${{ matrix.config }} 18 TARGET_DOMAIN: ${{ format('{0}-{1}-{2}', matrix.target, matrix.config, github.run_id) || matrix.target }} 19 strategy: 20 fail-fast: false 21 matrix: 22 host: 23 - libvirt 24 target: [ obsdsnap, obsdsnap-i386 ] 25 # TODO: restore 'ubsan' once fixed 26 config: [ default, kerberos5, without-openssl ] 27 include: 28 - { host: libvirt-arm64, target: obsdsnap-arm64, config: default } 29 - { host: libvirt-arm64, target: obsdsnap-arm64, config: kerberos5 } 30 - { host: libvirt-arm64, target: obsdsnap-arm64, config: without-openssl } 31 # - { host: libvirt-arm64, target: obsdsnap-arm64, config: ubsan } 32 steps: 33 - name: unmount stale workspace 34 run: fusermount -u ${GITHUB_WORKSPACE} || true 35 working-directory: ${{ runner.temp }} 36 - name: shutdown VM if running 37 run: vmshutdown 38 working-directory: ${{ runner.temp }} 39 - uses: actions/checkout@main 40 - name: startup VM 41 run: vmstartup 42 working-directory: ${{ runner.temp }} 43 - name: copy and mount workspace 44 run: sshfs_mount 45 working-directory: ${{ runner.temp }} 46 - name: update source 47 run: vmrun "cd /usr/src && if [ -d .git ]; then git pull && git log -n1; else cvs -q up -dPA usr.bin/ssh regress/usr.bin/ssh usr.bin/nc; fi" 48 - name: update netcat 49 run: vmrun "cd /usr/src/usr.bin/nc && make clean all && sudo make install" 50 - name: make clean 51 run: vmrun "cd /usr/src/usr.bin/ssh && make obj && make clean && cd /usr/src/regress/usr.bin/ssh && make obj && make clean && sudo chmod -R g-w /usr/src /usr/obj" 52 - name: make 53 run: vmrun "cd /usr/src/usr.bin/ssh && case ${{ matrix.config }} in without-openssl) make OPENSSL=no;; kerberos5) make KERBEROS5=yes;; ubsan) make DEBUG='-fsanitize-minimal-runtime -fsanitize=undefined';; *) make; esac" 54 - name: make install 55 run: vmrun "cd /usr/src/usr.bin/ssh && sudo make install && sudo /etc/rc.d/sshd -f restart" 56 - name: make tests` 57 run: vmrun "cd /usr/src/regress/usr.bin/ssh && case ${{ matrix.config }} in without-openssl) make OPENSSL=no;; ubsan) make DEBUG='-fsanitize-minimal-runtime -fsanitize=undefined';; *) make; esac" 58 env: 59 SUDO: sudo 60 timeout-minutes: 300 61 - name: show logs 62 if: failure() 63 run: vmrun 'for i in /usr/src/regress/usr.bin/ssh/obj/*.log; do echo ====; echo logfile $i; echo =====; cat $i; done' 64 - name: save logs 65 if: failure() 66 uses: actions/upload-artifact@main 67 with: 68 name: ${{ matrix.target }}-${{ matrix.config }}-logs 69 path: | 70 /usr/src/regress/usr.bin/ssh/obj/*.log 71 /usr/src/regress/usr.bin/ssh/obj/log/* 72 - name: unmount workspace 73 if: always() 74 run: | 75 fusermount -u ${GITHUB_WORKSPACE} || true 76 fusermount -z -u ${GITHUB_WORKSPACE} || true 77 working-directory: ${{ runner.temp }} 78 - name: shutdown VM 79 if: always() 80 run: vmshutdown 81 working-directory: ${{ runner.temp }} 82