mirror of
https://github.com/Lifeforge-app/lifeforge.git
synced 2026-06-28 06:46:24 +00:00
111 lines
2.6 KiB
TypeScript
111 lines
2.6 KiB
TypeScript
import { execSync } from 'child_process'
|
|
|
|
import executeCommand from './commands'
|
|
import { isDockerMode } from './helpers'
|
|
import logger from './logger'
|
|
|
|
const SERVER_CONTAINER = 'lifeforge-server'
|
|
|
|
/**
|
|
* Checks if Docker daemon is running.
|
|
*/
|
|
export function isDockerRunning(): boolean {
|
|
try {
|
|
execSync('docker info', { stdio: 'pipe' })
|
|
|
|
return true
|
|
} catch {
|
|
return false
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Checks if a specific Docker container is running.
|
|
*/
|
|
export function isContainerRunning(containerName: string): boolean {
|
|
try {
|
|
const status = execSync(
|
|
`docker ps --filter "name=${containerName}" --format "{{.Status}}"`,
|
|
{ encoding: 'utf8', stdio: 'pipe' }
|
|
).trim()
|
|
|
|
return status.length > 0
|
|
} catch {
|
|
return false
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Restarts the Docker server container to pick up module changes.
|
|
* Only works when running locally (not from inside Docker).
|
|
*/
|
|
export function restartServerContainer(): void {
|
|
if (isDockerMode()) {
|
|
logger.warn('Cannot restart Docker from inside a container')
|
|
|
|
return
|
|
}
|
|
|
|
if (!isDockerRunning()) {
|
|
return
|
|
}
|
|
|
|
if (!isContainerRunning(SERVER_CONTAINER)) {
|
|
logger.debug('Server container not running, skipping restart')
|
|
|
|
return
|
|
}
|
|
|
|
try {
|
|
logger.info('Restarting Docker server container...')
|
|
execSync(`docker restart ${SERVER_CONTAINER}`, { stdio: 'inherit' })
|
|
logger.success('Server container restarted')
|
|
} catch (error) {
|
|
logger.error(`Failed to restart Docker server: ${error}`)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Automatically restarts the server if Docker is detected and running.
|
|
* Call this after module install/uninstall operations.
|
|
*/
|
|
export function smartReloadServer(): void {
|
|
if (isDockerMode()) {
|
|
return
|
|
}
|
|
|
|
if (isDockerRunning() && isContainerRunning(SERVER_CONTAINER)) {
|
|
restartServerContainer()
|
|
} else {
|
|
logger.info('Refresh the browser to load module changes')
|
|
}
|
|
}
|
|
|
|
export function stopService(serviceName: string): void {
|
|
if (!isDockerRunning()) {
|
|
return
|
|
}
|
|
|
|
try {
|
|
logger.debug(`Stopping Docker service ${serviceName}...`)
|
|
executeCommand(`docker stop ${serviceName}`, { stdio: 'inherit' })
|
|
logger.success(`Service ${serviceName} stopped`)
|
|
} catch (error) {
|
|
logger.error(`Failed to stop Docker service ${serviceName}: ${error}`)
|
|
}
|
|
}
|
|
|
|
export function startService(serviceName: string): void {
|
|
if (!isDockerRunning()) {
|
|
return
|
|
}
|
|
|
|
try {
|
|
logger.debug(`Starting Docker service ${serviceName}...`)
|
|
executeCommand(`docker start ${serviceName}`, { stdio: 'inherit' })
|
|
logger.success(`Service ${serviceName} started`)
|
|
} catch (error) {
|
|
logger.error(`Failed to start Docker service ${serviceName}: ${error}`)
|
|
}
|
|
}
|