#!/usr/bin/env node /** * Build Docker images for C-----code * * Usage: * node scripts/build.js # Build all images * node scripts/build.js app # Build specific service * node scripts/build.js app gitserver * * Environment: * REGISTRY - Docker registry (default: harbor.gitdata.me/gta_team) * TAG - Image tag (default: latest) * TARGET - Rust build target (default: x86_64-unknown-linux-gnu) */ const { execSync } = require('child_process'); const path = require('path'); const REGISTRY = process.env.REGISTRY || 'harbor.gitdata.me/gta_team'; const TAG = process.env.TAG || 'latest'; const BUILD_TARGET = process.env.TARGET || 'x86_64-unknown-linux-gnu'; const SERVICES = ['app', 'gitserver', 'email-worker', 'git-hook', 'migrate', 'operator', 'static', 'frontend']; const args = process.argv.slice(2); const targets = args.length > 0 ? args : SERVICES; console.log(`\n=== Build Configuration ===`); console.log(`Registry: ${REGISTRY}`); console.log(`Tag: ${TAG}`); console.log(`Target: ${BUILD_TARGET}`); console.log(`Services: ${targets.join(', ')}\n`); for (const service of targets) { if (!SERVICES.includes(service)) { console.error(`Unknown service: ${service}`); console.error(`Available: ${SERVICES.join(', ')}`); process.exit(1); } const dockerfile = path.join(__dirname, '..', 'docker', `${service}.Dockerfile`); const image = `${REGISTRY}/${service}:${TAG}`; console.log(`\n==> Building ${image}`); console.log(` Dockerfile: ${dockerfile}`); try { execSync( `docker build ` + `--build-arg BUILD_TARGET=${BUILD_TARGET} ` + `-f "${dockerfile}" ` + `-t "${image}" ` + `--progress=plain ` + `.`, { stdio: 'inherit', cwd: path.join(__dirname, '..') } ); console.log(` [OK] ${image}`); } catch (error) { console.error(` [FAIL] ${service}`); process.exit(1); } } console.log(`\n=== Build Complete ===`); for (const service of targets) { console.log(` ${REGISTRY}/${service}:${TAG}`); } console.log('');