Skip to content

Merge pull request #2718 from nirs/convert-to-raw #7

Merge pull request #2718 from nirs/convert-to-raw

Merge pull request #2718 from nirs/convert-to-raw #7

Workflow file for this run

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:
# To avoid "failed to load YAML file \"templates/experimental/riscv64.yaml\": can't parse builtin Lima version \"3f3a6f6\": 3f3a6f6 is not in dotted-tri format"
fetch-depth: 0
- 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/[email protected]
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/[email protected]
- name: Run shellcheck
run: find . -name '*.sh' | xargs shellcheck
- name: Install shfmt
run: go install mvdan.cc/sh/v3/cmd/[email protected]
- 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/[email protected]
- 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:
# To avoid "failed to load YAML file \"templates/experimental/riscv64.yaml\": can't parse builtin Lima version \"3f3a6f6\": 3f3a6f6 is not in dotted-tri format"
fetch-depth: 0
- 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-fields/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
# cloud-init 24.3.1-1 package has a regression: https://github.com/lima-vm/lima/issues/2714
# - archlinux.yaml
- opensuse.yaml
- experimental/net-user-v2.yaml
- experimental/9p.yaml
- docker.yaml
- ../hack/test-templates/alpine-iso-9p-writable.yaml # Covers alpine-iso.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: "Adjust LIMACTL_CREATE_ARGS"
# Change the mount type from 9p to reverse-sshfs, as a workaround for:
#
# > level=fatal msg="failed to get unprivileged mount flags for \"/home/runner/lima-container-engine-test-tmp/random\": stat /home/runner/lima-container-engine-test-tmp/random: no such file or directory"
#
# The issue is not reproducible on a local MacBook.
# https://github.com/lima-vm/lima/issues/2701
run: echo "LIMACTL_CREATE_ARGS=${LIMACTL_CREATE_ARGS} --mount-type=reverse-sshfs" >>$GITHUB_ENV
if: matrix.template == 'archlinux.yaml'
- name: "Test"
uses: nick-fields/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-fields/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.5
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-fields/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
- name: Fetch homebrew-core commit messages
uses: actions/checkout@v4
with:
# needed by ./hack/brew-install-version.sh
repository: homebrew/homebrew-core
path: homebrew-core
fetch-depth: 0
filter: tree: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 bash coreutils
# QEMU 9.1.0 seems to break on GitHub runners, both on Monterey and Ventura
# We revert back to 8.2.1, which seems to work fine
./hack/brew-install-version.sh qemu 8.2.1
- name: Test
uses: nick-fields/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-15-large # Intel
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 }}