// Copyright IBM Corp. 2014, 2026 // SPDX-License-Identifier: BUSL-1.1 package stackruntime import ( "context" "go.opentelemetry.io/otel/codes" "github.com/hashicorp/terraform/internal/addrs" "github.com/hashicorp/terraform/internal/depsfile" "github.com/hashicorp/terraform/internal/providers" "github.com/hashicorp/terraform/internal/stacks/stackconfig" "github.com/hashicorp/terraform/internal/stacks/stackruntime/internal/stackeval" "github.com/hashicorp/terraform/internal/tfdiags" ) // Validate performs static validation of a full stack configuration, returning // diagnostics in case of any detected problems. func Validate(ctx context.Context, req *ValidateRequest) tfdiags.Diagnostics { ctx, span := tracer.Start(ctx, "validate stack configuration") defer span.End() main := stackeval.NewForValidating(req.Config, stackeval.ValidateOpts{ ProviderFactories: req.ProviderFactories, DependencyLocks: req.DependencyLocks, }) main.AllowLanguageExperiments(req.ExperimentsAllowed) diags := main.ValidateAll(ctx) diags = diags.Append( main.DoCleanup(ctx), ) if diags.HasErrors() { span.SetStatus(codes.Error, "validation returned errors") } return diags } type ValidateRequest struct { Config *stackconfig.Config ProviderFactories map[addrs.Provider]providers.Factory DependencyLocks depsfile.Locks ExperimentsAllowed bool }