129 lines
4.5 KiB
YAML
129 lines
4.5 KiB
YAML
# Boot Smoke Test only tests Bare VM (start,stop,delete) and not any minikube/kubernetes functionality.
|
|
name: Boot Smoke Test
|
|
on:
|
|
push:
|
|
branches: [ master ]
|
|
pull_request:
|
|
workflow_dispatch:
|
|
env:
|
|
GOPROXY: https://proxy.golang.org
|
|
LOG_ARGS: --v=8 --alsologtostderr
|
|
permissions:
|
|
contents: read
|
|
jobs:
|
|
minikube-vm-boot:
|
|
name: Boot Smoke Test
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- driver: qemu
|
|
os: macos-13
|
|
network_flag: --network socket_vmnet
|
|
- driver: vfkit
|
|
os: macos-13
|
|
network_flag: --network vmnet-shared
|
|
- driver: docker
|
|
os: ubuntu-24.04
|
|
network_flag: ""
|
|
steps:
|
|
- name: Info Block (macos)
|
|
if: contains(matrix.os, 'macos')
|
|
shell: bash
|
|
run: |
|
|
uname -a
|
|
sysctl -n hw.memsize
|
|
echo "$(sysctl -n hw.memsize) / 1024 / 1024 / 1024" | bc
|
|
sysctl -n hw.ncpu
|
|
sysctl -n machdep.cpu.brand_string
|
|
sysctl hw.model
|
|
sysctl -n kern.hv_vmm_present
|
|
sysctl -n kern.hv_support
|
|
system_profiler SPHardwareDataType
|
|
sw_vers
|
|
ifconfig
|
|
- name: Info Block (linux)
|
|
if: contains(matrix.os, 'ubuntu')
|
|
shell: bash
|
|
run: |
|
|
uname -a
|
|
grep MemTotal /proc/meminfo
|
|
awk '/MemTotal/ {printf "%.2f\n", $2 / 1024 / 1024}' /proc/meminfo
|
|
nproc
|
|
grep 'model name' /proc/cpuinfo | head -n1
|
|
# System model (requires `dmidecode`, may need sudo)
|
|
sudo dmidecode -s system-product-name
|
|
systemd-detect-virt
|
|
# Check if KVM is available (can show virtualization support)
|
|
egrep -c '(vmx|svm)' /proc/cpuinfo
|
|
# Detailed hardware info (like `system_profiler`)
|
|
sudo lshw -short
|
|
cat /etc/os-release
|
|
ip addr show
|
|
ifconfig
|
|
docker version
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
|
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5
|
|
with:
|
|
go-version-file: go.mod
|
|
cache: true
|
|
- name: Download Golang Dependencies
|
|
run: go mod download
|
|
- name: Build Binaries
|
|
run: make
|
|
- name: Ensure bootpd is enabled (macos)
|
|
if: matrix.os == 'macos-13'
|
|
shell: bash
|
|
run: |
|
|
set -x
|
|
fw=/usr/libexec/ApplicationFirewall/socketfilterfw
|
|
sudo $fw --remove /usr/libexec/bootpd
|
|
sudo $fw --add /usr/libexec/bootpd
|
|
sudo $fw --unblock /usr/libexec/bootpd
|
|
- name: Update brew (macos)
|
|
if: matrix.os == 'macos-13'
|
|
run: brew update
|
|
- name: Install tools (macos)
|
|
if: matrix.os == 'macos-13'
|
|
run: brew install tree
|
|
- name: Install vfkit and vmnet-helper (macos)
|
|
if: matrix.driver == 'vfkit'
|
|
run: |
|
|
brew install vfkit
|
|
machine="$(uname -m)"
|
|
archive="vmnet-helper-$machine.tar.gz"
|
|
curl -LOf "https://github.com/nirs/vmnet-helper/releases/latest/download/$archive"
|
|
sudo tar xvf "$archive" -C / opt/vmnet-helper
|
|
sudo install -m 0640 /opt/vmnet-helper/share/doc/vmnet-helper/sudoers.d/vmnet-helper /etc/sudoers.d/
|
|
- name: Install qemu and socket_vmnet (macos)
|
|
if: matrix.os == 'macos-13' && matrix.driver == 'qemu'
|
|
run: |
|
|
brew install qemu socket_vmnet
|
|
HOMEBREW=$(which brew) && sudo ${HOMEBREW} services start socket_vmnet
|
|
- name: Start minikube (1st boot)
|
|
run: |
|
|
./out/minikube start \
|
|
--no-kubernetes \
|
|
--memory 4gb \
|
|
--driver ${{ matrix.driver }} \
|
|
${{ matrix.network_flag }} \
|
|
${{ env.LOG_ARGS }}
|
|
- name: Inspect minikube
|
|
if: always()
|
|
run: |
|
|
tree -h ~/.minikube
|
|
machine="$HOME/.minikube/machines/minikube"
|
|
machine_logs=$(find "$machine" -name "*.log")
|
|
minikube_logs="$HOME/.minikube/logs/lastStart.txt"
|
|
for f in $machine_logs $minikube_logs /var/db/dhcpd_leases; do
|
|
echo "==> $f <=="
|
|
head -n 1000 "$f" || true
|
|
done
|
|
- name: Stop minikube
|
|
run: ./out/minikube stop ${{ env.LOG_ARGS }}
|
|
- name: Start minikube again (2nd boot)
|
|
run: ./out/minikube start ${{ env.LOG_ARGS }}
|
|
- name: Delete minikube
|
|
run: ./out/minikube delete ${{ env.LOG_ARGS }}
|