dagger/dagger · error
ref must not be empty
Error message
ref must not be empty
What it means
A plain sentinel error returned by resolveXReleaseRef when the ref string is empty. execXRelease should never pass an empty ref (it trims xRelease first), so this guards against empty input slipping through to the GitHub API path.
Source
Thrown at internal/cmd/dagger/main.go:545
}
execArgs := append([]string{binPath}, args...)
if err := execCLI(binPath, execArgs, env); err != nil {
return fmt.Errorf("exec experimental release CLI: %w", err)
}
return nil
}
func xReleaseReleaseRef(ref string) (downloadRef string, engineRef string, ok bool) {
maybeTag := strings.TrimPrefix(ref, "v")
if !semver.IsValid("v" + maybeTag) {
return "", "", false
}
return maybeTag, "v" + maybeTag, true
}
func resolveXReleaseRef(ctx context.Context, ref string) (string, bool, error) {
if ref == "" {
return "", false, fmt.Errorf("ref must not be empty")
}
if len(ref) == 40 {
return strings.ToLower(ref), false, nil
}
commitURL := githubCommitAPI + url.PathEscape(ref)
req, err := http.NewRequestWithContext(ctx, http.MethodGet, commitURL, nil)
if err != nil {
return "", false, fmt.Errorf("create GitHub commit request: %w", err)
}
resp, err := http.DefaultClient.Do(req)
if err != nil {
return "", false, fmt.Errorf("resolve git ref from GitHub: %w", err)
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
body, _ := io.ReadAll(io.LimitReader(resp.Body, 1024))
return "", false, fmt.Errorf("resolve git ref from GitHub: %s: %s", resp.Status, strings.TrimSpace(string(body)))View on GitHub (pinned to 82ba2681db)
Solutions
- Provide a non-empty ref: a v-tag, commit SHA, branch, or PR ref.
- Check shell variables feeding the flag (e.g. $DAGGER_REF) are actually set.
Example fix
// before DAGGER_REF=""; dagger x-release "$DAGGER_REF" // after dagger x-release v0.15.0
Defensive patterns
Strategy: validation
Validate before calling
ref := strings.TrimSpace(os.Getenv("DAGGER_REF"))
if ref == "" { return errors.New("x-release ref is empty; set DAGGER_REF or pass it explicitly") } Try / catch
if err := execXRelease(ctx, ref, args); err != nil && strings.Contains(err.Error(), "ref must not be empty") { /* prompt for a valid ref */ } Prevention
- Never pass whitespace-only values to x-release.
- Check that shell variables feeding the ref are non-empty before invoking.
- Quote arguments in scripts to catch accidental empty expansions early.
When it happens
Trigger: Call resolveXReleaseRef with ref == "" at main.go:545 — only reachable if xRelease trimming yields an empty string (e.g. x-release flag set to whitespace only).
Common situations: Passing `dagger x-release " "` or an environment-driven value that is blank/whitespace.
Related errors
- unknown telemetry stream %q
- invalid label format (must be name:value)
- module ref cannot be empty
- module source ref cannot be empty
- platform cannot be empty
AI-assisted analysis of dagger/dagger@82ba2681db (2026-09-05).
Data as JSON: /api/errors/722e22cdbcb2d194.
Report an issue: GitHub.