(serviceName: string)
| 87 | } |
| 88 | |
| 89 | function removeServiceFromDockerCompose(serviceName: string) { |
| 90 | const dockerComposePath = path.resolve(__dirname, 'docker-compose.yml'); |
| 91 | const dockerComposeContent = fs.readFileSync(dockerComposePath, 'utf-8'); |
| 92 | |
| 93 | // Parse the YAML file |
| 94 | const dockerCompose = yaml.load(dockerComposeContent) as DockerComposeFile; |
| 95 | |
| 96 | // Remove the service |
| 97 | if (dockerCompose.services[serviceName]) { |
| 98 | delete dockerCompose.services[serviceName]; |
| 99 | console.log(`Service '${serviceName}' has been removed.`); |
| 100 | } else { |
| 101 | console.log(`Service '${serviceName}' not found.`); |
| 102 | // return; |
| 103 | } |
| 104 | |
| 105 | // filter depends_on |
| 106 | Object.keys(dockerCompose.services).forEach((service) => { |
| 107 | const serviceConfig = dockerCompose.services[service]; |
| 108 | if (serviceConfig?.depends_on) { |
| 109 | if (Array.isArray(serviceConfig.depends_on)) { |
| 110 | // Handle legacy array format |
| 111 | serviceConfig.depends_on = serviceConfig.depends_on.filter( |
| 112 | (dep) => dep !== serviceName, |
| 113 | ); |
| 114 | } else { |
| 115 | // Handle new object format |
| 116 | if (serviceConfig.depends_on[serviceName]) { |
| 117 | delete serviceConfig.depends_on[serviceName]; |
| 118 | } |
| 119 | } |
| 120 | } |
| 121 | }); |
| 122 | |
| 123 | // filter volumes |
| 124 | Object.keys(dockerCompose.volumes ?? {}).forEach((volume) => { |
| 125 | if (dockerCompose.volumes && volume.startsWith(serviceName)) { |
| 126 | delete dockerCompose.volumes[volume]; |
| 127 | } |
| 128 | }); |
| 129 | |
| 130 | if (Object.keys(dockerCompose.volumes ?? {}).length === 0) { |
| 131 | delete dockerCompose.volumes; |
| 132 | } |
| 133 | |
| 134 | // Convert the object back to YAML |
| 135 | const newYaml = yaml.dump(dockerCompose, { |
| 136 | lineWidth: -1, |
| 137 | }); |
| 138 | fs.writeFileSync(dockerComposePath, newYaml); |
| 139 | } |
| 140 | |
| 141 | function writeEnvFile(envs: EnvVars) { |
| 142 | const envTemplatePath = path.resolve(__dirname, '.env.template'); |
no test coverage detected