ebe3baba78
Replace the delete-before-start workaround with the real mechanism: SYNO.Docker.Project/build_stream is what the DSM "Erstellen" button calls (confirmed via DevTools). It pulls updated images and starts the project. DsmClient.trigger_build_stream(project_id): fires a streaming GET to build_stream, reads the first SSE chunk to confirm DSM accepted the request, then closes. ReadTimeout is swallowed (build running server-side). Immediate JSON error responses are parsed and raised as SynologyError. redeploy_project simplified from 4 steps to 3: 1. Stop (skip for STOPPED, suppress for BUILD_FAILED) 2. trigger_build_stream — DSM pulls images + starts project 3. Poll for RUNNING (timeout raised from 30s → 5min for large pulls) build_stream errors are now fatal (abort with clear message). Removes _read_compose_images_for_project, _try_delete_image and their json/yaml/re imports — no longer needed. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
125 lines
5.6 KiB
Markdown
125 lines
5.6 KiB
Markdown
# Changelog
|
|
|
|
All notable changes to this project will be documented in this file.
|
|
|
|
## [0.2.5] - 2026-04-21
|
|
|
|
### Changed
|
|
|
|
- `redeploy_project`: Replaced the delete-before-start image workaround with
|
|
`SYNO.Docker.Project/build_stream` — the programmatic equivalent of the DSM
|
|
"Erstellen" (Build) button, confirmed via browser DevTools capture.
|
|
New 3-step flow for all project states:
|
|
1. Stop (skipped for STOPPED; error-suppressed for BUILD_FAILED)
|
|
2. `build_stream` — DSM pulls updated images and starts the project via SSE
|
|
3. Poll for RUNNING (timeout raised from 30 s to 5 min to accommodate image pulls)
|
|
`build_stream` errors are now fatal (abort the redeploy with a clear message).
|
|
|
|
### Added
|
|
|
|
- `DsmClient.trigger_build_stream(project_id)` — fires a streaming GET to
|
|
`SYNO.Docker.Project/build_stream`, reads the first SSE chunk to confirm DSM
|
|
accepted the request, then closes the connection. The build continues
|
|
server-side. Handles immediate JSON error responses; swallows `ReadTimeout`
|
|
(stream still open = build running).
|
|
|
|
## [0.2.4] - 2026-04-21
|
|
|
|
### Changed
|
|
|
|
- `redeploy_project`: Replaced broken `SYNO.Docker.Image/pull` with a
|
|
delete-before-start workaround. The tool now reads image tags from the
|
|
project's compose file via FileStation, deletes each cached image before
|
|
calling `start` (so DSM auto-pulls the latest version), then polls for
|
|
`RUNNING`. Image deletion is non-fatal — if it fails the project still starts.
|
|
Unified 4-step flow for all project states (RUNNING, STOPPED, BUILD_FAILED).
|
|
|
|
### Added
|
|
|
|
- `update_image_tag`: Auto-updates environment variables whose value equals
|
|
the numeric version prefix of the old tag when the new tag shares the same
|
|
`<digits>-<suffix>` pattern. For example, changing `2.558-jdk21` →
|
|
`2.560-jdk21` automatically updates `JENKINS_VERSION=2.558` to
|
|
`JENKINS_VERSION=2.560`. The preview (unconfirmed call) now lists which env
|
|
vars will be updated. Only triggers when the variable exists and the pattern
|
|
matches; no change for plain tags like `latest`.
|
|
|
|
## [0.2.3] - 2026-04-21
|
|
|
|
### Changed
|
|
|
|
- `CLAUDE.md` rewritten: removed all operator-specific infrastructure details
|
|
(hostnames, container names, image tags, personal notes). Kept DSM API quirks,
|
|
implementation rules, and tool inventory.
|
|
|
|
## [0.2.2] - 2026-04-21
|
|
|
|
### Fixed
|
|
|
|
- `redeploy_project` (BUILD_FAILED): Pull errors are no longer silently suppressed.
|
|
If the image pull fails (e.g. the tag in compose.yaml does not exist on the registry),
|
|
redeploy aborts immediately with a clear message pointing to `update_image_tag`.
|
|
|
|
## [0.2.1] - 2026-04-21
|
|
|
|
### Fixed
|
|
|
|
- `redeploy_project`: After issuing `start`, the tool now polls the project status every 2 seconds
|
|
for up to 30 seconds until the project reaches `RUNNING`. Previously DSM returned immediately
|
|
while containers were still starting, causing the project to appear as `exited` when checked
|
|
right after redeploy. On timeout a warning is returned instead of an error.
|
|
- `delete_image`: Now distinguishes between running and stopped container references.
|
|
A stopped container holding the image produces a clear hint to use `delete_container`
|
|
or `system_prune` instead of a generic "in use" error.
|
|
- `redeploy_project` (BUILD_FAILED path): Added explicit image pull step before restart
|
|
(`stop → pull → start`). Previously the old cached image could be reused.
|
|
|
|
### Added
|
|
|
|
- `delete_container` — delete a stopped container by name; refuses if container is still running;
|
|
requires `confirmed=True`.
|
|
|
|
## [0.2.0] - 2026-04-14
|
|
|
|
### Added
|
|
|
|
**Images**
|
|
- `list_images` — list local images sorted by size; marks images in use and with available updates
|
|
- `delete_image` — delete image by `name:tag` or hash; refuses if image is used by a container
|
|
|
|
**Container**
|
|
- `container_stats` — live CPU %, RAM used/limit, network I/O, block I/O
|
|
|
|
**System**
|
|
- `system_df` — Docker disk usage: image count/size, running/stopped containers, reclaimable space
|
|
- `system_prune` — remove dangling images, stopped containers, and unused networks
|
|
|
|
**Networks**
|
|
- `list_networks` — list all Docker networks with driver, subnet, gateway, attached containers
|
|
- `create_network` — create a new bridge (or other driver) network
|
|
- `delete_network` — delete a network; refuses if any container is still attached
|
|
|
|
### Fixed
|
|
|
|
- `get_container_status` now reads the correct DSM response fields (`details.State` for status/running, `profile.image` for image name) and displays IP addresses, port bindings, and mounts
|
|
- `redeploy_project` is now status-aware: RUNNING → stop + start; STOPPED → start directly; BUILD_FAILED → force-stop + start; unknown status returns a clear error with workaround hint
|
|
- Container names with hash prefix (e.g. `f93cb8b504f7_jenkins`) are now transparently stripped in `list_containers`, `container_stats`, `get_container_status`, `get_container_logs`, and `exec_in_container`
|
|
|
|
### Changed
|
|
|
|
- `DsmClient` gained a `post_request()` method for form-encoded POST operations required by image delete, network create/delete
|
|
|
|
## [0.1.0] - 2026-04-13
|
|
|
|
### Added
|
|
|
|
- Initial implementation
|
|
- **Projects**: `list_projects`, `get_project_status`, `start_project`, `stop_project`, `redeploy_project`
|
|
- **Containers**: `list_containers`, `get_container_status`, `get_container_logs`, `exec_in_container`
|
|
- **Compose**: `read_compose`, `update_compose`, `update_image_tag`, `update_env_var`
|
|
- **Images**: `check_image_updates`
|
|
- DSM session management with auto re-authentication on session timeout
|
|
- OS keyring integration for secure credential storage
|
|
- 2FA / device token support
|
|
- Interactive `setup` wizard and `check` connectivity command
|