argoproj/argo-workflows · error

artifact storage is not configured; see the docs for setup i

Error message

artifact storage is not configured; see the docs for setup instructions: https://argo-workflows.readthedocs.io/en/latest/configure-artifact-repository/

What it means

ArtifactLocation.Get falls through to its default case when none of the known artifact backend fields (Artifactory, Azure, Git, GCS, HTTP, HDFS, OSS, Raw, S3, Plugin) is set. Argo cannot determine where artifacts are stored, so it returns this error pointing to the artifact repository configuration docs.

Source

Thrown at pkg/apis/workflow/v1alpha1/workflow_types.go:1445

		return a.Azure, nil
	case a.Git != nil:
		return a.Git, nil
	case a.GCS != nil:
		return a.GCS, nil
	case a.HDFS != nil:
		return a.HDFS, nil
	case a.HTTP != nil:
		return a.HTTP, nil
	case a.OSS != nil:
		return a.OSS, nil
	case a.Raw != nil:
		return a.Raw, nil
	case a.S3 != nil:
		return a.S3, nil
	case a.Plugin != nil:
		return a.Plugin, nil
	default:
		return nil, fmt.Errorf("artifact storage is not configured; see the docs for setup instructions: https://argo-workflows.readthedocs.io/en/latest/configure-artifact-repository/")
	}
}

// SetType sets the type of the artifact to type the argument.
// Any existing value is deleted.
func (a *ArtifactLocation) SetType(x ArtifactLocationType) error {
	switch v := x.(type) {
	case *ArtifactoryArtifact:
		a.Artifactory = &ArtifactoryArtifact{}
	case *AzureArtifact:
		a.Azure = &AzureArtifact{}
	case *GCSArtifact:
		a.GCS = &GCSArtifact{}
	case *HDFSArtifact:
		a.HDFS = &HDFSArtifact{}
	case *HTTPArtifact:
		a.HTTP = &HTTPArtifact{}
	case *OSSArtifact:

View on GitHub (pinned to 35bff19146)

Solutions

  1. Configure artifact storage in the workflow-controller ConfigMap (artifactRepository section, e.g. s3, gcs, azure)
  2. Alternatively specify an explicit location per artifact in the workflow spec
  3. Verify with `kubectl get cm workflow-controller-configmap -o yaml` that artifactRepository is set

Example fix

# workflow-controller-configmap
# before
metadata:
  name: workflow-controller-configmap
data: {}
# after
data:
  config: |
    artifactRepository:
      s3:
        bucket: my-bucket
        endpoint: s3.amazonaws.com
Defensive patterns

Strategy: validation

Validate before calling

cm, _ := clientset.CoreV1().ConfigMaps(ns).Get(ctx, "workflow-controller-configmap", metav1.GetOptions{})
if !strings.Contains(cm.Data["config"], "artifactRepository") {
    return errors.New("artifact repository is not configured on the cluster")
}

Type guard

func (a *ArtifactLocation) isConfigured() bool {
    return a != nil && (a.S3 != nil || a.GCS != nil || a.Git != nil || a.HTTP != nil || a.Raw != nil || a.Azure != nil || a.Artifactory != nil || a.OSS != nil || a.HDFS != nil || a.Plugin != nil)
}

Try / catch

_, err := loc.Get()
if err != nil && strings.Contains(err.Error(), "artifact storage is not configured") {
    return errors.New("cluster admin must configure artifactRepository per https://argo-workflows.readthedocs.io/en/latest/configure-artifact-repository/")
}

Prevention

When it happens

Trigger: Reading an artifact location whose union field is empty — e.g. artifactRepository not configured in the controller configmap and templates/artifacts carry no explicit location; calling Get() or GetKey() on such an ArtifactLocation.

Common situations: Installing Argo Workflows without configuring artifact storage in the workflow-controller-configmap; clusters where the artifact repository ConfigMap was deleted; artifacts declared without any backend field.

Related errors


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