Commit Graph

3 Commits

Author SHA1 Message Date
Bruce Ashfield
dbf720ccb0 go-mod-fetcher: fix shallow clone handling, duplicates, and discovery workflow
oe-go-mod-fetcher.py:
  - Remove BB_GIT_SHALLOW_EXTRA_REFS generation - refs must be present in
    ALL repositories which isn't the case for module dependencies. Instead,
    use tag= parameter in individual SRC_URI entries.
  - Add tag=<tagname> to SRC_URI when ref is a tag, allowing BitBake's
    shallow clone to include the necessary tag (with BB_GIT_SHALLOW=1)
  - Remove premature _ref_points_to_commit() check that was clearing
    ref_hints before repos were fetched, preventing tag= from being added
  - Fix pseudo-version verification: only use shallow fetch for actual
    tags (refs/tags/...), not branch refs. Pseudo-versions with branch
    refs (refs/heads/...) now correctly use unshallow path to reach
    historical commits that aren't fetchable with depth=1

  oe-go-mod-fetcher-hybrid.py:
  - Fix duplicate SRC_URI entries when multiple modules share the same
    git repo/commit (e.g., errdefs and errdefs/pkg). Track added vcs_hashes
    to skip duplicates.
  - Add --discovery-cache option to calculate module sizes from discovery
    cache .zip files, enabling size recommendations during discover_and_generate

  go-mod-discovery.bbclass:
  - Add automatic hybrid mode recommendations after generate_modules,
    showing module sizes and suggested --git prefixes for conversion
  - Add GO_MOD_DISCOVERY_SKIP_VERIFY variable to skip commit verification
    on retries (useful after fixing verification issues)
  - Pass --discovery-cache to hybrid script for accurate size calculations

Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
2026-01-04 11:40:15 -05:00
Bruce Ashfield
43a9e53dee oe-go-mod-fetcher: use dereferenced tags
Use dereferenced tag (^{}) to get the actual commit hash
For annotated tags, ref_hint returns the tag object hash, not the commit

Example: refs/tags/v1.0.1 -> c49ff274 (tag object)
         refs/tags/v1.0.1^{} -> 37c8de36 (actual commit)
         current_tag_commit = git_ls_remote(vcs_url, f"{ref_hint}^{{}}")

Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
2025-12-08 20:57:44 -05:00
Bruce Ashfield
a303bf16ff scripts: add oe-go-mod-fetcher for Go module VCS resolution
Add the oe-go-mod-fetcher.py tool and supporting files for resolving
Go module dependencies via git repositories instead of module proxies.

oe-go-mod-fetcher.py:
  - Parses go.mod and go.sum to identify required modules
  - Resolves module paths to git repositories (handles vanity URLs)
  - Maps module versions to git commits
  - Generates SRC_URI entries for bitbake fetcher
  - Creates go-mod-git.inc and go-mod-cache.inc files
  - Supports monorepo detection and nested module handling
  - Caches resolution results for performance

extract-discovered-modules.py:
  - Helper script to extract module information from discovery cache
  - Used by go-mod-discovery.bbclass during build

Also adds .gitignore to exclude runtime caches from version control.

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