Commit Graph

6 Commits

Author SHA1 Message Date
Bruce Ashfield
2bee001d6d go-mod: introduce hybrid mode
Introduce the ability to have hybrid gomod:// and git:// repositories.

This allows SRCREV bumping when fixing bugs, and using the git archiver
for some, all or none of the modules in a go mod project.

 Example: k3s Hybrid Conversion

 1. Ensure VCS mode works first
 bitbake k3s

 2. Get recommendations
 bitbake k3s -c go_mod_recommend

 3. Convert with recommended prefixes (keep containerd, k8s.io as git://)
 python3 ./meta-virtualization/scripts/oe-go-mod-fetcher-hybrid.py \
    --recipedir ./meta-virtualization/recipes-containers/k3s/ \
    --git "github.com/containerd,k8s.io,sigs.k8s.io,github.com/rancher"

Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
2025-12-08 20:57:44 -05:00
Bruce Ashfield
5760ab3c50 go-mod: make extracted files writeable
Make extracted files writable so BitBake can clean them later
Go's module cache is read-only by design, but this breaks rm -rf
and our subsquent task runs will fail.

Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
2025-12-08 20:57:44 -05:00
Bruce Ashfield
aee553e9d9 go-mod-vcs: declare cache defaults
There are variables which are common to all recipes, declare defaults
to make recipe integration simpler.

Also, when creating the cache the messages are normal about synthesis,
etc, so reduce them to bb.note.

Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
2025-12-08 20:57:44 -05:00
Bruce Ashfield
d2044c0e7b go-mod-vcs: missing go.mod is not a warning
Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
2025-12-08 20:57:44 -05:00
Bruce Ashfield
df651f904e discover: manage go.* files
The discovery repository can be in an incosistent state
after a build. By restoring the go.* files, we ensure a stable
start point.

Add automatic removal of go.sum files from git-fetched
dependencies in vcs_cache during do_create_module_cache.
This prevents checksum mismatch errors caused by stale
go.sum files in dependencies having different checksums
than the git-sourced modules.

Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
2025-12-08 20:57:44 -05:00
Bruce Ashfield
9f40ce9b27 classes: add go-mod-vcs and go-mod-discovery for Go module builds
Add two new bbclass files that enable building Go applications using
git-based module resolution instead of network proxy fetches:

go-mod-vcs.bbclass:
  - Provides do_create_module_cache task to build GOMODCACHE from git sources
  - Implements pure Python h1: hash calculation with go-dirhash-native fallback
  - Creates properly structured module zip files and hash files
  - Handles module path transformations and case encoding

go-mod-discovery.bbclass:
  - Runs module discovery using the oe-go-mod-fetcher tool
  - Generates go-mod-git.inc and go-mod-cache.inc files
  - Supports bootstrap mode for initial recipe conversion

Together these classes enable fully offline, reproducible Go builds
by fetching module sources via git and constructing the module cache
during the build rather than relying on network access to module proxies.

Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
2025-12-08 20:57:44 -05:00