jdx/mise · error

No provider found for git URL: {}

Error message

No provider found for git URL: {}

What it means

When mise resolves a remote task file that is a git URL, it needs a provider (a `TaskFileProviders` entry or a parsed `RemoteSource`) to turn the URL into a local cached artifact. `resolve_git_url_to_path` first tries the configured providers with caching; if none matches, and with `remote_no_cache` it also fails `RemoteSource::parse_git`, it bails with this message — meaning the git URL uses a host/format mise has no handler for.

Source

Thrown at src/config/mod.rs:5079

    let Ok(relative_path) = path.strip_prefix(root) else {
        return false;
    };
    let relative_path = relative_path.to_string_lossy().replace('\\', "/");
    let file_name = path
        .file_name()
        .map(|file_name| file_name.to_string_lossy().replace('\\', "/"));
    TOML_CONFIG_MATCHERS.iter().any(|matcher| {
        matcher.is_match(&relative_path) || file_name.as_ref().is_some_and(|f| matcher.is_match(f))
    })
}

async fn resolve_git_url_to_path(git_url: &str) -> Result<TaskFileArtifact> {
    let no_cache = Settings::get().task.remote_no_cache.unwrap_or(false);
    if !no_cache {
        let task_file_providers = TaskFileProvidersBuilder::new().with_cache(true).build();
        return match task_file_providers.get_provider(git_url) {
            Some(provider) => provider.get_local_artifact(git_url).await,
            None => bail!("No provider found for git URL: {}", git_url),
        };
    }

    let source = RemoteSource::parse_git(git_url)
        .ok_or_else(|| eyre!("No provider found for git URL: {}", git_url))?;
    let cache_key = (source.url.clone(), source.git_ref.clone());
    let checkout = REMOTE_TASK_INCLUDE_ARTIFACTS
        .entry(cache_key)
        .or_insert_with(|| Arc::new(OnceCell::new()))
        .clone();
    let checkout = checkout
        .get_or_try_init(|| async {
            let task_file_providers = TaskFileProvidersBuilder::new().with_cache(false).build();
            let provider = task_file_providers
                .get_provider(git_url)
                .ok_or_else(|| eyre!("No provider found for git URL: {}", git_url))?;
            let artifact = provider.get_local_artifact(git_url).await?;
            let checkout_path = artifact

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Check the git URL format — ensure it uses a supported form (e.g. `https://host/owner/repo.git` with an optional `#ref`).
  2. Disable `task.remote_no_cache` (remove the setting) so the fuller provider registry is consulted instead of only `RemoteSource::parse_git`.
  3. Vendor the task file locally instead of referencing it via git, then reference the local path in `[tasks]`.
  4. Check mise docs for supported remote task file hosts and configure a matching task_file provider.

Example fix

# before (mise.toml)
[tools]
[settings]
task.remote_no_cache = true
[tasks.lint]
file = "git@git.internal:org/tasks.git#main"

# after
[tasks.lint]
file = "https://github.com/org/tasks.git#main"  # supported host, provider resolves it
Defensive patterns

Strategy: validation

Validate before calling

# Verify the remote task URL parses before committing it:
url="https://github.com/org/tasks.git#main"
case "$url" in
  https://*|http://*) : ;;
  *) echo "unsupported git URL format: $url"; exit 1 ;;
esac
mise tasks 2>&1 | grep -q 'No provider found' && { echo 'provider missing'; exit 1; }

Prevention

When it happens

Trigger: Referencing a remote task file via a git URL scheme that matches no configured task file provider and no built-in git remote source pattern — e.g. an unsupported host (`git@git.example.com:org/repo.git`), a malformed git URL, or `task.remote_no_cache = true` set so the provider-cache path is skipped and only `RemoteSource::parse_git` is consulted.

Common situations: Pointing `[tasks]` at a task file on a private/self-hosted git forge whose URL format mise doesn't recognize; a typo in the git URL (missing scheme or malformed ref); enabling `remote_no_cache` and discovering the shortcut parser is stricter than the provider registry.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09). Data as JSON: /api/errors/33a59dafa597b54c. Report an issue: GitHub.