Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
4cc41c1
fix(sync-plugin-url): correct escaping in sed command for pluginURL u…
mstrhakr Jul 2, 2026
1559b25
feat(column-layout): implement shared column layout and visibility he…
mstrhakr Jul 3, 2026
296a34f
chore(columns): cleanup advanced/basic view mode references and legac…
mstrhakr Jul 3, 2026
234439d
refactor(settings-page): reorganize settings and update help funcs
mstrhakr Jul 6, 2026
ce99de3
feat(settings-page): reorganize and enhance update checking section
mstrhakr Jul 6, 2026
546163a
feat(settings-page): enhance settings tab with descriptive help text …
mstrhakr Jul 6, 2026
8dc0e5d
feat(settings-page): enhance defaults with auto/manual verbage
mstrhakr Jul 6, 2026
7cba8d1
feat(settings-page): enhance global actions and settings form handling
mstrhakr Jul 6, 2026
47fdf13
feat(settings-page): add functions to count changed settings and upda…
mstrhakr Jul 11, 2026
7fdb2b5
fix(compose-pull): refactor ComposePullConfirmed function to use opti…
mstrhakr Jul 11, 2026
2e25038
fix(menu): centralize header menu visibility condition
mstrhakr Jul 11, 2026
88a3174
fix(stack): guard and harden deleteStack folder removal
mstrhakr Jul 11, 2026
2ceeb35
fix(ui): make stack deletion dynamic without full reload
mstrhakr Jul 11, 2026
c3f32d4
fix(stack): simplify removal logic in composeDeleteStackFolder function
mstrhakr Jul 11, 2026
72c5913
fix(settings): add debug logging functions for settings changes and s…
mstrhakr Jul 11, 2026
2df8967
feat(settings): enhance auto-check updates functionality with mode se…
mstrhakr Jul 11, 2026
aeb1f6a
fix(settings): remove unused referrer handling script for cleaner set…
mstrhakr Jul 11, 2026
f87a76d
Refactor IconTest and remove redundant tests; add ComposeListEndpoint…
mstrhakr Jul 11, 2026
c010e7a
feat(cache): add function to purge deleted stack caches and update UI…
mstrhakr Jul 12, 2026
abd1665
feat(e2e): add Playwright end-to-end tests for Compose Manager
mstrhakr Jul 12, 2026
b708f57
feat(notification): add composeSendNotification function for stack de…
mstrhakr Jul 12, 2026
82522da
fix(tests): ensure tests remove containers each time
mstrhakr Jul 12, 2026
beea4b5
feat(tests): add UI operation flow tests for Compose Manager and extr…
mstrhakr Jul 12, 2026
9dad57d
feat(tests): enhance foreground operation tests for Compose Manager w…
mstrhakr Jul 12, 2026
2519868
refactor: remove basic output style handling
mstrhakr Jul 13, 2026
7cfd9d5
fix: enhance stack update handling with improved reload queue management
mstrhakr Jul 17, 2026
2fea181
feat: implement plugin-local update check for Compose Manager to enha…
mstrhakr Aug 13, 2026
15af3de
fix(nchan): optimize docker stats publishing and address shared-memor…
mstrhakr Aug 14, 2026
f0c149a
feat: add additional ignored error messages for PHPStan analysis
mstrhakr Aug 14, 2026
86fc450
feat: implement client-side control for compose_info publisher and en…
mstrhakr Aug 14, 2026
3f9d05e
fix: ensure proper exit code propagation for compose commands and rec…
mstrhakr Aug 14, 2026
ff4f80e
fix: ensure new stacks create app-managed project override templates …
mstrhakr Aug 14, 2026
4ee5836
fix: enhance image digest retrieval and add running container check i…
mstrhakr Aug 14, 2026
63d32eb
feat: enhance error handling and metadata retrieval in compose loadin…
mstrhakr Aug 17, 2026
919cf9c
fix: remove HTML coverage report generation from PHPUnit configuration
mstrhakr Aug 17, 2026
2c9db2a
fix: ensure function definitions are wrapped in function_exists check…
mstrhakr Aug 17, 2026
c6d3be6
fix: add missing Playwright dependencies installation step in E2E tes…
mstrhakr Aug 17, 2026
cacdd90
chore: sync pluginURL+README for dev branch [skip ci]
github-actions[bot] Aug 17, 2026
e5a04f4
fix(icons): resolve native Docker tab/Dashboard icons for local paths…
mstrhakr Aug 24, 2026
59fa625
fix(tests): use PATH_SEPARATOR for COMPOSE_FILE in env file to suppor…
mstrhakr Aug 24, 2026
d20e56a
chore: update changelog for v2026.08.23.2252 [skip ci]
github-actions[bot] Aug 24, 2026
220dd98
Release v2026.08.23.2252 [skip ci]
github-actions[bot] Aug 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/sync-plugin-url.yml
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ jobs:

if [[ "$CURRENT_URL_BRANCH" != "$BRANCH" ]]; then
echo "Branch mismatch - fixing pluginURL..."
sed -i -E "s#^<!ENTITY pluginURL \"https://raw.githubusercontent.com/&github;/[^/]*/&name;\\.plg\">#<!ENTITY pluginURL \"https://raw.githubusercontent.com/&github;/${BRANCH}/&name;.plg\">#" "$PLG_FILE"
sed -i -E "s#^<!ENTITY pluginURL \"https://raw.githubusercontent.com/&github;/[^/]*/&name;\\.plg\">#<!ENTITY pluginURL \"https://raw.githubusercontent.com/\\&github;/${BRANCH}/\\&name;.plg\">#" "$PLG_FILE"

EXPECTED_LINE="<!ENTITY pluginURL \"https://raw.githubusercontent.com/&github;/${BRANCH}/&name;.plg\">"
if ! grep -Fxq "$EXPECTED_LINE" "$PLG_FILE"; then
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,12 +81,12 @@ The built-in editor provides multiple tabs for managing your compose stack:
- **Autostart & Shutdown** - Configurable per-stack autostart with optional force-recreate, wait-for-Docker, and configurable timeouts. Graceful shutdown handling.
- **Visibility & Filtering** - Optionally hide Compose-managed containers from the native Docker UI and Dashboard tile to avoid duplicate entries (behavior varies by unRAID version).
- **Backup & Restore** - Manual and scheduled backups with selective restore from the UI.
- **Web Terminal** - Integrated ttyd terminal for live, colorized compose command output; also supports a basic output mode.
- **Web Terminal** - Integrated ttyd terminal for live, colorized compose command output.
- **Profiles** - Full support for Docker Compose profiles, including multi-profile selection per action.
- **External Paths** - Compose files and env files can live outside the default projects folder (external compose path and env path per stack).
- **Override File Management** - Centralized management of override files (`compose.override.yaml`, `compose.override.yml`, `docker-compose.override.yaml`, `docker-compose.override.yml`) with service rename handling.
- **Stack Editor** - Full-screen modal editor with four tabs: Compose (YAML with live validation), ENV, Web UI Labels (icon/WebUI/shell per service via override file), and Settings (name, description, icon URL, WebUI URL, default profile, external paths). Ctrl+S to save, Esc to close.
- **Basic / Advanced View Toggle** - Toggle between a compact view and an advanced view exposing additional columns (SHA diffs, force-update links) — scoped to the Compose tab to avoid affecting the Docker tab.
- **Column Customizer & Layout** - Choose which stack and service columns are visible and in what order; extra detail fields (for example SHA snippets and force-update links) follow your saved layout in the Compose tab.
- **Compose File Discovery** - Automatically detects all four standard compose file names (`compose.yaml`, `docker-compose.yaml`, `compose.yml`, `docker-compose.yml`).
- **Filename Preservation** - Existing compose and override filenames are preserved; upgrades do not auto-rename your stack files.
- **Build Stack Support** - Stacks with a `build:` section in the compose file are detected automatically; context menu and update labels adapt ("Build", "Build & Up", "Update & Rebuild").
Expand Down
110 changes: 46 additions & 64 deletions compose.manager.plg
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
<!DOCTYPE PLUGIN [
<!ENTITY name "compose.manager">
<!ENTITY author "mstrhakr">
<!ENTITY version "2026.07.02">
<!ENTITY version "2026.08.23.2252">
<!ENTITY launch "Settings/&name;.settings">
<!ENTITY packageVER "&version;">
<!ENTITY packageMD5 "936c69547f5a759e90f8915409f41835">
<!ENTITY pkgBUILD "0825">
<!ENTITY packageMD5 "43bf2ab4917dbad616a9e39ac7291a92">
<!ENTITY pkgBUILD "2252">
<!ENTITY packageName "&name;-&packageVER;-noarch-&pkgBUILD;">
<!ENTITY packagefile "&packageName;.txz">
<!ENTITY github "mstrhakr/compose_plugin">
<!ENTITY pluginURL "https://raw.githubusercontent.com/&github;/main/&name;.plg">
<!ENTITY pluginURL "https://raw.githubusercontent.com/&github;/dev/&name;.plg">
<!ENTITY packageURL "https://github.com/&github;/releases/download/v&version;/&packagefile;">
<!ENTITY pluginsPATH "/boot/config/plugins">
<!ENTITY pluginLOC "&pluginsPATH;/&name;">
Expand All @@ -36,67 +36,49 @@
>

<CHANGES>
###2026.07.02
- Features (compose): enhance column customization with reorder functionality and UI updates
- Features (compose): implement stack row striping synchronization for improved UI consistency
- Features (compose): add health status column and related functionality to stack and container views
- Features: add custom interval settings for compose stats and enhance nchan publisher
- Features: refactor column customization UI with transfer lists and responsive design
- Features: enhance stack toggle functionality with batching and user intent tracking
- Features: add expand/collapse all functionality for compose stacks
- Features: promote col customizer and remove basic/advanced toggle
- Features: Implement snapshot loading for compose metrics and enhance data publishing to ensure data shows during progressive loading
- Features: Add column visibility customization for stack and service tables
- Features (tests): add tests for pruning auto-managed and legacy labels only orphans
- Features: add 'Remove Orphans by Default' option and integrate into compose actions
- Features: add progressive stack list loading
- Features (container): add persistent container cache and icon resolution logic
- Features: return to update dialog when changelog is dismissed
- Features: show docker.versions changelogs in the update dialog
- Bug Fixes (composeStats): enhance memory value parsing and sanitize docker stats fields
- Bug Fixes: enhance logging for stack management and settings handling
- Bug Fixes: add support for --remove-orphans flag in compose command
- Bug Fixes: add support for removeOrphans flag in performComposeAction
- Bug Fixes: delay stack refresh after prompt to ensure proper UI feedback
- Bug Fixes (cache): add endpoint to retrieve persistent container cache and update loading method
- Bug Fixes (deploy.sh, test.sh): update file permissions to make scripts executable
- Bug Fixes (Exec.php): update dockerVersionsInstalled check to verify plugin directory existence and cleanup tests
- Bug Fixes (ExecActionsTest): improve testGetSavedUpdateStatusDockerVersionsNotInstalled for determinism
- Bug Fixes (composeLoadlist): bind autostart change handler early for dynamic rows and update loading status on success
- Bug Fixes (Exec.php): improve dockerVersionsInstalled check to verify actual changelog assets
- Bug Fixes (sync-plugin-url): enhance branch detection and pluginURL synchronization logic
- Bug Fixes (docker.versions): conditionally load external styles for Docker versions if available
- Bug Fixes (compose): optimize cache invalidation logic based on stack/container structure changes
- Bug Fixes (changelog): conditionally load changelog script if available so it works when compose is on its own tab
- Bug Fixes (update): update button now triggers update action instead of always triggering force update
- Bug Fixes (composeSortable): enhance details row detachment logic during drag-and-drop
- Bug Fixes (composeSortable): improve drag-and-drop behavior by detaching non-sortable rows
- Bug Fixes (profiles): unify action profile picker and enforce profile precedence
- Bug Fixes: plug poll interval leak and skip dialog reopen when warnings disabled
- Bug Fixes: whitelist changelog message types, filter scaffolding noise
- Bug Fixes: discard stale Nchan buffer and concurrent changelog messages
- Bug Fixes: correct version and package details in plugin metadata
- Performance (compose): throttle dockerload cache paints during websocket bursts
- Performance (compose): avoid full-table applyListView during progressive row inserts
- Performance (compose): debounce composeListRefreshed during progressive row load
- Performance: implement parallel project loading with request queuing and progress tracking
- Refactoring: update echoComposeCommand and echoComposeCommandMultiple to use options array
- Refactoring: delegate changelog display to docker.versions' showChangeLog()
- Documentation: document docker.versions changelog integration in user guide
- Tests: add unit tests for getSavedUpdateStatus docker.versions detection
- Chores: update changelog for v2026.06.18.1637 [skip ci]
- Chores: update changelog for v2026.06.15.1000 [skip ci]
- Chores: update changelog for v2026.06.14.1531 [skip ci]
- Chores: update changelog for v2026.06.14.1530 [skip ci]
- Chores: update changelog for v2026.06.14.1451 [skip ci]
- Chores: update changelog for v2026.06.11.1526 [skip ci]
- Chores: update changelog for v2026.06.11.1517 [skip ci]
###2026.08.23.2252
- Features: enhance error handling and metadata retrieval in compose loading process
- Features: implement client-side control for compose_info publisher and enhance WebSocket management for hidden tabs
- Features: add additional ignored error messages for PHPStan analysis
- Features: implement plugin-local update check for Compose Manager to enhance image update accuracy
- Features (tests): enhance foreground operation tests for Compose Manager with modal interactions and image validation
- Features (tests): add UI operation flow tests for Compose Manager and extract shared helpers
- Features (notification): add composeSendNotification function for stack delete notifications
- Features (e2e): add Playwright end-to-end tests for Compose Manager
- Features (cache): add function to purge deleted stack caches and update UI accordingly
- Features (settings): enhance auto-check updates functionality with mode selection and custom intervals
- Features (settings-page): add functions to count changed settings and update UI accordingly
- Features (settings-page): enhance global actions and settings form handling
- Features (settings-page): enhance defaults with auto/manual verbage
- Features (settings-page): enhance settings tab with descriptive help text and rephrase section titles
- Features (settings-page): reorganize and enhance update checking section
- Features (column-layout): implement shared column layout and visibility helpers
- Bug Fixes (tests): use PATH_SEPARATOR for COMPOSE_FILE in env file to support Windows development
- Bug Fixes (icons): resolve native Docker tab/Dashboard icons for local paths (#129)
- Bug Fixes: add missing Playwright dependencies installation step in E2E test setup
- Bug Fixes: ensure function definitions are wrapped in function_exists checks to prevent redeclaration errors
- Bug Fixes: remove HTML coverage report generation from PHPUnit configuration
- Bug Fixes: enhance image digest retrieval and add running container check in auto-update script to match manual update path Fixes #132
- Bug Fixes: ensure new stacks create app-managed project override templates and update tests accordingly Fixes #134
- Bug Fixes: ensure proper exit code propagation for compose commands and record operation exit status
- Bug Fixes (nchan): optimize docker stats publishing and address shared-memory exhaustion
- Bug Fixes: enhance stack update handling with improved reload queue management
- Bug Fixes (tests): ensure tests remove containers each time
- Bug Fixes (settings): remove unused referrer handling script for cleaner settings page
- Bug Fixes (settings): add debug logging functions for settings changes and state tracking
- Bug Fixes (stack): simplify removal logic in composeDeleteStackFolder function
- Bug Fixes (ui): make stack deletion dynamic without full reload
- Bug Fixes (stack): guard and harden deleteStack folder removal
- Bug Fixes (menu): centralize header menu visibility condition
- Bug Fixes (compose-pull): refactor ComposePullConfirmed function to use options object for parameters
- Bug Fixes (sync-plugin-url): correct escaping in sed command for pluginURL update
- Refactoring: remove basic output style handling
- Refactoring (settings-page): reorganize settings and update help funcs
- Chores: sync pluginURL+README for dev branch [skip ci]
- Chores: remove test compose setup
- Fix dropdown z-index on docker page when clicking on stack icon
- Add support for additional compose files per stack
- Potential fix for pull request finding
- [View all changes](https://github.com/mstrhakr/compose_plugin/compare/v2026.06.06...v2026.07.02)
- Chores (columns): cleanup advanced/basic view mode references and legacy logic
- Refactor IconTest and remove redundant tests; add ComposeListEndpointTest
- [PR #139](https://github.com/mstrhakr/compose_plugin/pull/139)
- [beta release diff](https://github.com/mstrhakr/compose_plugin/compare/v2026.07.02...v2026.08.23.2252)
</CHANGES>

<!-- The 'pre-install' script. -->
Expand Down
32 changes: 31 additions & 1 deletion docs/testing.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,36 @@ php vendor/bin/phpunit --coverage-html tests/coverage/html
docker run --rm -v "${PWD}:/code" -w /code bats/bats:latest tests/unit/*.bats
```

### Running Playwright E2E (Live Server, Read-Only)

The E2E suite is intentionally designed for non-destructive smoke checks against a real Unraid server.

```bash
cd tests/e2e
npm install
npx playwright install chromium firefox
```

Create or refresh auth state:

```bash
cd tests/e2e
E2E_BASE_URL="https://your-unraid-host" npx playwright codegen "$E2E_BASE_URL" --save-storage=.auth/storage-state.json
```

Run the suite:

```bash
cd tests/e2e
E2E_BASE_URL="https://your-unraid-host" \
E2E_STORAGE_STATE=".auth/storage-state.json" \
E2E_COMPOSE_PATH="/Docker/Compose" \
E2E_IGNORE_HTTPS_ERRORS="1" \
npm test
```

See `tests/e2e/README.md` for details and safety guardrails.

## VS Code Integration

The workspace is configured with PHPUnit Test Explorer. After opening the project:
Expand All @@ -41,7 +71,7 @@ The workspace is configured with PHPUnit Test Explorer. After opening the projec

## Test Structure

```
```text
tests/
├── framework/ # Submodule: plugin-tests framework
│ └── src/
Expand Down
6 changes: 6 additions & 0 deletions phpstan.neon
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,19 @@ parameters:
- "#my_scale_status#"
- "#csrf_token#"
- "#getComposeRoot#"
- "#getCurlHandle#"
identifier: function.notFound
# Platform classes (Docker management)
- messages:
- "#DockerClient#"
- "#DockerUpdate#"
- "#DockerUtil#"
identifier: class.notFound
# method_exists() against platform classes above is always false in
# static analysis (the classes only exist at Unraid runtime), which is
# expected -- it's a runtime capability check, not a real bug.
- message: "#Call to function method_exists\\(\\) with 'DockerUtil' and#"
identifier: function.impossibleType
# Global variables from platform/defines.php
- message: "#Variable \\$\\w+ might not be defined#"
identifier: variable.undefined
Expand Down
1 change: 0 additions & 1 deletion phpunit.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
</source>
<coverage>
<report>
<html outputDirectory="tests/coverage/html"/>
<clover outputFile="tests/coverage/clover.xml"/>
<text outputFile="tests/coverage/coverage.txt"/>
</report>
Expand Down
Loading