Skip to content

fix (regression): compose build render build output with tty support #13107

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 28, 2025

Conversation

ndeloof
Copy link
Contributor

@ndeloof ndeloof commented Jul 28, 2025

What I did
buildkit (actually, containerd/console) requires a *File to access the raw terminal and render build progress UI
it actually can't just be based on a file descriptor (we can get for dockerCli.Out().FD()) as windows support requires an actual file 🥲
so .. we have to assume dockerCli.Out == os.Stdout, which basically makes dockerCli.Out abstraction useless 🥹

Related issue
fixes #13099

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

@ndeloof ndeloof requested a review from a team as a code owner July 28, 2025 06:46
@ndeloof ndeloof requested a review from glours July 28, 2025 06:46
@ndeloof ndeloof changed the title buildkit require os.Stdout to access the raw terminal fix (regression): compose build render build output with tty support Jul 28, 2025
@glours glours enabled auto-merge (rebase) July 28, 2025 07:16
@glours glours merged commit fe04691 into docker:main Jul 28, 2025
50 of 51 checks passed
@thaJeztah
Copy link
Member

thaJeztah commented Jul 28, 2025

Hm... interesting; I saw this PR and recalled I stumbled on something similar. While it's for In() in this case, I guess this may partially answer the question I dropped in a TODO here, but I had no Windows machine to verify those bits; https://github.com/docker/cli/blob/a1035b0796241b3bbd0f41940525373001fc146c/cli/command/registry.go#L128-L139

func PromptUserForCredentials(ctx context.Context, cli Cli, argUser, argPassword, defaultUsername, serverAddress string) (registrytypes.AuthConfig, error) {
	// On Windows, force the use of the regular OS stdin stream.
	//
	// See:
	// - https://github.com/moby/moby/issues/14336
	// - https://github.com/moby/moby/issues/14210
	// - https://github.com/moby/moby/pull/17738
	//
	// TODO(thaJeztah): we need to confirm if this special handling is still needed, as we may not be doing this in other places.
	if runtime.GOOS == "windows" {
		cli.SetIn(streams.NewIn(os.Stdin))
	}

Similar code in another place; https://github.com/docker/cli/blob/a1035b0796241b3bbd0f41940525373001fc146c/internal/prompt/prompt.go#L90-L93

Definitely looks like something to look into. The Streams types are convenient, but it's definitely possible that either someone implemented them with the wrong assumptions, or that these subtleties got lost during some refactor.

@ndeloof ndeloof deleted the buildkit_stdout branch July 28, 2025 09:02
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Aug 11, 2025
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [docker/compose](https://github.com/docker/compose) | patch | `v2.39.1` -> `v2.39.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>

### [`v2.39.2`](https://github.com/docker/compose/releases/tag/v2.39.2)

[Compare Source](docker/compose@v2.39.1...v2.39.2)

#### What's Changed

##### 🐛 Fixes

- Fix (regression): compose build render build output with tty support by [@&#8203;ndeloof](https://github.com/ndeloof) in docker/compose#13107
- Add missing `_MODEL` suffix to model variable pass to dependent services of a model by [@&#8203;glours](https://github.com/glours) in docker/compose#13109
- Apply `BUILDKIT_PROGRESS` value when building with bake by [@&#8203;glours](https://github.com/glours) in docker/compose#13110
- Define `pull` and `no_cache` from either service or flags values when building with bake by [@&#8203;glours](https://github.com/glours) in docker/compose#13133
- Only monitor attached services on `up` command by [@&#8203;glours](https://github.com/glours) in docker/compose#13114

##### 🔧  Internal

- Add Streams Comment by [@&#8203;suwakei](https://github.com/suwakei) in docker/compose#13103
- Add test of `json.go` by [@&#8203;suwakei](https://github.com/suwakei) in docker/compose#13106
- Refactoring of redundant condition checks by [@&#8203;suwakei](https://github.com/suwakei) in docker/compose#13104
- Eliminated magic string by [@&#8203;suwakei](https://github.com/suwakei) in docker/compose#13105
- Use log API for containers we didn't attached to by [@&#8203;ndeloof](https://github.com/ndeloof) in docker/compose#13111
- Use `cli-plugins/metadata` package by [@&#8203;thaJeztah](https://github.com/thaJeztah) in docker/compose#13130
- `pkg/compose`: simplify getting auth-config key by [@&#8203;thaJeztah](https://github.com/thaJeztah) in docker/compose#13120
- Add go as a prerequisite in build instructions by [@&#8203;mattrunyon](https://github.com/mattrunyon) in docker/compose#13131

##### ⚙️ Dependencies

- Build(deps): bump github.com/docker/cli from `28.3.2+incompatible` to `28.3.3+incompatible` by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in docker/compose#13116
- Build(deps): bump github.com/docker/docker from `28.3.2+incompatible` to `28.3.3+incompatible` by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in docker/compose#13115
- Build(deps): bump github.com/containerd/containerd/v2 from `2.1.3` to `2.1.4` by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in docker/compose#13119
- Build(deps): bump github.com/docker/go-connections from `0.5.0` to `0.6.0` by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in docker/compose#13137
- Build(deps): bump golang.org/x/sys from `0.34.0` to `0.35.0` by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in docker/compose#13138
- Bump golang to `1.23.12` by [@&#8203;austinvazquez](https://github.com/austinvazquez) in docker/compose#13142

#### New Contributors

- [@&#8203;mattrunyon](https://github.com/mattrunyon) made their first contribution in docker/compose#13131
- [@&#8203;austinvazquez](https://github.com/austinvazquez) made their first contribution in docker/compose#13142

**Full Changelog**: docker/compose@v2.39.1...v2.39.2

</details>

---

### Configuration

📅 **Schedule**: 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:eyJjcmVhdGVkSW5WZXIiOiI0MS41OC4yIiwidXBkYXRlZEluVmVyIjoiNDEuNTguMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiUmVub3ZhdGUgQm90Il19-->
Sign up for free to 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.

[BUG] Updating 2.38.2 to 2.39.x changes docker compose build output progress to plain
3 participants