windmill-labs/windmill · error

Failed to get `is_github_app` field from git repo resource,

Error message

Failed to get `is_github_app` field from git repo resource, please check that the resource has the correct type (git_repository)

What it means

On enterprise builds, handle_ansible_job requires the git_repository resource to carry a boolean `is_github_app` field. A missing or non-boolean value causes this error, since the worker must know whether to authenticate via GitHub App or plain credentials.

Source

Thrown at backend/windmill-worker/src/ansible_executor.rs:1734

            let serde_json::Value::Object(git_repo_resource) = client
                .get_resource_value_interpolated::<serde_json::Value>(
                    &delegated_git_repo.resource,
                    Some(job.id.to_string()),
                )
                .await?
            else {
                return Err(windmill_common::error::Error::BadRequest(
                    "Git repository resource is not an object".to_string(),
                ));
            };

            let secret_url = git_repo_resource.get("url").and_then(|s| s.as_str()).map(|s| s.to_string())
                .ok_or(anyhow!("Failed to get url from git repo resource, please check that the resource has the correct type (git_repository)"))?;

            #[cfg(feature = "enterprise")]
            let is_github_app = git_repo_resource.get("is_github_app").and_then(|s| s.as_bool())
                .ok_or(anyhow!("Failed to get `is_github_app` field from git repo resource, please check that the resource has the correct type (git_repository)"))?;
            #[cfg(not(feature = "enterprise"))]
            let is_github_app = false;

            let branch = Some(git_repo_resource.get("branch").and_then(|s| s.as_str()).map(|s| s.to_string())
                .ok_or(anyhow!("Failed to get branch from git repo resource, please check that the resource has the correct type (git_repository)"))?).filter(|s| !s.is_empty());

            let target_path = DELEGATE_GIT_REPO_TARGET.to_string();

            let repo = GitRepo {
                url: secret_url,
                commit: interpolated_commit.clone(),
                branch,
                target_path,
            };
            append_logs(
                &job.id,
                &job.workspace_id,
                format!("\nCloning {}...\n", delegated_git_repo.resource),

View on GitHub (pinned to e474e8803c)

Solutions

  1. Edit the resource and set `"is_github_app": true` or `false` as a boolean.
  2. Re-save the resource through the current UI so all expected fields are written.
  3. Recreate the resource with the latest git_repository template.
  4. If on community edition, confirm the worker is not built with the enterprise feature expecting this field.

Example fix

// resource payload
// before
{ "type": "git_repository", "url": "https://github.com/org/repo.git" }
// after
{ "type": "git_repository", "url": "https://github.com/org/repo.git", "is_github_app": false }
Defensive patterns

Strategy: validation

Validate before calling

if (typeof r.is_github_app !== 'boolean') {
  throw new Error('git_repository resource must include a boolean is_github_app (enterprise)');
}

Type guard

function hasIsGithubApp(v: unknown): v is { is_github_app: boolean; [k: string]: unknown } {
  return typeof v === 'object' && v !== null && typeof (v as any).is_github_app === 'boolean';
}

Try / catch

try {
  const isGithubApp = resource.is_github_app;
} catch (e) {
  // re-save resource via UI to backfill missing enterprise fields
}

Prevention

When it happens

Trigger: Enterprise worker processes an ansible git-repo dependency whose resource lacks `is_github_app` or has it as a non-boolean (string "true", null).

Common situations: Resources created before the GitHub App feature existed; resources copied from a community-edition instance; hand-written resource JSON omitting the field; UI/version mismatch where the frontend didn't write the field.

Related errors


AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03). Data as JSON: /api/errors/e526a3d865e94d55. Report an issue: GitHub.