diff --git a/.gitea/workflows/default_nottags.yaml b/.gitea/workflows/default_nottags.yaml index 0bae651..09338c4 100644 --- a/.gitea/workflows/default_nottags.yaml +++ b/.gitea/workflows/default_nottags.yaml @@ -7,7 +7,7 @@ on: env: IMAGE: code.foss.global/host.today/ht-docker-node:npmci - NPMCI_COMPUTED_REPOURL: https://${{gitea.repository_owner}}:${{secrets.GITEA_TOKEN}}@/${{gitea.repository}}.git + NPMCI_COMPUTED_REPOURL: https://${{gitea.repository_owner}}:${{secrets.GITEA_TOKEN}}@gitlab.com/${{gitea.repository}}.git NPMCI_TOKEN_NPM: ${{secrets.NPMCI_TOKEN_NPM}} NPMCI_TOKEN_NPM2: ${{secrets.NPMCI_TOKEN_NPM2}} NPMCI_GIT_GITHUBTOKEN: ${{secrets.NPMCI_GIT_GITHUBTOKEN}} diff --git a/.gitea/workflows/default_tags.yaml b/.gitea/workflows/default_tags.yaml index 821d33f..c7204ef 100644 --- a/.gitea/workflows/default_tags.yaml +++ b/.gitea/workflows/default_tags.yaml @@ -7,7 +7,7 @@ on: env: IMAGE: code.foss.global/host.today/ht-docker-node:npmci - NPMCI_COMPUTED_REPOURL: https://${{gitea.repository_owner}}:${{secrets.GITEA_TOKEN}}@/${{gitea.repository}}.git + NPMCI_COMPUTED_REPOURL: https://${{gitea.repository_owner}}:${{secrets.GITEA_TOKEN}}@gitlab.com/${{gitea.repository}}.git NPMCI_TOKEN_NPM: ${{secrets.NPMCI_TOKEN_NPM}} NPMCI_TOKEN_NPM2: ${{secrets.NPMCI_TOKEN_NPM2}} NPMCI_GIT_GITHUBTOKEN: ${{secrets.NPMCI_GIT_GITHUBTOKEN}} diff --git a/.gitignore b/.gitignore index ca56db6..73a05cd 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,10 @@ node_modules/ dist/ dist_*/ +# rust +rust/target/ +dist_rust/ + # AI .claude/ .serena/ diff --git a/.smartconfig.json b/.smartconfig.json index 35e5e38..ccdf4ba 100644 --- a/.smartconfig.json +++ b/.smartconfig.json @@ -24,4 +24,4 @@ "@ship.zone/szci": { "npmGlobalTools": [] } -} \ No newline at end of file +} diff --git a/changelog.md b/changelog.md index 21a5786..8e34f5e 100644 --- a/changelog.md +++ b/changelog.md @@ -1,11 +1,21 @@ # Changelog +## 2026-03-24 - 2.2.3 - fix(config) +update workflow repository URL handling and package config file references + +- Switches Gitea workflow repository URLs to use gitlab.com explicitly for authenticated CI git operations. +- Replaces the published config file entry from npmextra.json to .smartconfig.json in package metadata. +- Adds Rust build output directories to .gitignore. +- Refreshes changelog and README formatting to match the current smartconfig-based configuration. + ## 2026-03-24 - 2.2.2 - fix(config) + rename npmextra configuration file to .smartconfig.json - Moves the existing project metadata and release configuration from npmextra.json to .smartconfig.json without changing its contents. ## 2026-03-24 - 2.2.1 - fix(config) + switch configuration loading from npmextra to smartconfig - replace the @push.rocks/npmextra dependency with @push.rocks/smartconfig @@ -13,6 +23,7 @@ switch configuration loading from npmextra to smartconfig - refresh CLI help text to reference smartconfig.json instead of npmextra.json ## 2026-03-19 - 2.2.0 - feat(cli/buildx) + add pull control for builds and isolate buildx builders per project - adds a new pull build option with --no-pull CLI support and defaults builds to refreshing base images with --pull @@ -21,6 +32,7 @@ add pull control for builds and isolate buildx builders per project - updates session logging to include project hash and builder suffix for easier build diagnostics ## 2026-03-15 - 2.1.0 - feat(cli) + add global remote builder configuration and native SSH buildx nodes for multi-platform builds - adds a new `tsdocker config` command with subcommands to add, remove, list, and show remote builder definitions @@ -29,14 +41,15 @@ add global remote builder configuration and native SSH buildx nodes for multi-pl - updates the README and CLI help to document remote builder configuration and native cross-platform build workflows ## 2026-03-12 - 2.0.2 - fix(repo) -no changes to commit +no changes to commit ## 2026-03-12 - 2.0.1 - fix(repository) + no changes to commit - ## 2026-03-12 - 2.0.0 - BREAKING CHANGE(cli) + remove legacy container test runner and make the default command show the man page - Removes legacy testing and VS Code commands, including `runinside`, `vscode`, generated Dockerfile assets, and related configuration fields (`baseImage`, `command`, `dockerSock`, `keyValueObject`) @@ -44,10 +57,11 @@ remove legacy container test runner and make the default command show the man pa - Updates CLI and documentation to reflect default help output and the current build/push-focused workflow ## 2026-02-07 - 1.17.4 - fix() + no changes - ## 2026-02-07 - 1.17.3 - fix(registry) + increase default maxRetries in fetchWithRetry from 3 to 6 to improve resilience when fetching registry resources - Changed default maxRetries from 3 to 6 in ts/classes.registrycopy.ts @@ -55,6 +69,7 @@ increase default maxRetries in fetchWithRetry from 3 to 6 to improve resilience - No API or behavior changes besides the increased default retry count ## 2026-02-07 - 1.17.2 - fix(registry) + improve HTTP fetch retry logging, backoff calculation, and token-cache warning - Include HTTP method in logs and normalize method to uppercase for consistency @@ -64,6 +79,7 @@ improve HTTP fetch retry logging, backoff calculation, and token-cache warning - Add a warning log when clearing cached token after a 401 response ## 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 @@ -72,6 +88,7 @@ add fetchWithRetry wrapper to apply timeouts, retries with exponential backoff, - 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 @@ -80,6 +97,7 @@ add Dockerfile filtering, optional skip-build flow, and fallback Docker config c - 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). @@ -92,6 +110,7 @@ Introduce per-invocation TsDockerSession and session-aware local registry and bu - 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. @@ -103,6 +122,7 @@ use persistent local registry and OCI Distribution API image copy for pushes - 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 @@ -112,6 +132,7 @@ Make the `clean` command interactive: add smartinteract prompts, docker context - 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). @@ -122,6 +143,7 @@ add level-based parallel builds with --parallel and configurable concurrency - 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 @@ -131,6 +153,7 @@ add Docker context detection, rootless support, and context-aware buildx registr - 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 @@ -140,6 +163,7 @@ add detailed logging for buildx, build commands, local registry, and local depen - 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 @@ -150,6 +174,7 @@ start temporary local registry for buildx dependency resolution and ensure build - 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 @@ -157,6 +182,7 @@ support using a local base image as a build context in 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 @@ -167,6 +193,7 @@ add verbose build output, progress logging, and timing for builds/tests - 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 @@ -176,12 +203,14 @@ add optional content-hash based build cache to skip rebuilding unchanged Dockerf - 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 @@ -191,6 +220,7 @@ add support for no-cache builds and tag built images for local dependency resolu - 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 @@ -200,6 +230,7 @@ add support for selective builds, platform override and build timeout - 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'). @@ -207,13 +238,15 @@ fix matching of base images to local Dockerfiles by stripping registry prefixes - 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 +- 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) @@ -222,6 +255,7 @@ update README: expand usage, installation, quick start, features, troubleshootin - 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 @@ -234,6 +268,7 @@ add multi-registry and multi-arch Docker build/push/pull manager, registry stora - 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. diff --git a/package.json b/package.json index 4439b9d..6c0cce9 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "dist_ts_web/**/*", "assets/**/*", "cli.js", - "npmextra.json", + ".smartconfig.json", "readme.md" ], "pnpm": { diff --git a/readme.hints.md b/readme.hints.md index fa67d07..30f35cf 100644 --- a/readme.hints.md +++ b/readme.hints.md @@ -3,22 +3,23 @@ ## Module Purpose tsdocker is a comprehensive Docker development and building tool. It provides: + - Building Dockerfiles with dependency ordering - Multi-registry push/pull support - Multi-architecture builds (amd64/arm64) ## New CLI Commands (2026-01-19) -| Command | Description | -|---------|-------------| -| `tsdocker` | Show usage / man page | -| `tsdocker build` | Build all Dockerfiles with dependency ordering | -| `tsdocker push [registry]` | Push images to configured registries | -| `tsdocker pull ` | Pull images from registry | -| `tsdocker test` | Run container tests (test scripts) | -| `tsdocker login` | Login to configured registries | -| `tsdocker list` | List discovered Dockerfiles and dependencies | -| `tsdocker clean --all` | Clean up Docker environment | +| Command | Description | +| -------------------------- | ---------------------------------------------- | +| `tsdocker` | Show usage / man page | +| `tsdocker build` | Build all Dockerfiles with dependency ordering | +| `tsdocker push [registry]` | Push images to configured registries | +| `tsdocker pull ` | Pull images from registry | +| `tsdocker test` | Run container tests (test scripts) | +| `tsdocker login` | Login to configured registries | +| `tsdocker list` | List discovered Dockerfiles and dependencies | +| `tsdocker clean --all` | Clean up Docker environment | ## Configuration @@ -106,6 +107,7 @@ Implementation: `Dockerfile.computeLevels()` groups topologically sorted Dockerf All builds now go through a persistent local registry (`localhost:5234`) with volume storage at `.nogit/docker-registry/`. Pushes use the `RegistryCopy` class (`ts/classes.registrycopy.ts`) which implements the OCI Distribution API to copy images (including multi-arch manifest lists) from the local registry to remote registries. This replaces the old `docker tag + docker push` approach that only worked for single-platform images. Key classes: + - `RegistryCopy` — HTTP-based OCI image copy (auth, blob transfer, manifest handling) - `Dockerfile.push()` — Now delegates to `RegistryCopy.copyImage()` - `Dockerfile.needsLocalRegistry()` — Always returns true diff --git a/readme.md b/readme.md index d24ab09..b29b532 100644 --- a/readme.md +++ b/readme.md @@ -44,6 +44,7 @@ tsdocker build ``` tsdocker will: + 1. 🔍 Discover all `Dockerfile*` files in your project 2. 📊 Analyze `FROM` dependencies between them 3. 🔄 Sort them topologically @@ -84,64 +85,64 @@ tsdocker push --no-build Dockerfile_api Dockerfile_web ## CLI Commands -| Command | Description | -|---------|-------------| -| `tsdocker` | Show usage / man page | -| `tsdocker build` | Build all Dockerfiles with dependency ordering | -| `tsdocker push` | Build + push images to configured registries | -| `tsdocker pull ` | Pull images from a specific registry | -| `tsdocker test` | Build + run container test scripts (`test_*.sh`) | -| `tsdocker login` | Authenticate with configured registries | -| `tsdocker list` | Display discovered Dockerfiles and their dependencies | -| `tsdocker config` | Manage global tsdocker configuration (remote builders, etc.) | -| `tsdocker clean` | Interactively clean Docker environment | +| Command | Description | +| -------------------------- | ------------------------------------------------------------ | +| `tsdocker` | Show usage / man page | +| `tsdocker build` | Build all Dockerfiles with dependency ordering | +| `tsdocker push` | Build + push images to configured registries | +| `tsdocker pull ` | Pull images from a specific registry | +| `tsdocker test` | Build + run container test scripts (`test_*.sh`) | +| `tsdocker login` | Authenticate with configured registries | +| `tsdocker list` | Display discovered Dockerfiles and their dependencies | +| `tsdocker config` | Manage global tsdocker configuration (remote builders, etc.) | +| `tsdocker clean` | Interactively clean Docker environment | ### Build Flags -| Flag | Description | -|------|-------------| -| `` | Positional Dockerfile name patterns (e.g. `Dockerfile_base`, `Dockerfile_app*`) | -| `--platform=linux/arm64` | Override build platform for a single architecture | -| `--timeout=600` | Build timeout in seconds | -| `--no-cache` | Force rebuild without Docker layer cache | -| `--cached` | Skip unchanged Dockerfiles (content-hash based) | -| `--verbose` | Stream raw `docker build` output | -| `--parallel` | Enable level-based parallel builds (default concurrency: 4) | -| `--parallel=8` | Parallel builds with custom concurrency | -| `--context=mycontext` | Use a specific Docker context | +| Flag | Description | +| ------------------------ | ------------------------------------------------------------------------------- | +| `` | Positional Dockerfile name patterns (e.g. `Dockerfile_base`, `Dockerfile_app*`) | +| `--platform=linux/arm64` | Override build platform for a single architecture | +| `--timeout=600` | Build timeout in seconds | +| `--no-cache` | Force rebuild without Docker layer cache | +| `--cached` | Skip unchanged Dockerfiles (content-hash based) | +| `--verbose` | Stream raw `docker build` output | +| `--parallel` | Enable level-based parallel builds (default concurrency: 4) | +| `--parallel=8` | Parallel builds with custom concurrency | +| `--context=mycontext` | Use a specific Docker context | ### Push Flags -| Flag | Description | -|------|-------------| -| `` | Positional Dockerfile name patterns to select which images to push | -| `--registry=` | Push to a single specific registry instead of all configured | -| `--no-build` | Skip the build phase; only push existing images from local registry | +| Flag | Description | +| ------------------ | ------------------------------------------------------------------- | +| `` | Positional Dockerfile name patterns to select which images to push | +| `--registry=` | Push to a single specific registry instead of all configured | +| `--no-build` | Skip the build phase; only push existing images from local registry | ### Config Subcommands -| Subcommand | Description | -|------------|-------------| -| `add-builder` | Add or update a remote builder node | -| `remove-builder` | Remove a remote builder by name | -| `list-builders` | List all configured remote builders | -| `show` | Show the full global configuration | +| Subcommand | Description | +| ---------------- | ----------------------------------- | +| `add-builder` | Add or update a remote builder node | +| `remove-builder` | Remove a remote builder by name | +| `list-builders` | List all configured remote builders | +| `show` | Show the full global configuration | **`add-builder` flags:** -| Flag | Description | -|------|-------------| -| `--name=` | Builder name (e.g. `arm64-builder`) | -| `--host=` | SSH host (e.g. `armbuilder@192.168.1.100`) | -| `--platform=

` | Target platform (e.g. `linux/arm64`) | +| Flag | Description | +| ------------------ | --------------------------------------------------------- | +| `--name=` | Builder name (e.g. `arm64-builder`) | +| `--host=` | SSH host (e.g. `armbuilder@192.168.1.100`) | +| `--platform=

` | Target platform (e.g. `linux/arm64`) | | `--ssh-key=` | SSH key path (optional, uses SSH agent/config by default) | ### Clean Flags -| Flag | Description | -|------|-------------| +| Flag | Description | +| ------- | -------------------------------------------------- | | `--all` | Include all images and volumes (not just dangling) | -| `-y` | Auto-confirm all prompts | +| `-y` | Auto-confirm all prompts | ## Configuration @@ -167,13 +168,13 @@ Configure tsdocker in your `package.json` or `npmextra.json` under the `@git.zon #### Build & Push Options -| Option | Type | Default | Description | -|--------|------|---------|-------------| -| `registries` | `string[]` | `[]` | Registry URLs to push to | -| `registryRepoMap` | `object` | `{}` | Map registries to different repository paths | -| `buildArgEnvMap` | `object` | `{}` | Map Docker build ARGs to environment variables | -| `platforms` | `string[]` | `["linux/amd64"]` | Target architectures for multi-arch builds | -| `testDir` | `string` | `./test` | Directory containing test scripts | +| Option | Type | Default | Description | +| ----------------- | ---------- | ----------------- | ---------------------------------------------- | +| `registries` | `string[]` | `[]` | Registry URLs to push to | +| `registryRepoMap` | `object` | `{}` | Map registries to different repository paths | +| `buildArgEnvMap` | `object` | `{}` | Map Docker build ARGs to environment variables | +| `platforms` | `string[]` | `["linux/amd64"]` | Target architectures for multi-arch builds | +| `testDir` | `string` | `./test` | Directory containing test scripts | ## Architecture: How tsdocker Works @@ -217,12 +218,12 @@ tsdocker uses a **local OCI registry** as the canonical store for all built imag ### 🔑 Why a Local Registry? -| Problem | Solution | -|---------|----------| -| `docker buildx --load` fails for multi-arch images | `buildx --push` to local registry works for any number of platforms | -| `docker push` only pushes single-platform manifests | OCI API copy preserves full manifest lists (multi-arch) | -| Images lost between build and push phases | Persistent storage at `.nogit/docker-registry/` survives restarts | -| Redundant blob uploads on incremental pushes | HEAD checks skip blobs that already exist on the remote | +| Problem | Solution | +| --------------------------------------------------- | ------------------------------------------------------------------- | +| `docker buildx --load` fails for multi-arch images | `buildx --push` to local registry works for any number of platforms | +| `docker push` only pushes single-platform manifests | OCI API copy preserves full manifest lists (multi-arch) | +| Images lost between build and push phases | Persistent storage at `.nogit/docker-registry/` survives restarts | +| Redundant blob uploads on incremental pushes | HEAD checks skip blobs that already exist on the remote | ### 🔁 Resilient Push @@ -246,12 +247,12 @@ Every tsdocker invocation gets its own **session** with unique: This prevents resource conflicts when multiple CI jobs run tsdocker in parallel. Auto-detected CI systems: -| Environment Variable | CI System | -|---------------------|-----------| -| `GITEA_ACTIONS` | Gitea Actions | -| `GITHUB_ACTIONS` | GitHub Actions | -| `GITLAB_CI` | GitLab CI | -| `CI` | Generic CI | +| Environment Variable | CI System | +| -------------------- | -------------- | +| `GITEA_ACTIONS` | Gitea Actions | +| `GITHUB_ACTIONS` | GitHub Actions | +| `GITLAB_CI` | GitLab CI | +| `CI` | Generic CI | In local dev, no suffix is added — keeping a persistent builder for faster rebuilds. @@ -259,11 +260,11 @@ In local dev, no suffix is added — keeping a persistent builder for faster reb tsdocker automatically detects your Docker environment topology: -| Topology | Detection | Meaning | -|----------|-----------|---------| -| `local` | Default | Standard Docker installation on the host | -| `socket-mount` | `/.dockerenv` exists | Running inside a container with Docker socket mounted | -| `dind` | `DOCKER_HOST` starts with `tcp://` | Docker-in-Docker setup | +| Topology | Detection | Meaning | +| -------------- | ---------------------------------- | ----------------------------------------------------- | +| `local` | Default | Standard Docker installation on the host | +| `socket-mount` | `/.dockerenv` exists | Running inside a container with Docker socket mounted | +| `dind` | `DOCKER_HOST` starts with `tcp://` | Docker-in-Docker setup | Context-aware builder names (`tsdocker-builder-`) prevent conflicts across Docker contexts. Rootless Docker configurations trigger appropriate warnings. @@ -309,6 +310,7 @@ Build for multiple platforms using Docker Buildx: ``` tsdocker automatically: + - Sets up a Buildx builder with `--driver-opt network=host` (so buildx can reach the local registry) - Pushes multi-platform images to the local registry via `buildx --push` - Copies the full manifest list (including all platform variants) to remote registries on `tsdocker push` @@ -354,6 +356,7 @@ When remote builders are configured and the project's `platforms` includes a mat ``` **Prerequisites for the remote machine:** + - Docker installed and running - A user with Docker group access (no sudo needed) - SSH key access configured @@ -379,11 +382,11 @@ tsdocker groups Dockerfiles into **dependency levels** using topological analysi tsdocker discovers files matching `Dockerfile*`: -| File Name | Version Tag | -|-----------|-------------| -| `Dockerfile` | `latest` | -| `Dockerfile_v1.0.0` | `v1.0.0` | -| `Dockerfile_alpine` | `alpine` | +| File Name | Version Tag | +| ------------------------ | --------------------------- | +| `Dockerfile` | `latest` | +| `Dockerfile_v1.0.0` | `v1.0.0` | +| `Dockerfile_alpine` | `alpine` | | `Dockerfile_##version##` | Uses `package.json` version | ### 🎯 Dockerfile Filtering @@ -492,6 +495,7 @@ tsdocker list ``` Output: + ``` Discovered Dockerfiles: ======================== @@ -556,7 +560,7 @@ build-and-push: - npm install -g @git.zone/tsdocker - tsdocker push variables: - DOCKER_REGISTRY_1: "registry.gitlab.com|$CI_REGISTRY_USER|$CI_REGISTRY_PASSWORD" + DOCKER_REGISTRY_1: 'registry.gitlab.com|$CI_REGISTRY_USER|$CI_REGISTRY_PASSWORD' ``` **GitHub Actions:** @@ -568,7 +572,7 @@ build-and-push: tsdocker login tsdocker push env: - DOCKER_REGISTRY_1: "ghcr.io|${{ github.actor }}|${{ secrets.GITHUB_TOKEN }}" + DOCKER_REGISTRY_1: 'ghcr.io|${{ github.actor }}|${{ secrets.GITHUB_TOKEN }}' ``` **Gitea Actions:** @@ -579,7 +583,7 @@ build-and-push: npm install -g @git.zone/tsdocker tsdocker push env: - DOCKER_REGISTRY_1: "gitea.example.com|${{ secrets.REGISTRY_USER }}|${{ secrets.REGISTRY_PASSWORD }}" + DOCKER_REGISTRY_1: 'gitea.example.com|${{ secrets.REGISTRY_USER }}|${{ secrets.REGISTRY_PASSWORD }}' ``` tsdocker auto-detects all three CI systems and enables session isolation automatically — no extra configuration needed. @@ -607,20 +611,20 @@ await manager.push(); ### CI & Session Control -| Variable | Description | -|----------|-------------| -| `TSDOCKER_SESSION_ID` | Override the auto-generated session ID (default: random 8-char hex) | -| `TSDOCKER_REGISTRY_PORT` | Override the dynamically allocated local registry port | -| `CI` | Generic CI detection (also `GITHUB_ACTIONS`, `GITLAB_CI`, `GITEA_ACTIONS`) | +| Variable | Description | +| ------------------------ | -------------------------------------------------------------------------- | +| `TSDOCKER_SESSION_ID` | Override the auto-generated session ID (default: random 8-char hex) | +| `TSDOCKER_REGISTRY_PORT` | Override the dynamically allocated local registry port | +| `CI` | Generic CI detection (also `GITHUB_ACTIONS`, `GITLAB_CI`, `GITEA_ACTIONS`) | ### Registry Credentials -| Variable | Description | -|----------|-------------| +| Variable | Description | +| ------------------------------------------------ | ---------------------------------------------- | | `DOCKER_REGISTRY_1` through `DOCKER_REGISTRY_10` | Pipe-delimited: `registry\|username\|password` | -| `DOCKER_REGISTRY_URL` | Registry URL for single-registry setup | -| `DOCKER_REGISTRY_USER` | Username for single-registry setup | -| `DOCKER_REGISTRY_PASSWORD` | Password for single-registry setup | +| `DOCKER_REGISTRY_URL` | Registry URL for single-registry setup | +| `DOCKER_REGISTRY_USER` | Username for single-registry setup | +| `DOCKER_REGISTRY_PASSWORD` | Password for single-registry setup | ## Requirements diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index cdd291c..7bdeb47 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@git.zone/tsdocker', - version: '2.2.2', + version: '2.2.3', description: 'develop npm modules cross platform with docker' }