Skip to content

Commit e935bb6

Browse files
authored
ci: introduce release-nightly workflow (#836)
1 parent a762203 commit e935bb6

File tree

8 files changed

+248
-60
lines changed

8 files changed

+248
-60
lines changed

.changeset/empty-bikes-fry.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@hyperdx/common-utils": patch
3+
---
4+
5+
ci: introduce release-nightly workflow

.env

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Used by docker-compose.yml
2+
HDX_IMAGE_REPO=docker.hyperdx.io
23
IMAGE_NAME=ghcr.io/hyperdxio/hyperdx
34
IMAGE_NAME_DOCKERHUB=hyperdx/hyperdx
4-
IMAGE_NAME_HDX=docker.hyperdx.io/hyperdx/hyperdx
55
LOCAL_IMAGE_NAME=ghcr.io/hyperdxio/hyperdx-local
66
LOCAL_IMAGE_NAME_DOCKERHUB=hyperdx/hyperdx-local
77
ALL_IN_ONE_IMAGE_NAME=ghcr.io/hyperdxio/hyperdx-all-in-one

.github/workflows/release-nightly.yml

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
name: Release Nightly
2+
on:
3+
push:
4+
branches: [v2]
5+
concurrency:
6+
group: ${{ github.workflow }}-${{ github.ref }}
7+
cancel-in-progress: true
8+
permissions:
9+
contents: write
10+
packages: write
11+
pull-requests: write
12+
actions: read
13+
jobs:
14+
release:
15+
name: Release
16+
runs-on: ubuntu-24.04
17+
strategy:
18+
matrix:
19+
release:
20+
- release-all-in-one-nightly
21+
- release-app-nightly
22+
- release-local-nightly
23+
- release-otel-collector-nightly
24+
steps:
25+
- name: Checkout
26+
uses: actions/checkout@v4
27+
- name: Set up QEMU
28+
uses: docker/setup-qemu-action@v3
29+
- name: Set up Docker Buildx
30+
uses: docker/setup-buildx-action@v3
31+
- name: Login to Docker Hub
32+
uses: docker/login-action@v3
33+
with:
34+
username: ${{ secrets.DOCKER_HUB_USERNAME }}
35+
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
36+
- name: Login to GitHub Container Registry
37+
uses: docker/login-action@v3
38+
with:
39+
registry: ghcr.io
40+
username: ${{ github.actor }}
41+
password: ${{ secrets.GITHUB_TOKEN }}
42+
- name: Load Environment Variables from .env
43+
uses: xom9ikk/dotenv@v2
44+
- name: Publish Images
45+
run: make ${{ matrix.release }}
46+
47+
slack-notify-failure:
48+
needs: release
49+
runs-on: ubuntu-24.04
50+
if: failure()
51+
steps:
52+
- name: Slack Notification
53+
uses: 8398a7/action-slack@v3
54+
with:
55+
status: ${{ job.status }}
56+
fields: repo,message,commit,author,action,eventName,ref,workflow,job,took,pullRequest # selectable (default: repo,message)
57+
env:
58+
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL_ENG_NOTIFS }}
59+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
60+
61+
# notify_downstream:
62+
# name: Notify Downstream
63+
# needs: [publish_common_utils, release]
64+
# runs-on: ubuntu-24.04
65+
# if:
66+
# needs.publish_common_utils.outputs.changeset_outputs_hasChangesets ==
67+
# 'false'
68+
# steps:
69+
# - name: Checkout
70+
# uses: actions/checkout@v4
71+
# - name: Load Environment Variables from .env
72+
# uses: xom9ikk/dotenv@v2
73+
# - name: Get Downstream App Installation Token
74+
# id: auth
75+
# uses: actions/create-github-app-token@v2
76+
# with:
77+
# app-id: ${{ secrets.DOWNSTREAM_CH_APP_ID }}
78+
# private-key: ${{ secrets.DOWNSTREAM_CH_APP_PRIVATE_KEY }}
79+
# owner: ${{ secrets.DOWNSTREAM_CH_OWNER }}
80+
# - name: Notify Downstream
81+
# uses: actions/github-script@v7
82+
# env:
83+
# TAG: ${{ env.IMAGE_VERSION }}${{ env.IMAGE_VERSION_SUB_TAG }}
84+
# with:
85+
# github-token: ${{ steps.auth.outputs.token }}
86+
# script: |
87+
# const { TAG } = process.env;
88+
# const result = await github.rest.actions.createWorkflowDispatch({
89+
# owner: '${{ secrets.DOWNSTREAM_CH_OWNER }}',
90+
# repo: '${{ secrets.DOWNSTREAM_DP_REPO }}',
91+
# workflow_id: '${{ secrets.DOWNSTREAM_DP_WORKFLOW_ID }}',
92+
# ref: 'main',
93+
# inputs: {
94+
# tag: TAG
95+
# }
96+
# });

.github/workflows/release.yml

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ permissions:
88
packages: write
99
pull-requests: write
1010
jobs:
11-
publish_common_utils:
12-
name: Publish @hyperdx/common-utils
11+
check_changesets:
12+
name: Check Changesets
1313
runs-on: ubuntu-24.04
1414
outputs:
1515
changeset_outputs_hasChangesets:
@@ -45,7 +45,7 @@ jobs:
4545
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
4646
release:
4747
name: Release
48-
needs: publish_common_utils
48+
needs: check_changesets
4949
runs-on: ubuntu-24.04
5050
strategy:
5151
matrix:
@@ -76,16 +76,15 @@ jobs:
7676
uses: xom9ikk/dotenv@v2
7777
- name: Publish Images
7878
if:
79-
needs.publish_common_utils.outputs.changeset_outputs_hasChangesets ==
79+
needs.check_changesets.outputs.changeset_outputs_hasChangesets ==
8080
'false'
8181
run: make ${{ matrix.release }}
8282
notify_downstream:
8383
name: Notify Downstream
84-
needs: [publish_common_utils, release]
84+
needs: [check_changesets, release]
8585
runs-on: ubuntu-24.04
8686
if:
87-
needs.publish_common_utils.outputs.changeset_outputs_hasChangesets ==
88-
'false'
87+
needs.check_changesets.outputs.changeset_outputs_hasChangesets == 'false'
8988
steps:
9089
- name: Checkout
9190
uses: actions/checkout@v4

Makefile

Lines changed: 136 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,91 @@ dev-migrate-db:
7171
version:
7272
sh ./version.sh
7373

74+
# Build targets (local builds only)
75+
76+
.PHONY: build-otel-collector
77+
build-otel-collector:
78+
docker build ./docker/otel-collector \
79+
-t ${OTEL_COLLECTOR_IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \
80+
--target prod
81+
82+
.PHONY: build-local
83+
build-local:
84+
docker build . -f ./docker/hyperdx/Dockerfile \
85+
--build-context clickhouse=./docker/clickhouse \
86+
--build-context otel-collector=./docker/otel-collector \
87+
--build-context hyperdx=./docker/hyperdx \
88+
--build-context api=./packages/api \
89+
--build-context app=./packages/app \
90+
-t ${LOCAL_IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \
91+
--target all-in-one-noauth
92+
93+
.PHONY: build-all-in-one
94+
build-all-in-one:
95+
docker build . -f ./docker/hyperdx/Dockerfile \
96+
--build-context clickhouse=./docker/clickhouse \
97+
--build-context otel-collector=./docker/otel-collector \
98+
--build-context hyperdx=./docker/hyperdx \
99+
--build-context api=./packages/api \
100+
--build-context app=./packages/app \
101+
-t ${ALL_IN_ONE_IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \
102+
--target all-in-one-auth
103+
104+
.PHONY: build-app
105+
build-app:
106+
docker build . -f ./docker/hyperdx/Dockerfile \
107+
--build-context hyperdx=./docker/hyperdx \
108+
--build-context api=./packages/api \
109+
--build-context app=./packages/app \
110+
-t ${IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \
111+
--target prod
112+
113+
.PHONY: build-otel-collector-nightly
114+
build-otel-collector-nightly:
115+
docker build ./docker/otel-collector \
116+
-t ${OTEL_COLLECTOR_IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \
117+
--target prod
118+
119+
.PHONY: build-app-nightly
120+
build-app-nightly:
121+
docker build . -f ./docker/hyperdx/Dockerfile \
122+
--build-context hyperdx=./docker/hyperdx \
123+
--build-context api=./packages/api \
124+
--build-context app=./packages/app \
125+
-t ${IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \
126+
--target prod
127+
128+
.PHONY: build-local-nightly
129+
build-local-nightly:
130+
docker build . -f ./docker/hyperdx/Dockerfile \
131+
--build-context clickhouse=./docker/clickhouse \
132+
--build-context otel-collector=./docker/otel-collector \
133+
--build-context hyperdx=./docker/hyperdx \
134+
--build-context api=./packages/api \
135+
--build-context app=./packages/app \
136+
-t ${LOCAL_IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \
137+
--target all-in-one-noauth
138+
139+
.PHONY: build-all-in-one-nightly
140+
build-all-in-one-nightly:
141+
docker build . -f ./docker/hyperdx/Dockerfile \
142+
--build-context clickhouse=./docker/clickhouse \
143+
--build-context otel-collector=./docker/otel-collector \
144+
--build-context hyperdx=./docker/hyperdx \
145+
--build-context api=./packages/api \
146+
--build-context app=./packages/app \
147+
-t ${ALL_IN_ONE_IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \
148+
--target all-in-one-auth
149+
150+
# Release targets (with multi-platform build and push)
151+
74152
.PHONY: release-otel-collector
75153
release-otel-collector:
76154
docker buildx build --platform ${BUILD_PLATFORMS} ./docker/otel-collector \
77155
-t ${OTEL_COLLECTOR_IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \
78-
-t ${OTEL_COLLECTOR_IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \
156+
-t ${OTEL_COLLECTOR_IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION} \
79157
-t ${OTEL_COLLECTOR_IMAGE_NAME}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \
80-
-t ${OTEL_COLLECTOR_IMAGE_NAME}:${IMAGE_NIGHTLY_TAG} \
158+
-t ${OTEL_COLLECTOR_IMAGE_NAME}:${IMAGE_VERSION} \
81159
--target prod \
82160
--push \
83161
--cache-from=type=gha \
@@ -92,9 +170,9 @@ release-local:
92170
--build-context api=./packages/api \
93171
--build-context app=./packages/app \
94172
--platform ${BUILD_PLATFORMS} \
95-
-t ${LOCAL_IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \
173+
-t ${LOCAL_IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION} \
96174
-t ${LOCAL_IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \
97-
-t ${LOCAL_IMAGE_NAME}:${IMAGE_NIGHTLY_TAG} \
175+
-t ${LOCAL_IMAGE_NAME}:${IMAGE_VERSION} \
98176
-t ${LOCAL_IMAGE_NAME}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \
99177
--target all-in-one-noauth \
100178
--push \
@@ -110,9 +188,9 @@ release-all-in-one:
110188
--build-context api=./packages/api \
111189
--build-context app=./packages/app \
112190
--platform ${BUILD_PLATFORMS} \
113-
-t ${ALL_IN_ONE_IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \
191+
-t ${ALL_IN_ONE_IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION} \
114192
-t ${ALL_IN_ONE_IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \
115-
-t ${ALL_IN_ONE_IMAGE_NAME}:${IMAGE_NIGHTLY_TAG} \
193+
-t ${ALL_IN_ONE_IMAGE_NAME}:${IMAGE_VERSION} \
116194
-t ${ALL_IN_ONE_IMAGE_NAME}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \
117195
--target all-in-one-auth \
118196
--push \
@@ -127,27 +205,62 @@ release-app:
127205
--build-context app=./packages/app \
128206
--platform ${BUILD_PLATFORMS} \
129207
-t ${IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \
130-
-t ${IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \
208+
-t ${IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION} \
131209
-t ${IMAGE_NAME}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG} \
132-
-t ${IMAGE_NAME}:${IMAGE_NIGHTLY_TAG} \
210+
-t ${IMAGE_NAME}:${IMAGE_VERSION} \
133211
--target prod \
134212
--push \
135213
--cache-from=type=gha \
136214
--cache-to=type=gha,mode=max
137215

138-
# DEPRECATED
139-
# .PHONY: release-local-ui
140-
# release-local-ui:
141-
# docker buildx build . -f ./packages/app/Dockerfile \
142-
# --build-arg IS_LOCAL_MODE=true \
143-
# --build-arg PORT=${HYPERDX_APP_PORT} \
144-
# --target prod \
145-
# --platform ${BUILD_PLATFORMS} \
146-
# -t ${LOCAL_IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG}-ui \
147-
# -t ${LOCAL_IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG}-ui \
148-
# -t ${LOCAL_IMAGE_NAME}:${IMAGE_VERSION}${IMAGE_VERSION_SUB_TAG}-ui \
149-
# -t ${LOCAL_IMAGE_NAME}:${IMAGE_NIGHTLY_TAG}-ui \
150-
# --push \
151-
# --cache-from=type=gha \
152-
# --cache-to=type=gha,mode=max
216+
.PHONY: release-otel-collector-nightly
217+
release-otel-collector-nightly:
218+
docker buildx build --platform ${BUILD_PLATFORMS} ./docker/otel-collector \
219+
-t ${OTEL_COLLECTOR_IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \
220+
--target prod \
221+
--push \
222+
--cache-from=type=gha \
223+
--cache-to=type=gha,mode=max
153224

225+
.PHONY: release-app-nightly
226+
release-app-nightly:
227+
docker buildx build --squash . -f ./docker/hyperdx/Dockerfile \
228+
--build-context hyperdx=./docker/hyperdx \
229+
--build-context api=./packages/api \
230+
--build-context app=./packages/app \
231+
--platform ${BUILD_PLATFORMS} \
232+
-t ${IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \
233+
--target prod \
234+
--push \
235+
--cache-from=type=gha \
236+
--cache-to=type=gha,mode=max
237+
238+
.PHONY: release-local-nightly
239+
release-local-nightly:
240+
docker buildx build --squash . -f ./docker/hyperdx/Dockerfile \
241+
--build-context clickhouse=./docker/clickhouse \
242+
--build-context otel-collector=./docker/otel-collector \
243+
--build-context hyperdx=./docker/hyperdx \
244+
--build-context api=./packages/api \
245+
--build-context app=./packages/app \
246+
--platform ${BUILD_PLATFORMS} \
247+
-t ${LOCAL_IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \
248+
--target all-in-one-noauth \
249+
--push \
250+
--cache-from=type=gha \
251+
--cache-to=type=gha,mode=max
252+
253+
.PHONY: release-all-in-one-nightly
254+
release-all-in-one-nightly:
255+
docker buildx build --squash . -f ./docker/hyperdx/Dockerfile \
256+
--build-context clickhouse=./docker/clickhouse \
257+
--build-context otel-collector=./docker/otel-collector \
258+
--build-context hyperdx=./docker/hyperdx \
259+
--build-context api=./packages/api \
260+
--build-context app=./packages/app \
261+
--platform ${BUILD_PLATFORMS} \
262+
-t ${ALL_IN_ONE_IMAGE_NAME_DOCKERHUB}:${IMAGE_NIGHTLY_TAG} \
263+
--target all-in-one-auth \
264+
--push \
265+
--cache-from=type=gha \
266+
--cache-to=type=gha,mode=max

docker-compose.yml

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -14,29 +14,6 @@ services:
1414
# - internal
1515
# depends_on:
1616
# - app
17-
# go-parser:
18-
# image: ${IMAGE_NAME_HDX}:${IMAGE_VERSION}-go-parser
19-
# environment:
20-
# AGGREGATOR_API_URL: 'http://aggregator:8001'
21-
# HYPERDX_API_KEY: ${HYPERDX_API_KEY}
22-
# HYPERDX_LOG_LEVEL: ${HYPERDX_LOG_LEVEL}
23-
# OTEL_EXPORTER_OTLP_ENDPOINT: http://otel-collector:4318
24-
# OTEL_LOG_LEVEL: ${HYPERDX_LOG_LEVEL}
25-
# OTEL_SERVICE_NAME: hdx-oss-go-parser
26-
# PORT: 7777
27-
# ports:
28-
# - 7777:7777
29-
# networks:
30-
# - internal
31-
# hostmetrics:
32-
# image: ${IMAGE_NAME_HDX}:${IMAGE_VERSION}-hostmetrics
33-
# environment:
34-
# HYPERDX_API_KEY: ${HYPERDX_API_KEY}
35-
# HYPERDX_LOG_LEVEL: ${HYPERDX_LOG_LEVEL}
36-
# OTEL_SERVICE_NAME: hostmetrics
37-
# restart: always
38-
# networks:
39-
# - internal
4017
db:
4118
image: mongo:5.0.14-focal
4219
volumes:
@@ -49,7 +26,7 @@ services:
4926
networks:
5027
- internal
5128
otel-collector:
52-
image: ${OTEL_COLLECTOR_IMAGE_NAME}:${IMAGE_VERSION}
29+
image: ${HDX_IMAGE_REPO}/${OTEL_COLLECTOR_IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION}
5330
environment:
5431
CLICKHOUSE_ENDPOINT: 'tcp://ch-server:9000?dial_timeout=10s'
5532
HYPERDX_LOG_LEVEL: ${HYPERDX_LOG_LEVEL}
@@ -65,7 +42,7 @@ services:
6542
depends_on:
6643
- ch-server
6744
app:
68-
image: ${IMAGE_NAME_HDX}:${IMAGE_VERSION}
45+
image: ${HDX_IMAGE_REPO}/${IMAGE_NAME_DOCKERHUB}:${IMAGE_VERSION}
6946
ports:
7047
- ${HYPERDX_API_PORT}:${HYPERDX_API_PORT}
7148
- ${HYPERDX_APP_PORT}:${HYPERDX_APP_PORT}

0 commit comments

Comments
 (0)