jdx/mise · error

aqua package does not have repo_owner and/or repo_name.

Error message

aqua package {} does not have repo_owner and/or repo_name.

What it means

Listing versions for an aqua package backed by a GitHub release requires repo_owner and repo_name to build the GitHub release query. When the package config lacks either field, the backend cannot enumerate versions and throws this error naming the package id.

Solutions

  1. Add both `repo_owner` and `repo_name` to the aqua package config
  2. Check for key typos and for config schema changes after registry updates
  3. If the package is not GitHub-release-based, use the correct package type (e.g. http, github_content) with its own required fields

Example fix

# before
packages:
  - type: github_release
    repo_name: sometool
# after
packages:
  - type: github_release
    repo_owner: someowner
    repo_name: sometool
Defensive patterns

Strategy: validation

Validate before calling

if pkg.package_type() == AquaPackageType::GithubRelease && (pkg.repo_owner.is_none() || pkg.repo_name.is_none()) {
    return Err(anyhow!("{} requires repo_owner and repo_name", pkg.id()));
}

Type guard

fn github_release_fully_qualified(pkg: &AquaPackage) -> bool {
    pkg.repo_owner.as_deref().map(|s| !s.is_empty()).unwrap_or(false)
        && pkg.repo_name.as_deref().map(|s| !s.is_empty()).unwrap_or(false)
}

Try / catch

match backend.list_versions(&pkg_id).await {
    Err(e) if e.to_string().contains("does not have repo_owner and/or repo_name") => {
        eprintln!("add repo_owner and repo_name to the package config for {pkg_id}");
    }
    r => r?,
}

Prevention

When it happens

Trigger: Calling the aqua backend's version-listing path for a package whose config (registry entry or override) is missing repo_owner and/or repo_name while the chosen branch expects a GitHub-release-style package.

Common situations: Hand-written custom aqua registry entry missing the repo fields; typo in the key name (e.g. `owner` instead of `repo_owner`); overriding a built-in package and dropping required fields.

Understand the failure class

Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.

Related errors


AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17). Data as JSON: /api/errors/4b33c11f4e0be99e. Report an issue: GitHub.

Appendix: source

Thrown at src/backend/aqua.rs:2227

                        for tag in tags.into_iter().rev() {
                            let (version, _) = match versioned_package_from_tag(
                                &pkg,
                                &tag,
                                target_os,
                                target_arch,
                                target_libc.as_deref(),
                            ) {
                                Ok(Some(versioned)) => versioned,
                                Ok(None) => continue,
                                Err(e) => {
                                    warn!("[{}] aqua version filter error: {e}", self.ba());
                                    continue;
                                }
                            };
                            versions.push((version, tag));
                        }
                    } else {
                        bail!(
                            "aqua package {} does not have repo_owner and/or repo_name.",
                            self.id
                        );
                    }
                    Ok(versions)
                },
                // Don't cache an empty tag list: the all-filtered happy path can
                // produce `[]` (valid repo, but no platform-matching release), and
                // a transient registry blip could too. Caching it would persist a
                // miss — same class as #9444 "don't cache empty version lists".
                |versions| !versions.is_empty(),
            )
            .await
    }

    /// Returns `(url, url_api, checked, digest)` where `url_api` is the GitHub API asset
    /// endpoint used as a download fallback for private repositories.
    async fn get_url(

View on GitHub (pinned to 533346cc37)