Changelog¶
All notable changes to this project are documented in this file.
This project uses semantic versioning for the NZBGetVPN image/codebase version stored in VERSION.
[5.6.7] - 2026-05-12¶
Changed¶
AGENTS.md: new MkDocs (published documentation site) section — agents must keepmkdocs.yml/navand strict builds aligned with documentation changes; validation checklist cross-references this section.
[5.6.6] - 2026-05-12¶
Changed¶
README.md: moved Documentation to the top (prominent website link, what the site contains, local preview, GitHub Pages one-time setup); TOC and Script Docs now point readers to the published site; removed the duplicate trailing documentation section.mkdocs.yml: refreshedsite_descriptionto match the documentation-first positioning.README-containers.md: Docs workflow badge and a bold documentation link under the intro.- Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.6.5] - 2026-05-12¶
Changed¶
docs.yml: clearer multi-line failure text for Pages verify (404 vs wrongbuild_type) so the settings URL is not glued to the next log line; explain that GET/pagesstays 404 until Pages settings are saved once.README.md: note correct Pages URL path and that the API has no site record until the first Save.
[5.6.4] - 2026-05-12¶
Changed¶
docs.yml: beforedeploy-pages, run Verify GitHub Pages uses Actions (actions/github-script) callingGET /repos/{owner}/{repo}/pagesso a misconfigured Pages source fails with an explicit message (build_typemust beworkflow) instead of onlycreatePagesDeployment404.README.md: note the new verify step in Pages troubleshooting.
[5.6.3] - 2026-05-12¶
Changed¶
docs.yml: allow Deploy onworkflow_dispatchwhen the branch ismain(so you can redeploy from the Actions tab after fixing Pages settings without an empty commit); restrict Upload Pages artifact tomainonly; set Pages concurrencycancel-in-progress: falseto match GitHub’s starter guidance; addcontents: readto the deploy job permissions alongsidepages: writeandid-token: write.README.md: expand Pages deploy troubleshooting (official docs link, private repo / org notes, manual Run workflow onmain).
[5.6.2] - 2026-05-12¶
Changed¶
docs.yml: setpermissions(pages: write,id-token: write) on the deploy job explicitly, matching theactions/deploy-pagesdocumentation.README.md: Pages deploy troubleshooting forcreatePagesDeployment404 (Pages source must be GitHub Actions) and a short note on the harmless Nodepunycodedeprecation warning fromdeploy-pages.
[5.6.1] - 2026-05-12¶
Changed¶
- GitHub Actions: bump
actions/upload-artifactto v6 (Node 24 runtime) in quality-checks, smoke-test, security-scan, and release-orchestration workflows to clear the Node 20 deprecation warning. - Docs workflow:
actions/upload-pages-artifact@v5andactions/deploy-pages@v5(aligned with artifact upload v7 / Node 24); dropFORCE_JAVASCRIPT_ACTIONS_TO_NODE24now that these actions target Node 24 natively. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.6.0] - 2026-05-12¶
Added¶
- Material for MkDocs documentation site:
mkdocs.yml,docs/requirements.txt,docs/stylesheets/extra.css, symlinkeddocs/entries into existing markdown, GitHub Actions workflow.github/workflows/docs.yml(strict build on PR/push tomain/develop, deploy to GitHub Pages frommain). Site URL: https://marc0janssen.github.io/nzbgetvpn/. - Repository root
index.mdsymlink toREADME.mdso the Compose examples README can link to the main documentation with a path that resolves both on GitHub and in the MkDocs build.
Changed¶
README.md: clearer relative links for MkDocs strict mode (examples/README.md, script docs overview anchor), Docs CI badge, and a Documentation site section describing local preview and Pages setup.examples/README.md: main documentation link now targets../index.md(same content asREADME.mdvia the root symlink)..gitignore: ignoresite/and.venv-docs/.
[5.5.21] - 2026-05-09¶
Changed¶
- Added
--docker-repoand--platformCLI overrides tobuild.shandbuild-testing.sh(highest precedence after env defaults,build.env/build-testing.env, and exported variables). - Updated
README.md,build.env.example, andbuild-testing.env.exampleaccordingly. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.5.20] - 2026-05-09¶
Changed¶
- Added optional
build.env/build-testing.envsupport tobuild.shandbuild-testing.shforDOCKER_IMAGE_REPOandBUILD_PLATFORM, with committed templatesbuild.env.exampleandbuild-testing.env.example,.gitignoreentries for the untracked env files, and documentation under Docker Hub builds inREADME.mdplus a pointer inREADME-containers.md. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.5.19] - 2026-05-09¶
Fixed¶
build-testing-local.sh: loadingbuild-testing-local.envwas effectively discarded because the post-source restore logic treated an empty pre-save placeholder as an exported value and clearedLOCAL_REPO/LOCAL_PLATFORM. Restore now runs only when those variables were actually set before sourcing the file.- Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.5.18] - 2026-05-09¶
Changed¶
- Ignored
build-testing-local.envin.gitignoreso local registry settings are not committed or pushed; added committed templatebuild-testing-local.env.exampleand updatedREADME.md,README-containers.md, andbuild-testing-local.shhelp text accordingly. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.5.17] - 2026-05-09¶
Changed¶
- Expanded documentation for local registry builds: dedicated Local registry build section in
README.md(purpose, prerequisites, pushed tags,build-testing-local.envvariables and precedence, examples), table of contents entry, clearer comments inbuild-testing-local.env, and a deep link fromREADME-containers.md. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.5.16] - 2026-05-09¶
Changed¶
- Clarified documentation for
build-testing-local.envandbuild-testing-local.shinREADME.md(optional file, variables, precedence vs exports and--repo/--platform) and tightened the related bullet inREADME-containers.md. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.5.15] - 2026-05-09¶
Changed¶
- Added
build-testing-local.envand wiredbuild-testing-local.shto source it from the script directory, exposingLOCAL_REPOand optionalLOCAL_PLATFORMwithout overwriting values already exported in the parent shell. - Documented the env file behavior in
README.mdandREADME-containers.md. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.5.14] - 2026-05-09¶
Changed¶
- Added a third default speedtest endpoint (
nginx.orgsource tarball) toROTATE_SPEEDTEST_URLSand adjustedROTATE_SPEEDTEST_WEIGHTSto0.40,0.35,0.25so counts stay aligned withrotate_on_poor_speed.sh. - Regenerated
data/scripts/docs/rotate_on_poor_speed.mdviascripts/sync-rotate-defaults-doc.sh. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.5.13] - 2026-05-09¶
Changed¶
- Replaced the default
ROTATE_SPEEDTEST_URLSprimary endpoint: removedproof.ovh.net(often blocked or flaky behind VPN exit IPs) in favor of Mozilla CDN plus DebianPackages.gzas a second independent mirror. - Regenerated
data/scripts/docs/rotate_on_poor_speed.mdviascripts/sync-rotate-defaults-doc.sh. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.5.12] - 2026-05-09¶
Changed¶
- Updated
build-testing-local.shdefault local registry repository from192.168.178.200:5050/nzbgetvpnto192.168.1.1:5000/nzbgetvpn. - Updated local build helper documentation in
README.mdandREADME-containers.mdto reflect the new default repository. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.5.11] - 2026-05-09¶
Changed¶
- Expanded
build-testing-local.shto match the update/version argument behavior ofbuild-testing.sh, includingnewest,--sha256,--accept-downloaded-sha256, and--baseflows before building. - Added local-build specific options
--repoand--platform, while keeping local/private-registry output defaults (192.168.178.200:5050/nzbgetvpn, tagtesting) andsudo docker buildx build ... --push. - Updated build documentation references in
README.mdandREADME-containers.md. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.5.10] - 2026-05-09¶
Changed¶
- Added
build-testing-local.shas a local/private-registry helper for testing builds, defaulting tosudo docker buildx build --no-cache --platform linux/amd64 --push -t 192.168.178.200:5050/nzbgetvpn:testing -f ./Dockerfile-testing .. - Updated build documentation references in
README.mdandREADME-containers.md. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.5.9] - 2026-05-09¶
Changed¶
- Reduced image layer footprint in
build/root/install.shby explicitly clearing pacman package caches (pacman -Scc) after package installation. - Removed the temporary NZBGet installer file (
/tmp/nzbget.run) after successful install to avoid carrying transient build artifacts in final layers. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.5.8] - 2026-05-09¶
Changed¶
- Fixed ARM64 package database sync in
build/root/install.shby writing an Arch Linux ARM mirrorlist whenOS_ARCH=aarch64. - Disabled the optional
[aur]repository during ARM sync to preventaur.db404 failures that blockedpacman -Syyuin multi-arch builds. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.5.7] - 2026-05-09¶
Changed¶
- Replaced the default
ROTATE_SPEEDTEST_URLSindata/scripts/lib.shto remove the unstablefreetestdata.comendpoint and useproof.ovh.netas primary with a Mozilla CDN fallback. - Regenerated
data/scripts/docs/rotate_on_poor_speed.mddefaults documentation viascripts/sync-rotate-defaults-doc.sh. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.5.6] - 2026-05-09¶
Changed¶
- Updated
.github/workflows/drift-radar.ymlto also run onpull_requestfordevelop, so thedependency-drift-radarcheck can report a commit-linkedpassedstatus in PRs. - Scoped issue management and auto-refresh PR steps to non-PR events, keeping scheduled/manual drift automation behavior unchanged.
- Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.5.5] - 2026-05-09¶
Changed¶
- Updated GitHub Actions in CI workflows to Node.js 24-ready versions by moving
actions/checkoutfromv4tov5andactions/github-scriptfromv7tov8in the dependency drift radar workflow. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.5.4] - 2026-05-09¶
Changed¶
- Stabilized release quality checks by extending the temporary shellcheck baseline excludes in
scripts/ci-quality-checks.shwith legacy style findings (SC2002,SC2236) that are outside this change scope. - Fixed shellcheck findings introduced by recent CI additions: quoted parameter expansion in
data/scripts/container/doctor.sh(SC2295) and grouped GitHub output writes inscripts/ci-drift-radar.sh(SC2129). - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.5.3] - 2026-05-09¶
Changed¶
- Expanded
README-containers.mdCI status badges to includesecurity-scan.yml,drift-radar.yml, andrelease-orchestration.ymlalongside quality and smoke workflows. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.5.2] - 2026-05-09¶
Changed¶
- Expanded
README.mdCI status badges to includesecurity-scan.yml,drift-radar.yml, andrelease-orchestration.ymlalongside quality and smoke workflows. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.5.1] - 2026-05-09¶
Changed¶
- Fixed workflow action references by pinning Trivy to an existing tag format (
aquasecurity/trivy-action@v0.36.0) in.github/workflows/security-scan.ymland.github/workflows/release-orchestration.yml. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.5.0] - 2026-05-09¶
Added¶
- Added release ownership policy via
.github/CODEOWNERSfor runtime, scripts, and workflow paths. - Added release-readiness workflow
.github/workflows/release-orchestration.ymlto run quality, smoke, and security checks for manual runs and version tags.
Changed¶
- Extended drift automation to expose detailed outputs in
scripts/ci-drift-radar.shand enhanced.github/workflows/drift-radar.ymlto auto-close resolved drift issues and open/update a base-refresh PR when applicable. - Added failure diagnostics artifact uploads to
.github/workflows/quality-checks.ymland.github/workflows/smoke-test.yml. - Added Trivy baseline support via
.trivyignoreand diagnostic artifact uploads in.github/workflows/security-scan.yml. - Updated CI docs in
ci/README.mdfor release orchestration, drift automation, and security baseline behavior. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.4.2] - 2026-05-09¶
Added¶
- Added GitHub Actions security workflow
.github/workflows/security-scan.ymlwith Trivy filesystem scanning, SARIF upload to GitHub Security, and configurable severity enforcement (TRIVY_FAIL_SEVERITY, defaultCRITICAL).
Changed¶
- Updated CI documentation in
ci/README.mdwith security scan workflow details. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.4.1] - 2026-05-09¶
Changed¶
- Extended
.github/workflows/drift-radar.ymlto automatically create or update a single opendrift-radarissue when drift is detected, using the generated markdown summary fromscripts/ci-drift-radar.sh. - Updated
scripts/ci-drift-radar.shto export the markdown report as a workflow output for downstream issue automation. - Updated CI docs in
ci/README.mdto document drift issue automation behavior. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.4.0] - 2026-05-09¶
Added¶
- Added dependency drift radar script
scripts/ci-drift-radar.shto compare pinned stable/testing NZBGet and base-image tags against latest upstream values and publish a markdown summary. - Added scheduled GitHub Actions workflow
.github/workflows/drift-radar.yml(weekly + manual dispatch) to run the drift radar in CI.
Changed¶
- Updated CI docs in
ci/README.mdwith the new drift radar script/workflow references. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.3.9] - 2026-05-09¶
Changed¶
- Extended runtime smoke coverage in
scripts/ci-smoke-test.shwith adoctor.sh --healrecovery scenario that injects drift into/data/scripts/lib.sh, verifies restore to bundled state, and confirms backups under/data/backups/doctor-heal-*. - Updated smoke test documentation in
ci/README.mdto include thedoctor.sh --healrecovery validation. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.3.8] - 2026-05-09¶
Changed¶
- Added CI idempotence checks in
scripts/ci-quality-checks.shthat runsync-rotate-defaults-doc.shandupdate-base-image.shtwice and fail when those update scripts still produce repository diffs. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.3.7] - 2026-05-09¶
Changed¶
- Added a CI versioning metadata guard to
scripts/ci-quality-checks.shthat fails when non-metadata changes are made without updatingVERSION,CHANGELOG.md,README.md, andREADME-containers.md, and also verifies README version lines matchVERSION. - Updated
.github/workflows/quality-checks.ymlcheckout tofetch-depth: 0so commit-range based checks have full history context. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.3.6] - 2026-05-09¶
Changed¶
- Updated
scripts/update-base-image.shto also refresh theBase image stable/testing taglines inREADME.mdandREADME-containers.mdwhen a Dockerfile base image tag is changed. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.3.5] - 2026-05-09¶
Changed¶
- Added base-image version lines to the
Versionssection inREADME.mdandREADME-containers.md, showing stable and testingbinhex/arch-int-vpntags. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.3.4] - 2026-05-09¶
Changed¶
- Updated Dockerfile base image tag from
binhex/arch-int-vpn:2026032801tobinhex/arch-int-vpn:2026050402via--base newest. - Automatically bumped version metadata in
VERSION,README.md, andREADME-containers.md.
[5.3.3] - 2026-05-09¶
Changed¶
- Expanded
data/scripts/docs/doctor.mdwith a troubleshooting section that explains commondoctor.shwarnings for disabled internet reachability checks and missingVPN_DEVICE_TYPE, including concrete commands to enable those checks. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.3.2] - 2026-05-09¶
Changed¶
- Updated
scripts/update-base-image.shto automatically insert a changelog entry when--base newestresolves to a new base-image tag and triggers a patch version bump. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.3.1] - 2026-05-09¶
Changed¶
- Added runtime
BASE_IMAGE_TAGenvironment export inDockerfileandDockerfile-testingso scripts can reliably report the inherited base-image tag. - Updated startup version log line in
run/nobody/nzbget.shto includeBase image binhex/arch-int-vpn:<tag>. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.3.0] - 2026-05-09¶
Added¶
- Added
--healmode todata/scripts/container/doctor.shto force-resync managed bundled templates from image copies before running diagnostics. doctor.sh --healnow creates safety backups for replaced files under/data/backups/doctor-heal-<timestamp>/.
Changed¶
- Updated helper documentation in
README.md,README-containers.md,data/scripts/README.md, anddata/scripts/docs/doctor.mdwithdoctor.sh --healusage guidance. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.2.2] - 2026-05-09¶
Changed¶
- Removed README/docs preserve-marker diagnostics from
doctor.sh; preserve-marker checks now target runtime-managed files only. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.2.1] - 2026-05-09¶
Changed¶
- Refined bundled-file preserve behavior so preserve markers are only honored for managed runtime script files (
*.shand/data/scripts/lib.sh) inBUNDLED_SYNC_POLICY=smart. - Bundled docs/README templates now keep syncing in
smartmode even when they contain a preserve marker, preventing documentation drift from stale local markers. - Updated
doctor.shpreserve-marker diagnostics to warn for runtime files and treat README-marker hits as informational-only. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.2.0] - 2026-05-09¶
Added¶
- Added startup bundled-file sync policy
BUNDLED_SYNC_POLICYinbuild/root/install.shwith modes:smart(default),force, andpreserve. - Added preserve-marker support (
nzbgetvpn: preserve-local) for managed/databundled files whenBUNDLED_SYNC_POLICY=smart.
Changed¶
- Startup now logs explicit warnings whenever bundled file updates are skipped due to preserve policy or preserve marker, including a note that preserving local files can break behavior after image upgrades.
- Added
doctor.shchecks forBUNDLED_SYNC_POLICYand preserve markers, including warnings that preserved managed files can drift and break behavior after upgrades. - Updated script documentation and environment-variable docs for bundled sync behavior in
README.md,README-containers.md, anddata/scripts/README.md. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.1.0] - 2026-05-09¶
Changed¶
- Updated startup sync in
build/root/install.shto also sync/data/scripts/lib.shfrom the bundled image copy whenever it differs. - Updated startup sync logic for bundled README files under
/data/{scripts,wireguard-configs,openvpn-configs,backups}/so existing files are refreshed when they differ from image templates. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.0.4] - 2026-05-09¶
Changed¶
- Bumped NZBGetVPN image/codebase patch version to
5.0.4. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.0.3] - 2026-05-09¶
Changed¶
- Default
ROTATE_SPEEDTEST_URLSprimary endpoint is nowhttps://freetestdata.com/wp-content/uploads/2021/09/Free_Test_Data_1OMB_MP3.mp3instead of Cloudflarespeed.cloudflare.com/__down; OVHproof.ovh.netremains the weighted secondary (backup) mirror. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.0.2] - 2026-05-09¶
Changed¶
- Default
ROTATE_SPEEDTEST_URLSuses Cloudflarespeed.cloudflare.com/__downas the primary endpoint and keeps OVHproof.ovh.netonly as the weighted secondary (backup) mirror; Hetznerspeed.hetzner.deis no longer in the default list. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.0.1] - 2026-05-09¶
Changed¶
- Default
ROTATE_SPEEDTEST_URLSnow uses European HTTP download mirrors (Hetznerspeed.hetzner.de, OVHproof.ovh.net) instead of Cloudflarespeed.cloudflare.com/__down, which has no region-specific URL and often exits far from Europe. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[5.0.0] - 2026-05-08¶
Breaking¶
- Removed legacy flat bundled helper paths in
/data/scripts/*.sh; bundled scripts are now only managed in categorized folders under/data/scripts/{container,shared,notify,host}/. Existing setups that reference flat script paths must update to category paths.
Fixed¶
- Corrected POSIX shell compatibility in
data/scripts/host/run-container-helper.shby replacing Bash-specific[[ ... ]]with portable[ ... ], fixing runtime errors on systems where/bin/shisdash.
Changed¶
- Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[4.24.36] - 2026-05-08¶
Changed¶
- Removed bundled flat script compatibility in
/data/scripts/*.sh; startup sync now keeps only categorized helper paths under/data/scripts/{container,shared,notify,host}/and removes legacy flat bundled copies. - Updated helper defaults and runtime references to categorized paths (
data/scripts/lib.sh,run/nobody/watchdog.sh) and updated host helper lookup indata/scripts/host/run-container-helper.shto resolve scripts across category folders. - Updated helper-path documentation in
README.md,README-containers.md,data/scripts/README.md,data/openvpn-configs/README.md, anddata/wireguard-configs/README.md. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[4.24.35] - 2026-05-08¶
Changed¶
- Removed repository wrapper
scripts/run-container-helper.shand standardized host-helper usage/documentation on the source pathdata/scripts/host/run-container-helper.sh, which is bundled into the image and synced to/data/scripts/host/. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[4.24.34] - 2026-05-08¶
Added¶
- Added bundled host helper source
data/scripts/host/run-container-helper.shso host-side wrapper logic is included in the image templates and synced to/data/scripts/host/.
Changed¶
- Updated startup sync in
build/root/install.shto include/data/scripts/host/from bundled image templates. - Updated both Dockerfiles and
.gitignorefor the newdata/scripts/host/*.shsource path. - Updated script documentation (
data/scripts/README.md,AGENTS.md) to include thehostcategory and host-only run context. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[4.24.33] - 2026-05-08¶
Changed¶
- Updated startup script sync in
build/root/install.shto populate/data/scripts/{container,shared,notify}/from bundled image templates while still maintaining flat/data/scripts/<name>.shcompatibility copies for existing scheduler/hook paths. - Updated both Dockerfiles to include category-specific bundled script paths under
/usr/local/share/nzbgetvpn/scripts/{container,shared,notify}/so category sync sources are present in the image. - Clarified bundled script install behavior in
data/scripts/README.mdandAGENTS.md. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[4.24.32] - 2026-05-08¶
Added¶
- Added host-side helper
scripts/run-container-helper.shto run bundled/data/scripts/*.shsafely inside a running container viadocker exec, with container state checks and script-name validation.
Changed¶
- Updated helper-script usage docs in
data/scripts/README.md,README.md, andREADME-containers.mdto include host-side wrapper usage. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[4.24.31] - 2026-05-08¶
Changed¶
- Renamed helper source folder
data/scripts/portable/todata/scripts/shared/for clearer intent, and updated Docker build inputs plus repository documentation (Dockerfile,Dockerfile-testing,data/scripts/README.md,AGENTS.md) accordingly. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[4.24.30] - 2026-05-08¶
Changed¶
- Reorganized bundled helper script sources into category folders under
data/scripts/(container/,portable/,notify/) while preserving runtime compatibility by continuing to install helpers into flat/usr/local/share/nzbgetvpn/scripts/*.shand/data/scripts/*.shpaths. - Updated Docker build inputs (
Dockerfile,Dockerfile-testing) and shell-quality validation (scripts/ci-quality-checks.sh,AGENTS.md) to include the new helper-script source layout. - Expanded
data/scripts/README.mdwith a source-layout section that explains repository organization versus flattened runtime install paths. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[4.24.29] - 2026-05-08¶
Changed¶
- Updated
data/scripts/README.mdwith explicit run-context classification per helper script (Container-only,Host-or-container,Container-first, andInternal library) so operators can quickly see where each script should be executed. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[4.24.28] - 2026-05-08¶
Changed¶
- Expanded
data/scripts/doctor.shdiagnostics with default-route and DNS-entry validation, VPN interface/IP signal checks, and an optional internet reachability probe (DOCTOR_INTERNET_CHECK_*). - Updated
data/scripts/docs/doctor.mdwith the extended checks and new optional variables. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[4.24.27] - 2026-05-08¶
Added¶
- Added bundled diagnostics helper
data/scripts/doctor.shto run quick runtime/config readiness checks for commands, writable volumes, DNS resolver presence, and VPN profile availability based onVPN_CLIENT.
Changed¶
- Updated helper-script docs and README references to document
doctor.sh. - Updated version metadata in
VERSION,README.md, andREADME-containers.md.
[4.24.26] - 2026-05-08¶
Changed¶
- Polished
README.mdquick-start guidance by adding explicit first-login credential hardening instructions (nzbget/tegbzn6789must be changed after initial startup). - Clarified in
README.mdthat boolean-style toggles acceptyes/no,true/false, and1/0. - Updated version metadata in
VERSIONandREADME-containers.md.
[4.24.25] - 2026-05-07¶
Changed¶
- Added
data/scripts/docs/*.mdto both Dockerfiles so helper-script documentation is bundled into the image under/usr/local/share/nzbgetvpn/scripts/docs/. - Extended startup install/sync logic in
build/root/install.shto install and update bundled script docs into/data/scripts/docs/alongside bundled helper scripts. - Updated
README.mdandREADME-containers.mdto document container-side availability of bundled script docs.
[4.24.24] - 2026-05-07¶
Changed¶
- Extended
scripts/ci-quality-checks.shwith hard CI guards for unresolved merge-conflict markers and Docker Hub README size limits (README-containers.mdmust remain below25000bytes). - Added optional conventional commit lint support in quality checks via
CI_CONVENTIONAL_COMMIT_LINTandCI_CONVENTIONAL_COMMIT_RANGE, and wired workflow defaults in.github/workflows/quality-checks.yml. - Updated
README.mdandREADME-containers.mdCI documentation with the new guards and optional commit-lint activation flow.
[4.24.23] - 2026-05-07¶
Fixed¶
- Hardened fail-safe idempotency in
run/root/iptable.shby introducing a reusableip rulecheck-before-add helper for fwmark routes, preventing duplicate rule insertion across restarts and retries.
[4.24.22] - 2026-05-07¶
Fixed¶
- Hardened
scripts/latest-nzbget-version.shtesting-channel lookup against GitHub API403rate-limit/abuse responses by adding token-aware API auth (GITHUB_TOKEN/GH_TOKEN) and an HTML fallback that readsreleases/expanded_assets/testingto resolve the currentnzbget-*-bin-linux.runasset.
[4.24.21] - 2026-05-07¶
Fixed¶
- Updated testing release pinning to
26.2-testing-20260507inDockerfile-testing,README.md, andREADME-containers.mdso testing builds no longer point at a removed release asset. - Hardened
build.shandbuild-testing.shargument handling by trimming accidental leading/trailing whitespace on version/base/SHA arguments to prevent malformed download URLs during retries or copy/paste usage.
[4.24.20] - 2026-05-07¶
Fixed¶
- Tightened fail-safe idempotency in
run/root/iptable.shby switching LAN route programming toip route replaceand by enforcing consistent check-before-add behavior for iptables rules (including mangle marks) to avoid duplicate entries on restarts/retries.
[4.24.19] - 2026-05-07¶
Changed¶
- Centralized adaptive-rotation defaults in
data/scripts/lib.shand updateddata/scripts/rotate_on_poor_speed.shplusrun/nobody/watchdog.shto consume the shared defaults instead of duplicating hard-coded values. - Added
scripts/sync-rotate-defaults-doc.shto render/checkdata/scripts/docs/rotate_on_poor_speed.mddefaults from the shared runtime source and wired this drift check intoscripts/ci-quality-checks.sh. - Updated
README.md,README-containers.md, anddata/scripts/README.mdto document the generated/validated defaults workflow.
[4.24.18] - 2026-05-07¶
Fixed¶
- Hardened runtime script trust boundaries by removing
/data/scripts/lib.shfallback fromrun/root/iptable.sh,run/nobody/watchdog.sh, andrun/nobody/vpn-selftest.sh; these scripts now only source/usr/local/share/nzbgetvpn/scripts/lib.sh.
[4.24.17] - 2026-05-07¶
Changed¶
- Added shared helper library
data/scripts/lib.shand updatedrun/nobody/watchdog.sh,run/nobody/vpn-selftest.sh,run/root/iptable.sh, anddata/scripts/rotate_on_poor_speed.shto reuse common enable/normalize/path/log helper logic. - Updated
data/scripts/README.mdwith the bundledlib.shhelper entry for operator visibility.
[4.24.16] - 2026-05-07¶
Fixed¶
- Corrected remaining
shfmt --diffformatting inscripts/ci-quality-checks.shredirection spacing so local and CI quality checks pass cleanly.
[4.24.15] - 2026-05-07¶
Changed¶
- Applied repository-wide shell formatting with
shfmt -wto align scripts with the enforcedshfmt --diffquality gate. - Updated
VERSION,README.md, andREADME-containers.mdversion metadata after the formatting sweep.
[4.24.14] - 2026-05-07¶
Changed¶
- Updated
scripts/ci-quality-checks.shwith a temporary shellcheck baseline exclude list for known legacy findings so CI can gate new regressions while cleanup is phased. - Added strict-mode guidance (
SHELLCHECK_EXCLUDES=) inREADME.md,README-containers.md, andci/README.mdto support full shellcheck cleanup runs.
[4.24.13] - 2026-05-07¶
Changed¶
- Added CI status badges and expanded CI workflow descriptions in
README.mdandREADME-containers.mdfor clearer visibility of automated quality and runtime checks. - Updated
ci/README.mdto explicitly point to the separate shell-quality check workflow and local command.
[4.24.12] - 2026-05-07¶
Added¶
- Added GitHub Actions workflow
.github/workflows/quality-checks.ymlto run shell quality checks onpushandpull_request. - Added
scripts/ci-quality-checks.shto runbash/shsyntax checks on tracked scripts,shellcheck,shfmt --diff, and AGENTS.md validation commands in one CI/local entrypoint.
Changed¶
- Updated
README.mdandREADME-containers.mdwith the new local and CI shell-quality check flow.
[4.24.11] - 2026-05-07¶
Fixed¶
- Removed the host-side
rgdependency fromscripts/ci-smoke-test.shby replacing the running-container check with a Docker-nativedocker compose ps -q+docker inspectwait loop.
Changed¶
- Documented host requirements (
docker composeandnc) inci/README.md.
[4.24.10] - 2026-05-07¶
Changed¶
- Updated
ci/docker-compose.smoke.ymlandscripts/ci-smoke-test.shto run smoke tests with explicit platform selection (SMOKE_PLATFORM, defaultlinux/amd64) to avoid manifest-platform mismatches on Apple Silicon and other non-amd64 hosts. - Expanded smoke-test docs in
ci/README.md,README.md, andREADME-containers.mdwith platform guidance and a direct workaround forno match for platform in manifest.
[4.24.9] - 2026-05-07¶
Added¶
- Added
ci/README.mdwith a dedicated runtime smoke-test guide covering purpose, validated checks, local usage, optional debug mode, and troubleshooting commands.
Changed¶
- Updated
README.mdandREADME-containers.mdto link to the dedicated smoke-test documentation.
[4.24.8] - 2026-05-07¶
Added¶
- Added runtime smoke-test assets (
ci/docker-compose.smoke.ymlandscripts/ci-smoke-test.sh) that validate container startup, NZBGet listen port6789, Privoxy reachability on8118when enabled, and successful self-test exits. - Added GitHub Actions workflow
.github/workflows/smoke-test.ymlto run the smoke test on push and pull request events.
Changed¶
- Updated
README.mdandREADME-containers.mdwith a short CI smoke-test reference.
[4.24.7] - 2026-05-07¶
Changed¶
- Simplified
README.mdinto a compact operator-focused document with generated anchor-based table of contents and direct links to detailed docs. - Simplified
README-containers.mdto keep Docker Hub content concise while linking to full repository docs. - Replaced the large monolithic
data/scripts/README.mdwith an index-style helper overview and added per-script docs underdata/scripts/docs/to reduce merge-conflict hotspots.
[4.24.6] - 2026-05-07¶
Changed¶
- Reduced the default adaptive-rotation schedule from
*/10 * * * *to*/20 * * * *inrun/nobody/watchdog.shto lower routine probe overhead. - Updated adaptive-rotation schedule defaults/examples in
README.md,README-containers.md, anddata/scripts/README.md. - Added a build-time compatibility patch in
build/root/install.shthat rewrites legacy inheritediptable_manglemodprobe/insmodchecks to aniptables -t manglecapability probe, removing false startup errors on modern kernels.
[4.24.5] - 2026-05-07¶
Changed¶
- Updated
run/root/iptable.shto use numeric policy-routing table6789for Web UI fwmark routing so startup no longer depends on/etc/iproute2/rt_tablesbeing present. - Made fwmark routing setup idempotent by checking existing
ip rulestate and usingip route replaceto avoid duplicate or invalid-table startup errors.
[4.24.4] - 2026-05-07¶
Changed¶
- Expanded helper-script documentation in
data/scripts/README.mdwith a clear customization/support policy and per-script guidance on when environment-variable tuning is sufficient versus when copying a script is recommended. - Added guidance in
README.mdto prefer env-var configuration for bundled/data/scriptstemplates and use copied script filenames for custom logic.
[4.24.3] - 2026-05-07¶
Changed¶
- Updated
run/root/iptable.shmangle-table detection to probeiptables -t mangledirectly instead of relying on theiptable_manglekernel module being listed inlsmod. - Added a clearer warning when mangle support is genuinely unavailable so kernels with built-in/nft-backed support no longer report a false negative.
[4.24.2] - 2026-05-07¶
Changed¶
- Removed
https://raw.githubusercontent.com/marc0janssen/nzbgetvpn/develop/VERSIONfrom default endpoint sets indata/scripts/rotate_on_poor_speed.shanddata/scripts/benchmark_endpoints.sh. - Updated default adaptive-rotation endpoint weights to match the new two-endpoint default set.
- Updated endpoint examples in
README.md,README-containers.md, anddata/scripts/README.md.
[4.24.1] - 2026-05-07¶
Changed¶
- Removed Hetzner from the default adaptive-rotation speed endpoint list in
data/scripts/rotate_on_poor_speed.sh. - Updated default adaptive-rotation endpoint weights to match the new three-endpoint default set.
- Updated adaptive-rotation endpoint examples in
README.md,README-containers.md, anddata/scripts/README.md.
[4.24.0] - 2026-05-07¶
Changed¶
- Updated
data/scripts/rotate_on_poor_speed.shto use default multi-provider speed endpoints (Cloudflare, Hetzner, OVH, GitHub raw) when no explicit endpoint override is set. - Added optional weighted endpoint aggregation via
ROTATE_SPEEDTEST_WEIGHTSand switched adaptive-rotation quality scoring from median to weighted speed/latency averages. - Updated adaptive-rotation docs in
README.md,README-containers.md, anddata/scripts/README.mdwith default endpoint list and weight configuration examples.
[4.23.0] - 2026-05-07¶
Added¶
- Added multi-endpoint quality checks to
data/scripts/rotate_on_poor_speed.shwithROTATE_SPEEDTEST_URLS,ROTATE_SPEEDTEST_ATTEMPTS, andROTATE_MIN_SUCCESSFUL_ENDPOINTS.
Changed¶
rotate_on_poor_speed.shnow aggregates endpoint results with median speed/latency before applying thresholds, reducing false rotations caused by one flaky endpoint.- Updated adaptive-rotation documentation in
README.md,README-containers.md, anddata/scripts/README.mdto document multi-source decision behavior and fallback compatibility withROTATE_SPEEDTEST_URL.
[4.22.0] - 2026-05-07¶
Added¶
- Added bundled helper
data/scripts/benchmark_endpoints.shto run fast latency/download benchmarks across multiple endpoints, rank candidates, and report the best endpoint.
Changed¶
- Documented endpoint benchmarking usage and scheduler examples in
README.md,README-containers.md, anddata/scripts/README.md.
[4.21.2] - 2026-05-07¶
Changed¶
- Expanded central
README.mdwith a dedicated section that consolidates key decentralized README content (data/wireguard-configs,data/openvpn-configs, andexamples) and points to the mirrored helper-script sections.
[4.21.1] - 2026-05-07¶
Changed¶
- Clarified adaptive-rotation documentation:
ROTATE_POST_ROTATION_ACTION=watchdog-exitshould be paired withrestart: unless-stopped; otherwise the container exits and remains stopped.
[4.21.0] - 2026-05-07¶
Added¶
- Added dedicated adaptive-rotation scheduler variables in
watchdog.sh:ROTATE_ON_POOR_SPEED_ENABLED(defaultyes),ROTATE_ON_POOR_SPEED_SCHEDULE(default*/10 * * * *),ROTATE_ON_POOR_SPEED_SCRIPT(default/data/scripts/rotate_on_poor_speed.sh), andROTATE_ON_POOR_SPEED_TIMEOUT(default90).
Changed¶
- Adaptive profile rotation docs now use
ROTATE_ON_POOR_SPEED_*instead ofVPN_CRON_*, and include explicit enable/disable behavior.
[4.20.0] - 2026-05-07¶
Added¶
- Restored optional DNS leak path checks in
run/nobody/vpn-selftest.shwithVPN_SELFTEST_DNS_LEAK_TEST,VPN_SELFTEST_DNS_LEAK_STRICT,VPN_SELFTEST_DNS_LEAK_TIMEOUT, and optionalVPN_SELFTEST_DNS_LEAK_HOST.
Changed¶
- Updated self-test documentation in
README.mdandREADME-containers.mdto describe DNS leak check behavior and controls.
[4.19.0] - 2026-05-07¶
Added¶
- Added persistent container script logging to
/data/nzbgetvpn-container.logwith automatic rotation (10MB,5backups) while keepingdocker logsoutput through a supervisor log-forwarder.
Changed¶
- Supervisor program output for
start.sh,watchdog.sh, andshutdown.shis now captured into the rotating/datalog file and mirrored back to container stdout/stderr.
[4.18.0] - 2026-05-07¶
Added¶
- Added post-rotation restart controls for
rotate_on_poor_speed.sh:ROTATE_POST_ROTATION_ACTION=watchdog-exitandROTATE_RESTART_REQUEST_FILEto request a controlled watchdog exit after successful profile rotation. - Added watchdog handling for rotation restart requests with
ROTATE_RESTART_EXIT_DELAYbefore exit.
[4.17.0] - 2026-05-07¶
Added¶
- Added bundled helper
data/scripts/rotate_on_poor_speed.shfor adaptive profile rotation based on poor speed/latency streaks with cooldown control, supporting WireGuard/OpenVPN modes and optional NordVPN refresh before WireGuard rotation.
Changed¶
- Documented adaptive profile rotation workflow and variables in
README.md,README-containers.md, anddata/scripts/README.md.
[4.16.2] - 2026-05-07¶
Fixed¶
- Made
upgrade_check.shtolerant of GitHub/DNS/network lookup failures: it now warns and exits successfully after local checks instead of failing hard.
[4.16.1] - 2026-05-07¶
Fixed¶
- Extended
upgrade_check.shto also report NZBGet application version drift against remote stable/testing metadata fromREADME.md, not only the image/codebase version.
[4.16.0] - 2026-05-07¶
Added¶
- Added bundled helper
data/scripts/upgrade_check.shto perform a simple pre-update check: compare local vs remote image/codebase version metadata and print relevant changelog impact before updating.
Changed¶
- Documented
upgrade_check.shusage inREADME.md,README-containers.md, anddata/scripts/README.md.
[4.15.1] - 2026-05-07¶
Changed¶
- Clarified
log_sanitizer.shexecution context in docs: preferred usage is inside the container (/data/scripts/log_sanitizer.sh), with optional host-side invocation when/datais bind-mounted.
[4.15.0] - 2026-05-07¶
Added¶
- Added bundled helper
data/scripts/log_sanitizer.shto sanitize logs before sharing by redacting common tokens/secrets, IP addresses, and absolute paths.
Changed¶
- Documented log-sanitizer usage in
README.md,README-containers.md, anddata/scripts/README.md.
[4.14.0] - 2026-05-07¶
Added¶
- Added
VPN_FAILSAFE_NZBGET_ACTIONinrun/nobody/watchdog.shto trigger app-level NZBGet fail-safe behavior after unhealthy threshold:none(default),pause(nzbget -P), orstop(nzbget -Q).
Changed¶
- Watchdog now applies the NZBGet fail-safe once per unhealthy period and resets the fail-safe guard when VPN IP is detected again.
- Clarified README behavior after VPN recovery:
stopauto-starts NZBGet again when tunnel IP returns, whilepausekeeps downloads paused until manual resume.
[4.13.3] - 2026-05-07¶
Changed¶
- Added a startup info log in
watchdog.shwhenBACKUP_CRON_SCHEDULEis configured, showing active backup scheduler settings (BACKUP_CRON_SCHEDULE,BACKUP_CRON_SCRIPT,BACKUP_CRON_SCRIPT_TIMEOUT).
[4.13.2] - 2026-05-07¶
Changed¶
- Added complete
docker-compose.ymlexamples (with remarks) todata/scripts/README.mdfor WireGuard rotation + backups, OpenVPN rotation + transition notifications, and NordVPN refresh + unhealthy handling.
[4.13.1] - 2026-05-07¶
Changed¶
- Expanded
data/scripts/README.mdwith detailed usage examples for each bundled helper script, including manual execution, scheduler hooks, unhealthy hooks, and notification hook configurations.
[4.13.0] - 2026-05-07¶
Changed¶
VPN_SELFTEST_STATUS_FILEJSON output now includes timezone-awaretimestampandtimestamp_tzfields controlled byNZBGETVPN_TIMESTAMP_TZ, while keeping legacytimestamp_utcfor compatibility.- Updated README documentation to describe timezone handling for ready file, self-test status JSON, and backup timestamps.
[4.12.0] - 2026-05-07¶
Added¶
- Added
NZBGETVPN_TIMESTAMP_TZ(utcorlocal) to control timezone mode for generated timestamps used byVPN_SELFTEST_READY_FILEanddata/scripts/backup_config.sh.
Changed¶
- Ready-file and backup timestamp documentation now describes timezone selection behavior instead of UTC-only output.
[4.11.0] - 2026-05-07¶
Added¶
- Dedicated notification variables for self-test transitions and unhealthy events:
NOTIFY_SELFTEST_STATE_SCRIPT,NOTIFY_SELFTEST_STATE_TIMEOUT,NOTIFY_UNHEALTHY_SCRIPT, andNOTIFY_UNHEALTHY_TIMEOUT. - Watchdog support for
NOTIFY_UNHEALTHY_SCRIPTas a notification path independent fromVPN_UNHEALTHY_ACTION.
Changed¶
- Reorganized environment-variable documentation so backup scheduling/retention variables are grouped in a single overview section (
Scheduled Config Backups) instead of being split across multiple sections. - Removed duplicated self-test behavior paragraphs in
README.mdto improve readability. - Notification documentation now points to dedicated
NOTIFY_*variables while keeping legacyVPN_SELFTEST_STATE_HOOK*compatibility in runtime behavior.
[4.10.0] - 2026-05-07¶
Added¶
- Added dedicated backup scheduler variables in watchdog:
BACKUP_CRON_SCHEDULE,BACKUP_CRON_SCRIPT(default/data/scripts/backup_config.sh), andBACKUP_CRON_SCRIPT_TIMEOUT.
Changed¶
- Automatic config backups are now scheduled independently from
VPN_CRON_*; backup documentation examples now useBACKUP_CRON_*.
[4.9.0] - 2026-05-07¶
Added¶
- Added bundled automatic config-backup helper script
data/scripts/backup_config.shfor scheduled or unhealthy-hook usage. - Added
/data/backupsas a default managed data directory with bundled README template.
Changed¶
- Config-backup defaults now target
/data/backups, and the backup script creates the destination path automatically when it does not exist. - Documented automatic config-backup usage and variables in
README.md,README-containers.md, anddata/scripts/README.md.
[4.8.1] - 2026-05-07¶
Changed¶
- Added explicit environment-variable examples in
README.mdfornotify_discord.sh,notify_telegram.sh, andnotify_pushover.sh.
[4.8.0] - 2026-05-07¶
Added¶
- Added bundled notification helper examples in
data/scripts/:notify_discord.sh,notify_telegram.sh, andnotify_pushover.sh, designed forVPN_SELFTEST_STATE_HOOKandVPN_UNHEALTHY_SCRIPTusage.
Changed¶
- Documented notification-helper configuration and usage in
README.md,README-containers.md, anddata/scripts/README.md.
[4.7.5] - 2026-05-07¶
Changed¶
- Clarified notification guidance in the self-test/healthcheck documentation: Discord/Telegram/Pushover integrations are not built in, but can be implemented cleanly via
VPN_SELFTEST_STATE_HOOKstate transitions (ready->not_ready) orVPN_UNHEALTHY_SCRIPT.
[4.7.4] - 2026-05-07¶
Changed¶
- Removed the optional DNS leak check from
run/nobody/vpn-selftest.shand removed its related environment variables (VPN_SELFTEST_DNS_LEAK_TEST,VPN_SELFTEST_DNS_LEAK_STRICT,VPN_SELFTEST_DNS_LEAK_TIMEOUT).
Fixed¶
- Removed
tcpdumpfrom the image package list because it is no longer required by self-test logic.
[4.7.2] - 2026-05-07¶
Changed¶
- Changed self-test runtime defaults from
/tmpto/dataforVPN_SELFTEST_DEBOUNCE_FILEandVPN_SELFTEST_STATE_FILE(/data/nzbgetvpn-selftest-debounceand/data/nzbgetvpn-selftest-state).
[4.7.1] - 2026-05-07¶
Fixed¶
- Avoided noisy self-test runtime warnings caused by mixed root/nobody ownership in sticky
/tmp: healthcheck now disables debounce-file side effects, and watchdog self-test falls back to per-UID default state/debounce filenames when the shared default file exists but is not writable.
[4.6.1] - 2026-05-07¶
Changed¶
- Added Docker Compose orchestration examples for health/ready/status/state-hook based workflows.
[4.6.0] - 2026-05-07¶
Added¶
- Debounce/grace options for self-test readiness:
VPN_SELFTEST_DEBOUNCE_CRIT,VPN_SELFTEST_DEBOUNCE_WARNandVPN_SELFTEST_DEBOUNCE_FILEto reduce flapping during transient failures.
[4.5.1] - 2026-05-07¶
Fixed¶
- Made self-test state tracking best-effort and atomic so permission issues on the state file cannot fail the self-test (prevents Docker healthcheck from flipping unhealthy due to state persistence errors).
[4.5.0] - 2026-05-07¶
Added¶
VPN_SELFTEST_STATUS_FILE: optional JSON status snapshot written atomically after each self-test run for automation/monitoring.
[4.4.0] - 2026-05-07¶
Added¶
VPN_SELFTEST_STATE_HOOK: optional executable script triggered when self-test readiness state changes betweenreadyandnot_ready.VPN_SELFTEST_STATE_FILE(default/tmp/nzbgetvpn-selftest-state) andVPN_SELFTEST_STATE_HOOK_TIMEOUT(default30) to persist state and bound hook execution.
[4.3.0] - 2026-05-07¶
Added¶
VPN_SELFTEST_NZBGET_PORTto configure which TCP port the internal self-test checks for NZBGet listen readiness (default6789, validated to1-65535with safe fallback).
[4.2.0] - 2026-05-07¶
Added¶
- Native Docker
HEALTHCHECKintegration in both Dockerfiles, backed by a new/root/healthcheck.shwrapper that runs the internal VPN self-test. VPN_HEALTHCHECK_ENABLEDruntime toggle (yes/no/boolean, defaultyes) for opting out of container health probes without disabling self-test scheduling.
[4.1.11] - 2026-05-07¶
Changed¶
- Clear
VPN_SELFTEST_READY_FILEonce at watchdog startup when self-test mode is enabled, so container restarts begin in a not-ready state until a fresh self-test succeeds. - Documented startup stale-ready-file cleanup behavior in both README files.
[4.1.10] - 2026-05-07¶
Fixed¶
- Corrected the NZBGet listen-port detection regex in
run/nobody/vpn-selftest.shto match:6789socket addresses (IPv4/IPv6), preventing false warnings when NZBGet is already reachable.
[4.1.9] - 2026-05-07¶
Changed¶
- Clarified self-test readiness semantics in both README files:
VPN_SELFTEST_ENABLED=yesis a one-shot startup snapshot, while cron schedules provide continuous readiness updates (including ready-file refresh/removal over time).
[4.1.8] - 2026-05-06¶
Added¶
VPN_SELFTEST_READY_FILE: optional absolute path; on successful self-test,vpn-selftest.shwrites a one-lineok <UTC ISO8601>stamp (atomic replace). The file is removed when the self-test exits with critical failures.VPN_SELFTEST_READY_STRICT: whenyes/true/1, the ready file is written only if there are zero warnings; otherwise any existing file is removed.
[4.1.7] - 2026-05-06¶
Changed¶
- Moved VPN self-test execution to the end of each watchdog loop pass so
preruncheckhas populatedvpn_ipand NZBGet may already be starting. - Pass
vpn_ip,VPN_DEVICE_TYPE, andVPN_ENABLEDintovpn-selftest.shfrom the watchdog. - Derive tunnel IPv4 from
VPN_DEVICE_TYPEinvpn-selftest.shwhenvpn_ipis unset. - Wait up to about 12 seconds (24 x 0.5s) for NZBGet to listen on port
6789before warning.
[4.1.6] - 2026-05-06¶
Changed¶
- Combined
[supervisord] loglevel=infowith directstdout_logfile=/dev/fd/1/stderr_logfile=/dev/fd/2inbuild/nzbget.confso Docker logs stay readable (no swallowed banner) while suppressingDEBG 'watchdog-script' stdout output:noise from supervisord.
[4.1.5] - 2026-05-06¶
Changed¶
- Pointed supervisor program
stdout_logfile/stderr_logfileat/dev/fd/1and/dev/fd/2inbuild/nzbget.confso script output goes directly to Docker logs without noisyDEBG 'watchdog-script' stdout output:lines from supervisord child capture.
[4.1.4] - 2026-05-06¶
Fixed¶
- Reverted the supervisor loglevel override in
build/nzbget.confbecause it suppressed child script stdout lines, including the startup NZBGetVPN version banner and self-test logs.
[4.1.3] - 2026-05-06¶
Changed¶
- Set supervisor log level to
infoinbuild/nzbget.confto suppress noisy debug-prefixed lines likeDEBG 'watchdog-script' stdout output:in normal container logs.
[4.1.2] - 2026-05-06¶
Changed¶
- Reduced noisy/empty-looking supervisor log events from firewall startup output by removing decorative separator echoes and filtering blank lines from
ip routeandiptables -Soutput inrun/root/iptable.sh.
[4.1.1] - 2026-05-06¶
Changed¶
- Added an upper bound for
VPN_SELFTEST_STARTUP_DELAYin watchdog processing: values above300seconds are now clamped to300with a warning.
[4.1.0] - 2026-05-06¶
Added¶
- Added
VPN_SELFTEST_STARTUP_DELAY(default20seconds) to delay one-shot self-test execution inVPN_SELFTEST_ENABLED=yesmode and reduce startup timing warnings.
Changed¶
- Added watchdog log output that reports when the one-shot self-test is intentionally delayed during startup.
[4.0.2] - 2026-05-06¶
Changed¶
- Added watchdog startup logging for the resolved self-test mode (
VPN self-test watchdog mode ...) so it is visible whether the watchdog receivesVPN_SELFTEST_ENABLEDas expected.
[4.0.1] - 2026-05-06¶
Changed¶
- Added explicit startup-complete logging of
VPN_SELFTEST_ENABLEDafter NZBGet starts listening on port6789, including both normalized mode and raw environment value.
[4.0.0] - 2026-05-06¶
Changed¶
- Renamed the one-shot startup self-test mode from
afterstarttoyesforVPN_SELFTEST_ENABLED. - Updated self-test parsing so
true/1normalize toyesandfalse/0normalize tono. - Updated
README.mdandREADME-containers.mdexamples and accepted values to documentno,yes, or cron expression.
[3.2.0] - 2026-05-06¶
Changed¶
- Extended boolean parsing across project scripts to also accept
1and0alongsideyes/noandtrue/false. - Updated runtime script toggles and helper-script filename toggles to normalize all six boolean forms consistently.
- Updated build and update helper scripts so checksum-acceptance logic also accepts
trueand1. - Updated README documentation to list
1and0as supported boolean alternatives and clarified self-test boolean aliases.
[3.1.0] - 2026-05-06¶
Changed¶
- Updated repository runtime scripts to accept both
yes/noandtrue/falsefor boolean environment variables they consume. - Added boolean normalization for internal toggles (
VPN_ENABLED,ENABLE_PRIVOXY,DEBUG,VPN_UNHEALTHY_TEST) and for helper script filename toggles (*_CONFIG_USE_SOURCE_FILENAME). - Kept
VPN_SELFTEST_ENABLEDscheduling values while also acceptingtrueasafterstartandfalseasno. - Updated documentation examples and boolean normalization guidance in
README.mdandREADME-containers.md.
[3.0.0] - 2026-05-06¶
Changed¶
- Simplified
VPN_SELFTEST_ENABLEDaccepted values to onlyno(default),afterstart, or a five-field cron expression such as*/5 * * * *. - Removed temporary
yesandnocompatibility aliases for self-test scheduling. - Improved invalid-schedule logging so self-test cron parsing errors reference
VPN_SELFTEST_ENABLED. - Updated self-test documentation in
README.mdandREADME-containers.mdto reflect the final accepted values.
[2.2.3] - 2026-05-06¶
Changed¶
- Extended
VPN_SELFTEST_ENABLEDscheduling behavior to acceptnone(default),afterstart, and five-field cron expressions like*/5 * * * *. - Kept backward compatibility by mapping
VPN_SELFTEST_ENABLED=yestoafterstartandVPN_SELFTEST_ENABLED=notonone. - Updated self-test documentation in
README.mdandREADME-containers.mdwith startup and periodic scheduling examples.
[2.2.2] - 2026-05-06¶
Added¶
- Added internal startup self-test script
run/nobody/vpn-selftest.shthat performs read-only checks for container routing, DNS resolver presence, writable data/config paths, VPN interface signaling, and NZBGet process/listener state. - Added
VPN_SELFTEST_ENABLEDto run the internal self-test once from the watchdog loop and log results to normal Docker container output.
Changed¶
- Documented the new internal self-test toggle and behavior in
README.mdandREADME-containers.md, including that the script remains internal at/home/nobody/vpn-selftest.shand is not exposed via/data/scripts.
[2.2.1] - 2026-05-04¶
Added¶
- Added OCI image labels to stable and testing Dockerfiles for registry metadata.
- Passed the NZBGetVPN image/codebase version into Docker builds as
NZBGETVPN_VERSION. - Reused
BASE_IMAGE_TAGfor both the Dockerfile base image and OCI base-image label.
[2.2.0] - 2026-05-04¶
Added¶
- Added Docker Compose examples for stable and testing image onboarding.
- Added
SECURITY.mdwith vulnerability reporting scope and secret-handling guidance. - Documented default NZBGet credential hardening and simple
/configplus/databackup/restore guidance.
[2.1.5] - 2026-05-04¶
Fixed¶
- Documented the previous stable base image tag in the stable Dockerfile for parity with the testing Dockerfile.
[2.1.4] - 2026-05-04¶
Fixed¶
- Restored the standalone NZBGet version Docker tag in stable and testing builds.
- Removed unused
NZBGET_CACERT_SHA256metadata from the testing Dockerfile.
Changed¶
- Simplified the startup-complete version log to write to normal stdout now that supervisor duplicate logging is fixed.
[2.1.3] - 2026-05-04¶
Added¶
- Added the maintainer contact page URL to the startup-complete version log line.
[2.1.2] - 2026-05-04¶
Fixed¶
- Stopped supervisor program logs from also writing directly to Docker stdout/stderr, preventing duplicate raw and supervisord-prefixed log lines.
[2.1.1] - 2026-05-04¶
Fixed¶
- Changed the startup-complete version log to a single line to avoid duplicated supervisord debug output.
- Added the NZBGet application version to the startup-complete version log.
[2.1.0] - 2026-05-04¶
Added¶
- Added the NZBGetVPN image/codebase
VERSIONfile to stable and testing images. - Added a startup-complete log banner after NZBGet is listening that shows the NZBGetVPN image/codebase version and links to the GitHub changelog.
Fixed¶
- Pointed the startup changelog log line at the repository
developbranch so it resolves after these changes are pushed.
[2.0.1] - 2026-05-04¶
Changed¶
- Changed
scripts/update-base-image.shso resolvingnewestbumps the NZBGetVPN image/codebase patch version when it pins a different base image tag. - Updated build documentation to mention that
--base newestbumpsVERSIONonly when the resolved base tag changes.
[2.0.0] - 2026-05-04¶
Changed¶
- Pinned the stable Dockerfile base image to a numeric
binhex/arch-int-vpntag instead oflatest. - Changed NZBGet update flows to require either
--sha256 <expected-sha256>or--accept-downloaded-sha256before writing a downloaded artifact checksum into a Dockerfile. - Tightened Docker tag and image codebase version validation in stable and testing build scripts.
- Quoted Docker build tag arguments in stable and testing build scripts.
- Updated README documentation for the explicit checksum verification gate.
Security¶
- Reduced stable image supply-chain drift by removing the mutable
latestbase tag. - Made checksum pinning an explicit operator decision instead of silently trusting the downloaded NZBGet artifact.
[1.0.1] - 2026-05-04¶
Changed¶
- Clarified
AGENTS.mdrole expectations for future coding agents: act as a senior architect, shell expert, security specialist, Docker/container expert, networking expert, and NZB/downloading/VPN domain expert. - Documented that security-sensitive VPN, provider API, downloader and firewall changes should favor robust, auditable solutions.
[1.0.0] - 2026-05-04¶
Added¶
- Added
VERSIONas the NZBGetVPN image/codebase version source. - Added combined Docker image version tags:
- stable:
<nzbget-version>-image-v<version>, for example26.1-image-v1.0.0 - testing:
<nzbget-testing-version>-image-v<version>, for example26.2-testing-20260501-image-v1.0.0 - Added
README-containers.mdas a compact Docker Hub description to stay under Docker Hub's size limit. - Added bundled helper scripts that are copied into
/data/scriptsat container startup: get_wireguard_configs_nordvpn.shselect_random_wireguard_config.shselect_random_openvpn_config.sh- Added
/data/scripts/README.md. - Added
/data/wireguard-configs/README.md. - Added
/data/openvpn-configs/README.md. - Added startup creation for:
/data/scripts/data/wireguard-configs/data/openvpn-configs- Added startup installation/update of bundled helper scripts from image templates, so mounted
/data/scriptscopies are refreshed when the image version changes. - Added NordVPN WireGuard config generation support through
get_wireguard_configs_nordvpn.sh. - Added random WireGuard config selection from
/data/wireguard-configs. - Added random OpenVPN profile selection from
/data/openvpn-configs. - Added optional source filename preservation:
WIREGUARD_CONFIG_USE_SOURCE_FILENAME=yesOPENVPN_CONFIG_USE_SOURCE_FILENAME=yes- Added configurable target filenames:
WIREGUARD_CONFIG_FILENAME, defaultwg0.confOPENVPN_CONFIG_FILENAME, defaultopenvpn.ovpn- Added documentation for creating
NORDVPN_ACCESS_TOKENthrough Nord Account. - Added
jqto build-time package installation because the NordVPN helper script requires it.
Changed¶
- Changed Docker Hub README publishing to explicitly use
README-containers.md. - Changed
get_wireguard_configs_nordvpn.shto default to one active WireGuard config at/config/wireguard/wg0.conf. - Changed
get_wireguard_configs_nordvpn.shsoTOTAL_CONFIGS > 1fetches multiple NordVPN recommendations and randomly selects one generated config. - Changed bundled script deployment so existing mounted helper scripts are updated when they differ from the image template.
- Updated
.gitignoreto allow only tracked helper scripts and README templates underdata/, while still ignoring real local VPN config files and secrets. - Updated README documentation for base-image behavior, helper scripts, cron/unhealthy script usage, build flow, Docker tags, and troubleshooting.
Fixed¶
- Fixed NordVPN recommendations API calls by using
curl --globofffor query parameters containing square brackets. - Fixed inconsistent
WIREGUARD_CONFIG_FILENAMEbehavior between the NordVPN WireGuard script and the random WireGuard selector. - Fixed missing default source directories for random OpenVPN/WireGuard config selection when
/datais a bind mount.
Security¶
- Removed the need to hardcode a NordVPN token in helper scripts by documenting and using
NORDVPN_ACCESS_TOKEN. - Kept generated and selected VPN config files at
chmod 600. - Preserved existing target VPN configs until a replacement config has been successfully prepared.