wip: app-deploy dependency tracking (incomplete — needs endpoint wiring)

Half-finished feature for declaring and resolving app dependencies
when deploying. Preserved here for later finishing.

What's done:
- app-templates.js: dependsOn declarations on 7 templates
  (sonarr, radarr, lidarr, readarr, bazarr, overseerr, tautulli).
- routes/apps/deploy.js: helper functions checkDependencies(),
  topologicalSortTemplates(), buildDefaultDepConfig().
- routes/recipes/deploy.js: wait-for-health between recipe components
  via appsHelpers.waitForHealthCheck() (verify export exists).
- status/js/app-selector.js: dependency-warning modal injected into
  app-selector flow, with a "deploy with deps" checkbox.

What's missing (blockers for merge):
- POST /api/v1/apps/check-dependencies endpoint — frontend calls it
  (app-selector.js around line 395) but the route is never registered.
  Helper functions exist; just need to expose them. Frontend currently
  404s and falls back to plain deploy (line 401), so the dep-aware
  flow is non-functional.
- Auto-deploy-with-dependencies handler in the modal — checkbox
  exists but nothing wires the "yes deploy them" choice into actually
  deploying the listed dependencies before the target app.
- No tests around topological sort behaviour (circular deps,
  diamond deps, missing deps).

Lifted out of wip/cloud-backups-and-history when the cloud-backups +
resource-history features were merged to main (commit d81d118).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-06 19:15:42 -07:00
parent d81d1183db
commit 0f2cce362f
4 changed files with 349 additions and 5 deletions

View File

@@ -158,6 +158,7 @@ const APP_TEMPLATES = {
healthCheck: "/api/v3/system/status",
subpathSupport: 'native',
urlBaseEnv: 'URL_BASE',
dependsOn: ["prowlarr", "qbittorrent"],
setupInstructions: [
"Configure download clients (qBittorrent, etc.)",
"Add indexers for content discovery",
@@ -190,7 +191,8 @@ const APP_TEMPLATES = {
defaultPort: 7878,
healthCheck: "/api/v3/system/status",
subpathSupport: 'native',
urlBaseEnv: 'URL_BASE'
urlBaseEnv: 'URL_BASE',
dependsOn: ["prowlarr", "qbittorrent"]
},
"prowlarr": {
@@ -1172,6 +1174,7 @@ const APP_TEMPLATES = {
healthCheck: "/api/v1/system/status",
subpathSupport: 'native',
urlBaseEnv: 'URL_BASE',
dependsOn: ["prowlarr", "qbittorrent"],
setupInstructions: [
"Configure download clients",
"Add indexers",
@@ -1205,6 +1208,7 @@ const APP_TEMPLATES = {
healthCheck: "/api/v1/system/status",
subpathSupport: 'native',
urlBaseEnv: 'URL_BASE',
dependsOn: ["prowlarr", "qbittorrent"],
setupInstructions: [
"Configure download clients",
"Add indexers for books",
@@ -1238,6 +1242,7 @@ const APP_TEMPLATES = {
healthCheck: "/",
subpathSupport: 'native',
urlBaseEnv: 'BASE_URL',
dependsOn: ["sonarr", "radarr"],
setupInstructions: [
"Connect to Sonarr and Radarr",
"Configure subtitle providers",
@@ -1266,6 +1271,7 @@ const APP_TEMPLATES = {
healthCheck: "/api/v1/status",
subpathSupport: 'native',
urlBaseEnv: 'BASE_PATH',
dependsOn: ["sonarr", "radarr"],
setupInstructions: [
"Connect to Plex, Jellyfin, or Emby server",
"Link Sonarr and Radarr",
@@ -1295,6 +1301,7 @@ const APP_TEMPLATES = {
healthCheck: "/",
subpathSupport: 'native',
urlBaseEnv: 'TAUTULLI_HTTP_ROOT',
dependsOn: ["plex"],
setupInstructions: [
"Connect to Plex server",
"Configure notifications",