46 lines
1.5 KiB
TypeScript
46 lines
1.5 KiB
TypeScript
|
|
import { docker } from '$lib/api/docker';
|
||
|
|
import { execShellAsync } from '../common';
|
||
|
|
|
||
|
|
export async function deleteSameDeployments(configuration) {
|
||
|
|
await (
|
||
|
|
await docker.engine.listServices()
|
||
|
|
)
|
||
|
|
.filter((r) => r.Spec.Labels.managedBy === 'coolify' && r.Spec.Labels.type === 'application')
|
||
|
|
.map(async (s) => {
|
||
|
|
const running = JSON.parse(s.Spec.Labels.configuration);
|
||
|
|
if (
|
||
|
|
running.repository.id === configuration.repository.id &&
|
||
|
|
running.repository.branch === configuration.repository.branch
|
||
|
|
) {
|
||
|
|
await execShellAsync(`docker stack rm ${s.Spec.Labels['com.docker.stack.namespace']}`);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function purgeImagesContainers(configuration, deleteAll = false) {
|
||
|
|
const { name, tag } = configuration.build.container;
|
||
|
|
await execShellAsync('docker container prune -f');
|
||
|
|
if (deleteAll) {
|
||
|
|
const IDsToDelete = (
|
||
|
|
await execShellAsync(`docker images ls --filter=reference='${name}' --format '{{json .ID }}'`)
|
||
|
|
)
|
||
|
|
.trim()
|
||
|
|
.replace(/"/g, '')
|
||
|
|
.split('\n');
|
||
|
|
if (IDsToDelete.length > 0)
|
||
|
|
await execShellAsync(`docker rmi -f ${IDsToDelete.toString().replace(',', ' ')}`);
|
||
|
|
} else {
|
||
|
|
const IDsToDelete = (
|
||
|
|
await execShellAsync(
|
||
|
|
`docker images ls --filter=reference='${name}' --filter=before='${name}:${tag}' --format '{{json .ID }}'`
|
||
|
|
)
|
||
|
|
)
|
||
|
|
.trim()
|
||
|
|
.replace(/"/g, '')
|
||
|
|
.split('\n');
|
||
|
|
if (IDsToDelete.length > 1)
|
||
|
|
await execShellAsync(`docker rmi -f ${IDsToDelete.toString().replace(',', ' ')}`);
|
||
|
|
}
|
||
|
|
await execShellAsync('docker image prune -f');
|
||
|
|
}
|