hashicorp/terraform · error
Failed to convert provider version to Go version: %s
Error message
Failed to convert provider version to Go version: %s
What it means
Thrown when providerreqs.GoVersionFromVersion(v) fails to convert the just-downloaded destination state-store provider version into a hashicorp/go-version Version. GoVersionFromVersion simply calls version.NewVersion(v.String()); it fails only if the provider version string is not valid semver. The %s is the parse error. This is essentially an internal invariant failure since the version came from a successfully resolved provider lock.
Source
Thrown at internal/command/state_migrate.go:289
if !diags.HasErrors() {
migrateOpts.DestinationType = rootMod.StateStore.Type
migrateOpts.Destination = dstB
}
// Capture details of the destination state store for updating the backend state file after a successful migration.
_, cHash, sscDiags := c.stateStoreConfig(&BackendOpts{
StateStoreConfig: rootMod.StateStore,
Locks: destinationLock,
})
diags = diags.Append(sscDiags)
if sscDiags.HasErrors() {
view.Diagnostics(diags)
return 1
}
v := destinationLock.Provider(rootMod.StateStore.ProviderAddr).Version() // We just downloaded this provider, so the lock wil be present.
version, err := providerreqs.GoVersionFromVersion(v)
if err != nil {
diags = diags.Append(fmt.Errorf("Failed to convert provider version to Go version: %s", err))
view.Diagnostics(diags)
return 1
}
bsf.StateStore = &workdir.StateStoreConfigState{
Type: rootMod.StateStore.Type,
Hash: uint64(cHash),
Provider: &workdir.ProviderConfigState{
Source: &rootMod.StateStore.ProviderAddr,
Version: version,
},
ProviderSupplyMode: rootMod.StateStore.ProviderSupplyMode,
}
err = bsf.StateStore.SetConfig(stateStoreConfigVal, dstB.ConfigSchema())
if err != nil {
diags = diags.Append(fmt.Errorf("Failed to set state store configuration: %w", err))
view.Diagnostics(diags)
return 1View on GitHub (pinned to c9def3e214)
Solutions
- Delete the dependency lock file and re-run `terraform state migrate -upgrade` so the provider version is re-resolved cleanly.
- Inspect .terraform.lock.hcl for the state-store provider entry and fix or remove any non-semver version string.
- Verify the provider registry/mirror serves standard semver versions for that provider.
- Report a bug if the version is valid semver but still fails — this path should be unreachable for normally-resolved versions.
Example fix
# before: corrupted lock entry
provider "registry.example.com/foo/state" {
version = "v1.2.3-beta" # leading v may break strict parsers
}
# after: re-resolve from scratch
rm .terraform.lock.hcl
terraform state migrate -upgrade Defensive patterns
Strategy: validation
Validate before calling
// before relying on a provider version, validate it is parseable semver.
func validProviderVersion(v string) error {
_, err := semver.Parse(v)
return err
} Prevention
- Never hand-edit .terraform.lock.hcl version fields; let Terraform resolve them.
- Use reputable provider registries/mirrors that publish standard semver tags.
- Delete and regenerate the lock file if versions look malformed.
- Pin required_providers to clean version constraints.
When it happens
Trigger: During `terraform state migrate` to a state_store destination, after downloading the destination provider, converting its version (from destinationLock.Provider(...).Version()) to a Go version fails because the version string is malformed. Practically only seen with corrupted lock-file version fields, a malicious/corrupt provider registry, or a hand-edited .terraform.lock.hcl.
Common situations: Manually edited .terraform.lock.hcl with a non-semver version; a private/provider mirror serving a non-conforming version; downgrade/upgrade path through a provider that published a non-semver tag.
Related errors
- Failed to set state store provider configuration: %w
- state store is not valid: provider version data is missing d
- Failed to negotiate acceptable chunk size. Expected size > 0
- error when obtaining provider instance during state store in
- error when obtaining provider instance during state store in
AI-assisted analysis of hashicorp/terraform@c9def3e214 (2026-08-07).
Data as JSON: /api/errors/605be1dde8212c84.
Report an issue: GitHub.