Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
b187000ae4 | |||
c715adfd6c | |||
7b9ebfdacb |
16
changelog.md
16
changelog.md
@@ -1,5 +1,21 @@
|
||||
# Changelog
|
||||
|
||||
## 2025-08-15 - 1.17.2 - fix(ci-test-services)
|
||||
Update CI/CD configurations, test settings, and Docker service for MongoDB.
|
||||
|
||||
- Add .claude/settings.local.json with updated permission settings
|
||||
- Introduce new GitLab CI, VSCode launch and settings, and updated test configuration files (.gitignore, .npmrc, npmextra.json, package.json, qenv.yml, readme.md)
|
||||
- Update test scripts in test/test and test/ts to improve project validation
|
||||
- Fix MongoDB Docker container command by adding '--bind_ip_all' for proper network binding
|
||||
|
||||
## 2025-08-15 - 1.17.1 - fix(services)
|
||||
Improve services module logging and enhance MongoDB Compass integration
|
||||
|
||||
- Refactored services module to use centralized logger from gitzone.logging.ts
|
||||
- Automatically display MongoDB Compass connection string when starting services or checking status
|
||||
- Removed custom printMessage wrapper in favor of standard logger.log() calls
|
||||
- Consistent logging across all service commands
|
||||
|
||||
## 2025-08-14 - 1.17.0 - feat(services)
|
||||
Add comprehensive development services management for MongoDB and MinIO containers
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@git.zone/cli",
|
||||
"private": false,
|
||||
"version": "1.17.0",
|
||||
"version": "1.17.2",
|
||||
"description": "A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.",
|
||||
"main": "dist_ts/index.ts",
|
||||
"typings": "dist_ts/index.d.ts",
|
||||
|
1
test
Submodule
1
test
Submodule
Submodule test added at 0b89443584
@@ -3,6 +3,6 @@
|
||||
*/
|
||||
export const commitinfo = {
|
||||
name: '@git.zone/cli',
|
||||
version: '1.16.10',
|
||||
version: '1.17.2',
|
||||
description: 'A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.'
|
||||
}
|
||||
|
@@ -1,5 +1,6 @@
|
||||
import * as plugins from './mod.plugins.js';
|
||||
import * as helpers from './helpers.js';
|
||||
import { logger } from '../gitzone.logging.js';
|
||||
|
||||
export type ContainerStatus = 'running' | 'stopped' | 'not_exists';
|
||||
|
||||
@@ -147,7 +148,7 @@ export class DockerContainer {
|
||||
const result = await this.smartshell.exec(command);
|
||||
return result.exitCode === 0;
|
||||
} catch (error) {
|
||||
helpers.printMessage(`Failed to run container: ${error.message}`, 'red');
|
||||
logger.log('error', `Failed to run container: ${error.message}`);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@@ -1,5 +1,6 @@
|
||||
import * as plugins from './mod.plugins.js';
|
||||
import * as helpers from './helpers.js';
|
||||
import { logger } from '../gitzone.logging.js';
|
||||
|
||||
export interface IServiceConfig {
|
||||
PROJECT_NAME: string;
|
||||
@@ -111,10 +112,10 @@ export class ServiceConfiguration {
|
||||
|
||||
await this.saveConfig();
|
||||
|
||||
helpers.printMessage('✅ Created .nogit/env.json with project defaults', 'green');
|
||||
helpers.printMessage(`📍 MongoDB port: ${mongoPort}`, 'blue');
|
||||
helpers.printMessage(`📍 S3 API port: ${s3Port}`, 'blue');
|
||||
helpers.printMessage(`📍 S3 Console port: ${s3ConsolePort}`, 'blue');
|
||||
logger.log('ok', '✅ Created .nogit/env.json with project defaults');
|
||||
logger.log('info', `📍 MongoDB port: ${mongoPort}`);
|
||||
logger.log('info', `📍 S3 API port: ${s3Port}`);
|
||||
logger.log('info', `📍 S3 Console port: ${s3ConsolePort}`);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -209,9 +210,9 @@ export class ServiceConfiguration {
|
||||
|
||||
if (updated) {
|
||||
await this.saveConfig();
|
||||
helpers.printMessage(`✅ Added missing fields: ${fieldsAdded.join(', ')}`, 'green');
|
||||
logger.log('ok', `✅ Added missing fields: ${fieldsAdded.join(', ')}`);
|
||||
} else {
|
||||
helpers.printMessage('✅ Configuration complete', 'green');
|
||||
logger.log('ok', '✅ Configuration complete');
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -2,6 +2,7 @@ import * as plugins from './mod.plugins.js';
|
||||
import * as helpers from './helpers.js';
|
||||
import { ServiceConfiguration } from './classes.serviceconfiguration.js';
|
||||
import { DockerContainer } from './classes.dockercontainer.js';
|
||||
import { logger } from '../gitzone.logging.js';
|
||||
|
||||
export class ServiceManager {
|
||||
private config: ServiceConfiguration;
|
||||
@@ -18,20 +19,20 @@ export class ServiceManager {
|
||||
public async init(): Promise<void> {
|
||||
// Check Docker availability
|
||||
if (!(await this.docker.checkDocker())) {
|
||||
helpers.printMessage('Error: Docker is not installed. Please install Docker first.', 'red');
|
||||
logger.log('error', 'Error: Docker is not installed. Please install Docker first.');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// Load or create configuration
|
||||
await this.config.loadOrCreate();
|
||||
helpers.printMessage(`📋 Project: ${this.config.getConfig().PROJECT_NAME}`, 'magenta');
|
||||
logger.log('info', `📋 Project: ${this.config.getConfig().PROJECT_NAME}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Start MongoDB service
|
||||
*/
|
||||
public async startMongoDB(): Promise<void> {
|
||||
helpers.printMessage('📦 MongoDB:', 'yellow');
|
||||
logger.log('note', '📦 MongoDB:');
|
||||
|
||||
const config = this.config.getConfig();
|
||||
const containers = this.config.getContainerNames();
|
||||
@@ -44,19 +45,19 @@ export class ServiceManager {
|
||||
|
||||
switch (status) {
|
||||
case 'running':
|
||||
helpers.printMessage(' Already running ✓', 'green');
|
||||
logger.log('ok', ' Already running ✓');
|
||||
break;
|
||||
|
||||
case 'stopped':
|
||||
if (await this.docker.start(containers.mongo)) {
|
||||
helpers.printMessage(' Started ✓', 'green');
|
||||
logger.log('ok', ' Started ✓');
|
||||
} else {
|
||||
helpers.printMessage(' Failed to start', 'red');
|
||||
logger.log('error', ' Failed to start');
|
||||
}
|
||||
break;
|
||||
|
||||
case 'not_exists':
|
||||
helpers.printMessage(' Creating container...', 'yellow');
|
||||
logger.log('note', ' Creating container...');
|
||||
|
||||
const success = await this.docker.run({
|
||||
name: containers.mongo,
|
||||
@@ -72,27 +73,33 @@ export class ServiceManager {
|
||||
MONGO_INITDB_ROOT_PASSWORD: config.MONGODB_PASS,
|
||||
MONGO_INITDB_DATABASE: config.MONGODB_NAME
|
||||
},
|
||||
restart: 'unless-stopped'
|
||||
restart: 'unless-stopped',
|
||||
command: '--bind_ip_all'
|
||||
});
|
||||
|
||||
if (success) {
|
||||
helpers.printMessage(' Created and started ✓', 'green');
|
||||
logger.log('ok', ' Created and started ✓');
|
||||
} else {
|
||||
helpers.printMessage(' Failed to create container', 'red');
|
||||
logger.log('error', ' Failed to create container');
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
helpers.printMessage(` Container: ${containers.mongo}`, 'cyan');
|
||||
helpers.printMessage(` Port: ${config.MONGODB_PORT}`, 'cyan');
|
||||
helpers.printMessage(` Connection: ${this.config.getMongoConnectionString()}`, 'blue');
|
||||
logger.log('info', ` Container: ${containers.mongo}`);
|
||||
logger.log('info', ` Port: ${config.MONGODB_PORT}`);
|
||||
logger.log('info', ` Connection: ${this.config.getMongoConnectionString()}`);
|
||||
|
||||
// Show Compass connection string
|
||||
const networkIp = await helpers.getLocalNetworkIp();
|
||||
const compassString = `mongodb://${config.MONGODB_USER}:${config.MONGODB_PASS}@${networkIp}:${config.MONGODB_PORT}/${config.MONGODB_NAME}?authSource=admin`;
|
||||
logger.log('ok', ` Compass: ${compassString}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Start MinIO service
|
||||
*/
|
||||
public async startMinIO(): Promise<void> {
|
||||
helpers.printMessage('📦 S3/MinIO:', 'yellow');
|
||||
logger.log('note', '📦 S3/MinIO:');
|
||||
|
||||
const config = this.config.getConfig();
|
||||
const containers = this.config.getContainerNames();
|
||||
@@ -105,19 +112,19 @@ export class ServiceManager {
|
||||
|
||||
switch (status) {
|
||||
case 'running':
|
||||
helpers.printMessage(' Already running ✓', 'green');
|
||||
logger.log('ok', ' Already running ✓');
|
||||
break;
|
||||
|
||||
case 'stopped':
|
||||
if (await this.docker.start(containers.minio)) {
|
||||
helpers.printMessage(' Started ✓', 'green');
|
||||
logger.log('ok', ' Started ✓');
|
||||
} else {
|
||||
helpers.printMessage(' Failed to start', 'red');
|
||||
logger.log('error', ' Failed to start');
|
||||
}
|
||||
break;
|
||||
|
||||
case 'not_exists':
|
||||
helpers.printMessage(' Creating container...', 'yellow');
|
||||
logger.log('note', ' Creating container...');
|
||||
|
||||
const success = await this.docker.run({
|
||||
name: containers.minio,
|
||||
@@ -138,7 +145,7 @@ export class ServiceManager {
|
||||
});
|
||||
|
||||
if (success) {
|
||||
helpers.printMessage(' Created and started ✓', 'green');
|
||||
logger.log('ok', ' Created and started ✓');
|
||||
|
||||
// Wait for MinIO to be ready
|
||||
await plugins.smartdelay.delayFor(3000);
|
||||
@@ -154,37 +161,37 @@ export class ServiceManager {
|
||||
`mc mb local/${config.S3_BUCKET}`
|
||||
);
|
||||
|
||||
helpers.printMessage(` Bucket '${config.S3_BUCKET}' created ✓`, 'green');
|
||||
logger.log('ok', ` Bucket '${config.S3_BUCKET}' created ✓`);
|
||||
} else {
|
||||
helpers.printMessage(' Failed to create container', 'red');
|
||||
logger.log('error', ' Failed to create container');
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
helpers.printMessage(` Container: ${containers.minio}`, 'cyan');
|
||||
helpers.printMessage(` Port: ${config.S3_PORT}`, 'cyan');
|
||||
helpers.printMessage(` Bucket: ${config.S3_BUCKET}`, 'cyan');
|
||||
helpers.printMessage(` API: http://${config.S3_HOST}:${config.S3_PORT}`, 'blue');
|
||||
helpers.printMessage(` Console: http://${config.S3_HOST}:${config.S3_CONSOLE_PORT} (login: ${config.S3_USER}/***)`, 'blue');
|
||||
logger.log('info', ` Container: ${containers.minio}`);
|
||||
logger.log('info', ` Port: ${config.S3_PORT}`);
|
||||
logger.log('info', ` Bucket: ${config.S3_BUCKET}`);
|
||||
logger.log('info', ` API: http://${config.S3_HOST}:${config.S3_PORT}`);
|
||||
logger.log('info', ` Console: http://${config.S3_HOST}:${config.S3_CONSOLE_PORT} (login: ${config.S3_USER}/***)`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Stop MongoDB service
|
||||
*/
|
||||
public async stopMongoDB(): Promise<void> {
|
||||
helpers.printMessage('📦 MongoDB:', 'yellow');
|
||||
logger.log('note', '📦 MongoDB:');
|
||||
|
||||
const containers = this.config.getContainerNames();
|
||||
const status = await this.docker.getStatus(containers.mongo);
|
||||
|
||||
if (status === 'running') {
|
||||
if (await this.docker.stop(containers.mongo)) {
|
||||
helpers.printMessage(' Stopped ✓', 'green');
|
||||
logger.log('ok', ' Stopped ✓');
|
||||
} else {
|
||||
helpers.printMessage(' Failed to stop', 'red');
|
||||
logger.log('error', ' Failed to stop');
|
||||
}
|
||||
} else {
|
||||
helpers.printMessage(' Not running', 'yellow');
|
||||
logger.log('note', ' Not running');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -192,19 +199,19 @@ export class ServiceManager {
|
||||
* Stop MinIO service
|
||||
*/
|
||||
public async stopMinIO(): Promise<void> {
|
||||
helpers.printMessage('📦 S3/MinIO:', 'yellow');
|
||||
logger.log('note', '📦 S3/MinIO:');
|
||||
|
||||
const containers = this.config.getContainerNames();
|
||||
const status = await this.docker.getStatus(containers.minio);
|
||||
|
||||
if (status === 'running') {
|
||||
if (await this.docker.stop(containers.minio)) {
|
||||
helpers.printMessage(' Stopped ✓', 'green');
|
||||
logger.log('ok', ' Stopped ✓');
|
||||
} else {
|
||||
helpers.printMessage(' Failed to stop', 'red');
|
||||
logger.log('error', ' Failed to stop');
|
||||
}
|
||||
} else {
|
||||
helpers.printMessage(' Not running', 'yellow');
|
||||
logger.log('note', ' Not running');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -217,23 +224,28 @@ export class ServiceManager {
|
||||
const config = this.config.getConfig();
|
||||
const containers = this.config.getContainerNames();
|
||||
|
||||
helpers.printMessage(`Project: ${config.PROJECT_NAME}`, 'magenta');
|
||||
logger.log('info', `Project: ${config.PROJECT_NAME}`);
|
||||
console.log();
|
||||
|
||||
// MongoDB status
|
||||
const mongoStatus = await this.docker.getStatus(containers.mongo);
|
||||
switch (mongoStatus) {
|
||||
case 'running':
|
||||
helpers.printMessage('📦 MongoDB: 🟢 Running', 'green');
|
||||
helpers.printMessage(` ├─ Container: ${containers.mongo}`, 'cyan');
|
||||
helpers.printMessage(` └─ ${this.config.getMongoConnectionString()}`, 'cyan');
|
||||
logger.log('ok', '📦 MongoDB: 🟢 Running');
|
||||
logger.log('info', ` ├─ Container: ${containers.mongo}`);
|
||||
logger.log('info', ` ├─ Connection: ${this.config.getMongoConnectionString()}`);
|
||||
|
||||
// Show Compass connection string
|
||||
const networkIp = await helpers.getLocalNetworkIp();
|
||||
const compassString = `mongodb://${config.MONGODB_USER}:${config.MONGODB_PASS}@${networkIp}:${config.MONGODB_PORT}/${config.MONGODB_NAME}?authSource=admin`;
|
||||
logger.log('ok', ` └─ Compass: ${compassString}`);
|
||||
break;
|
||||
case 'stopped':
|
||||
helpers.printMessage('📦 MongoDB: 🟡 Stopped', 'yellow');
|
||||
helpers.printMessage(` └─ Container: ${containers.mongo}`, 'cyan');
|
||||
logger.log('note', '📦 MongoDB: 🟡 Stopped');
|
||||
logger.log('info', ` └─ Container: ${containers.mongo}`);
|
||||
break;
|
||||
case 'not_exists':
|
||||
helpers.printMessage('📦 MongoDB: ⚪ Not installed', 'magenta');
|
||||
logger.log('info', '📦 MongoDB: ⚪ Not installed');
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -241,18 +253,18 @@ export class ServiceManager {
|
||||
const minioStatus = await this.docker.getStatus(containers.minio);
|
||||
switch (minioStatus) {
|
||||
case 'running':
|
||||
helpers.printMessage('📦 S3/MinIO: 🟢 Running', 'green');
|
||||
helpers.printMessage(` ├─ Container: ${containers.minio}`, 'cyan');
|
||||
helpers.printMessage(` ├─ API: http://${config.S3_HOST}:${config.S3_PORT}`, 'cyan');
|
||||
helpers.printMessage(` ├─ Console: http://${config.S3_HOST}:${config.S3_CONSOLE_PORT}`, 'cyan');
|
||||
helpers.printMessage(` └─ Bucket: ${config.S3_BUCKET}`, 'cyan');
|
||||
logger.log('ok', '📦 S3/MinIO: 🟢 Running');
|
||||
logger.log('info', ` ├─ Container: ${containers.minio}`);
|
||||
logger.log('info', ` ├─ API: http://${config.S3_HOST}:${config.S3_PORT}`);
|
||||
logger.log('info', ` ├─ Console: http://${config.S3_HOST}:${config.S3_CONSOLE_PORT}`);
|
||||
logger.log('info', ` └─ Bucket: ${config.S3_BUCKET}`);
|
||||
break;
|
||||
case 'stopped':
|
||||
helpers.printMessage('📦 S3/MinIO: 🟡 Stopped', 'yellow');
|
||||
helpers.printMessage(` └─ Container: ${containers.minio}`, 'cyan');
|
||||
logger.log('note', '📦 S3/MinIO: 🟡 Stopped');
|
||||
logger.log('info', ` └─ Container: ${containers.minio}`);
|
||||
break;
|
||||
case 'not_exists':
|
||||
helpers.printMessage('📦 S3/MinIO: ⚪ Not installed', 'magenta');
|
||||
logger.log('info', '📦 S3/MinIO: ⚪ Not installed');
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -265,30 +277,30 @@ export class ServiceManager {
|
||||
|
||||
const config = this.config.getConfig();
|
||||
|
||||
helpers.printMessage(`Project: ${config.PROJECT_NAME}`, 'magenta');
|
||||
logger.log('info', `Project: ${config.PROJECT_NAME}`);
|
||||
console.log();
|
||||
|
||||
helpers.printMessage('MongoDB:', 'yellow');
|
||||
helpers.printMessage(` Host: ${config.MONGODB_HOST}:${config.MONGODB_PORT}`, undefined);
|
||||
helpers.printMessage(` Database: ${config.MONGODB_NAME}`, undefined);
|
||||
helpers.printMessage(` User: ${config.MONGODB_USER}`, undefined);
|
||||
helpers.printMessage(' Password: ***', undefined);
|
||||
helpers.printMessage(` Container: ${this.config.getContainerNames().mongo}`, undefined);
|
||||
helpers.printMessage(` Data: ${this.config.getDataDirectories().mongo}`, undefined);
|
||||
helpers.printMessage(` Connection: ${this.config.getMongoConnectionString()}`, 'blue');
|
||||
logger.log('note', 'MongoDB:');
|
||||
logger.log('info', ` Host: ${config.MONGODB_HOST}:${config.MONGODB_PORT}`);
|
||||
logger.log('info', ` Database: ${config.MONGODB_NAME}`);
|
||||
logger.log('info', ` User: ${config.MONGODB_USER}`);
|
||||
logger.log('info', ' Password: ***');
|
||||
logger.log('info', ` Container: ${this.config.getContainerNames().mongo}`);
|
||||
logger.log('info', ` Data: ${this.config.getDataDirectories().mongo}`);
|
||||
logger.log('info', ` Connection: ${this.config.getMongoConnectionString()}`);
|
||||
|
||||
console.log();
|
||||
helpers.printMessage('S3/MinIO:', 'yellow');
|
||||
helpers.printMessage(` Host: ${config.S3_HOST}`, undefined);
|
||||
helpers.printMessage(` API Port: ${config.S3_PORT}`, undefined);
|
||||
helpers.printMessage(` Console Port: ${config.S3_CONSOLE_PORT}`, undefined);
|
||||
helpers.printMessage(` User: ${config.S3_USER}`, undefined);
|
||||
helpers.printMessage(' Password: ***', undefined);
|
||||
helpers.printMessage(` Bucket: ${config.S3_BUCKET}`, undefined);
|
||||
helpers.printMessage(` Container: ${this.config.getContainerNames().minio}`, undefined);
|
||||
helpers.printMessage(` Data: ${this.config.getDataDirectories().minio}`, undefined);
|
||||
helpers.printMessage(` API URL: http://${config.S3_HOST}:${config.S3_PORT}`, 'blue');
|
||||
helpers.printMessage(` Console URL: http://${config.S3_HOST}:${config.S3_CONSOLE_PORT}`, 'blue');
|
||||
logger.log('note', 'S3/MinIO:');
|
||||
logger.log('info', ` Host: ${config.S3_HOST}`);
|
||||
logger.log('info', ` API Port: ${config.S3_PORT}`);
|
||||
logger.log('info', ` Console Port: ${config.S3_CONSOLE_PORT}`);
|
||||
logger.log('info', ` User: ${config.S3_USER}`);
|
||||
logger.log('info', ' Password: ***');
|
||||
logger.log('info', ` Bucket: ${config.S3_BUCKET}`);
|
||||
logger.log('info', ` Container: ${this.config.getContainerNames().minio}`);
|
||||
logger.log('info', ` Data: ${this.config.getDataDirectories().minio}`);
|
||||
logger.log('info', ` API URL: http://${config.S3_HOST}:${config.S3_PORT}`);
|
||||
logger.log('info', ` Console URL: http://${config.S3_HOST}:${config.S3_CONSOLE_PORT}`);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -302,20 +314,20 @@ export class ServiceManager {
|
||||
|
||||
const connectionString = `mongodb://${config.MONGODB_USER}:${config.MONGODB_PASS}@${networkIp}:${config.MONGODB_PORT}/${config.MONGODB_NAME}?authSource=admin`;
|
||||
|
||||
helpers.printMessage('MongoDB Compass is a GUI tool for MongoDB. To connect:', 'cyan');
|
||||
logger.log('info', 'MongoDB Compass is a GUI tool for MongoDB. To connect:');
|
||||
console.log();
|
||||
helpers.printMessage('1. Download MongoDB Compass from:', undefined);
|
||||
helpers.printMessage(' https://www.mongodb.com/products/compass', 'blue');
|
||||
logger.log('info', '1. Download MongoDB Compass from:');
|
||||
logger.log('info', ' https://www.mongodb.com/products/compass');
|
||||
console.log();
|
||||
helpers.printMessage('2. Open Compass and paste this connection string:', undefined);
|
||||
helpers.printMessage(` ${connectionString}`, 'green');
|
||||
logger.log('info', '2. Open Compass and paste this connection string:');
|
||||
logger.log('ok', ` ${connectionString}`);
|
||||
console.log();
|
||||
helpers.printMessage('Connection Details:', 'yellow');
|
||||
helpers.printMessage(` Network IP: ${networkIp}`, undefined);
|
||||
helpers.printMessage(` Port: ${config.MONGODB_PORT}`, undefined);
|
||||
helpers.printMessage(` Database: ${config.MONGODB_NAME}`, undefined);
|
||||
helpers.printMessage(` Username: ${config.MONGODB_USER}`, undefined);
|
||||
helpers.printMessage(` Auth Source: admin`, undefined);
|
||||
logger.log('note', 'Connection Details:');
|
||||
logger.log('info', ` Network IP: ${networkIp}`);
|
||||
logger.log('info', ` Port: ${config.MONGODB_PORT}`);
|
||||
logger.log('info', ` Database: ${config.MONGODB_NAME}`);
|
||||
logger.log('info', ` Username: ${config.MONGODB_USER}`);
|
||||
logger.log('info', ` Auth Source: admin`);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -332,7 +344,7 @@ export class ServiceManager {
|
||||
const logs = await this.docker.logs(containers.mongo, lines);
|
||||
console.log(logs);
|
||||
} else {
|
||||
helpers.printMessage('MongoDB container is not running', 'yellow');
|
||||
logger.log('note', 'MongoDB container is not running');
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -343,7 +355,7 @@ export class ServiceManager {
|
||||
const logs = await this.docker.logs(containers.minio, lines);
|
||||
console.log(logs);
|
||||
} else {
|
||||
helpers.printMessage('S3/MinIO container is not running', 'yellow');
|
||||
logger.log('note', 'S3/MinIO container is not running');
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -355,7 +367,7 @@ export class ServiceManager {
|
||||
break;
|
||||
|
||||
default:
|
||||
helpers.printMessage('Usage: gitzone services logs [mongo|s3|all] [lines]', 'yellow');
|
||||
logger.log('note', 'Usage: gitzone services logs [mongo|s3|all] [lines]');
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -369,20 +381,20 @@ export class ServiceManager {
|
||||
|
||||
if (await this.docker.exists(containers.mongo)) {
|
||||
if (await this.docker.remove(containers.mongo, true)) {
|
||||
helpers.printMessage(' MongoDB container removed ✓', 'green');
|
||||
logger.log('ok', ' MongoDB container removed ✓');
|
||||
removed = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (await this.docker.exists(containers.minio)) {
|
||||
if (await this.docker.remove(containers.minio, true)) {
|
||||
helpers.printMessage(' S3/MinIO container removed ✓', 'green');
|
||||
logger.log('ok', ' S3/MinIO container removed ✓');
|
||||
removed = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!removed) {
|
||||
helpers.printMessage(' No containers to remove', 'yellow');
|
||||
logger.log('note', ' No containers to remove');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -395,18 +407,18 @@ export class ServiceManager {
|
||||
|
||||
if (await plugins.smartfile.fs.fileExists(directories.mongo)) {
|
||||
await plugins.smartfile.fs.remove(directories.mongo);
|
||||
helpers.printMessage(' MongoDB data removed ✓', 'green');
|
||||
logger.log('ok', ' MongoDB data removed ✓');
|
||||
cleaned = true;
|
||||
}
|
||||
|
||||
if (await plugins.smartfile.fs.fileExists(directories.minio)) {
|
||||
await plugins.smartfile.fs.remove(directories.minio);
|
||||
helpers.printMessage(' S3/MinIO data removed ✓', 'green');
|
||||
logger.log('ok', ' S3/MinIO data removed ✓');
|
||||
cleaned = true;
|
||||
}
|
||||
|
||||
if (!cleaned) {
|
||||
helpers.printMessage(' No data to clean', 'yellow');
|
||||
logger.log('note', ' No data to clean');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,5 +1,6 @@
|
||||
import * as plugins from './mod.plugins.js';
|
||||
import * as net from 'net';
|
||||
import { logger } from '../gitzone.logging.js';
|
||||
|
||||
/**
|
||||
* Check if a port is available
|
||||
@@ -58,40 +59,14 @@ export const getProjectName = (): string => {
|
||||
return plugins.path.basename(process.cwd());
|
||||
};
|
||||
|
||||
/**
|
||||
* Print colored message to console
|
||||
*/
|
||||
export const printMessage = (message: string, color?: 'green' | 'yellow' | 'red' | 'blue' | 'magenta' | 'cyan') => {
|
||||
const logger = new plugins.smartlog.ConsoleLog();
|
||||
|
||||
switch (color) {
|
||||
case 'green':
|
||||
logger.log('ok', message);
|
||||
break;
|
||||
case 'yellow':
|
||||
logger.log('note', message);
|
||||
break;
|
||||
case 'red':
|
||||
logger.log('error', message);
|
||||
break;
|
||||
case 'blue':
|
||||
case 'magenta':
|
||||
case 'cyan':
|
||||
logger.log('info', message);
|
||||
break;
|
||||
default:
|
||||
logger.log('info', message);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Print a header with decorative lines
|
||||
*/
|
||||
export const printHeader = (title: string) => {
|
||||
console.log();
|
||||
printMessage('═══════════════════════════════════════════════════════════════', 'cyan');
|
||||
printMessage(` ${title}`, 'cyan');
|
||||
printMessage('═══════════════════════════════════════════════════════════════', 'cyan');
|
||||
logger.log('info', '═══════════════════════════════════════════════════════════════');
|
||||
logger.log('info', ` ${title}`);
|
||||
logger.log('info', '═══════════════════════════════════════════════════════════════');
|
||||
console.log();
|
||||
};
|
||||
|
||||
|
@@ -1,6 +1,7 @@
|
||||
import * as plugins from './mod.plugins.js';
|
||||
import * as helpers from './helpers.js';
|
||||
import { ServiceManager } from './classes.servicemanager.js';
|
||||
import { logger } from '../gitzone.logging.js';
|
||||
|
||||
export const run = async (argvArg: any) => {
|
||||
const serviceManager = new ServiceManager();
|
||||
@@ -76,8 +77,8 @@ async function handleStart(serviceManager: ServiceManager, service: string) {
|
||||
break;
|
||||
|
||||
default:
|
||||
helpers.printMessage(`Unknown service: ${service}`, 'red');
|
||||
helpers.printMessage('Use: mongo, s3, or all', 'yellow');
|
||||
logger.log('error', `Unknown service: ${service}`);
|
||||
logger.log('note', 'Use: mongo, s3, or all');
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -104,8 +105,8 @@ async function handleStop(serviceManager: ServiceManager, service: string) {
|
||||
break;
|
||||
|
||||
default:
|
||||
helpers.printMessage(`Unknown service: ${service}`, 'red');
|
||||
helpers.printMessage('Use: mongo, s3, or all', 'yellow');
|
||||
logger.log('error', `Unknown service: ${service}`);
|
||||
logger.log('note', 'Use: mongo, s3, or all');
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -139,28 +140,28 @@ async function handleRestart(serviceManager: ServiceManager, service: string) {
|
||||
break;
|
||||
|
||||
default:
|
||||
helpers.printMessage(`Unknown service: ${service}`, 'red');
|
||||
logger.log('error', `Unknown service: ${service}`);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
async function handleRemove(serviceManager: ServiceManager) {
|
||||
helpers.printHeader('Removing Containers');
|
||||
helpers.printMessage('⚠️ This will remove containers but preserve data', 'yellow');
|
||||
logger.log('note', '⚠️ This will remove containers but preserve data');
|
||||
|
||||
const shouldContinue = await plugins.smartinteract.SmartInteract.getCliConfirmation('Continue?', false);
|
||||
|
||||
if (shouldContinue) {
|
||||
await serviceManager.removeContainers();
|
||||
} else {
|
||||
helpers.printMessage('Cancelled', 'yellow');
|
||||
logger.log('note', 'Cancelled');
|
||||
}
|
||||
}
|
||||
|
||||
async function handleClean(serviceManager: ServiceManager) {
|
||||
helpers.printHeader('Clean All');
|
||||
helpers.printMessage('⚠️ WARNING: This will remove all containers and data!', 'red');
|
||||
helpers.printMessage('This action cannot be undone!', 'red');
|
||||
logger.log('error', '⚠️ WARNING: This will remove all containers and data!');
|
||||
logger.log('error', 'This action cannot be undone!');
|
||||
|
||||
const smartinteraction = new plugins.smartinteract.SmartInteract();
|
||||
const confirmAnswer = await smartinteraction.askQuestion({
|
||||
@@ -174,45 +175,45 @@ async function handleClean(serviceManager: ServiceManager) {
|
||||
await serviceManager.removeContainers();
|
||||
console.log();
|
||||
await serviceManager.cleanData();
|
||||
helpers.printMessage('All cleaned ✓', 'green');
|
||||
logger.log('ok', 'All cleaned ✓');
|
||||
} else {
|
||||
helpers.printMessage('Cancelled', 'yellow');
|
||||
logger.log('note', 'Cancelled');
|
||||
}
|
||||
}
|
||||
|
||||
function showHelp() {
|
||||
helpers.printHeader('GitZone Services Manager');
|
||||
|
||||
helpers.printMessage('Usage: gitzone services [command] [options]', 'green');
|
||||
logger.log('ok', 'Usage: gitzone services [command] [options]');
|
||||
console.log();
|
||||
|
||||
helpers.printMessage('Commands:', 'yellow');
|
||||
helpers.printMessage(' start [service] Start services (mongo|s3|all)', undefined);
|
||||
helpers.printMessage(' stop [service] Stop services (mongo|s3|all)', undefined);
|
||||
helpers.printMessage(' restart [service] Restart services (mongo|s3|all)', undefined);
|
||||
helpers.printMessage(' status Show service status', undefined);
|
||||
helpers.printMessage(' config Show current configuration', undefined);
|
||||
helpers.printMessage(' compass Show MongoDB Compass connection string', undefined);
|
||||
helpers.printMessage(' logs [service] Show logs (mongo|s3|all) [lines]', undefined);
|
||||
helpers.printMessage(' remove Remove all containers', undefined);
|
||||
helpers.printMessage(' clean Remove all containers and data ⚠️', undefined);
|
||||
helpers.printMessage(' help Show this help message', undefined);
|
||||
logger.log('note', 'Commands:');
|
||||
logger.log('info', ' start [service] Start services (mongo|s3|all)');
|
||||
logger.log('info', ' stop [service] Stop services (mongo|s3|all)');
|
||||
logger.log('info', ' restart [service] Restart services (mongo|s3|all)');
|
||||
logger.log('info', ' status Show service status');
|
||||
logger.log('info', ' config Show current configuration');
|
||||
logger.log('info', ' compass Show MongoDB Compass connection string');
|
||||
logger.log('info', ' logs [service] Show logs (mongo|s3|all) [lines]');
|
||||
logger.log('info', ' remove Remove all containers');
|
||||
logger.log('info', ' clean Remove all containers and data ⚠️');
|
||||
logger.log('info', ' help Show this help message');
|
||||
console.log();
|
||||
|
||||
helpers.printMessage('Features:', 'yellow');
|
||||
helpers.printMessage(' • Auto-creates .nogit/env.json with smart defaults', undefined);
|
||||
helpers.printMessage(' • Random ports (20000-30000) to avoid conflicts', undefined);
|
||||
helpers.printMessage(' • Project-specific containers for multi-project support', undefined);
|
||||
helpers.printMessage(' • Preserves custom configuration values', undefined);
|
||||
helpers.printMessage(' • MongoDB Compass connection support', undefined);
|
||||
logger.log('note', 'Features:');
|
||||
logger.log('info', ' • Auto-creates .nogit/env.json with smart defaults');
|
||||
logger.log('info', ' • Random ports (20000-30000) to avoid conflicts');
|
||||
logger.log('info', ' • Project-specific containers for multi-project support');
|
||||
logger.log('info', ' • Preserves custom configuration values');
|
||||
logger.log('info', ' • MongoDB Compass connection support');
|
||||
console.log();
|
||||
|
||||
helpers.printMessage('Examples:', 'yellow');
|
||||
helpers.printMessage(' gitzone services start # Start all services', undefined);
|
||||
helpers.printMessage(' gitzone services start mongo # Start only MongoDB', undefined);
|
||||
helpers.printMessage(' gitzone services stop # Stop all services', undefined);
|
||||
helpers.printMessage(' gitzone services status # Check service status', undefined);
|
||||
helpers.printMessage(' gitzone services config # Show configuration', undefined);
|
||||
helpers.printMessage(' gitzone services compass # Get MongoDB Compass connection', undefined);
|
||||
helpers.printMessage(' gitzone services logs mongo 50 # Show last 50 lines of MongoDB logs', undefined);
|
||||
logger.log('note', 'Examples:');
|
||||
logger.log('info', ' gitzone services start # Start all services');
|
||||
logger.log('info', ' gitzone services start mongo # Start only MongoDB');
|
||||
logger.log('info', ' gitzone services stop # Stop all services');
|
||||
logger.log('info', ' gitzone services status # Check service status');
|
||||
logger.log('info', ' gitzone services config # Show configuration');
|
||||
logger.log('info', ' gitzone services compass # Get MongoDB Compass connection');
|
||||
logger.log('info', ' gitzone services logs mongo 50 # Show last 50 lines of MongoDB logs');
|
||||
}
|
Reference in New Issue
Block a user