ci: introduce release-nightly workflow (#836)

This commit is contained in:
Warren 2025-05-22 11:59:46 -07:00 committed by GitHub
parent a762203449
commit e935bb6d16
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 248 additions and 60 deletions

View file

@ -0,0 +1,5 @@
---
"@hyperdx/common-utils": patch
---
ci: introduce release-nightly workflow

2
.env
View file

@ -1,7 +1,7 @@
# Used by docker-compose.yml
HDX_IMAGE_REPO=docker.hyperdx.io
IMAGE_NAME=ghcr.io/hyperdxio/hyperdx
IMAGE_NAME_DOCKERHUB=hyperdx/hyperdx
IMAGE_NAME_HDX=docker.hyperdx.io/hyperdx/hyperdx
LOCAL_IMAGE_NAME=ghcr.io/hyperdxio/hyperdx-local
LOCAL_IMAGE_NAME_DOCKERHUB=hyperdx/hyperdx-local
ALL_IN_ONE_IMAGE_NAME=ghcr.io/hyperdxio/hyperdx-all-in-one

96
.github/workflows/release-nightly.yml vendored Normal file
View file

@ -0,0 +1,96 @@
name: Release Nightly
on:
push:
branches: [v2]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: write
packages: write
pull-requests: write
actions: read
jobs:
release:
name: Release
runs-on: ubuntu-24.04
strategy:
matrix:
release:
- release-all-in-one-nightly
- release-app-nightly
- release-local-nightly
- release-otel-collector-nightly
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
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: Publish Images
run: make ${{ matrix.release }}
slack-notify-failure:
needs: release
runs-on: ubuntu-24.04
if: failure()
steps:
- name: Slack Notification
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
fields: repo,message,commit,author,action,eventName,ref,workflow,job,took,pullRequest # selectable (default: repo,message)
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL_ENG_NOTIFS }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# notify_downstream:
# name: Notify Downstream
# needs: [publish_common_utils, release]
# runs-on: ubuntu-24.04
# if:
# needs.publish_common_utils.outputs.changeset_outputs_hasChangesets ==
# 'false'
# steps:
# - name: Checkout
# uses: actions/checkout@v4
# - name: Load Environment Variables from .env
# uses: xom9ikk/dotenv@v2
# - name: Get Downstream App Installation Token
# id: auth
# uses: actions/create-github-app-token@v2
# with:
# app-id: ${{ secrets.DOWNSTREAM_CH_APP_ID }}
# private-key: ${{ secrets.DOWNSTREAM_CH_APP_PRIVATE_KEY }}
# owner: ${{ secrets.DOWNSTREAM_CH_OWNER }}
# - name: Notify Downstream
# uses: actions/github-script@v7
# env:
# TAG: ${{ env.IMAGE_VERSION }}${{ env.IMAGE_VERSION_SUB_TAG }}
# with:
# github-token: ${{ steps.auth.outputs.token }}
# script: |
# const { TAG } = process.env;
# const result = await github.rest.actions.createWorkflowDispatch({
# owner: '${{ secrets.DOWNSTREAM_CH_OWNER }}',
# repo: '${{ secrets.DOWNSTREAM_DP_REPO }}',
# workflow_id: '${{ secrets.DOWNSTREAM_DP_WORKFLOW_ID }}',
# ref: 'main',
# inputs: {
# tag: TAG
# }
# });

View file

@ -8,8 +8,8 @@ permissions:
packages: write
pull-requests: write
jobs:
publish_common_utils:
name: Publish @hyperdx/common-utils
check_changesets:
name: Check Changesets
runs-on: ubuntu-24.04
outputs:
changeset_outputs_hasChangesets:
@ -45,7 +45,7 @@ jobs:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
release:
name: Release
needs: publish_common_utils
needs: check_changesets
runs-on: ubuntu-24.04
strategy:
matrix:
@ -76,16 +76,15 @@ jobs:
uses: xom9ikk/dotenv@v2
- name: Publish Images
if:
needs.publish_common_utils.outputs.changeset_outputs_hasChangesets ==
needs.check_changesets.outputs.changeset_outputs_hasChangesets ==
'false'
run: make ${{ matrix.release }}
notify_downstream:
name: Notify Downstream
needs: [publish_common_utils, release]
needs: [check_changesets, release]
runs-on: ubuntu-24.04
if:
needs.publish_common_utils.outputs.changeset_outputs_hasChangesets ==
'false'
needs.check_changesets.outputs.changeset_outputs_hasChangesets == 'false'
steps:
- name: Checkout
uses: actions/checkout@v4

159
Makefile
View file

@ -71,13 +71,91 @@ dev-migrate-db:
version:
sh ./version.sh
# Build targets (local builds only)
.PHONY: build-otel-collector
build-otel-collector:
docker build ./docker/otel-collector \
-t ${OTEL_COLLECTOR_IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \
--target prod
.PHONY: build-local
build-local:
docker build . -f ./docker/hyperdx/Dockerfile \
--build-context clickhouse=./docker/clickhouse \
--build-context otel-collector=./docker/otel-collector \
--build-context hyperdx=./docker/hyperdx \
--build-context api=./packages/api \
--build-context app=./packages/app \
-t ${LOCAL_IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \
--target all-in-one-noauth
.PHONY: build-all-in-one
build-all-in-one:
docker build . -f ./docker/hyperdx/Dockerfile \
--build-context clickhouse=./docker/clickhouse \
--build-context otel-collector=./docker/otel-collector \
--build-context hyperdx=./docker/hyperdx \
--build-context api=./packages/api \
--build-context app=./packages/app \
-t ${ALL_IN_ONE_IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \
--target all-in-one-auth
.PHONY: build-app
build-app:
docker build . -f ./docker/hyperdx/Dockerfile \
--build-context hyperdx=./docker/hyperdx \
--build-context api=./packages/api \
--build-context app=./packages/app \
-t ${IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \
--target prod
.PHONY: build-otel-collector-nightly
build-otel-collector-nightly:
docker build ./docker/otel-collector \
-t ${OTEL_COLLECTOR_IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \
--target prod
.PHONY: build-app-nightly
build-app-nightly:
docker build . -f ./docker/hyperdx/Dockerfile \
--build-context hyperdx=./docker/hyperdx \
--build-context api=./packages/api \
--build-context app=./packages/app \
-t ${IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \
--target prod
.PHONY: build-local-nightly
build-local-nightly:
docker build . -f ./docker/hyperdx/Dockerfile \
--build-context clickhouse=./docker/clickhouse \
--build-context otel-collector=./docker/otel-collector \
--build-context hyperdx=./docker/hyperdx \
--build-context api=./packages/api \
--build-context app=./packages/app \
-t ${LOCAL_IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \
--target all-in-one-noauth
.PHONY: build-all-in-one-nightly
build-all-in-one-nightly:
docker build . -f ./docker/hyperdx/Dockerfile \
--build-context clickhouse=./docker/clickhouse \
--build-context otel-collector=./docker/otel-collector \
--build-context hyperdx=./docker/hyperdx \
--build-context api=./packages/api \
--build-context app=./packages/app \
-t ${ALL_IN_ONE_IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \
--target all-in-one-auth
# Release targets (with multi-platform build and push)
.PHONY: release-otel-collector
release-otel-collector:
docker buildx build --platform ${BUILD_PLATFORMS} ./docker/otel-collector \
-t ${OTEL_COLLECTOR_IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \
-t ${OTEL_COLLECTOR_IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \
-t ${OTEL_COLLECTOR_IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION} \
-t ${OTEL_COLLECTOR_IMAGE_NAME}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \
-t ${OTEL_COLLECTOR_IMAGE_NAME}:${IMAGE_NIGHTLY_TAG} \
-t ${OTEL_COLLECTOR_IMAGE_NAME}:${IMAGE_VERSION} \
--target prod \
--push \
--cache-from=type=gha \
@ -92,9 +170,9 @@ release-local:
--build-context api=./packages/api \
--build-context app=./packages/app \
--platform ${BUILD_PLATFORMS} \
-t ${LOCAL_IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \
-t ${LOCAL_IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION} \
-t ${LOCAL_IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \
-t ${LOCAL_IMAGE_NAME}:${IMAGE_NIGHTLY_TAG} \
-t ${LOCAL_IMAGE_NAME}:${IMAGE_VERSION} \
-t ${LOCAL_IMAGE_NAME}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \
--target all-in-one-noauth \
--push \
@ -110,9 +188,9 @@ release-all-in-one:
--build-context api=./packages/api \
--build-context app=./packages/app \
--platform ${BUILD_PLATFORMS} \
-t ${ALL_IN_ONE_IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \
-t ${ALL_IN_ONE_IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION} \
-t ${ALL_IN_ONE_IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \
-t ${ALL_IN_ONE_IMAGE_NAME}:${IMAGE_NIGHTLY_TAG} \
-t ${ALL_IN_ONE_IMAGE_NAME}:${IMAGE_VERSION} \
-t ${ALL_IN_ONE_IMAGE_NAME}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \
--target all-in-one-auth \
--push \
@ -127,27 +205,62 @@ release-app:
--build-context app=./packages/app \
--platform ${BUILD_PLATFORMS} \
-t ${IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \
-t ${IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \
-t ${IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION} \
-t ${IMAGE_NAME}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \
-t ${IMAGE_NAME}:${IMAGE_NIGHTLY_TAG} \
-t ${IMAGE_NAME}:${IMAGE_VERSION} \
--target prod \
--push \
--cache-from=type=gha \
--cache-to=type=gha,mode=max
# DEPRECATED
# .PHONY: release-local-ui
# release-local-ui:
# docker buildx build . -f ./packages/app/Dockerfile \
# --build-arg IS_LOCAL_MODE=true \
# --build-arg PORT=${HYPERDX_APP_PORT} \
# --target prod \
# --platform ${BUILD_PLATFORMS} \
# -t ${LOCAL_IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG}-ui \
# -t ${LOCAL_IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG}-ui \
# -t ${LOCAL_IMAGE_NAME}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG}-ui \
# -t ${LOCAL_IMAGE_NAME}:${IMAGE_NIGHTLY_TAG}-ui \
# --push \
# --cache-from=type=gha \
# --cache-to=type=gha,mode=max
.PHONY: release-otel-collector-nightly
release-otel-collector-nightly:
docker buildx build --platform ${BUILD_PLATFORMS} ./docker/otel-collector \
-t ${OTEL_COLLECTOR_IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \
--target prod \
--push \
--cache-from=type=gha \
--cache-to=type=gha,mode=max
.PHONY: release-app-nightly
release-app-nightly:
docker buildx build --squash . -f ./docker/hyperdx/Dockerfile \
--build-context hyperdx=./docker/hyperdx \
--build-context api=./packages/api \
--build-context app=./packages/app \
--platform ${BUILD_PLATFORMS} \
-t ${IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \
--target prod \
--push \
--cache-from=type=gha \
--cache-to=type=gha,mode=max
.PHONY: release-local-nightly
release-local-nightly:
docker buildx build --squash . -f ./docker/hyperdx/Dockerfile \
--build-context clickhouse=./docker/clickhouse \
--build-context otel-collector=./docker/otel-collector \
--build-context hyperdx=./docker/hyperdx \
--build-context api=./packages/api \
--build-context app=./packages/app \
--platform ${BUILD_PLATFORMS} \
-t ${LOCAL_IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \
--target all-in-one-noauth \
--push \
--cache-from=type=gha \
--cache-to=type=gha,mode=max
.PHONY: release-all-in-one-nightly
release-all-in-one-nightly:
docker buildx build --squash . -f ./docker/hyperdx/Dockerfile \
--build-context clickhouse=./docker/clickhouse \
--build-context otel-collector=./docker/otel-collector \
--build-context hyperdx=./docker/hyperdx \
--build-context api=./packages/api \
--build-context app=./packages/app \
--platform ${BUILD_PLATFORMS} \
-t ${ALL_IN_ONE_IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \
--target all-in-one-auth \
--push \
--cache-from=type=gha \
--cache-to=type=gha,mode=max

View file

@ -14,29 +14,6 @@ services:
# - internal
# depends_on:
# - app
# go-parser:
# image: ${IMAGE_NAME_HDX}:${IMAGE_VERSION}-go-parser
# environment:
# AGGREGATOR_API_URL: 'http://aggregator:8001'
# HYPERDX_API_KEY: ${HYPERDX_API_KEY}
# HYPERDX_LOG_LEVEL: ${HYPERDX_LOG_LEVEL}
# OTEL_EXPORTER_OTLP_ENDPOINT: http://otel-collector:4318
# OTEL_LOG_LEVEL: ${HYPERDX_LOG_LEVEL}
# OTEL_SERVICE_NAME: hdx-oss-go-parser
# PORT: 7777
# ports:
# - 7777:7777
# networks:
# - internal
# hostmetrics:
# image: ${IMAGE_NAME_HDX}:${IMAGE_VERSION}-hostmetrics
# environment:
# HYPERDX_API_KEY: ${HYPERDX_API_KEY}
# HYPERDX_LOG_LEVEL: ${HYPERDX_LOG_LEVEL}
# OTEL_SERVICE_NAME: hostmetrics
# restart: always
# networks:
# - internal
db:
image: mongo:5.0.14-focal
volumes:
@ -49,7 +26,7 @@ services:
networks:
- internal
otel-collector:
image: ${OTEL_COLLECTOR_IMAGE_NAME}:${IMAGE_VERSION}
image: ${HDX_IMAGE_REPO}/${OTEL_COLLECTOR_IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION}
environment:
CLICKHOUSE_ENDPOINT: 'tcp://ch-server:9000?dial_timeout=10s'
HYPERDX_LOG_LEVEL: ${HYPERDX_LOG_LEVEL}
@ -65,7 +42,7 @@ services:
depends_on:
- ch-server
app:
image: ${IMAGE_NAME_HDX}:${IMAGE_VERSION}
image: ${HDX_IMAGE_REPO}/${IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION}
ports:
- ${HYPERDX_API_PORT}:${HYPERDX_API_PORT}
- ${HYPERDX_APP_PORT}:${HYPERDX_APP_PORT}

View file

@ -35,7 +35,7 @@
"dev:down": "docker compose -f docker-compose.dev.yml down",
"lint": "npx nx run-many -t ci:lint",
"version": "make version",
"release": "npx nx run-many --target=build --projects=@hyperdx/common-utils && npx changeset tag && npx changeset publish"
"release": "npx changeset tag && npx changeset publish"
},
"lint-staged": {
"**/*.{ts,tsx}": [

View file

@ -3,9 +3,7 @@
"description": "Common utilities for HyperDX application",
"version": "0.2.0-beta.5",
"license": "MIT",
"publishConfig": {
"access": "public"
},
"private": true,
"files": [
"dist/*"
],