dagger/dagger · error

resolve latest git release %q: %w

Error message

resolve latest git release %q: %w

What it means

This error wraps a failure to look up the best-matching release ref on the git remote after a release tag was selected. The library throws it because remote.Lookup(bestRef) failed even though the tag name was determined from the remote's tag listing — a race or permission anomaly.

Source

Thrown at core/git.go:129

	}
	if bestRef == "" && tagPrefix != "" {
		bestRef, err = selectLatestGitRelease(remote, "")
		if err != nil {
			return nil, err
		}
	}

	if bestRef == "" {
		ref, err := remote.Lookup("HEAD")
		if err != nil {
			return nil, fmt.Errorf("resolve git remote HEAD: %w", err)
		}
		return ref, nil
	}

	ref, err := remote.Lookup(bestRef)
	if err != nil {
		return nil, fmt.Errorf("resolve latest git release %q: %w", bestRef, err)
	}
	return ref, nil
}

func selectLatestGitRelease(
	remote *gitutil.Remote,
	tagPrefix string,
) (string, error) {
	candidates := make([]releaseTagCandidate, 0, len(remote.Tags().Refs))
	refs := map[string]string{}
	for _, ref := range remote.Tags().Refs {
		version := ref.ShortName()
		if tagPrefix != "" {
			var ok bool
			version, ok = strings.CutPrefix(version, tagPrefix)
			if !ok {
				continue
			}

View on GitHub (pinned to 82ba2681db)

Solutions

  1. Retry the operation — often transient (deleted-then-restored tag, network blip)
  2. Inspect the wrapped error to distinguish auth vs missing-ref
  3. Verify the tag still exists on the remote: git ls-remote --tags origin <bestRef>
  4. Check credentials/permissions allow fetching tags, not just listing

Example fix

// before
ref, err := remote.Lookup(bestRef)
if err != nil { return nil, err }
// after
ref, err := remote.Lookup(bestRef)
if err != nil {
    return nil, retryOnce(func() (*gitutil.Ref, error) { return remote.Lookup(bestRef) })
}
Defensive patterns

Strategy: retry

Validate before calling

out, err := exec.Command("git", "ls-remote", "--tags", remoteURL, bestRef).Output()
if err != nil || len(out) == 0 {
    return nil, fmt.Errorf("tag %s missing or unfetchable", bestRef)
}

Try / catch

ref, err := SelectLatestGitRef(remote)
if err != nil {
    if strings.Contains(err.Error(), "resolve latest git release") {
        // tag may have vanished or transient failure; retry once
        time.Sleep(time.Second)
        ref, err = SelectLatestGitRef(remote)
    }
    if err != nil { return err }
}

Prevention

When it happens

Trigger: SelectLatestGitRefWithTagPrefix picked bestRef from the tag list, then remote.Lookup(bestRef) errored — e.g. the tag was deleted concurrently, or the listing and lookup see different views (auth scopes, shallow fetch).

Common situations: Tag deleted between listing and lookup; credentials allow listing but not fetching a specific ref; transient network failure; mirrored repo missing the ref.

Related errors


AI-assisted analysis of dagger/dagger@82ba2681db (2026-09-05). Data as JSON: /api/errors/d56fe8f1a8b245b9. Report an issue: GitHub.