mirror of
https://github.com/lima-vm/lima.git
synced 2026-10-28 11:44:35 +08:00
gomodjail v2 moves the focus to static analysis: `gomodjail analyze` verifies that the modules annotated `gomodjail:confined` in go.mod cannot reach a denied capability (filesystem, network, process execution, raw syscalls, OS state modification, or cgo). Add gomodjail to ./hack/tools, add a `gomodjail` lint target, and wire it into `make lint` and the "Lints" job. Unlike the legacy dynamic mode, this gate is blocking. The verdicts are platform-dependent, so the gate is pinned to linux/amd64 and linux/arm64. These are the only platforms that can be analyzed from any host: analyzing darwin needs a macOS host, as the "vz" driver requires cgo. The linux verdicts are a superset of the darwin ones anyway. Windows is deliberately left out, as it would unconfine 18 more modules (go-yaml, containerd/log, go-runewidth, ...) and weaken the gate for the other platforms. `gomodjail fix` downgraded 36 modules to `gomodjail:unconfined` to make the gate pass. 65 modules remain confined: 37 clean, 28 warning-only. `make gomodjail-fix` is added for redoing this on dependency bumps, so that the decision stays visible and reviewable in go.mod. The macOS job that exercises the legacy dynamic mode (`gomodjail run`) is kept as an experiment, with its checkout pinned to v2.0.1 instead of HEAD. Assisted-by: Claude Code (Opus 5) Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
2.6 KiB
2.6 KiB
AGENTS.md
Guidance for AI coding agents working in the Lima repository. It points to the authoritative docs instead of duplicating them, so it stays in sync with the code.
AI contribution rules
Read @website/content/en/docs/community/contributing.md and follow its "AI Contribution Rules" section.
Build, test, lint
Lima is github.com/lima-vm/lima/v2 (imports use the /v2 suffix). The build
uses a GNU Makefile; output goes to _output/.
make native # build limactl + native guestagent + templates (fastest full dev build)
make minimal # build just limactl + native guestagent + default template
go test ./... # unit tests - never boot VMs
make bats # integration tests (BATS); boot real VMs (needs git submodules)
make lint # editorconfig, golangci-lint, yamllint, ls-lint, shellcheck, ltag, ...
make generate # regenerate protobuf after editing a .proto file
Unit tests never execute VMs; anything that boots a VM is a BATS or template test under hack/
(for example ./hack/test-templates.sh ./templates/default.yaml). Every commit must be signed off
with git commit -s, or CI fails.
Where things are
Pointers to the authoritative sources - read these rather than a duplicated copy here.
- Architecture, the three processes (
limactl/ hostagent / guestagent), the on-disk${LIMA_HOME}layout, and everyLIMA_CIDATA_*variable:website/content/en/docs/dev/internals.md. - Config / data model:
pkg/limatype(coreLimaYAML/Instancetypes),pkg/limayaml(load / default / validate),pkg/limatmplandpkg/templatestore(templates). - Drivers (virtualization backends):
pkg/driver/ - Guest provisioning:
pkg/cidata/buildscidata.iso(guestagent binary, boot scripts, and theuser-datafile).user-datauses the cloud-config YAML format defined by cloud-init, which a guest may consume with an implementation other than Python cloud-init. - Instance lifecycle:
pkg/instance/.
Conventions
- New Go, shell, Dockerfile, and Makefile files need an SPDX header (
ltagenforces this in CI; other file types, including markdown, are exempt). - Keep the
gomodjail/gosocialcheckannotations ingo.mod.make gomodjailstatically verifies that the modules annotatedgomodjail:confinedcannot reach a denied capability (filesystem, network, process execution, raw syscalls, ...); when a dependency bump makes one of them reach a capability,make gomodjail-fixdowngrades that annotation togomodjail:unconfinedinstead of confining it by hand.