argoproj/argo-workflows · error

failed to update submodules: %w

Error message

failed to update submodules: %w

What it means

In the git artifact driver's Load, when submodules are not disabled the driver initializes and updates them via go-git Submodules.Update; this wraps any error from that update (network failure cloning a submodule, missing credentials for a private submodule, bad .gitmodules, or git object errors). It fires while materializing a git artifact that declares submodules without DisableSubmodules.

Source

Thrown at workflow/artifacts/git/git.go:202

		h, err := r.ResolveRevision(plumbing.Revision(a.Revision))
		if err != nil {
			return fmt.Errorf("failed to get resolve revision: %w", err)
		}
		if err := w.Checkout(&git.CheckoutOptions{Hash: plumbing.NewHash(h.String())}); err != nil {
			return fmt.Errorf("failed to checkout %q: %w", h, err)
		}
	}
	if !a.DisableSubmodules {
		s, err := w.Submodules()
		if err != nil {
			return fmt.Errorf("failed to get submodules: %w", err)
		}
		if err := s.Update(&git.SubmoduleUpdateOptions{
			Init:              true,
			RecurseSubmodules: git.DefaultSubmoduleRecursionDepth,
			Auth:              auth,
		}); err != nil {
			return fmt.Errorf("failed to update submodules: %w", err)
		}
	}
	return nil
}

func isFetchErr(err error) bool {
	return err != nil && err.Error() != "already up-to-date"
}

func (g *ArtifactDriver) OpenStream(ctx context.Context, a *wfv1.Artifact) (io.ReadCloser, error) {
	// todo: this is a temporary implementation which loads file to disk first
	return common.LoadToStream(ctx, a, g)
}

func (g *ArtifactDriver) ListObjects(ctx context.Context, artifact *wfv1.Artifact) ([]string, error) {
	return nil, fmt.Errorf("ListObjects is currently not supported for this artifact type, but it will be in a future version")
}

View on GitHub (pinned to 35bff19146)

Solutions

  1. Set disableSubmodules: true to skip submodule checkout
  2. Ensure the git credentials grant access to submodule repositories
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at workflow/artifacts/git/git.go:202 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of argoproj/argo-workflows@35bff19146 (2026-09-03). Data as JSON: /api/errors/027128020187b6fa. Report an issue: GitHub.