From 2eec933fa0c41a46abd86e355a047d14192e2758 Mon Sep 17 00:00:00 2001 From: Joshua Gilman Date: Sun, 4 Jan 2026 15:22:38 -0800 Subject: [PATCH] refactor(images): remove systemd and dind image variants MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Current behavior: Three container image variants were published: base, systemd (with init system), and dind (with Docker-in-Docker). The systemd and dind variants added complexity to CI/CD, release management, and documentation. New behavior: Only the base image variant is published. Removed: - images/systemd/ and images/dind/ directories - CI workflow matrix entries for systemd/dind - Release-please configuration for systemd/dind components - Docker Bake targets for systemd/dind - Documentation references to systemd/dind variants 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .github/workflows/images.yml | 14 +---- .github/workflows/security-scan.yml | 2 +- .release-please-manifest.json | 4 +- RELEASE.md | 25 +++----- docker-bake.hcl | 25 +------- docs/docs/reference/configuration.md | 2 +- docs/docs/reference/images/overview.md | 85 ++++++-------------------- images/dind/.trivyignore | 23 ------- images/dind/CHANGELOG.md | 3 - images/dind/Dockerfile | 59 ------------------ images/systemd/.trivyignore | 22 ------- images/systemd/CHANGELOG.md | 3 - images/systemd/Dockerfile | 47 -------------- internal/config/config.go | 1 - justfile | 12 +--- release-please-config.json | 14 ----- 16 files changed, 35 insertions(+), 306 deletions(-) delete mode 100644 images/dind/.trivyignore delete mode 100644 images/dind/CHANGELOG.md delete mode 100644 images/dind/Dockerfile delete mode 100644 images/systemd/.trivyignore delete mode 100644 images/systemd/CHANGELOG.md delete mode 100644 images/systemd/Dockerfile diff --git a/.github/workflows/images.yml b/.github/workflows/images.yml index 36e21bb..809e6d0 100644 --- a/.github/workflows/images.yml +++ b/.github/workflows/images.yml @@ -15,8 +15,6 @@ on: - '.github/workflows/images.yml' tags: - 'images/base/v*' - - 'images/systemd/v*' - - 'images/dind/v*' env: REGISTRY: ghcr.io @@ -28,8 +26,6 @@ jobs: matrix: dockerfile: - images/base/Dockerfile - - images/systemd/Dockerfile - - images/dind/Dockerfile steps: - name: Checkout repository uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 @@ -61,7 +57,7 @@ jobs: echo "Building $VARIANT with version $VERSION" else # Build all variants on push to master or PR - echo 'variants=["base", "systemd", "dind"]' >> $GITHUB_OUTPUT + echo 'variants=["base"]' >> $GITHUB_OUTPUT echo "is_release=false" >> $GITHUB_OUTPUT echo "version=latest" >> $GITHUB_OUTPUT echo "Building all variants with latest tag" @@ -80,8 +76,6 @@ jobs: variant: ${{ fromJson(needs.prepare.outputs.variants) }} outputs: base-digest: ${{ steps.digest.outputs.base }} - systemd-digest: ${{ steps.digest.outputs.systemd }} - dind-digest: ${{ steps.digest.outputs.dind }} steps: - name: Checkout repository @@ -146,11 +140,7 @@ jobs: id: digest run: | # Get the digest from the build job output - case "${{ matrix.variant }}" in - base) echo "value=${{ needs.build.outputs.base-digest }}" >> $GITHUB_OUTPUT ;; - systemd) echo "value=${{ needs.build.outputs.systemd-digest }}" >> $GITHUB_OUTPUT ;; - dind) echo "value=${{ needs.build.outputs.dind-digest }}" >> $GITHUB_OUTPUT ;; - esac + echo "value=${{ needs.build.outputs.base-digest }}" >> $GITHUB_OUTPUT - name: Log in to Container Registry uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3 diff --git a/.github/workflows/security-scan.yml b/.github/workflows/security-scan.yml index 06b9477..2cdcafe 100644 --- a/.github/workflows/security-scan.yml +++ b/.github/workflows/security-scan.yml @@ -20,7 +20,7 @@ jobs: strategy: fail-fast: false matrix: - variant: [base, systemd, dind] + variant: [base] steps: - name: Checkout repository diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 18cd96f..0840c23 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,6 +1,4 @@ { ".": "0.0.0", - "images/base": "0.0.0", - "images/systemd": "0.0.0", - "images/dind": "0.0.0" + "images/base": "0.0.0" } diff --git a/RELEASE.md b/RELEASE.md index bd35320..783dabc 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -4,14 +4,12 @@ This document describes the release process for Headjack, covering the CLI and c ## Overview -Headjack uses [release-please](https://github.com/googleapis/release-please) to automate releases. The system manages four independent components: +Headjack uses [release-please](https://github.com/googleapis/release-please) to automate releases. The system manages two independent components: | Component | Tag Format | Changelog | |-----------|------------|-----------| | CLI | `v1.0.0` | `CHANGELOG.md` | | base image | `images/base/v1.0.0` | `images/base/CHANGELOG.md` | -| systemd image | `images/systemd/v1.0.0` | `images/systemd/CHANGELOG.md` | -| dind image | `images/dind/v1.0.0` | `images/dind/CHANGELOG.md` | ## Release Flow @@ -101,7 +99,6 @@ git commit -m "feat: add instance list command" # Image changes (touches files in images/) git commit -m "feat(images/base): add ripgrep to base image" -git commit -m "fix(images/dind): update Docker CE version" ``` ## CLI Releases @@ -146,21 +143,19 @@ Triggers on `v*` tags and runs GoReleaser with: Container images are built and published when `images/*/v*` tags are pushed. -### Image Variants +### Image Variant | Variant | Base | Features | |---------|------|----------| | `base` | Ubuntu 24.04 | Dev tools, agent CLIs, version managers | -| `systemd` | `base` | systemd init system | -| `dind` | `systemd` | Docker-in-Docker support | ### Image Tags Each release creates two tags: ``` -ghcr.io/gilmanlab/headjack:base # Latest -ghcr.io/gilmanlab/headjack:base-v1.0.0 # Versioned +ghcr.io/gilmanlab/headjack:base # Latest +ghcr.io/gilmanlab/headjack:base-v1.0.0 # Versioned ``` ### Build Features @@ -174,8 +169,6 @@ ghcr.io/gilmanlab/headjack:base-v1.0.0 # Versioned Triggers on: - `images/base/v*` tags -- `images/systemd/v*` tags -- `images/dind/v*` tags Jobs: 1. **lint**: Validates Dockerfiles with hadolint @@ -194,9 +187,7 @@ Defines components, release types, and changelog configuration: "separate-pull-requests": true, "packages": { ".": { "component": "cli", "include-component-in-tag": false }, - "images/base": { "component": "images/base", "include-component-in-tag": true }, - "images/systemd": { "component": "images/systemd", "include-component-in-tag": true }, - "images/dind": { "component": "images/dind", "include-component-in-tag": true } + "images/base": { "component": "images/base", "include-component-in-tag": true } } } ``` @@ -208,9 +199,7 @@ Tracks current versions for each component: ```json { ".": "1.0.0", - "images/base": "1.0.0", - "images/systemd": "1.0.0", - "images/dind": "1.0.0" + "images/base": "1.0.0" } ``` @@ -273,7 +262,7 @@ cosign verify-attestation ghcr.io/gilmanlab/headjack:base \ Release-please uses file paths to attribute commits. Ensure your changes are in the correct directory: - CLI: Root Go files (`*.go`, `internal/`, `cmd/`) -- Images: `images/base/`, `images/systemd/`, `images/dind/` +- Images: `images/base/` ### Release PR Has Wrong Version diff --git a/docker-bake.hcl b/docker-bake.hcl index e8a2581..b9d82c2 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -5,8 +5,7 @@ # docker buildx bake base # Build only base image # docker buildx bake --push # Build and push all images # -# The images have dependencies: base -> systemd -> dind -# Bake automatically builds dependencies first. +# The base image provides all required functionality. variable "REGISTRY" { default = "ghcr.io" @@ -22,7 +21,7 @@ variable "TAG" { # Target group to build all images group "default" { - targets = ["base", "systemd", "dind"] + targets = ["base"] } target "base" { @@ -31,23 +30,3 @@ target "base" { tags = ["${REGISTRY}/${REPOSITORY}:base", "${REGISTRY}/${REPOSITORY}:base-${TAG}"] platforms = ["linux/amd64", "linux/arm64"] } - -target "systemd" { - context = "images/systemd" - dockerfile = "Dockerfile" - tags = ["${REGISTRY}/${REPOSITORY}:systemd", "${REGISTRY}/${REPOSITORY}:systemd-${TAG}"] - platforms = ["linux/amd64", "linux/arm64"] - contexts = { - base = "target:base" - } -} - -target "dind" { - context = "images/dind" - dockerfile = "Dockerfile" - tags = ["${REGISTRY}/${REPOSITORY}:dind", "${REGISTRY}/${REPOSITORY}:dind-${TAG}"] - platforms = ["linux/amd64", "linux/arm64"] - contexts = { - systemd = "target:systemd" - } -} diff --git a/docs/docs/reference/configuration.md b/docs/docs/reference/configuration.md index 4e315a8..596ccfe 100644 --- a/docs/docs/reference/configuration.md +++ b/docs/docs/reference/configuration.md @@ -36,7 +36,7 @@ Default values applied when creating new instances. | Key | Type | Default | Description | |-----|------|---------|-------------| | `default.agent` | string | `""` (empty) | Default agent to use. Valid values: `claude`, `gemini`, `codex`. Empty means no default. | -| `default.base_image` | string | `ghcr.io/gilmanlab/headjack:base` | Container image to use for instances. Available variants: `:base` (minimal), `:systemd` (with init), `:dind` (with Docker). | +| `default.base_image` | string | `ghcr.io/gilmanlab/headjack:base` | Container image to use for instances. | ### agents diff --git a/docs/docs/reference/images/overview.md b/docs/docs/reference/images/overview.md index c2470bd..88bda98 100644 --- a/docs/docs/reference/images/overview.md +++ b/docs/docs/reference/images/overview.md @@ -1,16 +1,16 @@ --- sidebar_position: 1 title: Overview -description: Headjack container image variants +description: Headjack container image --- -# Container Images Overview +# Container Image Overview -Headjack provides pre-built container images for running isolated CLI-based LLM coding agents. All images are based on Ubuntu 24.04 LTS and include development tools, agent CLIs, and language runtime managers. +Headjack provides a pre-built container image for running isolated CLI-based LLM coding agents. The image is based on Ubuntu 24.04 LTS and includes development tools, agent CLIs, and language runtime managers. ## Registry -All images are published to the GitHub Container Registry: +The image is published to the GitHub Container Registry: ``` ghcr.io/gilmanlab/headjack @@ -21,79 +21,36 @@ ghcr.io/gilmanlab/headjack Images follow a consistent naming pattern: ``` -ghcr.io/gilmanlab/headjack: -ghcr.io/gilmanlab/headjack:- +ghcr.io/gilmanlab/headjack:base +ghcr.io/gilmanlab/headjack:base- ``` Examples: - `ghcr.io/gilmanlab/headjack:base` - Latest base image - `ghcr.io/gilmanlab/headjack:base-v1.0.0` - Base image version 1.0.0 -- `ghcr.io/gilmanlab/headjack:dind` - Latest Docker-in-Docker image -## Image Variants +## Features -The images form an inheritance hierarchy. Each variant builds on the previous one: +The base image includes: -``` -base --> systemd --> dind -``` - -### Comparison Table - -| Feature | base | systemd | dind | -|---------|------|---------|------| -| Ubuntu 24.04 LTS | Yes | Yes | Yes | -| Agent CLIs (Claude, Gemini, Codex) | Yes | Yes | Yes | -| Version managers (pyenv, nodenv, goenv, rustup) | Yes | Yes | Yes | -| Development tools (git, gh, vim, ripgrep, etc.) | Yes | Yes | Yes | -| Terminal multiplexer (tmux) | Yes | Yes | Yes | -| systemd init system | No | Yes | Yes | -| Docker CE | No | No | Yes | -| Docker Compose plugin | No | No | Yes | -| Docker Buildx plugin | No | No | Yes | -| Multi-architecture support (amd64, arm64) | Yes | Yes | Yes | - -### Image Sizes - -| Variant | Approximate Size | -|---------|-----------------| -| `base` | ~600 MB | -| `systemd` | ~620 MB | -| `dind` | ~1.0 GB | +| Feature | Included | +|---------|----------| +| Ubuntu 24.04 LTS | Yes | +| Agent CLIs (Claude, Gemini, Codex) | Yes | +| Version managers (pyenv, nodenv, goenv, rustup) | Yes | +| Development tools (git, gh, vim, ripgrep, etc.) | Yes | +| Terminal multiplexer (tmux) | Yes | +| Multi-architecture support (amd64, arm64) | Yes | -## Choosing an Image - -### Use `base` when: -- Running simple agent workflows that do not require background services -- Minimizing image size is a priority -- No systemd or Docker functionality is needed - -### Use `systemd` when: -- Your workflow requires running background services managed by systemd -- You need a proper init system for signal handling and process management -- You are running services that expect systemd to be available - -### Use `dind` when: -- Your workflow requires building or running Docker containers -- You need to test containerized applications -- Your agent needs to execute Docker commands (e.g., `docker build`, `docker compose`) - -## Pulling Images +## Pulling the Image ```bash -# Pull the base image docker pull ghcr.io/gilmanlab/headjack:base - -# Pull the systemd image -docker pull ghcr.io/gilmanlab/headjack:systemd - -# Pull the Docker-in-Docker image -docker pull ghcr.io/gilmanlab/headjack:dind ``` ## Security -All images are: +The image is: - **Signed** with Cosign using keyless signing (Sigstore) - **Attested** with SBOM (Software Bill of Materials) in SPDX format - **Scanned** for vulnerabilities using Trivy @@ -106,10 +63,8 @@ cosign verify ghcr.io/gilmanlab/headjack:base \ --certificate-oidc-issuer='https://token.actions.githubusercontent.com' ``` -## Dockerfiles +## Dockerfile -For complete image specifications, see the Dockerfiles in the repository: +For the complete image specification, see the Dockerfile in the repository: - [Base Dockerfile](https://github.com/GilmanLab/headjack/blob/master/images/base/Dockerfile) -- [Systemd Dockerfile](https://github.com/GilmanLab/headjack/blob/master/images/systemd/Dockerfile) -- [Docker-in-Docker Dockerfile](https://github.com/GilmanLab/headjack/blob/master/images/dind/Dockerfile) diff --git a/images/dind/.trivyignore b/images/dind/.trivyignore deleted file mode 100644 index e335f67..0000000 --- a/images/dind/.trivyignore +++ /dev/null @@ -1,23 +0,0 @@ -# Trivy Ignore File for DinD (Docker-in-Docker) Image -# See: https://aquasecurity.github.io/trivy/latest/docs/configuration/filtering/ -# -# This image inherits from systemd (which inherits from base), -# so includes the same CVE suppressions. - -# glob CVE - The glob package bundled with npm has a command injection vulnerability. -# We attempt to patch this in the Dockerfile, but npm versions vary across architectures -# and the bundled glob version may differ. This is a transitive dependency that can only -# be fully fixed by npm maintainers updating their bundled dependencies. -CVE-2025-64756 - -# GitHub CLI (gh) false positives -# The gh CLI binary v2.83.2 contains the fix for CVE-2024-52308 (fixed in v2.62.0), -# but Trivy reports a Go pseudo-version from the internal build info rather than -# the actual release version. -CVE-2024-52308 - -# The sigstore/timestamp-authority CVE is a transitive Go dependency embedded in -# the gh CLI binary. This can only be fixed by the gh CLI maintainers updating -# their dependencies. The vulnerability is a DoS via excessive OID or Content-Type, -# which has limited impact in the context of a dev container CLI tool. -CVE-2025-66564 diff --git a/images/dind/CHANGELOG.md b/images/dind/CHANGELOG.md deleted file mode 100644 index 9dfc5b9..0000000 --- a/images/dind/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -# Changelog - -All notable changes to the dind image will be documented in this file. diff --git a/images/dind/Dockerfile b/images/dind/Dockerfile deleted file mode 100644 index 5ff01d0..0000000 --- a/images/dind/Dockerfile +++ /dev/null @@ -1,59 +0,0 @@ -# Headjack DinD (Docker-in-Docker) Image -# -# Extends the systemd image with Docker CE for Docker-in-Docker support. -# Use this when your workflows require Docker commands inside the container. -# See docs/designs/base-image.md for full specification. - -# hadolint ignore=DL3006 -FROM systemd - -SHELL ["/bin/bash", "-o", "pipefail", "-c"] - -ARG DOCKER_GPG_FINGERPRINT=9DC858229FC7DD38854AE2D88D81803C0EBFCD88 -ARG USERNAME=developer - -# ============================================================================= -# iptables-legacy Workaround -# Required for Docker-in-Docker in certain container environments -# ============================================================================= - -# hadolint ignore=DL3008 -RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ - iptables \ - && rm -rf /var/lib/apt/lists/* \ - && update-alternatives --set iptables /usr/sbin/iptables-legacy \ - && update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy - -# ============================================================================= -# Docker CE -# ============================================================================= - -# hadolint ignore=DL3008 -RUN keyring=/usr/share/keyrings/docker-archive-keyring.gpg && \ - tmpdir=$(mktemp -d) && \ - curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /tmp/docker.gpg && \ - GNUPGHOME="${tmpdir}" gpg --batch --show-keys --with-colons /tmp/docker.gpg | \ - awk -F: '/^fpr:/ {print $10; exit}' | grep -qx "${DOCKER_GPG_FINGERPRINT}" && \ - gpg --dearmor -o "${keyring}" /tmp/docker.gpg && \ - echo "deb [arch=$(dpkg --print-architecture) signed-by=${keyring}] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list && \ - apt-get update && \ - DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ - docker-ce \ - docker-ce-cli \ - containerd.io \ - docker-buildx-plugin \ - docker-compose-plugin \ - && rm -rf /var/lib/apt/lists/* /tmp/docker.gpg "${tmpdir}" - -# ============================================================================= -# Docker Configuration -# ============================================================================= - -# Docker-in-Docker requires a real filesystem for overlayfs snapshots. -VOLUME ["/var/lib/docker", "/var/lib/containerd"] - -# Add developer user to docker group and enable Docker service -RUN usermod -aG docker "$USERNAME" && \ - systemctl enable docker - -# STOPSIGNAL, VOLUME, and CMD are inherited from systemd image diff --git a/images/systemd/.trivyignore b/images/systemd/.trivyignore deleted file mode 100644 index 131639c..0000000 --- a/images/systemd/.trivyignore +++ /dev/null @@ -1,22 +0,0 @@ -# Trivy Ignore File for Systemd Image -# See: https://aquasecurity.github.io/trivy/latest/docs/configuration/filtering/ -# -# This image inherits from base, so includes the same CVE suppressions. - -# glob CVE - The glob package bundled with npm has a command injection vulnerability. -# We attempt to patch this in the Dockerfile, but npm versions vary across architectures -# and the bundled glob version may differ. This is a transitive dependency that can only -# be fully fixed by npm maintainers updating their bundled dependencies. -CVE-2025-64756 - -# GitHub CLI (gh) false positives -# The gh CLI binary v2.83.2 contains the fix for CVE-2024-52308 (fixed in v2.62.0), -# but Trivy reports a Go pseudo-version from the internal build info rather than -# the actual release version. -CVE-2024-52308 - -# The sigstore/timestamp-authority CVE is a transitive Go dependency embedded in -# the gh CLI binary. This can only be fixed by the gh CLI maintainers updating -# their dependencies. The vulnerability is a DoS via excessive OID or Content-Type, -# which has limited impact in the context of a dev container CLI tool. -CVE-2025-66564 diff --git a/images/systemd/CHANGELOG.md b/images/systemd/CHANGELOG.md deleted file mode 100644 index ba3d078..0000000 --- a/images/systemd/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -# Changelog - -All notable changes to the systemd image will be documented in this file. diff --git a/images/systemd/Dockerfile b/images/systemd/Dockerfile deleted file mode 100644 index 5241826..0000000 --- a/images/systemd/Dockerfile +++ /dev/null @@ -1,47 +0,0 @@ -# Headjack systemd Image -# -# Extends the base image with systemd init system support. -# Use this for multi-service environments that need a proper init system. -# For Docker-in-Docker support, use the dind variant instead. -# See docs/designs/base-image.md for full specification. - -# hadolint ignore=DL3006 -FROM base - -SHELL ["/bin/bash", "-o", "pipefail", "-c"] - -# Switch to root - systemd requires root privileges as PID 1 -# hadolint ignore=DL3002 -USER root - -# ============================================================================= -# Install systemd -# ============================================================================= - -# hadolint ignore=DL3008 -RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ - systemd \ - systemd-sysv \ - && rm -rf /var/lib/apt/lists/* - -# ============================================================================= -# systemd Configuration -# ============================================================================= - -# Clean up systemd services that don't make sense in a container -RUN rm -f /lib/systemd/system/multi-user.target.wants/* \ - /etc/systemd/system/*.wants/* \ - /lib/systemd/system/local-fs.target.wants/* \ - /lib/systemd/system/sockets.target.wants/*udev* \ - /lib/systemd/system/sockets.target.wants/*initctl* \ - /lib/systemd/system/sysinit.target.wants/systemd-tmpfiles-setup* \ - /lib/systemd/system/systemd-update-utmp* - -# Use systemd as init -STOPSIGNAL SIGRTMIN+3 - -# Volume for cgroups (required for systemd) -VOLUME ["/sys/fs/cgroup"] - -# systemd as init system -CMD ["/lib/systemd/systemd"] diff --git a/internal/config/config.go b/internal/config/config.go index 9789bc8..7a49a7b 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -22,7 +22,6 @@ const ( ) // DefaultBaseImage is the default container image. -// Available variants: :base (minimal), :systemd (+ init), :dind (+ Docker) const DefaultBaseImage = "ghcr.io/gilmanlab/headjack:base" // Sentinel errors for configuration operations. diff --git a/justfile b/justfile index c659df5..dafcbd5 100644 --- a/justfile +++ b/justfile @@ -34,22 +34,12 @@ test-coverage: build-base: docker build -t headjack:base images/base -# Build systemd image locally (depends on base) -build-systemd: build-base - docker build -t headjack:systemd --build-arg BASE_IMAGE=headjack:base images/systemd - -# Build dind image locally (depends on systemd) -build-dind: build-systemd - docker build -t headjack:dind --build-arg BASE_IMAGE=headjack:systemd images/dind - # Build all container images -build-images: build-dind +build-images: build-base # Lint all Dockerfiles lint-dockerfiles: hadolint images/base/Dockerfile - hadolint images/systemd/Dockerfile - hadolint images/dind/Dockerfile # ============================================================================= # Integration Tests diff --git a/release-please-config.json b/release-please-config.json index cb57dc0..5d52acc 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -29,20 +29,6 @@ "changelog-path": "CHANGELOG.md", "include-component-in-tag": true, "tag-separator": "/" - }, - "images/systemd": { - "release-type": "simple", - "component": "images/systemd", - "changelog-path": "CHANGELOG.md", - "include-component-in-tag": true, - "tag-separator": "/" - }, - "images/dind": { - "release-type": "simple", - "component": "images/dind", - "changelog-path": "CHANGELOG.md", - "include-component-in-tag": true, - "tag-separator": "/" } } }