Skip to content

Commit 72e43c9

Browse files
committed
feat: use esbuild for building the api
1 parent 4863175 commit 72e43c9

File tree

7 files changed

+298
-12
lines changed

7 files changed

+298
-12
lines changed

docker/hyperdx/Dockerfile

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ WORKDIR /app
2626
COPY .yarn ./.yarn
2727
COPY .yarnrc.yml yarn.lock package.json nx.json .prettierrc .prettierignore ./
2828
COPY ./packages/common-utils ./packages/common-utils
29-
COPY ./packages/api/jest.config.js ./packages/api/tsconfig.json ./packages/api/package.json ./packages/api/
29+
COPY ./packages/api/jest.config.js ./packages/api/tsconfig.json ./packages/api/package.json ./packages/api/build.js ./packages/api/
3030
COPY ./packages/app/jest.config.js ./packages/app/tsconfig.json ./packages/app/tsconfig.test.json ./packages/app/package.json ./packages/app/next.config.js ./packages/app/mdx.d.ts ./packages/app/.eslintrc.js ./packages/app/
3131

3232
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
@@ -68,10 +68,7 @@ USER node
6868

6969
# Set up API
7070
WORKDIR /app/api
71-
COPY --chown=node:node --from=builder /app/node_modules ./node_modules
72-
COPY --chown=node:node --from=builder /app/packages/api/build ./packages/api/build
73-
COPY --chown=node:node --from=builder /app/packages/common-utils/dist ./packages/common-utils/dist
74-
COPY --chown=node:node --from=node_base /app/packages/common-utils/node_modules ./packages/common-utils/node_modules
71+
COPY --chown=node:node --from=builder /app/packages/api/dist ./dist
7572

7673
# Set up App
7774
WORKDIR /app/app

docker/hyperdx/entry.local.base.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@ opampsupervisor --config /etc/otel/supervisor.yaml > /var/log/otel-collector.log
6161
npx concurrently \
6262
"--kill-others" \
6363
"--names=API,APP,ALERT-TASK" \
64-
"PORT=${HYPERDX_API_PORT:-8000} HYPERDX_APP_PORT=${HYPERDX_APP_PORT:-8080} node -r /app/api/node_modules/@hyperdx/node-opentelemetry/build/src/tracing /app/api/packages/api/build/index.js" \
64+
"PORT=${HYPERDX_API_PORT:-8000} HYPERDX_APP_PORT=${HYPERDX_APP_PORT:-8080} node -r /app/api/dist/tracing.bundle.js /app/api/dist/index.js" \
6565
"HYPERDX_API_PORT=${HYPERDX_API_PORT:-8000} /app/app/node_modules/.bin/next start -p ${HYPERDX_APP_PORT:-8080}" \
66-
"node -r /app/api/node_modules/@hyperdx/node-opentelemetry/build/src/tracing /app/api/packages/api/build/tasks/index.js check-alerts" \
66+
"node -r /app/api/dist/tracing.bundle.js /app/api/dist/tasks/index.js check-alerts" \
6767
> /var/log/app.log 2>&1 &
6868

6969
echo ""

docker/hyperdx/entry.prod.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@ echo ""
1515
npx concurrently \
1616
"--kill-others" \
1717
"--names=API,APP,ALERT-TASK" \
18-
"PORT=${HYPERDX_API_PORT:-8000} HYPERDX_APP_PORT=${HYPERDX_APP_PORT:-8080} node -r /app/api/node_modules/@hyperdx/node-opentelemetry/build/src/tracing /app/api/packages/api/build/index.js" \
18+
"PORT=${HYPERDX_API_PORT:-8000} HYPERDX_APP_PORT=${HYPERDX_APP_PORT:-8080} node -r /app/api/dist/tracing.bundle.js /app/api/dist/index.js" \
1919
"HYPERDX_API_PORT=${HYPERDX_API_PORT:-8000} /app/app/node_modules/.bin/next start -p ${HYPERDX_APP_PORT:-8080}" \
20-
"node -r /app/api/node_modules/@hyperdx/node-opentelemetry/build/src/tracing /app/api/packages/api/build/tasks/index.js check-alerts"
20+
"node -r /app/api/dist/tracing.bundle.js /app/api/dist/tasks/index.js check-alerts"

packages/api/build.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
const esbuild = require('esbuild');
2+
const path = require('path');
3+
const fs = require('fs');
4+
5+
async function build() {
6+
try {
7+
// Make sure dist directory exists
8+
const distDir = path.resolve(__dirname, 'dist');
9+
if (!fs.existsSync(distDir)) {
10+
fs.mkdirSync(distDir, { recursive: true });
11+
}
12+
13+
// Build main application
14+
await esbuild.build({
15+
entryPoints: ['src/index.ts', 'src/tasks/index.ts'],
16+
bundle: true,
17+
platform: 'node',
18+
target: 'node22',
19+
outdir: 'dist',
20+
sourcemap: false,
21+
minify: true,
22+
format: 'cjs',
23+
define: {
24+
'process.env.NODE_ENV': '"production"',
25+
},
26+
banner: {
27+
js: '#!/usr/bin/env node',
28+
},
29+
alias: {
30+
// Add path aliases from tsconfig
31+
'@': path.resolve(__dirname, 'src'),
32+
},
33+
});
34+
35+
console.log('Build completed successfully!');
36+
} catch (error) {
37+
console.error('Build failed:', error);
38+
process.exit(1);
39+
}
40+
}
41+
42+
build();

packages/api/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
"@types/supertest": "^2.0.12",
7676
"@types/swagger-jsdoc": "^6",
7777
"@types/uuid": "^8.3.4",
78+
"esbuild": "^0.21.0",
7879
"jest": "^28.1.3",
7980
"migrate-mongo": "^11.0.0",
8081
"nodemon": "^2.0.20",
@@ -89,10 +90,10 @@
8990
"typescript": "^4.9.5"
9091
},
9192
"scripts": {
92-
"start": "node ./build/index.js",
93+
"start": "node ./dist/index.js",
9394
"dev": "DOTENV_CONFIG_PATH=.env.development nodemon --signal SIGTERM -e ts,json --exec 'ts-node' --transpile-only -r tsconfig-paths/register -r dotenv-expand/config -r '@hyperdx/node-opentelemetry/build/src/tracing' ./src/index.ts",
9495
"dev-task": "DOTENV_CONFIG_PATH=.env.development nodemon --signal SIGTERM -e ts,json --exec 'ts-node' --transpile-only -r tsconfig-paths/register -r dotenv-expand/config -r '@hyperdx/node-opentelemetry/build/src/tracing' ./src/tasks/index.ts",
95-
"build": "rimraf ./build && tsc && tsc-alias && cp -r src/opamp/proto build/opamp/",
96+
"build": "rimraf ./dist && node ./build.js && esbuild ../../node_modules/@hyperdx/node-opentelemetry/build/src/tracing --bundle --minify --platform=node --outfile=dist/tracing.bundle.js && cp -r src/opamp/proto dist/opamp/",
9697
"lint": "eslint --quiet . --ext .ts",
9798
"lint:fix": "eslint . --ext .ts --fix",
9899
"ci:lint": "yarn lint && yarn tsc --noEmit",

packages/api/src/opamp/utils/protobuf.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,14 @@ import * as fs from 'fs';
33
import * as path from 'path';
44
import * as protobuf from 'protobufjs';
55

6+
import { IS_PROD } from '@/config';
67
import logger from '@/utils/logger';
78

89
// Define the root path of the proto file
9-
const PROTO_PATH = path.resolve(__dirname, '../proto/opamp.proto');
10+
const PROTO_PATH = path.resolve(
11+
__dirname,
12+
IS_PROD ? 'opamp/opamp.proto' : '../proto/opamp.proto',
13+
);
1014

1115
// Load the OpAMP proto definition
1216
let root: protobuf.Root;

0 commit comments

Comments
 (0)