Refactor Makefile #5634
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: test | |
on: | |
push: | |
branches: | |
- master | |
- 'release/**' | |
paths-ignore: | |
- "docs/**" | |
- "website/**" | |
- "**.md" | |
pull_request: | |
paths-ignore: | |
- "docs/**" | |
- "website/**" | |
- "**.md" | |
env: | |
LIMACTL_CREATE_ARGS: "" | |
jobs: | |
lints: | |
name: "Lints" | |
runs-on: ubuntu-24.04 | |
timeout-minutes: 30 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: 1.23.x | |
- name: Install protoc | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y protobuf-compiler | |
- name: Verify generated files | |
run: make install-tools generate check-generated | |
- name: Run golangci-lint | |
uses: golangci/golangci-lint-action@v6.1.0 | |
with: | |
version: v1.60.1 | |
args: --verbose --timeout=10m | |
- name: Run yamllint | |
run: yamllint . | |
- name: Install shellcheck | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y shellcheck | |
- name: Run file and directory name linter | |
uses: ls-lint/action@v2.2.3 | |
- name: Run shellcheck | |
run: find . -name '*.sh' | xargs shellcheck | |
- name: Install shfmt | |
run: go install mvdan.cc/sh/v3/cmd/shfmt@v3.4.3 | |
- name: Run shfmt | |
run: find . -name '*.sh' | xargs shfmt -s -d | |
- name: Check hyperlinks | |
uses: docker://dkhamsing/awesome_bot:latest | |
with: | |
args: /github/workspace/README.md --allow-dupe --allow-redirect --request-delay 1 --white-list https://img.shields.io,http://127.0.0.1:8080,https://github.com/lima-vm/lima/releases/download,https://xbarapp.com,https://api.github.com | |
- name: Install go-licenses | |
run: go install github.com/google/go-licenses@v1.6.0 | |
- name: Check licenses | |
# the allow list corresponds to https://github.com/cncf/foundation/blob/e5db022a0009f4db52b89d9875640cf3137153fe/allowed-third-party-license-policy.md | |
run: go-licenses check --include_tests ./... --allowed_licenses=Apache-2.0,BSD-2-Clause,BSD-2-Clause-FreeBSD,BSD-3-Clause,MIT,ISC,Python-2.0,PostgreSQL,X11,Zlib | |
unit: | |
name: "Unit tests" | |
runs-on: ubuntu-24.04 | |
timeout-minutes: 30 | |
strategy: | |
fail-fast: false | |
matrix: | |
# For non-Homebrew we have to support an old release of Go | |
go-version: ["1.22.x", "1.23.x"] | |
steps: | |
- name: Install test dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y --no-install-recommends qemu-utils | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: ${{ matrix.go-version }} | |
- name: Unit tests | |
run: go test -v ./... | |
- name: Make | |
run: make | |
- name: Install | |
run: sudo make install | |
- name: Verify templates match `limactl edit` format | |
run: | | |
find examples -name '*.yaml' -exec limactl edit --set 'del(.nothing)' {} \; | |
git diff-index --exit-code HEAD | |
- name: Uninstall | |
run: sudo make uninstall | |
windows: | |
name: "Windows tests" | |
runs-on: windows-2022-8-cores | |
timeout-minutes: 30 | |
steps: | |
- name: Enable WSL2 | |
run: | | |
wsl --set-default-version 2 | |
# Manually install the latest kernel from MSI | |
Invoke-WebRequest -Uri "https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi" -OutFile "wsl_update_x64.msi" | |
$pwd = (pwd).Path | |
Start-Process msiexec.exe -Wait -ArgumentList "/I $pwd\wsl_update_x64.msi /quiet" | |
wsl --update | |
wsl --status | |
wsl --list --online | |
- name: Install WSL2 distro | |
timeout-minutes: 1 | |
run: | | |
# FIXME: At least one distro has to be installed here, | |
# otherwise `wsl --list --verbose` (called from Lima) fails: | |
# https://github.com/lima-vm/lima/pull/1826#issuecomment-1729993334 | |
# The distro image itself is not consumed by Lima. | |
# ------------------------------------------------------------------ | |
wsl --import dummy $env:TEMP nul | |
wsl --list --verbose | |
- name: Set gitconfig | |
run: | | |
git config --global core.autocrlf false | |
git config --global core.eol lf | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: 1.23.x | |
- name: Unit tests | |
run: go test -v ./... | |
- name: Make | |
run: make | |
- name: Smoke test | |
# Make sure the path is set properly and then run limactl | |
run: | | |
$env:Path = 'C:\Program Files\Git\usr\bin;' + $env:Path | |
Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH -Value $env:Path | |
.\_output\bin\limactl.exe start template://experimental/wsl2 | |
# TODO: run the full integration tests | |
- name: Debug | |
if: always() | |
run: type C:\Users\runneradmin\.lima\wsl2\ha.stdout.log | |
- name: Debug | |
if: always() | |
run: type C:\Users\runneradmin\.lima\wsl2\ha.stderr.log | |
integration: | |
name: Integration tests | |
# on macOS 12, the default vmType is QEMU | |
runs-on: macos-12 | |
timeout-minutes: 120 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: 1.23.x | |
- name: Unit tests | |
run: go test -v ./... | |
- name: Make | |
run: make | |
- name: Install | |
run: make install | |
- name: Validate templates | |
run: find -L templates -name '*.yaml' | xargs limactl validate | |
- name: Install test dependencies | |
# QEMU: required by Lima itself | |
# bash: required by test-templates.sh (OS version of bash is too old) | |
# coreutils: required by test-templates.sh for the "timeout" command | |
# curl: required by test-templates.sh to download nerdctl for alpine | |
# jq: required by test-templates.sh to determine download URL for nerdctl | |
run: | | |
set -x | |
# GitHub runners seem to have lima installed by brew already; we don't want/need it | |
time brew uninstall --ignore-dependencies lima colima | |
time brew install qemu bash coreutils curl jq | |
- name: "Inject `no_timer_check` to kernel cmdline" | |
# workaround to https://github.com/lima-vm/lima/issues/84 | |
run: ./hack/inject-cmdline-to-template.sh templates/default.yaml no_timer_check | |
- name: Cache image used by default.yaml | |
uses: ./.github/actions/setup_cache_for_template | |
with: | |
template: templates/default.yaml | |
- name: "Show cache" | |
run: ./hack/debug-cache.sh | |
- name: "Test default.yaml" | |
uses: nick-invision/retry@v3 | |
with: | |
timeout_minutes: 30 | |
retry_on: error | |
max_attempts: 3 | |
command: ./hack/test-templates.sh templates/default.yaml | |
# GHA macOS is slow and flaky, so we only test default.yaml here. | |
# Other yamls are tested on Linux instances. | |
# | |
- if: always() | |
uses: ./.github/actions/upload_failure_logs_if_exists | |
- name: "Show cache" | |
if: always() | |
run: ./hack/debug-cache.sh | |
# Non-default templates are tested on Linux instances of GHA, | |
# as they seem more stable than macOS instances. | |
integration-linux: | |
name: Integration tests (on Linux) | |
runs-on: ubuntu-24.04 | |
timeout-minutes: 120 | |
strategy: | |
fail-fast: false | |
matrix: | |
template: | |
- alpine.yaml | |
- debian.yaml | |
- fedora.yaml | |
- archlinux.yaml | |
- opensuse.yaml | |
- experimental/net-user-v2.yaml | |
- experimental/9p.yaml | |
- docker.yaml | |
- ../hack/test-templates/alpine-9p-writable.yaml | |
- ../hack/test-templates/test-misc.yaml | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: 1.23.x | |
- name: Make | |
run: make | |
- name: Install | |
run: sudo make install | |
- name: Cache image used by templates/${{ matrix.template }} | |
uses: ./.github/actions/setup_cache_for_template | |
with: | |
template: templates/${{ matrix.template }} | |
- name: Install test dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y --no-install-recommends ovmf qemu-system-x86 qemu-utils | |
sudo modprobe kvm | |
# `sudo usermod -aG kvm $(whoami)` does not take an effect on GHA | |
sudo chown $(whoami) /dev/kvm | |
- name: Install ansible-playbook | |
run: | | |
sudo apt-get install -y --no-install-recommends ansible | |
if: matrix.template == '../hack/test-templates/test-misc.yaml' | |
- name: "Show cache" | |
run: ./hack/debug-cache.sh | |
- name: "Test" | |
uses: nick-invision/retry@v3 | |
with: | |
timeout_minutes: 30 | |
retry_on: error | |
max_attempts: 3 | |
command: ./hack/test-templates.sh templates/${{ matrix.template }} | |
- if: always() | |
uses: ./.github/actions/upload_failure_logs_if_exists | |
with: | |
suffix: ${{ matrix.template }} | |
- name: "Show cache" | |
run: ./hack/debug-cache.sh | |
colima: | |
name: Colima | |
runs-on: ubuntu-24.04 | |
timeout-minutes: 120 | |
strategy: | |
matrix: | |
colima-version: ["v0.6.5"] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
# fetch-depth is set to 0 to let `limactl --version` print semver-ish version | |
fetch-depth: 0 | |
ref: ${{ github.event.pull_request.head.sha }} | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: 1.23.x | |
- uses: actions/cache@v4 | |
with: | |
path: ~/.cache/lima/download | |
key: ${{ runner.os }}-colima-${{ matrix.colima-version }} | |
- name: Make | |
run: make | |
- name: Install | |
run: sudo make install | |
- name: Install colima | |
run: | | |
git clone https://github.com/abiosoft/colima | |
cd colima | |
git checkout ${{ matrix.colima-version }} | |
make | |
sudo make install | |
- name: Install test dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y --no-install-recommends ovmf qemu-system-x86 qemu-utils | |
sudo modprobe kvm | |
# `sudo usermod -aG kvm $(whoami)` does not take an effect on GHA | |
sudo chown $(whoami) /dev/kvm | |
- name: "Show cache" | |
run: ./hack/debug-cache.sh | |
- name: "Test" | |
uses: nick-invision/retry@v3 | |
with: | |
timeout_minutes: 30 | |
retry_on: error | |
max_attempts: 3 | |
command: ./hack/test-colima.sh | |
- name: "Show cache" | |
run: ./hack/debug-cache.sh | |
vmnet: | |
name: "VMNet test" | |
runs-on: macos-12 | |
timeout-minutes: 120 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: 1.23.x | |
- name: Make | |
run: make | |
- name: Install | |
run: make install | |
- name: "Inject `no_timer_check` to kernel cmdline" | |
# workaround to https://github.com/lima-vm/lima/issues/84 | |
run: ./hack/inject-cmdline-to-template.sh templates/vmnet.yaml no_timer_check | |
- name: Cache image used by vmnet.yaml | |
uses: ./.github/actions/setup_cache_for_template | |
with: | |
template: templates/vmnet.yaml | |
- name: Install test dependencies | |
run: brew install qemu bash coreutils iperf3 | |
- name: Install socket_vmnet | |
env: | |
SOCKET_VMNET_VERSION: v1.1.1 | |
run: | | |
( | |
cd ~ | |
git clone https://github.com/lima-vm/socket_vmnet | |
cd socket_vmnet | |
git checkout $SOCKET_VMNET_VERSION | |
sudo git config --global --add safe.directory /Users/runner/socket_vmnet | |
sudo make PREFIX=/opt/socket_vmnet install | |
) | |
limactl sudoers | sudo tee /etc/sudoers.d/lima | |
- name: Unit test (pkg/networks) with socket_vmnet | |
# Set -count=1 to disable cache | |
run: go test -v -count=1 ./pkg/networks/... | |
- name: Test socket_vmnet | |
uses: nick-invision/retry@v3 | |
with: | |
timeout_minutes: 30 | |
retry_on: error | |
max_attempts: 3 | |
command: ./hack/test-templates.sh templates/vmnet.yaml | |
- if: always() | |
uses: ./.github/actions/upload_failure_logs_if_exists | |
upgrade: | |
name: "Upgrade test" | |
runs-on: macos-12 | |
timeout-minutes: 120 | |
strategy: | |
matrix: | |
oldver: ["v0.15.1"] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: 1.23.x | |
- name: Cache image used by ${{ matrix.oldver }}/examples/ubuntu-lts.yaml | |
uses: ./.github/actions/setup_cache_for_template | |
with: | |
template: https://raw.githubusercontent.com/lima-vm/lima/${{ matrix.oldver }}/examples/ubuntu-lts.yaml | |
- name: Install test dependencies | |
run: brew install qemu bash coreutils | |
- name: Test | |
uses: nick-invision/retry@v3 | |
with: | |
timeout_minutes: 30 | |
retry_on: error | |
max_attempts: 3 | |
command: ./hack/test-upgrade.sh ${{ matrix.oldver }} ${{ github.sha }} | |
- if: always() | |
uses: ./.github/actions/upload_failure_logs_if_exists | |
vz: | |
name: "vz" | |
# on macOS 13, the default vmType is VZ | |
runs-on: macos-13 | |
timeout-minutes: 120 | |
strategy: | |
fail-fast: false | |
matrix: | |
template: | |
- default.yaml | |
- fedora.yaml | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: 1.23.x | |
- name: Make | |
run: make | |
- name: Install | |
run: make install | |
- name: Cache image used by templates/${{ matrix.template }} | |
uses: ./.github/actions/setup_cache_for_template | |
with: | |
template: templates/${{ matrix.template }} | |
- name: Install test dependencies | |
run: brew install bash coreutils jq | |
- name: Uninstall qemu | |
run: brew uninstall --ignore-dependencies --force qemu | |
- name: Test | |
run: ./hack/test-templates.sh templates/${{ matrix.template }} | |
- if: failure() | |
uses: ./.github/actions/upload_failure_logs_if_exists | |
with: | |
suffix: ${{ matrix.template }} |