82 lines
2.4 KiB
JavaScript
82 lines
2.4 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* Build Docker image for Admin
|
|
*
|
|
* Workflow:
|
|
* 1. npm ci --legacy-peer-deps (install dependencies)
|
|
* 2. npm run build (Next.js build, outputs to .next/)
|
|
* 3. docker build (multi-stage, minimal runtime image)
|
|
*
|
|
* Usage:
|
|
* node scripts/build.js # Build image
|
|
* node scripts/build.js --no-cache # Build without Docker layer cache
|
|
*
|
|
* Environment:
|
|
* REGISTRY - Docker registry (default: harbor.gitdata.me/gta_team)
|
|
* TAG - Image tag (default: git short SHA)
|
|
*/
|
|
|
|
const { execSync } = require('child_process');
|
|
const path = require('path');
|
|
|
|
const REGISTRY = process.env.REGISTRY || 'harbor.gitdata.me/gta_team';
|
|
const GIT_SHA_SHORT = execSync('git rev-parse --short HEAD', { encoding: 'utf8' }).trim();
|
|
const TAG = process.env.TAG || GIT_SHA_SHORT;
|
|
const SERVICE = 'admin';
|
|
const args = process.argv.slice(2);
|
|
const noCache = args.includes('--no-cache');
|
|
const rootDir = path.join(__dirname, '..');
|
|
|
|
console.log(`\n=== Build Configuration ===`);
|
|
console.log(`Registry: ${REGISTRY}`);
|
|
console.log(`Tag: ${TAG}`);
|
|
console.log(`Service: ${SERVICE}`);
|
|
console.log(`No Cache: ${noCache}`);
|
|
console.log('');
|
|
|
|
// Step 1: npm ci
|
|
console.log(`==> Step 1: Installing dependencies (npm ci)`);
|
|
try {
|
|
execSync(`npm ci --legacy-peer-deps`, {
|
|
stdio: 'inherit',
|
|
cwd: rootDir,
|
|
});
|
|
console.log(` [OK] Dependencies installed`);
|
|
} catch (error) {
|
|
console.error(` [FAIL] npm ci failed`);
|
|
process.exit(1);
|
|
}
|
|
|
|
// Step 2: Next.js build
|
|
console.log(`\n==> Step 2: Building Next.js (npm run build)`);
|
|
try {
|
|
execSync(`npm run build`, {
|
|
stdio: 'inherit',
|
|
cwd: rootDir,
|
|
env: { ...process.env, NEXT_TELEMETRY_DISABLED: '1' },
|
|
});
|
|
console.log(` [OK] Next.js build complete`);
|
|
} catch (error) {
|
|
console.error(` [FAIL] Next.js build failed`);
|
|
process.exit(1);
|
|
}
|
|
|
|
// Step 3: Docker build
|
|
console.log(`\n==> Step 3: Building Docker image`);
|
|
const dockerfile = path.join(rootDir, 'Dockerfile');
|
|
const image = `${REGISTRY}/${SERVICE}:${TAG}`;
|
|
const buildCmd = `docker build ${noCache ? '--no-cache' : ''} -f "${dockerfile}" -t "${image}" .`;
|
|
|
|
console.log(` Building ${image}`);
|
|
try {
|
|
execSync(buildCmd, { stdio: 'inherit', cwd: rootDir });
|
|
console.log(` [OK] ${image}`);
|
|
} catch (error) {
|
|
console.error(` [FAIL] Docker build failed`);
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log(`\n=== Build Complete ===`);
|
|
console.log(` ${image}`);
|
|
console.log('');
|