# Changelog ## 2026-02-07 - 1.17.1 - fix(registrycopy) add fetchWithRetry wrapper to apply timeouts, retries with exponential backoff, and token cache handling; use it for registry HTTP requests - Introduces fetchWithRetry(url, options, timeoutMs, maxRetries) to wrap fetch with AbortSignal timeout, exponential backoff retries, and retry behavior only for network errors and 5xx responses - Replaces direct fetch calls for registry /v2 checks, token requests, and blob uploads with fetchWithRetry (30s for auth/token checks, 300s for blob operations) - Clears token cache entry when a 401 response is received so the next attempt re-authenticates - Adds logging on retry attempts and backoff delays to improve robustness and observability ## 2026-02-07 - 1.17.0 - feat(tsdocker) add Dockerfile filtering, optional skip-build flow, and fallback Docker config credential loading - Add TsDockerManager.filterDockerfiles(patterns) to filter discovered Dockerfiles by glob-style patterns and warn when no matches are found - Allow skipping image build with --no-build (argvArg.build === false): discover Dockerfiles and apply filters without performing build - Fallback to load Docker registry credentials from ~/.docker/config.json via RegistryCopy.getDockerConfigCredentials when env vars do not provide credentials - Import RegistryCopy and add info/warn logs when credentials are loaded or missing ## 2026-02-07 - 1.16.0 - feat(core) Introduce per-invocation TsDockerSession and session-aware local registry and build orchestration; stream and parse buildx output for improved logging and visibility; detect Docker topology and add CI-safe cleanup; update README with multi-arch, parallel-build, caching, and local registry usage and new CLI flags. - Add TsDockerSession to allocate unique ports, container names and builder suffixes for concurrent runs (especially in CI). - Make local registry session-aware: start/stop/use registry container and persistent storage per session; retry on port conflicts. - Inject session into Dockerfile instances and TsDockerManager; use session.config.registryHost for tagging/pushing and test container naming. - Stream and parse buildx/docker build output via createBuildOutputHandler for clearer step/platform/CACHED/DONE logging and --progress=plain usage. - Detect Docker topology (socket-mount, dind, local) in DockerContext and expose it in context info. - Add manager.cleanup to remove CI-scoped buildx builders and ensure CLI calls cleanup after build/push/test. - Update interfaces to include topology and adjust many Dockerfile/manager methods to be session-aware. - Large README improvements: multi-arch flow, persistent local registry, parallel builds, caching, new CLI and clean flags, and examples for CI integration. ## 2026-02-07 - 1.15.1 - fix(registry) use persistent local registry and OCI Distribution API image copy for pushes - Adds RegistryCopy class implementing the OCI Distribution API to copy images (including multi-arch manifest lists) from the local registry to remote registries. - All builds now go through a persistent local registry at localhost:5234 with volume storage at .nogit/docker-registry/; Dockerfile.startLocalRegistry mounts this directory. - Dockerfile.push now delegates to RegistryCopy.copyImage; Dockerfile.needsLocalRegistry() always returns true and config.push is now a no-op (kept for backward compat). - Multi-platform buildx builds are pushed to the local registry (this.localRegistryTag) during buildx --push; code avoids redundant pushes when images are already pushed by buildx. - Build, cached build, test, push and pull flows now start/stop the local registry automatically to support multi-platform/image resolution. - Introduces Dockerfile.getDestRepo and support for config.registryRepoMap to control destination repository mapping. - Breaking change: registry usage and push behavior changed (config.push ignored and local registry mandatory) — bump major version. ## 2026-02-07 - 1.15.0 - feat(clean) Make the `clean` command interactive: add smartinteract prompts, docker context detection, and selective resource removal with support for --all and -y auto-confirm - Adds dependency @push.rocks/smartinteract and exposes it from the plugins module - Refactors tsdocker.cli.ts clean command to list Docker resources and prompt checkbox selection for running/stopped containers, images, and volumes - Adds DockerContext detection and logging to determine active Docker context - Introduces auto-confirm (-y) and --all handling to either auto-accept or allow full-image/volume removal - Replaces blunt shell commands with safer, interactive selection and adds improved error handling and logging ## 2026-02-07 - 1.14.0 - feat(build) add level-based parallel builds with --parallel and configurable concurrency - Introduces --parallel and --parallel= CLI flags to enable level-based parallel Docker builds (default concurrency 4). - Adds Dockerfile.computeLevels() to group topologically-sorted Dockerfiles into dependency levels. - Adds Dockerfile.runWithConcurrency() implementing a bounded-concurrency worker-pool (fast-fail via Promise.all). - Integrates parallel build mode into Dockerfile.buildDockerfiles() and TsDockerManager.build() for both cached and non-cached flows, including tagging and pushing for dependency resolution after each level. - Adds options.parallel and options.parallelConcurrency to the build interface and wires them through the CLI and manager. - Updates documentation (readme.hints.md) with usage examples and implementation notes. ## 2026-02-07 - 1.13.0 - feat(docker) add Docker context detection, rootless support, and context-aware buildx registry handling - Introduce DockerContext class to detect current Docker context and rootless mode and to log warnings and context info - Add IDockerContextInfo interface and a new context option on build/config to pass explicit Docker context - Propagate --context CLI flag into TsDockerManager.prepare so CLI commands can set an explicit Docker context - Make buildx builder name context-aware (tsdocker-builder-) and log builder name/platforms - Pass isRootless into local registry startup and build pipeline; emit rootless-specific warnings and registry reachability hint ## 2026-02-06 - 1.12.0 - feat(docker) add detailed logging for buildx, build commands, local registry, and local dependency info - Log startup of local registry including a note about buildx dependency bridging - Log constructed build commands and indicate whether buildx or standard docker build is used (including platforms and --push/--load distinctions) - Emit build mode summary at start of build phase and report local base-image dependency mappings - Report when --no-cache is enabled and surface buildx setup readiness with configured platforms - Non-functional change: purely adds informational logging to improve observability during builds ## 2026-02-06 - 1.11.0 - feat(docker) start temporary local registry for buildx dependency resolution and ensure buildx builder uses host network - Introduce a temporary local registry (localhost:5234) with start/stop helpers and push support to expose local images for buildx - Add Dockerfile.needsLocalRegistry to decide when a local registry is required (local base dependencies + multi-platform or platform option) - Push built images to the local registry and set localRegistryTag on Dockerfile instances for BuildKit build-context usage - Tag built images in the host daemon for dependent Dockerfiles to resolve local FROM references - Integrate registry lifecycle into Dockerfile.buildDockerfiles and TsDockerManager build flows (start before builds, stop after) - Ensure buildx builder is created with --driver-opt network=host and recreate existing builder if it lacks host network to allow registry access from build containers ## 2026-02-06 - 1.10.0 - feat(classes.dockerfile) support using a local base image as a build context in buildx commands - Adds --build-context flag mapping base image to docker-image:// when localBaseImageDependent && localBaseDockerfile are set - Appends the build context flag to both single-platform and multi-platform docker buildx commands - Logs an info message indicating the local build context mapping ## 2026-02-06 - 1.9.0 - feat(build) add verbose build output, progress logging, and timing for builds/tests - Add 'verbose' option to build/test flows (interfaces, CLI, and method signatures) to allow streaming raw docker build output or run silently - Log per-item progress for build and test phases (e.g. (1/N) Building/Testing ) and report individual durations - Return elapsed time from Dockerfile.build() and Dockerfile.test() and aggregate total build/test times in manager - Introduce formatDuration(ms) helper in logging module to format timings - Switch from console.log to structured logger calls across cache, manager, dockerfile and push paths - Use silent exec variants when verbose is false and stream exec when verbose is true ## 2026-02-06 - 1.8.0 - feat(build) add optional content-hash based build cache to skip rebuilding unchanged Dockerfiles - Introduce TsDockerCache to compute SHA-256 of Dockerfile content and persist cache to .nogit/tsdocker_support.json - Add ICacheEntry and ICacheData interfaces and a cached flag to IBuildCommandOptions - Integrate cached mode in TsDockerManager: skip builds on cache hits, verify image presence, record builds on misses, and still perform dependency tagging - Expose --cached option in CLI to enable the cached build flow - Cache records store contentHash, imageId, buildTag and timestamp ## 2026-02-06 - 1.7.0 - feat(cli) add CLI version display using commitinfo - Imported commitinfo from './00_commitinfo_data.js' and called tsdockerCli.addVersion(commitinfo.version) to surface package/commit version in the Smartcli instance - Change made in ts/tsdocker.cli.ts — small user-facing CLI enhancement; no breaking changes ## 2026-02-06 - 1.6.0 - feat(docker) add support for no-cache builds and tag built images for local dependency resolution - Introduce IBuildCommandOptions.noCache to control --no-cache behavior - Propagate noCache from CLI (via cache flag) through TsDockerManager to Dockerfile.build - Append --no-cache to docker build/buildx commands when noCache is true - After building an image, tag it with full base image references used by dependent Dockerfiles so their FROM lines resolve to the locally-built image - Log tagging actions and execute docker tag via smartshellInstance ## 2026-02-06 - 1.5.0 - feat(build) add support for selective builds, platform override and build timeout - Introduce IBuildCommandOptions with patterns, platform and timeout to control build behavior - Allow manager.build() to accept options and build only matching Dockerfiles (including dependencies) preserving topological order - Add CLI parsing for build/push to accept positional Dockerfile patterns and --platform/--timeout flags - Support single-platform override via docker buildx and multi-platform buildx detection - Implement streaming exec with timeout to kill long-running builds and surface timeout errors ## 2026-02-04 - 1.4.3 - fix(dockerfile) fix matching of base images to local Dockerfiles by stripping registry prefixes when comparing image references - Added Dockerfile.extractRepoVersion(imageRef) to normalize image references by removing registry prefixes (detects registries containing '.' or ':' or 'localhost'). - Use extractRepoVersion when checking tagToDockerfile and when mapping local base dockerfiles to ensure comparisons use repo:tag keys rather than full registry-prefixed references. - Prevents mismatches when baseImage includes a registry (e.g. "host.today/repo:version") so it correctly matches a local cleanTag like "repo:version". ## 2026-01-21 - 1.4.2 - fix(classes.dockerfile) use a single top-level fs import instead of requiring fs inside methods - Added top-level import: import * as fs from 'fs' in ts/classes.dockerfile.ts - Removed inline require('fs') calls and replaced with the imported fs in constructor and test() to keep imports consistent - No behavioral change expected; this is a cleanup/refactor to standardize module usage ## 2026-01-20 - 1.4.1 - fix(docs) update README: expand usage, installation, quick start, features, troubleshooting and migration notes - Expanded README content: new Quick Start, Installation examples, and detailed Features section (containerized testing, smart Docker builds, multi-registry push, multi-architecture support, zero-config start) - Added troubleshooting and performance tips including registry login guidance and circular dependency advice - Updated migration notes from legacy npmdocker to @git.zone/tsdocker (command and config key changes, ESM guidance) - Documentation-only change — no source code modified ## 2026-01-20 - 1.4.0 - feat(tsdocker) add multi-registry and multi-arch Docker build/push/pull manager, registry storage, Dockerfile handling, and new CLI commands - Introduce TsDockerManager orchestrator to discover, sort, build, test, push and pull Dockerfiles - Add Dockerfile class with dependency-aware build order, buildx support, push/pull and test flows (new large module) - Add DockerRegistry and RegistryStorage classes to manage registry credentials, login/logout and environment loading - Add CLI commands: build, push, pull, test, login, list (and integrate TsDockerManager into CLI) - Extend configuration (ITsDockerConfig) with registries, registryRepoMap, buildArgEnvMap, platforms, push and testDir; re-export as IConfig for backwards compatibility - Add @push.rocks/lik to dependencies and import it in tsdocker.plugins - Remove legacy speedtest command and related package.json script - Update README and readme.hints with new features, configuration examples and command list ## 2026-01-19 - 1.3.0 - feat(packaging) Rename package scope to @git.zone and migrate to ESM; rename CLI/config keys, update entrypoints and imports, bump Node requirement to 18, and adjust scripts/dependencies - Package renamed to @git.zone/tsdocker (scope change) — consumers must update package reference. - Configuration key changed from 'npmdocker' to '@git.zone/tsdocker' in npmextra.json; update project config accordingly. - CLI command renamed from 'npmdocker' to 'tsdocker' and entrypoint/entrypoint binary references updated. - Project migrated to ESM: imports now use .js extensions, package main/typings point to dist_ts, and ts source uses ESM patterns — Node >=18 required. - Build/test scripts changed to use tsx and updated test task names; CI/workflow and npmextra release registries updated. - Dependencies/devDependencies bumped; smartfs, smartcli and tsbuild versions updated. - Docker build command now uses '--load' and default base images/installation behavior adjusted (global install of tsdocker in image). ## 2025-12-13 - 1.2.43 - fix(packaging) Rename package scope to @git.zone and migrate deps/CI; pin pnpm and enable ESM packaging - Rename npm package scope from @gitzone/tsdocker to @git.zone/tsdocker (package.json, commitinfo, README, npmextra) - Migrate devDependencies from @gitzone/_ to @git.zone/_ and ensure runtime packages use @push.rocks/\* where applicable - Replace smartfile usage with smartfs and update code to use async smartfs.file(...).write()/delete() patterns - Add packageManager pin for pnpm, set type: "module", add files array and pnpm.overrides in package.json - Add tsconfig.json with NodeNext/ES2022 settings and other ESM-related adjustments - Add Gitea CI workflows (.gitea/workflows/default_tags.yaml and default_nottags.yaml) for test, audit and release flows - Update assets Dockerfile to reference @git.zone/tsdocker and other packaging/CI related scripts - Update .gitignore to consolidate dist patterns and add AI/tooling excludes (.claude/, .serena/) - Update README, readme.hints.md and changelog to document the scope rename, dependency migrations and SmartFS migration ## 2025-11-22 - 1.2.42 - fix(package.json) Add packageManager field to package.json to pin pnpm version - Add packageManager: "pnpm@10.18.1+sha512.77a884a165cbba2d8d1c19e3b4880eee6d2fcabd0d879121e282196b80042351d5eb3ca0935fa599da1dc51265cc68816ad2bddd2a2de5ea9fdf92adbec7cd34" to package.json to lock pnpm CLI version and integrity ## 2025-11-22 - 1.2.41 - fix(core) Migrate to @git.zone / @push.rocks packages, replace smartfile with smartfs and adapt filesystem usage; update dev deps and remove CI/lint config - Updated devDependencies from @gitzone/_ to @git.zone/_ (tsbuild, tsrun, tstest) and bumped versions - Re-scoped runtime dependencies from @pushrocks/_ to @push.rocks/_ and updated package versions - Replaced deprecated smartfile usage with new async smartfs API; added SmartFs instance in ts/tsdocker.plugins.ts - Switched sync filesystem calls to Node fs where appropriate (fs.existsSync, fs.mkdirSync) and updated code to await smartfs.file(...).write()/delete() - Made buildDockerFile async and awaited file write/delete operations to ensure correct async flow - Updated CLI bootstrap to require @git.zone/tsrun in cli.ts.js - Removed tslint.json and cleaned up CI configuration (.gitlab-ci.yml content removed) - Added readme.hints.md describing the migration and dependency changes ## 2021-09-30 - 1.2.40 - release (no code changes) Routine release tag with no recorded source changes. - Tagged release only (no changelogged changes). ## 2021-09-30 - 1.2.39 - fix(core) Core maintenance updates. - Internal core updates and maintenance. ## 2019-05-28 - 1.2.38 - fix(core) Core maintenance updates. - Internal core updates and maintenance. ## 2019-05-27 - 1.2.37 - fix(core) Core maintenance updates. - Internal core updates and maintenance. ## 2019-05-27 - 1.2.36 - fix(core) Core maintenance updates. - Internal core updates and maintenance. ## 2019-05-21 - 1.2.35 - fix(core) Core maintenance updates. - Internal core updates and maintenance. ## 2019-05-21 - 1.2.34 - fix(core) Core maintenance updates. - Internal core updates and maintenance. ## 2019-05-12 - 1.2.33 - fix(core) Core maintenance updates. - Internal core updates and maintenance. ## 2019-05-12 - 1.2.32 - fix(core) Core maintenance updates. - Internal core updates and maintenance. ## 2019-05-12 - 1.2.31 - fix(bin name) Rename of the published CLI binary. - Changed published binary name from "npmdocker" to "tsdocker". ## 2019-05-10 - 1.2.30 - fix(core) Core maintenance updates. - Internal core updates and maintenance. ## 2019-05-10 - 1.2.29 - fix(core) Core maintenance updates. - Internal core updates and maintenance. ## 2019-05-10 - 1.2.28 - fix(core) Core maintenance updates. - Internal core updates and maintenance. ## 2019-05-09 - 1.2.27 - fix(core) Core maintenance updates. - Internal core updates and maintenance. ## 2018-10-29 - 1.2.26 - fix(ci) CI build process change. - Removed "npmts" from the build process. ## 2018-10-29 - 1.2.25 - fix(core) Core maintenance updates. - Internal core updates and maintenance. ## 2018-10-28 - 1.2.24 - fix(clean) Improved image cleanup. - Images are now cleaned in a more thorough way. ## 2018-09-16 - 1.2.23 - fix(core) Core maintenance updates. - Internal core updates and maintenance. ## 2018-09-16 - 1.2.22 - fix(dependencies) Dependency updates. - Updated dependencies (maintenance). ## 2018-07-21 - 1.2.21 - fix(update to latest standards) Standards/update alignment. - Updated codebase to latest standards (general maintenance). ## 2018-05-18 - 1.2.20 - release (no code changes) Tagged release with no recorded source changes. - Tagged release only (no changelogged changes). ## 2018-05-18 - 1.2.19 - fix(ci) CI improvements. - Added a build command to package.json to support CI builds. ## 2018-05-18 - 1.2.18 - fix(package) Packaging change for scoped publish. - Include npmdocker under the @git.zone npm scope. ## 2018-01-24 - 1.2.18 - update Documentation update. - Updated package description. ## 2017-10-13 - 1.2.17 - fix(cleanup) Cleanup behavior fix. - Now cleans up correctly after operations. ## 2017-10-13 - 1.2.16 - update Miscellaneous updates. - General maintenance and updates. ## 2017-10-13 - 1.2.15 - fix(test) Testing improvements. - Fixed Docker testing. ## 2017-10-07 - 1.2.14 - ci CI improvements. - Updated CI configuration. ## 2017-10-07 - 1.2.13 - update(analytics) Analytics integration. - Updated Analytics integration. ## 2017-10-07 - 1.2.12 - update(dependencies) Dependency updates. - Updated dependencies. ## 2017-07-16 - 1.2.11 - update Dependency and greeting update. - Updated dependencies and changed greeting text. ## 2017-04-21 - 1.2.10 - feature Added analytics. - Now includes SmartAnalytics. ## 2017-04-02 - 1.2.8 - docs & ci Docs and CI updates. - Updated README and CI configuration. ## 2017-04-02 - 1.2.7 - fix(command) Command execution fix. - Fixed command execution behavior. ## 2017-03-28 - 1.2.6 - ci CI configuration update. - Updated .gitlab-ci.yml for correct images/steps. ## 2017-03-28 - 1.2.5 - ci CI improvements. - Further CI updates. ## 2017-03-28 - 1.2.4 - perf Performance improvements. - Now runs asynchronously and is significantly faster. ## 2017-02-12 - 1.2.3 - feature New cleanup and diagnostics features. - Added speedtest utility. - Added removal of volumes. ## 2017-02-11 - 1.2.2 - feature Cleanup enhancement. - Added "clean --all" option to remove more artifacts. ## 2017-02-11 - 1.2.1 - maintenance Docs and dependency updates. - Updated README and dependencies. ## 2016-08-04 - 1.2.0 - maintenance Dependency cleanup. - Removed unnecessary dependencies. ## 2016-07-29 - 1.1.6 - feature Environment support. - Added support for qenv. ## 2016-07-29 - 1.1.5 - fix Container cleanup improvements. - Now also removes old running containers. ## 2016-07-29 - 1.1.4 - fix Namespace conflict avoidance. - Removes previous containers to avoid name-space conflicts after errors. ## 2016-07-29 - 1.1.3 - ci CI image configuration. - Added correct images for GitLab CI. ## 2016-07-29 - 1.1.2 - ci CI fixes. - Fixed GitLab CI configuration. ## 2016-07-28 - 1.1.1 - ci CI fixes and configuration. - Fixed gitlab.yml and CI issues. ## 2016-07-28 - 1.1.0 - feature Docker-in-Docker support. - Improved support for Docker-in-Docker scenarios. ## 2016-07-28 - 1.0.5 - feature & ci Docker socket option and CI update. - Added dockerSock option. - Updated .gitlab-ci.yml. ## 2016-07-19 - 1.0.4 - release (no code changes) Tagged release with no recorded source changes. - Tagged release only (no changelogged changes). ## 2016-07-19 - 1.0.3 - feature Environment tagging. - Added environment tag support. ## 2016-07-19 - 1.0.2 - milestone CLI and stability improvements. - Wired up CLI usage. - Marked as fully working. ## 2016-07-19 - 1.0.1 - initial improvements Early project refinements and Docker integration. - Added/updated Docker integration and configuration. - Improved config handling and path management. - Updated Docker handling and removed test artifacts. ## 2016-07-13 - 1.0.0 - initial Initial release. - Added README and initial project scaffolding.