Implements the design captured in docs/adr/0001-docker-compose-profile-support.md
(jesseduffield/lazydocker#423). Profiles render as pseudo-projects in the
project panel; selecting one filters the services and containers panels to
the services that activate with that profile, and Up/Down/Restart on the
selection use docker compose --profile X invocations.
Key choices:
- Profile is a flag on Project (IsProfile bool), not a new type. Avoids a
generic-type split across the SideListPanel and CommandObject.
- Reuse existing command templates (Up, Down, DownWithVolumes, Restart,
AllLogs, DockerComposeConfig). NewCommandObject appends --profile X when
a profile context is set, so no separate UpProfile/DownProfile/... family
is needed. Adds a new Restart template (master had no project-level
restart at all).
- Discovery via 'docker compose config --profiles' and
'docker compose --profile X config --services', cached on DockerCommand
for the session. Soft-fails on error (logs once, caches empty) so the UI
degrades to "no profile rows" rather than popping an error.
- Per-profile service filtering uses the local project and the profile's
service set (default services + profile-X services, per docker semantics).
- No new keybinding for project/profile restart in this PR; handler exists
for follow-up discussion.
- New unit tests cover NewCommandObject --profile injection, GetProfiles
caching, GetProfileServices caching, and the soft-fail path.
fixes: https://github.com/jesseduffield/lazydocker/issues/423
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Addresses Copilot review comments on PR #797:
- Containers panel title, initial focus selection, and the local-project
inclusion in getDiscoveredProjects all switched from
InDockerComposeProject to IsProjectScoped, so they stay consistent
when -p is given outside a compose dir.
- Adds TestIsProjectScoped table test covering all four combinations.
InDockerComposeProject is still used at the call sites that genuinely
require a compose dir (renderDockerComposeConfig, GetServices).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Upgrade Docker client from v27.1.1 to v28.5.2
- Update hardcoded API version from 1.25 to 1.52
- Enable API version negotiation for better compatibility
- Fix compatibility with Docker Engine 29.0.0 and newer versions
Resolves issues with lazydocker not working with latest Docker clients.
Previously we separately obtained container details every second,
meaning there was a second of not knowing whether a given container was
using a TTY or not, and that meant we were using the wrong streaming
method for logs, which led to a black screen.