mirror of
https://github.com/hyperdxio/hyperdx
synced 2026-04-21 13:37:15 +00:00
ci: introduce release-nightly workflow (#836)
This commit is contained in:
parent
a762203449
commit
e935bb6d16
8 changed files with 248 additions and 60 deletions
5
.changeset/empty-bikes-fry.md
Normal file
5
.changeset/empty-bikes-fry.md
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
"@hyperdx/common-utils": patch
|
||||
---
|
||||
|
||||
ci: introduce release-nightly workflow
|
||||
2
.env
2
.env
|
|
@ -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
96
.github/workflows/release-nightly.yml
vendored
Normal 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
|
||||
# }
|
||||
# });
|
||||
13
.github/workflows/release.yml
vendored
13
.github/workflows/release.yml
vendored
|
|
@ -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
159
Makefile
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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}": [
|
||||
|
|
|
|||
|
|
@ -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/*"
|
||||
],
|
||||
|
|
|
|||
Loading…
Reference in a new issue