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

  1. Provide a non-empty ref: a v-tag, commit SHA, branch, or PR ref.
  2. 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

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


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