From e8101523e9c05262db101e0158fcb25b45a610ec Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Wed, 4 Nov 2026 11:08:24 -0500 Subject: [PATCH] feat: publish the HyperDX image as clickhouse/clickstack Adds the ClickHouse-namespace name for the app image alongside hyperdx/hyperdx, matching the other clickstack-* images, so the Helm chart and docs can stop depending on the hyperdx Docker Hub namespace. Drops the ghcr.io logins from both release workflows (nothing has been pushed there since May 2025) and the packages: write permission they needed. Docs now point at docker.clickhouse.com for the images that already exist there. --- .changeset/clickstack-app-image.md | 7 +++++ .env | 1 + .github/workflows/release-nightly.yml | 39 +++++------------------- .github/workflows/release.yml | 43 +++++++-------------------- DEPLOY.md | 20 ++++++++++++- LOCAL.md | 4 +-- Makefile | 2 ++ README.md | 2 +- 8 files changed, 50 insertions(+), 68 deletions(-) create mode 100644 .changeset/clickstack-app-image.md diff --git a/.changeset/clickstack-app-image.md b/.changeset/clickstack-app-image.md new file mode 100644 index 0000000000..aa42011529 --- /dev/null +++ b/.changeset/clickstack-app-image.md @@ -0,0 +1,7 @@ +--- +'@hyperdx/app': patch +--- + +feat: publish the HyperDX image as `clickhouse/clickstack` alongside +`hyperdx/hyperdx`, matching the other `clickhouse/clickstack-*` images. Release +workflows no longer log into ghcr.io, which received no pushes. diff --git a/.env b/.env index 835666b3b1..8ceaf87a8c 100644 --- a/.env +++ b/.env @@ -2,6 +2,7 @@ HDX_IMAGE_REPO=docker.hyperdx.io CH_IMAGE_REPO=docker.clickhouse.com IMAGE_NAME_DOCKERHUB=hyperdx/hyperdx +NEXT_IMAGE_NAME_DOCKERHUB=clickhouse/clickstack NEXT_LOCAL_IMAGE_NAME_DOCKERHUB=clickhouse/clickstack-local LOCAL_IMAGE_NAME_DOCKERHUB=hyperdx/hyperdx-local NEXT_ALL_IN_ONE_IMAGE_NAME_DOCKERHUB=clickhouse/clickstack-all-in-one diff --git a/.github/workflows/release-nightly.yml b/.github/workflows/release-nightly.yml index 6b967dffcf..3bd13af222 100644 --- a/.github/workflows/release-nightly.yml +++ b/.github/workflows/release-nightly.yml @@ -9,7 +9,6 @@ concurrency: cancel-in-progress: true permissions: contents: write - packages: write pull-requests: write actions: read jobs: @@ -39,12 +38,6 @@ jobs: with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - name: Load Environment Variables from .env uses: xom9ikk/dotenv@v2 - name: Build and Push @@ -114,12 +107,6 @@ jobs: with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - name: Load Environment Variables from .env uses: xom9ikk/dotenv@v2 - name: Build and Push @@ -136,6 +123,7 @@ jobs: CODE_VERSION=${{ env.IMAGE_NIGHTLY_TAG }} tags: | ${{ env.IMAGE_NAME_DOCKERHUB }}:${{ env.IMAGE_NIGHTLY_TAG }}-${{ matrix.arch }} + ${{ env.NEXT_IMAGE_NAME_DOCKERHUB }}:${{ env.IMAGE_NIGHTLY_TAG }}-${{ matrix.arch }} push: true sbom: true provenance: true @@ -158,14 +146,15 @@ jobs: password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - name: Setup Docker Buildx uses: docker/setup-buildx-action@v3 - - name: Create multi-arch manifest + - name: Create multi-arch manifests run: | TAG="${{ env.IMAGE_NIGHTLY_TAG }}" - IMAGE="${{ env.IMAGE_NAME_DOCKERHUB }}" - docker buildx imagetools create \ - -t "${IMAGE}:${TAG}" \ - "${IMAGE}:${TAG}-amd64" \ - "${IMAGE}:${TAG}-arm64" + for IMAGE in "${{ env.IMAGE_NAME_DOCKERHUB }}" "${{ env.NEXT_IMAGE_NAME_DOCKERHUB }}"; do + docker buildx imagetools create \ + -t "${IMAGE}:${TAG}" \ + "${IMAGE}:${TAG}-amd64" \ + "${IMAGE}:${TAG}-arm64" + done # --------------------------------------------------------------------------- # Local Nightly (all-in-one-noauth) @@ -193,12 +182,6 @@ jobs: with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - name: Load Environment Variables from .env uses: xom9ikk/dotenv@v2 - name: Build and Push @@ -276,12 +259,6 @@ jobs: with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - name: Load Environment Variables from .env uses: xom9ikk/dotenv@v2 - name: Build and Push diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3ddbe9f447..ae52bf1b2e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,7 +5,6 @@ on: workflow_dispatch: permissions: contents: write - packages: write pull-requests: write actions: read id-token: write @@ -817,12 +816,6 @@ jobs: with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - name: Load Environment Variables from .env uses: xom9ikk/dotenv@v2 - name: Build and Push @@ -897,12 +890,6 @@ jobs: with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - name: Load Environment Variables from .env uses: xom9ikk/dotenv@v2 - name: Build and Push @@ -919,6 +906,7 @@ jobs: CODE_VERSION=${{ env.CODE_VERSION }} tags: | ${{ env.IMAGE_NAME_DOCKERHUB }}:${{ env.IMAGE_VERSION }}${{ env.IMAGE_VERSION_SUB_TAG }}-${{ matrix.arch }} + ${{ env.NEXT_IMAGE_NAME_DOCKERHUB }}:${{ env.IMAGE_VERSION }}${{ env.IMAGE_VERSION_SUB_TAG }}-${{ matrix.arch }} push: true sbom: true provenance: true @@ -943,18 +931,19 @@ jobs: password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - name: Setup Docker Buildx uses: docker/setup-buildx-action@v3 - - name: Create multi-arch manifest + - name: Create multi-arch manifests run: | VERSION="${{ env.IMAGE_VERSION }}${{ env.IMAGE_VERSION_SUB_TAG }}" MAJOR="${{ env.IMAGE_VERSION }}" LATEST="${{ env.IMAGE_LATEST_TAG }}" - IMAGE="${{ env.IMAGE_NAME_DOCKERHUB }}" - docker buildx imagetools create \ - -t "${IMAGE}:${VERSION}" \ - -t "${IMAGE}:${MAJOR}" \ - -t "${IMAGE}:${LATEST}" \ - "${IMAGE}:${VERSION}-amd64" \ - "${IMAGE}:${VERSION}-arm64" + for IMAGE in "${{ env.IMAGE_NAME_DOCKERHUB }}" "${{ env.NEXT_IMAGE_NAME_DOCKERHUB }}"; do + docker buildx imagetools create \ + -t "${IMAGE}:${VERSION}" \ + -t "${IMAGE}:${MAJOR}" \ + -t "${IMAGE}:${LATEST}" \ + "${IMAGE}:${VERSION}-amd64" \ + "${IMAGE}:${VERSION}-arm64" + done # --------------------------------------------------------------------------- # Local (all-in-one-noauth) – build each arch natively, then merge @@ -984,12 +973,6 @@ jobs: with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - name: Load Environment Variables from .env uses: xom9ikk/dotenv@v2 - name: Build and Push @@ -1096,12 +1079,6 @@ jobs: with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - name: Load Environment Variables from .env uses: xom9ikk/dotenv@v2 - name: Build and Push diff --git a/DEPLOY.md b/DEPLOY.md index 52735ada6f..9c31726b8f 100644 --- a/DEPLOY.md +++ b/DEPLOY.md @@ -11,6 +11,24 @@ HyperDX can be deployed in a few different ways: - [All-in-one Docker Compose Stack](#all-in-one-docker-compose-stack) - [Local Development Mode](#local-development-mode) +## Container image names + +ClickStack images are published to Docker Hub under the `clickhouse` namespace +and are also served from `docker.clickhouse.com`: + +| Image | Name | +| --------------------------- | -------------------------------------- | +| HyperDX (UI + API) | `clickhouse/clickstack` | +| All-in-one (with auth) | `clickhouse/clickstack-all-in-one` | +| Local (all-in-one, no auth) | `clickhouse/clickstack-local` | +| OpenTelemetry collector | `clickhouse/clickstack-otel-collector` | + +The legacy `hyperdx/hyperdx`, `hyperdx/hyperdx-all-in-one`, +`hyperdx/hyperdx-local` and `hyperdx/hyperdx-otel-collector` names (also served +from `docker.hyperdx.io`) keep receiving the same tags for a transition period. +Switch to the `clickhouse/clickstack-*` names now; the date the legacy names +stop updating will be announced in the changelog. + ## Bring Your Own ClickHouse If you already have an existing ClickHouse cluster, you can simply deploy a @@ -81,5 +99,5 @@ authentication or configuration persistence. To get started, spin up the local mode container: ```bash -docker run -p 8080:8080 docker.hyperdx.io/hyperdx/hyperdx-local:2-beta +docker run -p 8080:8080 docker.clickhouse.com/clickhouse/clickstack-local:2 ``` diff --git a/LOCAL.md b/LOCAL.md index ccf36005c8..b6e98fc25a 100644 --- a/LOCAL.md +++ b/LOCAL.md @@ -22,7 +22,7 @@ And it has all the features you would expect from HyperDX: To get started, simply run the Docker container with the appropriate ports forwarded: ``` -docker run -p 8000:8000 -p 4318:4318 -p 4317:4317 -p 8080:8080 -p 8002:8002 docker.hyperdx.io/hyperdx/hyperdx-local +docker run -p 8000:8000 -p 4318:4318 -p 4317:4317 -p 8080:8080 -p 8002:8002 docker.clickhouse.com/clickhouse/clickstack-local ``` Afterwards, you can visit `http://localhost:8080` and immediately jump into the HyperDX UI. @@ -56,7 +56,7 @@ docker run \ -p 4318:4318 -p 4317:4317 \ -p $HYPERDX_APP_PORT:8080 \ -p 8002:8002 \ -docker.hyperdx.io/hyperdx/hyperdx-local +docker.clickhouse.com/clickhouse/clickstack-local ``` ## Open Source & Cloud Versions (Beyond Local) diff --git a/Makefile b/Makefile index 91896878ea..c682bacfc9 100644 --- a/Makefile +++ b/Makefile @@ -283,6 +283,7 @@ build-app: --build-context app=./packages/app \ --build-arg CODE_VERSION=${CODE_VERSION} \ -t ${IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \ + -t ${NEXT_IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \ --target prod .PHONY: build-otel-collector-nightly @@ -300,6 +301,7 @@ build-app-nightly: --build-context app=./packages/app \ --build-arg CODE_VERSION=${CODE_VERSION} \ -t ${IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \ + -t ${NEXT_IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \ --target prod .PHONY: build-local-nightly diff --git a/README.md b/README.md index 32e56a4c9f..a4d3f93c2f 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ HyperDX can be deployed as part of ClickStack, which includes ClickHouse, HyperDX, OpenTelemetry Collector and MongoDB. ```bash -docker run -p 8080:8080 -p 4317:4317 -p 4318:4318 docker.hyperdx.io/hyperdx/hyperdx-all-in-one +docker run -p 8080:8080 -p 4317:4317 -p 4318:4318 docker.clickhouse.com/clickhouse/clickstack-all-in-one ``` Afterwards, you can visit http://localhost:8080 to access the HyperDX UI.