Add self-hosted runners for VMs of other platforms.
Github only hosts a limited number of platforms, and the runner code
is only supported on slightly wider range of platforms. To increase
our test coverage beyond that, we run the runner natively on a VM host,
where it runs a jobs that boot VMs of other platforms, waits for them
to come up then runs the build and test by ssh'ing into the guest.
This means that the minimum dependencies for the guests are quite low
(basically just sshd, a compiler and make).
The interface to the VM host is fairly simple (basically 3 scripts:
vmstartup, vmrun and vmshutdown), but those are specific to the VM host
so are not in the public repo. We also mount the working directory on the
host via sshfs, so things like artifact upload by the runner also work.
As part of this we are moving the per-test-target configs into a single
place (.github/configs) where there will be referenced by a single short
"config" key. I plan to make the github-hosted runners use this too.
The self-hosted runners are run off a private repo on github since that
prevents third parties from accessing them[0], and since runner quota is
limited on private repos, we avoid running the tests we run on the public
repo.
[0] https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories
2021-01-15 03:11:43 +00:00
|
|
|
name: C/C++ CI self-hosted
|
|
|
|
|
|
|
|
on:
|
|
|
|
push:
|
2022-11-03 12:07:50 +00:00
|
|
|
paths: [ '**.c', '**.h', '**.m4', '**.sh', '.github/**', '**/Makefile.in', 'configure.ac' ]
|
Add self-hosted runners for VMs of other platforms.
Github only hosts a limited number of platforms, and the runner code
is only supported on slightly wider range of platforms. To increase
our test coverage beyond that, we run the runner natively on a VM host,
where it runs a jobs that boot VMs of other platforms, waits for them
to come up then runs the build and test by ssh'ing into the guest.
This means that the minimum dependencies for the guests are quite low
(basically just sshd, a compiler and make).
The interface to the VM host is fairly simple (basically 3 scripts:
vmstartup, vmrun and vmshutdown), but those are specific to the VM host
so are not in the public repo. We also mount the working directory on the
host via sshfs, so things like artifact upload by the runner also work.
As part of this we are moving the per-test-target configs into a single
place (.github/configs) where there will be referenced by a single short
"config" key. I plan to make the github-hosted runners use this too.
The self-hosted runners are run off a private repo on github since that
prevents third parties from accessing them[0], and since runner quota is
limited on private repos, we avoid running the tests we run on the public
repo.
[0] https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories
2021-01-15 03:11:43 +00:00
|
|
|
|
|
|
|
jobs:
|
|
|
|
selfhosted:
|
2021-02-17 07:27:36 +00:00
|
|
|
if: github.repository == 'openssh/openssh-portable-selfhosted'
|
2022-11-27 04:26:22 +00:00
|
|
|
runs-on: ${{ matrix.host }}
|
2022-11-03 02:41:16 +00:00
|
|
|
timeout-minutes: 600
|
Add self-hosted runners for VMs of other platforms.
Github only hosts a limited number of platforms, and the runner code
is only supported on slightly wider range of platforms. To increase
our test coverage beyond that, we run the runner natively on a VM host,
where it runs a jobs that boot VMs of other platforms, waits for them
to come up then runs the build and test by ssh'ing into the guest.
This means that the minimum dependencies for the guests are quite low
(basically just sshd, a compiler and make).
The interface to the VM host is fairly simple (basically 3 scripts:
vmstartup, vmrun and vmshutdown), but those are specific to the VM host
so are not in the public repo. We also mount the working directory on the
host via sshfs, so things like artifact upload by the runner also work.
As part of this we are moving the per-test-target configs into a single
place (.github/configs) where there will be referenced by a single short
"config" key. I plan to make the github-hosted runners use this too.
The self-hosted runners are run off a private repo on github since that
prevents third parties from accessing them[0], and since runner quota is
limited on private repos, we avoid running the tests we run on the public
repo.
[0] https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories
2021-01-15 03:11:43 +00:00
|
|
|
env:
|
2022-11-27 04:26:22 +00:00
|
|
|
HOST: ${{ matrix.host }}
|
2022-11-26 22:28:20 +00:00
|
|
|
TARGET_HOST: ${{ matrix.target }}
|
2022-11-27 01:14:00 +00:00
|
|
|
TARGET_CONFIG: ${{ matrix.config }}
|
Add self-hosted runners for VMs of other platforms.
Github only hosts a limited number of platforms, and the runner code
is only supported on slightly wider range of platforms. To increase
our test coverage beyond that, we run the runner natively on a VM host,
where it runs a jobs that boot VMs of other platforms, waits for them
to come up then runs the build and test by ssh'ing into the guest.
This means that the minimum dependencies for the guests are quite low
(basically just sshd, a compiler and make).
The interface to the VM host is fairly simple (basically 3 scripts:
vmstartup, vmrun and vmshutdown), but those are specific to the VM host
so are not in the public repo. We also mount the working directory on the
host via sshfs, so things like artifact upload by the runner also work.
As part of this we are moving the per-test-target configs into a single
place (.github/configs) where there will be referenced by a single short
"config" key. I plan to make the github-hosted runners use this too.
The self-hosted runners are run off a private repo on github since that
prevents third parties from accessing them[0], and since runner quota is
limited on private repos, we avoid running the tests we run on the public
repo.
[0] https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories
2021-01-15 03:11:43 +00:00
|
|
|
strategy:
|
|
|
|
fail-fast: false
|
|
|
|
# We use a matrix in two parts: firstly all of the VMs are tested with the
|
2022-11-26 22:28:20 +00:00
|
|
|
# default config. "target" corresponds to a label associated with the
|
2022-11-27 04:26:22 +00:00
|
|
|
# worker. The default is an ephemeral VM running under libvirt.
|
Add self-hosted runners for VMs of other platforms.
Github only hosts a limited number of platforms, and the runner code
is only supported on slightly wider range of platforms. To increase
our test coverage beyond that, we run the runner natively on a VM host,
where it runs a jobs that boot VMs of other platforms, waits for them
to come up then runs the build and test by ssh'ing into the guest.
This means that the minimum dependencies for the guests are quite low
(basically just sshd, a compiler and make).
The interface to the VM host is fairly simple (basically 3 scripts:
vmstartup, vmrun and vmshutdown), but those are specific to the VM host
so are not in the public repo. We also mount the working directory on the
host via sshfs, so things like artifact upload by the runner also work.
As part of this we are moving the per-test-target configs into a single
place (.github/configs) where there will be referenced by a single short
"config" key. I plan to make the github-hosted runners use this too.
The self-hosted runners are run off a private repo on github since that
prevents third parties from accessing them[0], and since runner quota is
limited on private repos, we avoid running the tests we run on the public
repo.
[0] https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories
2021-01-15 03:11:43 +00:00
|
|
|
matrix:
|
2022-11-26 22:28:20 +00:00
|
|
|
target:
|
2022-02-22 02:08:59 +00:00
|
|
|
- alpine
|
2022-02-26 03:10:41 +00:00
|
|
|
- debian-i386
|
2021-04-16 08:14:25 +00:00
|
|
|
- dfly30
|
|
|
|
- dfly48
|
|
|
|
- dfly58
|
2021-06-02 01:17:54 +00:00
|
|
|
- dfly60
|
2022-11-11 00:25:37 +00:00
|
|
|
- dfly62
|
2021-04-26 03:35:44 +00:00
|
|
|
- fbsd10
|
2021-04-16 08:14:25 +00:00
|
|
|
- fbsd12
|
|
|
|
- fbsd13
|
2021-05-27 11:13:38 +00:00
|
|
|
- minix3
|
2021-04-25 03:01:34 +00:00
|
|
|
- nbsd3
|
|
|
|
- nbsd4
|
2021-04-20 13:31:29 +00:00
|
|
|
- nbsd8
|
2021-04-25 03:01:34 +00:00
|
|
|
- nbsd9
|
2021-04-16 23:55:47 +00:00
|
|
|
- obsd51
|
2021-04-23 04:41:13 +00:00
|
|
|
- obsd67
|
2021-05-01 10:07:47 +00:00
|
|
|
- obsd69
|
2021-12-25 05:42:51 +00:00
|
|
|
- obsd70
|
2022-12-13 09:48:56 +00:00
|
|
|
- obsdsnap
|
|
|
|
- obsdsnap-i386
|
2021-04-23 00:28:28 +00:00
|
|
|
- openindiana
|
2021-04-16 08:14:25 +00:00
|
|
|
- sol10
|
|
|
|
- sol11
|
2022-11-27 01:14:00 +00:00
|
|
|
config:
|
2022-11-26 22:28:20 +00:00
|
|
|
- default
|
2022-11-27 04:26:22 +00:00
|
|
|
host:
|
|
|
|
- libvirt
|
Add self-hosted runners for VMs of other platforms.
Github only hosts a limited number of platforms, and the runner code
is only supported on slightly wider range of platforms. To increase
our test coverage beyond that, we run the runner natively on a VM host,
where it runs a jobs that boot VMs of other platforms, waits for them
to come up then runs the build and test by ssh'ing into the guest.
This means that the minimum dependencies for the guests are quite low
(basically just sshd, a compiler and make).
The interface to the VM host is fairly simple (basically 3 scripts:
vmstartup, vmrun and vmshutdown), but those are specific to the VM host
so are not in the public repo. We also mount the working directory on the
host via sshfs, so things like artifact upload by the runner also work.
As part of this we are moving the per-test-target configs into a single
place (.github/configs) where there will be referenced by a single short
"config" key. I plan to make the github-hosted runners use this too.
The self-hosted runners are run off a private repo on github since that
prevents third parties from accessing them[0], and since runner quota is
limited on private repos, we avoid running the tests we run on the public
repo.
[0] https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories
2021-01-15 03:11:43 +00:00
|
|
|
include:
|
2022-11-27 04:26:22 +00:00
|
|
|
# Then we include extra libvirt test configs.
|
|
|
|
- { target: aix51, config: default, 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: fbsd10, config: pam, host: libvirt }
|
|
|
|
- { target: fbsd12, config: pam, host: libvirt }
|
|
|
|
- { target: fbsd13, config: pam, host: libvirt }
|
|
|
|
- { target: nbsd8, config: pam, host: libvirt }
|
|
|
|
- { target: nbsd9, config: pam, host: libvirt }
|
|
|
|
- { target: openindiana, config: pam, host: libvirt }
|
|
|
|
- { target: sol10, config: pam, host: libvirt }
|
|
|
|
- { target: sol11, config: pam-krb5, host: libvirt }
|
|
|
|
- { target: sol11, config: sol64, host: libvirt }
|
|
|
|
# VMs with persistent disks that have their own runner.
|
|
|
|
- { target: win10, config: default, host: win10 }
|
|
|
|
- { target: win10, config: cygwin-release, host: win10 }
|
|
|
|
# Physical hosts, with either native runners or remote via ssh.
|
|
|
|
- { target: ARM, config: default, host: ARM }
|
|
|
|
- { target: ARM64, config: default, host: ARM64 }
|
|
|
|
- { target: ARM64, config: pam, host: ARM64 }
|
|
|
|
- { target: debian-riscv64, config: default, host: debian-riscv64 }
|
|
|
|
- { target: openwrt-mips, config: default, host: openwrt-mips }
|
|
|
|
- { target: openwrt-mipsel, config: default, host: openwrt-mipsel }
|
Add self-hosted runners for VMs of other platforms.
Github only hosts a limited number of platforms, and the runner code
is only supported on slightly wider range of platforms. To increase
our test coverage beyond that, we run the runner natively on a VM host,
where it runs a jobs that boot VMs of other platforms, waits for them
to come up then runs the build and test by ssh'ing into the guest.
This means that the minimum dependencies for the guests are quite low
(basically just sshd, a compiler and make).
The interface to the VM host is fairly simple (basically 3 scripts:
vmstartup, vmrun and vmshutdown), but those are specific to the VM host
so are not in the public repo. We also mount the working directory on the
host via sshfs, so things like artifact upload by the runner also work.
As part of this we are moving the per-test-target configs into a single
place (.github/configs) where there will be referenced by a single short
"config" key. I plan to make the github-hosted runners use this too.
The self-hosted runners are run off a private repo on github since that
prevents third parties from accessing them[0], and since runner quota is
limited on private repos, we avoid running the tests we run on the public
repo.
[0] https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories
2021-01-15 03:11:43 +00:00
|
|
|
steps:
|
2022-07-15 11:31:48 +00:00
|
|
|
- name: shutdown VM if running
|
|
|
|
run: vmshutdown
|
2022-11-08 00:33:25 +00:00
|
|
|
working-directory: ${{ runner.temp }}
|
2022-11-07 22:21:10 +00:00
|
|
|
- uses: actions/checkout@main
|
Add self-hosted runners for VMs of other platforms.
Github only hosts a limited number of platforms, and the runner code
is only supported on slightly wider range of platforms. To increase
our test coverage beyond that, we run the runner natively on a VM host,
where it runs a jobs that boot VMs of other platforms, waits for them
to come up then runs the build and test by ssh'ing into the guest.
This means that the minimum dependencies for the guests are quite low
(basically just sshd, a compiler and make).
The interface to the VM host is fairly simple (basically 3 scripts:
vmstartup, vmrun and vmshutdown), but those are specific to the VM host
so are not in the public repo. We also mount the working directory on the
host via sshfs, so things like artifact upload by the runner also work.
As part of this we are moving the per-test-target configs into a single
place (.github/configs) where there will be referenced by a single short
"config" key. I plan to make the github-hosted runners use this too.
The self-hosted runners are run off a private repo on github since that
prevents third parties from accessing them[0], and since runner quota is
limited on private repos, we avoid running the tests we run on the public
repo.
[0] https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories
2021-01-15 03:11:43 +00:00
|
|
|
- name: autoreconf
|
|
|
|
run: autoreconf
|
|
|
|
- name: startup VM
|
|
|
|
run: vmstartup
|
2022-11-27 01:19:37 +00:00
|
|
|
working-directory: ${{ runner.temp }}
|
Add self-hosted runners for VMs of other platforms.
Github only hosts a limited number of platforms, and the runner code
is only supported on slightly wider range of platforms. To increase
our test coverage beyond that, we run the runner natively on a VM host,
where it runs a jobs that boot VMs of other platforms, waits for them
to come up then runs the build and test by ssh'ing into the guest.
This means that the minimum dependencies for the guests are quite low
(basically just sshd, a compiler and make).
The interface to the VM host is fairly simple (basically 3 scripts:
vmstartup, vmrun and vmshutdown), but those are specific to the VM host
so are not in the public repo. We also mount the working directory on the
host via sshfs, so things like artifact upload by the runner also work.
As part of this we are moving the per-test-target configs into a single
place (.github/configs) where there will be referenced by a single short
"config" key. I plan to make the github-hosted runners use this too.
The self-hosted runners are run off a private repo on github since that
prevents third parties from accessing them[0], and since runner quota is
limited on private repos, we avoid running the tests we run on the public
repo.
[0] https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories
2021-01-15 03:11:43 +00:00
|
|
|
- name: configure
|
2022-11-27 01:14:00 +00:00
|
|
|
run: vmrun ./.github/configure.sh ${{ matrix.config }}
|
2021-12-25 23:31:15 +00:00
|
|
|
- name: save config
|
2022-11-07 22:21:10 +00:00
|
|
|
uses: actions/upload-artifact@main
|
2021-12-25 23:31:15 +00:00
|
|
|
with:
|
2022-11-27 01:14:00 +00:00
|
|
|
name: ${{ matrix.target }}-${{ matrix.config }}-config
|
2021-12-25 23:31:15 +00:00
|
|
|
path: config.h
|
2021-09-29 03:28:56 +00:00
|
|
|
- name: make clean
|
|
|
|
run: vmrun make clean
|
Add self-hosted runners for VMs of other platforms.
Github only hosts a limited number of platforms, and the runner code
is only supported on slightly wider range of platforms. To increase
our test coverage beyond that, we run the runner natively on a VM host,
where it runs a jobs that boot VMs of other platforms, waits for them
to come up then runs the build and test by ssh'ing into the guest.
This means that the minimum dependencies for the guests are quite low
(basically just sshd, a compiler and make).
The interface to the VM host is fairly simple (basically 3 scripts:
vmstartup, vmrun and vmshutdown), but those are specific to the VM host
so are not in the public repo. We also mount the working directory on the
host via sshfs, so things like artifact upload by the runner also work.
As part of this we are moving the per-test-target configs into a single
place (.github/configs) where there will be referenced by a single short
"config" key. I plan to make the github-hosted runners use this too.
The self-hosted runners are run off a private repo on github since that
prevents third parties from accessing them[0], and since runner quota is
limited on private repos, we avoid running the tests we run on the public
repo.
[0] https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories
2021-01-15 03:11:43 +00:00
|
|
|
- name: make
|
|
|
|
run: vmrun make
|
|
|
|
- name: make tests
|
2022-11-27 01:14:00 +00:00
|
|
|
run: vmrun ./.github/run_test.sh ${{ matrix.config }}
|
2022-04-01 12:21:06 +00:00
|
|
|
timeout-minutes: 600
|
2021-04-03 05:59:10 +00:00
|
|
|
- name: save logs
|
Add self-hosted runners for VMs of other platforms.
Github only hosts a limited number of platforms, and the runner code
is only supported on slightly wider range of platforms. To increase
our test coverage beyond that, we run the runner natively on a VM host,
where it runs a jobs that boot VMs of other platforms, waits for them
to come up then runs the build and test by ssh'ing into the guest.
This means that the minimum dependencies for the guests are quite low
(basically just sshd, a compiler and make).
The interface to the VM host is fairly simple (basically 3 scripts:
vmstartup, vmrun and vmshutdown), but those are specific to the VM host
so are not in the public repo. We also mount the working directory on the
host via sshfs, so things like artifact upload by the runner also work.
As part of this we are moving the per-test-target configs into a single
place (.github/configs) where there will be referenced by a single short
"config" key. I plan to make the github-hosted runners use this too.
The self-hosted runners are run off a private repo on github since that
prevents third parties from accessing them[0], and since runner quota is
limited on private repos, we avoid running the tests we run on the public
repo.
[0] https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories
2021-01-15 03:11:43 +00:00
|
|
|
if: failure()
|
2022-11-07 22:21:10 +00:00
|
|
|
uses: actions/upload-artifact@main
|
Add self-hosted runners for VMs of other platforms.
Github only hosts a limited number of platforms, and the runner code
is only supported on slightly wider range of platforms. To increase
our test coverage beyond that, we run the runner natively on a VM host,
where it runs a jobs that boot VMs of other platforms, waits for them
to come up then runs the build and test by ssh'ing into the guest.
This means that the minimum dependencies for the guests are quite low
(basically just sshd, a compiler and make).
The interface to the VM host is fairly simple (basically 3 scripts:
vmstartup, vmrun and vmshutdown), but those are specific to the VM host
so are not in the public repo. We also mount the working directory on the
host via sshfs, so things like artifact upload by the runner also work.
As part of this we are moving the per-test-target configs into a single
place (.github/configs) where there will be referenced by a single short
"config" key. I plan to make the github-hosted runners use this too.
The self-hosted runners are run off a private repo on github since that
prevents third parties from accessing them[0], and since runner quota is
limited on private repos, we avoid running the tests we run on the public
repo.
[0] https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories
2021-01-15 03:11:43 +00:00
|
|
|
with:
|
2022-11-27 01:14:00 +00:00
|
|
|
name: ${{ matrix.target }}-${{ matrix.config }}-logs
|
2021-02-20 02:06:25 +00:00
|
|
|
path: |
|
2021-04-03 05:59:10 +00:00
|
|
|
config.h
|
|
|
|
config.log
|
2021-02-20 02:06:25 +00:00
|
|
|
regress/*.log
|
|
|
|
regress/valgrind-out/
|
Add self-hosted runners for VMs of other platforms.
Github only hosts a limited number of platforms, and the runner code
is only supported on slightly wider range of platforms. To increase
our test coverage beyond that, we run the runner natively on a VM host,
where it runs a jobs that boot VMs of other platforms, waits for them
to come up then runs the build and test by ssh'ing into the guest.
This means that the minimum dependencies for the guests are quite low
(basically just sshd, a compiler and make).
The interface to the VM host is fairly simple (basically 3 scripts:
vmstartup, vmrun and vmshutdown), but those are specific to the VM host
so are not in the public repo. We also mount the working directory on the
host via sshfs, so things like artifact upload by the runner also work.
As part of this we are moving the per-test-target configs into a single
place (.github/configs) where there will be referenced by a single short
"config" key. I plan to make the github-hosted runners use this too.
The self-hosted runners are run off a private repo on github since that
prevents third parties from accessing them[0], and since runner quota is
limited on private repos, we avoid running the tests we run on the public
repo.
[0] https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories
2021-01-15 03:11:43 +00:00
|
|
|
- name: shutdown VM
|
|
|
|
if: always()
|
|
|
|
run: vmshutdown
|
2022-11-08 00:33:25 +00:00
|
|
|
working-directory: ${{ runner.temp }}
|