pulumi/pulumi · error
updating environment draft: %w
Error message
updating environment draft: %w
What it means
updateEnvironment wraps errors from client.UpdateEnvironmentDraft with this message when updating an existing change-request draft identified by the --draft change-request ID. The underlying API call failed, so the YAML/tag changes were not applied to the draft.
Source
Thrown at pkg/cmd/esc/cli/env.go:490
if err != nil {
return nil, fmt.Errorf("creating environment draft: %w", err)
}
if !client.DiagnosticsHaveErrors(diags) {
fmt.Fprintf(esc.stdout, "Change request created: %v\n", changeRequestID)
fmt.Fprintf(esc.stdout, "Change request URL: %v\n", esc.changeRequestURL(ref, changeRequestID))
err = esc.client.SubmitChangeRequest(ctx, ref.orgName, changeRequestID, nil)
if err != nil {
return nil, fmt.Errorf("submitting change request: %w", err)
}
fmt.Fprintln(esc.stdout, "Change request submitted")
}
return diags, nil
} else if draft != "" {
changeRequestID := draft
diags, err := esc.client.UpdateEnvironmentDraft(ctx, ref.orgName, ref.projectName, ref.envName, changeRequestID, yaml, tag) //nolint:lll
if err != nil {
return nil, fmt.Errorf("updating environment draft: %w", err)
}
if !client.DiagnosticsHaveErrors(diags) {
fmt.Fprintln(esc.stdout, "Change request updated")
fmt.Fprintf(esc.stdout, "Change request URL: %v\n", esc.changeRequestURL(ref, changeRequestID))
}
return diags, nil
} else {
diags, revision, err := esc.client.UpdateEnvironment(ctx, ref.orgName, ref.projectName, ref.envName, yaml, tag)
if err != nil {
return nil, fmt.Errorf("updating environment definition: %w", err)
}
if !client.DiagnosticsHaveErrors(diags) && envUpdateSuccessMessage != "" {
fmt.Fprintf(esc.stdout, "%s (revision %d)\n", envUpdateSuccessMessage, revision)
}
return diags, nil
}
}
View on GitHub (pinned to 793f7b2e16)
Solutions
- Verify the change request ID is correct and still open (not yet submitted/merged)
- Check the wrapped inner error for the API's reason
- Confirm you have edit rights on that change request
- Retry on transient errors
Example fix
// before esc env set env/proj/env key value --draft 42 // after (verify draft is open) # open the change request URL to confirm ID 42 is still a draft esc env set org/proj/env key value --draft 42
Defensive patterns
Strategy: validation
Validate before calling
// Go: verify the draft/change request ID exists and is still open before updating
// (obtain open drafts via the change request URL or API listing)
if !isOpenDraft(changeRequestID) {
return fmt.Errorf("change request %v is not an open draft", changeRequestID)
} Try / catch
// Go
_, err := updateEnvironmentWithDraft(ctx, ref, draftID, yaml, tag)
if err != nil && strings.Contains(err.Error(), "updating environment draft") {
return fmt.Errorf("draft update failed; verify the change request ID is open: %w", err)
} Prevention
- Confirm the change request ID is still a draft (not submitted)
- Copy the ID from the Change request URL output to avoid typos
- Check edit permissions on the change request
When it happens
Trigger: Running an env update with a draft/change-request ID specified, and UpdateEnvironmentDraft fails — invalid change request ID, draft not editable (already submitted), permissions, or network error.
Common situations: Passing a stale or already-submitted change request ID to --draft; typo in the change request number; insufficient permissions.
Related errors
- creating environment draft: %w
- submitting change request: %w
- updating environment definition: %w
- cloning environment: %w
- no open request was created for this environment; check that
AI-assisted analysis of pulumi/pulumi@793f7b2e16 (2026-08-31).
Data as JSON: /api/errors/4cd76e8cf7d39827.
Report an issue: GitHub.