gitdataai/scripts/uninstall.js
ZhenYi 1daab11ba4 feat(scripts): add deployment and build utility scripts
Replace old scripting approach with new build, deploy, push,
and uninstall utilities.
2026-05-11 17:08:29 +08:00

81 lines
2.5 KiB
JavaScript

import { execSync } from 'child_process';
import { resolve } from 'path';
import { fileURLToPath } from 'url';
import { dirname } from 'path';
import process from 'process';
import { createInterface } from 'readline';
const __dirname = dirname(fileURLToPath(import.meta.url));
const ROOT = resolve(__dirname, '..');
// colors
const G = (s) => `\x1b[0;32m${s}\x1b[0m`;
const Y = (s) => `\x1b[1;33m${s}\x1b[0m`;
const R = (s) => `\x1b[0;31m${s}\x1b[0m`;
const log = (msg) => console.log(`${G('[OK]')} ${msg}`);
const warn = (msg) => console.warn(`${Y('[WARN]')} ${msg}`);
const err = (msg) => console.error(`${R('[ERR]')} ${msg}`);
// ── defaults ──
const NAMESPACE = process.env.NAMESPACE || 'app';
const RELEASE = process.env.RELEASE || 'deploy';
const CONFIG_MAP = process.env.CONFIG_MAP || 'app-env';
const PVC_NAME = process.env.PVC_NAME || 'shared-data';
// ── confirm ──
function confirm(msg) {
const rl = createInterface({ input: process.stdin, output: process.stdout });
return new Promise((resolve) => {
rl.question(msg, (answer) => { rl.close(); resolve(answer); });
});
}
console.log('');
warn(`This will remove Helm release '${RELEASE}' from namespace '${NAMESPACE}'.`);
warn('The following resources are PROTECTED and will NOT be deleted:');
warn(` - Namespace: ${NAMESPACE}`);
warn(` - ConfigMap: ${CONFIG_MAP}`);
warn(` - PVC: ${PVC_NAME}`);
console.log('');
const answer = await confirm('Continue? [y/N] ');
if (answer !== 'y' && answer !== 'Y') {
log('Cancelled');
process.exit(0);
}
// ── uninstall ──
log(`Uninstalling Helm release ${RELEASE}...`);
execSync(`helm uninstall "${RELEASE}" --namespace "${NAMESPACE}"`, { stdio: 'inherit' });
log('Helm release uninstalled');
// ── verify protected ──
function exists(cmd) {
try { execSync(cmd, { stdio: 'pipe' }); return true; } catch { return false; }
}
log('Verifying protected resources still exist...');
if (exists(`kubectl get namespace "${NAMESPACE}"`)) {
log(`Namespace '${NAMESPACE}' preserved`);
} else {
err(`Namespace '${NAMESPACE}' was deleted!`);
}
if (exists(`kubectl get configmap "${CONFIG_MAP}" -n "${NAMESPACE}"`)) {
log(`ConfigMap '${CONFIG_MAP}' preserved`);
} else {
err(`ConfigMap '${CONFIG_MAP}' was deleted!`);
}
if (exists(`kubectl get pvc "${PVC_NAME}" -n "${NAMESPACE}"`)) {
log(`PVC '${PVC_NAME}' preserved`);
} else {
err(`PVC '${PVC_NAME}' was deleted!`);
}
log(`Uninstall complete — remaining resources in namespace ${NAMESPACE}:`);
execSync(`kubectl get all,pvc,configmap,ingress -n "${NAMESPACE}"`, { stdio: 'inherit' });