chore: upgrade to Node.js 25.2.1

- Update .nvmrc to Node 25
- Update all Dockerfiles to use node:25-alpine
- Update package.json engines to >=25.0.0
- Update CI/CD workflows for Node 25
- Update @types/node in packages
- Fix ESLint config to use ES module syntax
- Update OpenTelemetry imports for compatibility

All services tested and working with Node.js 25.2.1
This commit is contained in:
Ho Ngoc Hai
2026-01-07 17:15:25 +07:00
parent 9c74b86837
commit 63f5b10fe2
21 changed files with 1226 additions and 1504 deletions

View File

@@ -11,14 +11,14 @@
},
"dependencies": {
"@opentelemetry/api": "^1.9.0",
"@opentelemetry/sdk-node": "^0.57.0",
"@opentelemetry/instrumentation": "^0.57.0",
"@opentelemetry/instrumentation-http": "^0.57.0",
"@opentelemetry/auto-instrumentations-node": "^0.67.3",
"@opentelemetry/exporter-trace-otlp-http": "^0.208.0",
"@opentelemetry/instrumentation": "^0.208.0",
"@opentelemetry/instrumentation-express": "^0.57.0",
"@opentelemetry/auto-instrumentations-node": "^0.52.0",
"@opentelemetry/resources": "^1.29.0",
"@opentelemetry/semantic-conventions": "^1.29.0",
"@opentelemetry/exporter-jaeger": "^1.28.0"
"@opentelemetry/instrumentation-http": "^0.208.0",
"@opentelemetry/resources": "^2.2.0",
"@opentelemetry/sdk-node": "^0.208.0",
"@opentelemetry/semantic-conventions": "^1.38.0"
},
"devDependencies": {
"@goodgo/tsconfig": "workspace:*",

View File

@@ -1,8 +1,6 @@
import { NodeSDK } from '@opentelemetry/sdk-node';
import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
import { JaegerExporter } from '@opentelemetry/exporter-jaeger';
import { Resource } from '@opentelemetry/resources';
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
/**
* EN: Configuration interface for distributed tracing setup
@@ -11,15 +9,15 @@ import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions'
export interface TracingConfig {
/** EN: Name of the service for trace identification / VI: Tên service để xác định trace */
serviceName: string;
/** EN: Jaeger collector endpoint URL / VI: URL endpoint Jaeger collector */
jaegerEndpoint?: string;
/** EN: OTLP collector endpoint URL (default: http://localhost:4318/v1/traces) / VI: URL endpoint OTLP collector (mặc định: http://localhost:4318/v1/traces) */
otlpEndpoint?: string;
/** EN: Enable/disable tracing (default: true) / VI: Bật/tắt tracing (mặc định: true) */
enabled?: boolean;
}
/**
* EN: Initialize OpenTelemetry distributed tracing with Jaeger exporter
* VI: Khởi tạo OpenTelemetry distributed tracing với Jaeger exporter
* EN: Initialize OpenTelemetry distributed tracing with OTLP exporter
* VI: Khởi tạo OpenTelemetry distributed tracing với OTLP exporter
*
* @param config - Tracing configuration / Cấu hình tracing
* @returns NodeSDK instance or null if tracing is disabled / Instance NodeSDK hoặc null nếu tracing bị tắt
@@ -31,21 +29,17 @@ export const initTracing = (config: TracingConfig): NodeSDK | null => {
return null;
}
// EN: Create Jaeger exporter if endpoint is provided
// VI: Tạo Jaeger exporter nếu endpoint được cung cấp
const jaegerExporter = config.jaegerEndpoint
? new JaegerExporter({
endpoint: config.jaegerEndpoint,
})
: undefined;
// EN: Create OTLP exporter with configured endpoint
// VI: Tạo OTLP exporter với endpoint được cấu hình
const traceExporter = new OTLPTraceExporter({
url: config.otlpEndpoint || 'http://localhost:4318/v1/traces',
});
// EN: Initialize OpenTelemetry NodeSDK with auto-instrumentations
// VI: Khởi tạo OpenTelemetry NodeSDK với auto-instrumentations
const sdk = new NodeSDK({
resource: new Resource({
[SemanticResourceAttributes.SERVICE_NAME]: config.serviceName,
}),
traceExporter: jaegerExporter,
serviceName: config.serviceName,
traceExporter,
instrumentations: [getNodeAutoInstrumentations()],
});