github RunOnFlux/flux v8.6.0

12 hours ago

Summary

This release replaces the external Watchtower Docker container with a native image update service built into FluxOS, adds environment variable support for benchmark paths on Arcane systems, exposes new benchmark metrics in the host info API, and fixes SEO-blocking robots.txt behavior.

Changes

Replace Watchtower with Native Image Update Service

The third-party containrrr/watchtower container that previously monitored and auto-updated application Docker images has been fully replaced by a new native imageUpdateService module integrated directly into FluxOS.

Why: Running Watchtower as a separate Docker container added an external dependency, offered limited control over update timing/rate-limiting, and couldn't leverage FluxOS internals like encrypted registry credentials or global operation state. A native service eliminates this dependency and provides
fine-grained control.

What changed:

  • New file ZelBack/src/services/imageUpdateService.js — A ~470-line service that:
    • Periodically checks all installed apps for Docker image updates (every 6 hours)
    • Compares local container image digests against remote registry manifest digests
    • Supports both single-container apps (spec v1–v3) and multi-component compose apps (v4+)
    • Triggers soft redeploys when newer images are detected
    • Implements rate-limit detection — aborts the check cycle if a registry returns 429
    • Staggers checks with 5-second delays between apps and 2-minute cooldowns after redeploys
    • Uses a randomized initial delay (10–30 minutes) to prevent synchronized registry pressure across the network
    • Respects global operation locks (install/remove/redeploy in progress) to avoid conflicts
    • Handles registry authentication via registryCredentialHelper for private repositories
  • New method fetchManifestDigestOnly() in ZelBack/src/services/utils/imageVerifier.js — Performs lightweight HEAD requests to retrieve Docker-Content-Digest headers without downloading full manifests, significantly reducing bandwidth for update checks
  • ZelBack/src/services/serviceManager.js — Startup sequence updated to:
    1. Remove any existing flux_watchtower container (graceful migration)
    2. Start the native image update service after a 10-minute delay
  • Removed fluxService.installFluxWatchTower() — The ~18-line function that pulled and ran the Watchtower container is deleted from ZelBack/src/services/fluxService.js along with its export
  • Deleted helpers/fluxwatchtower.sh — The shell script used to install Watchtower is no longer needed
  • New test suite tests/unit/imageUpdateService.test.js — Comprehensive unit tests covering:
    • Watchtower container removal (5 scenarios)
    • Local image digest retrieval (5 scenarios)
    • Remote manifest digest retrieval (4 scenarios)
    • Update detection for v1–v3 and v4+ apps (5 scenarios)
    • Update triggering with operation lock checks (6 scenarios)
    • Full update cycle workflow (4 scenarios)
    • Service lifecycle start/stop (4 scenarios)
  • Updated tests/unit/fluxService.test.js — Removed tests for the deleted installFluxWatchTower function

Benchmark Path Environment Variable Support

  • ZelBack/src/services/fluxService.js — The benchmarkDebug() and tailBenchmarkDebug() functions now respect the FLUXBENCH_PATH environment variable, falling back to the default ~/.fluxbenchmark path when unset. This enables correct path resolution on Arcane systems where the benchmark
    directory may be in a non-standard location.

Host Info API Enhancements

  • ZelBack/src/services/fluxNodeService.js — The host info response now conditionally includes the eps_singlethread benchmark field when available (nodes running benchmark v6.1.0+), providing single-threaded CPU performance data alongside the existing multi-core eps metric.
  • docs/flux-node-service.md — Updated API documentation to reflect new benchmark fields (disk, diskwritespeed, eps_singlethread) and the dataCenter geolocation indicator.

SEO Fix: robots.txt Serving

  • homeServer.js — Removed the hardcoded /robots.txt route that returned Disallow: / for all user-agents, which was blocking search engines from indexing any pages. The express.static middleware now serves the actual robots.txt from the CloudUI build output, allowing each deployment to control
    its own crawling rules.

Version Bump

  • package.json — Version incremented from 8.5.0 to 8.6.0

Test Plan

  • Verify the native image update service starts correctly after the 10-minute delay on node boot
  • Confirm any existing Watchtower container is automatically removed on upgrade
  • Validate image update detection works for both single-container (v1–v3) and compose (v4+) apps
  • Test rate-limit handling by verifying the service aborts gracefully on 429 responses
  • Confirm eps_singlethread appears in host info responses on nodes with benchmark v6.1.0+
  • Verify FLUXBENCH_PATH env variable is respected on Arcane systems
  • Check that robots.txt is served correctly from CloudUI static files
  • Run unit test suite: npm run test:zelback:unit

Don't miss a new flux release

NewReleases is sending notifications on new releases.