diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6f6e1481d53f..682da178b023 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -234,6 +234,63 @@ jobs: name: test-reports-${{ env.TESTREPORTS_NAME }} path: ${{ env.TESTREPORTS_BASEDIR }} + test-bsd-unit: + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + os: + - freebsd + - netbsd + - openbsd + steps: + - + name: Prepare + run: | + echo "VAGRANT_FILE=hack/Vagrantfile.${{ matrix.os }}" >> $GITHUB_ENV + - + name: Checkout + uses: actions/checkout@v4 + - + name: Cache Vagrant boxes + uses: actions/cache@v4 + with: + path: ~/.vagrant.d/boxes + key: ${{ runner.os }}-vagrant-${{ matrix.os }}-${{ hashFiles(env.VAGRANT_FILE) }} + restore-keys: | + ${{ runner.os }}-vagrant-${{ matrix.os }}- + - + name: Install vagrant + run: | + set -x + sudo apt-get update + sudo apt-get install -y libvirt-daemon libvirt-daemon-system vagrant vagrant-libvirt ruby-libvirt + sudo systemctl enable --now libvirtd + sudo chmod a+rw /var/run/libvirt/libvirt-sock + vagrant plugin install vagrant-libvirt + vagrant --version + - + name: Set up vagrant + run: | + ln -sf ${{ env.VAGRANT_FILE }} Vagrantfile + vagrant up --no-tty + - + name: Test + run: | + vagrant ssh -- "cd /vagrant; SKIP_INTEGRATION_TESTS=1 go test -mod=vendor -coverprofile=coverage.txt -covermode=atomic ${{ env.TESTFLAGS }} ./..." + vagrant ssh -c "sudo cat /vagrant/coverage.txt" > coverage.txt + - + name: Upload coverage + if: always() + uses: codecov/codecov-action@v5 + with: + files: ./coverage.txt + env_vars: RUNNER_OS + flags: unit,${{ matrix.os }} + token: ${{ secrets.CODECOV_TOKEN }} + env: + RUNNER_OS: ${{ matrix.os }} + govulncheck: runs-on: ubuntu-24.04 permissions: diff --git a/hack/Vagrantfile.freebsd b/hack/Vagrantfile.freebsd new file mode 100644 index 000000000000..f86df6135c87 --- /dev/null +++ b/hack/Vagrantfile.freebsd @@ -0,0 +1,18 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +Vagrant.configure("2") do |config| + config.vm.box = "generic/freebsd14" + config.vm.boot_timeout = 900 + config.vm.synced_folder ".", "/vagrant", type: "rsync" + config.ssh.keep_alive = true + + config.vm.provision "init", type: "shell", run: "once" do |sh| + sh.inline = <<~SHELL + pkg bootstrap + pkg install -y go123 git + ln -s /usr/local/bin/go123 /usr/local/bin/go + go install gotest.tools/gotestsum@#{ENV['GOTESTSUM_VERSION']} + SHELL + end +end diff --git a/hack/Vagrantfile.netbsd b/hack/Vagrantfile.netbsd new file mode 100644 index 000000000000..9022a8f64781 --- /dev/null +++ b/hack/Vagrantfile.netbsd @@ -0,0 +1,23 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +Vagrant.configure("2") do |config| + config.vm.box = "generic/netbsd9" + config.vm.boot_timeout = 900 + config.vm.synced_folder ".", "/vagrant", type: "rsync" + config.ssh.keep_alive = true + + config.vm.provision "init", type: "shell", run: "once" do |sh| + sh.inline = <<~SHELL + # update CA certs + pkgin -y install mozilla-rootcerts + mozilla-rootcerts install + + pkgin -y install git + ftp https://go.dev/dl/go1.23.3.netbsd-amd64.tar.gz + tar -C /tmp -xzf go1.23.3.netbsd-amd64.tar.gz + ln -s /tmp/go/bin/go /usr/bin/go + go install gotest.tools/gotestsum@#{ENV['GOTESTSUM_VERSION']} + SHELL + end +end diff --git a/hack/Vagrantfile.openbsd b/hack/Vagrantfile.openbsd new file mode 100644 index 000000000000..a03567efb016 --- /dev/null +++ b/hack/Vagrantfile.openbsd @@ -0,0 +1,19 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +Vagrant.configure("2") do |config| + config.vm.box = "generic/openbsd7" + config.vm.boot_timeout = 900 + config.vm.synced_folder ".", "/vagrant", type: "rsync" + config.ssh.keep_alive = true + + config.vm.provision "init", type: "shell", run: "once" do |sh| + sh.inline = <<~SHELL + pkg_add git + ftp https://go.dev/dl/go1.23.3.openbsd-amd64.tar.gz + tar -C /usr/local -xzf go1.23.3.openbsd-amd64.tar.gz + ln -s /usr/local/go/bin/go /usr/local/bin/go + go install gotest.tools/gotestsum@#{ENV['GOTESTSUM_VERSION']} + SHELL + end +end