Skip to content

publish: return api.ErrCanceled when user declines interactive prompts - #13674

Merged
glours merged 3 commits into
docker:mainfrom
ishwar170695:fix/publish-aborted-sentinel-error-v2
Mar 31, 2026
Merged

publish: return api.ErrCanceled when user declines interactive prompts#13674
glours merged 3 commits into
docker:mainfrom
ishwar170695:fix/publish-aborted-sentinel-error-v2

Conversation

@ishwar170695

@ishwar170695ishwar170695 commented Mar 26, 2026

Copy link
Copy Markdown
Contributor

What I did

Previously, declining the bind mount or sensitive data warning prompt caused publish() to return nil, which is indistinguishable from success for callers and automation scripts (exit code 0).

Change publish() to return the existing api.ErrCanceled sentinel so callers can detect user-initiated cancellation via errors.Is(). Add unit tests covering both the preChecks decline path and the full publish() path.

Signed-off-by: Ishwar chand meena ishwarcm@iitbhilai.ac.in

(not mandatory) A picture of a cute animal, if possible in relation to what you did

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR changes compose publish to return a detectable error when the user declines interactive safety prompts, instead of returning nil (success), so automation/callers can distinguish an abort from a successful publish.

Changes:

  • Introduce a new sentinel error (ErrPublishAborted) and return it when pre-check prompts are declined.
  • Add unit tests intended to cover “decline” paths for preChecks and publish.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 4 comments.

FileDescription
pkg/compose/publish.goReturns a sentinel error when publish is aborted via interactive decline.
pkg/compose/publish_test.goAdds tests for decline behavior in pre-checks and publish.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment threadpkg/compose/publish_test.go Outdated
Comment threadpkg/compose/publish_test.go Outdated
Comment threadpkg/compose/publish_test.go
Comment threadpkg/compose/publish.go Outdated

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment threadpkg/compose/publish.go
Comment threadpkg/compose/publish_test.go
@ishwar170695ishwar170695 changed the title publish: return ErrPublishAborted when user declines interactive promptspublish: return api.ErrCanceled when user declines interactive promptsMar 26, 2026
@ishwar170695

Copy link
Copy Markdown
ContributorAuthor

Updated PR description to reflect the use of the existing api.ErrCanceled instead of creating a new custom error.

@gloursglours left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the contribution 🙏
I have small requests before we can merge it

Comment threadpkg/compose/publish_test.go Outdated
}, cmp.Ignore()))
}

func Test_preChecks_decline_returns_ErrPublishAborted(t *testing.T) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There isn’t any ErrPublishedArboted error in the codebase, so the test name is misleading.
Second, this test is effectively a subset of Test_publish_decline_returns_ErrCanceled.

We can keep it, but I’d suggest repurposing it to cover the sensitive data detection path instead. That would make it exercise an uncovered code path and give it a clearer purpose.

@ishwar170695

Copy link
Copy Markdown
ContributorAuthor

Thanks for the feedback! I've repurposed the test to cover the checkForSensitiveData + decline path using a temp .env file with a dummy AWS secret key. The test name is updated to reflect what it actually tests.

@glours

Copy link
Copy Markdown
Contributor

@ishwar170695 can you sing-off your commits please

glours
glours previously approved these changes Mar 31, 2026

@gloursglours left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@glours
glours enabled auto-merge (rebase) March 31, 2026 14:00
@glours

Copy link
Copy Markdown
Contributor

@ishwar170695 CI detected tests which need to be changed to check properly the new 130 exit code
And there is some lint issues to fix also

Signed-off-by: Ishwar <ishwarcm@iitbhilai.ac.in>
Renames test to Test_preChecks_sensitive_data_detected_decline. Uses a temporary .env file with an AWS token to reliably trigger the DefangLabs secret detector, and confirms that preChecks correctly aborts early on user decline.
Signed-off-by: Ishwar <ishwarcm@iitbhilai.ac.in>
Signed-off-by: Ishwar <ishwarcm@iitbhilai.ac.in>
auto-merge was automatically disabled March 31, 2026 16:27

Head branch was pushed to by a user without write access

@ishwar170695
ishwar170695force-pushed the fix/publish-aborted-sentinel-error-v2 branch from c8d190e to df5d68bCompareMarch 31, 2026 16:27
@ishwar170695

Copy link
Copy Markdown
ContributorAuthor

Sorry for disabling auto-merge, the force-push after rebase triggered that.
Addressed the lint issue (gofumpt on publish_test.go), updated e2e tests to expect exit code 130 for the decline paths, and rebased cleanly onto main. Ready for re-review when you get a chance.

@glours
glours enabled auto-merge (rebase) March 31, 2026 16:59
@codecov

codecovBot commented Mar 31, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@glours
glours merged commit 1e3f4d0 into docker:mainMar 31, 2026
102 of 124 checks passed
@ishwar170695
ishwar170695 deleted the fix/publish-aborted-sentinel-error-v2 branch April 1, 2026 04:39
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Apr 10, 2026
This MR contains the following updates:
| Package | Update | Change |
|---|---|---|
| [docker/compose](https://github.com/docker/compose) | patch | `v5.1.1` → `v5.1.2` |
MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).
**Proposed changes to behavior should be submitted there as MRs.**
---
### Release Notes
<details>
<summary>docker/compose (docker/compose)</summary>
### [`v5.1.2`](https://github.com/docker/compose/releases/tag/v5.1.2)
[Compare Source](docker/compose@v5.1.1...v5.1.2)
#### What's Changed
##### 🐛 Fixes
- Fix TTY timer rendering when duration length changes by [@&#8203;MaybeSam05](https://github.com/MaybeSam05) in [#&#8203;13634](docker/compose#13634)
- Fix up attach filtering by [@&#8203;false200](https://github.com/false200) in [#&#8203;13664](docker/compose#13664)
- Preserve ssh:// URL scheme when resolving Dockerfile path by [@&#8203;ssam18](https://github.com/ssam18) in [#&#8203;13669](docker/compose#13669)
- Initialize and pass envFiles map in processExtends by [@&#8203;Mohamed-Moumni](https://github.com/Mohamed-Moumni) in [#&#8203;13678](docker/compose#13678)
- Fix TestRunHook\_ConsoleSize on macOS by [@&#8203;thaJeztah](https://github.com/thaJeztah) in [#&#8203;13686](docker/compose#13686)
- Restore post-connect fallback for multi-network stacks on API < 1.44 by [@&#8203;jotka](https://github.com/jotka) in [#&#8203;13629](docker/compose#13629)
- Publish: return api.ErrCanceled when user declines interactive prompts by [@&#8203;ishwar170695](https://github.com/ishwar170695) in [#&#8203;13674](docker/compose#13674)
- Return error on non-ErrNotExist stat failures in Tar.Sync() by [@&#8203;Lidang-Jiang](https://github.com/Lidang-Jiang) in [#&#8203;13684](docker/compose#13684)
##### 🔧 Internal
- Refactor: thread context through publish sensitive data check by [@&#8203;ishwar170695](https://github.com/ishwar170695) in [#&#8203;13653](docker/compose#13653)
- Add AI-powered MR review workflow via `docker/cagent-action` by [@&#8203;glours](https://github.com/glours) in [#&#8203;13659](docker/compose#13659)
- Update `cagent-action` to latest (with better permissions) by [@&#8203;derekmisler](https://github.com/derekmisler) in [#&#8203;13665](docker/compose#13665)
- Pin GitHub Actions to commit SHA, remove pr-review workflow by [@&#8203;glours](https://github.com/glours) in [#&#8203;13662](docker/compose#13662)
- Exclude hook\_test.go from Windows builds and propagate ExecStart error in runWaitExec by [@&#8203;pawannn](https://github.com/pawannn) in [#&#8203;13683](docker/compose#13683)
- Skip MR review workflow for Dependabot MRs by [@&#8203;glours](https://github.com/glours) in [#&#8203;13679](docker/compose#13679)
- Use negotiated API version for network setup by [@&#8203;glours](https://github.com/glours) in [#&#8203;13690](docker/compose#13690)
- Fix mixed assertion libraries in tests by [@&#8203;thaJeztah](https://github.com/thaJeztah) in [#&#8203;13689](docker/compose#13689)
- Test: use random host port for dind TLS build test by [@&#8203;ricardobranco777](https://github.com/ricardobranco777) in [#&#8203;13630](docker/compose#13630)
- Remove direct dependency on `docker/docker` by [@&#8203;glours](https://github.com/glours) in [#&#8203;13706](docker/compose#13706)
##### ⚙️ Dependencies
- Bump github.com/containerd/platforms from `1.0.0-rc.2` to `1.0.0-rc.3` by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;13657](docker/compose#13657)
- Bump golangci-lint to `v2.11.3` and configure CLAUDE to use it on change by [@&#8203;ndeloof](https://github.com/ndeloof) in [#&#8203;13656](docker/compose#13656)
- Bump google.golang.org/grpc from `1.78.0` to `1.79.3` by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;13642](docker/compose#13642)
- Bump github.com/moby/patternmatcher from `0.6.0` to `0.6.1` by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;13667](docker/compose#13667)
- Bump go.opentelemetry.io/otel/sdk from `1.39.0` to `1.42.0` by [@&#8203;glours](https://github.com/glours) in [#&#8203;13663](docker/compose#13663)
- Bump github.com/docker/cli from `29.2.1+incompatible` to `29.3.1+incompatible` by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;13670](docker/compose#13670)
- Bump github.com/hashicorp/go-version from `1.8.0` to `1.9.0` by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;13692](docker/compose#13692)
- Bump github.com/docker/buildx `v0.33.0`, buildkit `v0.29.0` by [@&#8203;thaJeztah](https://github.com/thaJeztah) in [#&#8203;13693](docker/compose#13693)
- Bump google.golang.org/grpc from `1.79.3` to `1.80.0` by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;13697](docker/compose#13697)
- Bump github.com/containerd/platforms from `1.0.0-rc.3` to `1.0.0-rc.4` by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;13696](docker/compose#13696)
- Bump github.com/moby/moby/client `v0.4.0`, moby/api `v1.54.1` by [@&#8203;thaJeztah](https://github.com/thaJeztah) in [#&#8203;13708](docker/compose#13708)
- Bump github.com/docker/cli `v29.4.0` by [@&#8203;thaJeztah](https://github.com/thaJeztah) in [#&#8203;13707](docker/compose#13707)
- Bump compose-go to version `v2.10.2` by [@&#8203;glours](https://github.com/glours) in [#&#8203;13705](docker/compose#13705)
- Bump to Go `1.25.9` by [@&#8203;thaJeztah](https://github.com/thaJeztah) in [#&#8203;13720](docker/compose#13720)
#### New Contributors
- [@&#8203;MaybeSam05](https://github.com/MaybeSam05) made their first contribution in [#&#8203;13634](docker/compose#13634)
- [@&#8203;ishwar170695](https://github.com/ishwar170695) made their first contribution in [#&#8203;13653](docker/compose#13653)
- [@&#8203;derekmisler](https://github.com/derekmisler) made their first contribution in [#&#8203;13665](docker/compose#13665)
- [@&#8203;false200](https://github.com/false200) made their first contribution in [#&#8203;13664](docker/compose#13664)
- [@&#8203;ssam18](https://github.com/ssam18) made their first contribution in [#&#8203;13669](docker/compose#13669)
- [@&#8203;Mohamed-Moumni](https://github.com/Mohamed-Moumni) made their first contribution in [#&#8203;13678](docker/compose#13678)
- [@&#8203;pawannn](https://github.com/pawannn) made their first contribution in [#&#8203;13683](docker/compose#13683)
- [@&#8203;jotka](https://github.com/jotka) made their first contribution in [#&#8203;13629](docker/compose#13629)
- [@&#8203;Lidang-Jiang](https://github.com/Lidang-Jiang) made their first contribution in [#&#8203;13684](docker/compose#13684)
**Full Changelog**: <docker/compose@v5.1.1...v5.1.2>
</details>
---
### Configuration
📅 **Schedule**: (UTC)
- Branch creation
- At any time (no schedule defined)
- Automerge
- At any time (no schedule defined)
🚦 **Automerge**: Enabled.
♻ **Rebasing**: Whenever MR is behind base branch, or you tick the rebase/retry checkbox.
🔕 **Ignore**: Close this MR and you won't be reminded about this update again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box
---
This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMTAuOCIsInVwZGF0ZWRJblZlciI6IjQzLjExMC44IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiLCJhdXRvbWF0aW9uOmJvdC1hdXRob3JlZCIsImRlcGVuZGVuY3ktdHlwZTo6cGF0Y2giXX0=-->
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ishwar170695@glours