diff --git a/src/lib/docker.ts b/src/lib/docker.ts index c2642623f..d3c040c6a 100644 --- a/src/lib/docker.ts +++ b/src/lib/docker.ts @@ -109,6 +109,7 @@ export async function buildImage({ } ); await streamEvents({ stream, docker, buildId, applicationId, debug }); + await saveBuildLog({ line: `Building image successful!`, buildId, applicationId }); } export function dockerInstance({ destinationDocker }): { engine: Dockerode; network: string } { diff --git a/src/lib/haproxy/index.ts b/src/lib/haproxy/index.ts index 6770d5c93..5b713e343 100644 --- a/src/lib/haproxy/index.ts +++ b/src/lib/haproxy/index.ts @@ -126,8 +126,8 @@ export async function startTcpProxy( const host = getEngine(engine); const containerName = `haproxy-for-${publicPort}`; - const found = await checkContainer(engine, containerName); - const foundDependentContainer = await checkContainer(engine, id); + const found = await checkContainer(engine, containerName, true); + const foundDependentContainer = await checkContainer(engine, id, true); try { if (foundDependentContainer && !found) { @@ -161,8 +161,8 @@ export async function startHttpProxy( const host = getEngine(engine); const containerName = `haproxy-for-${publicPort}`; - const found = await checkContainer(engine, containerName); - const foundDependentContainer = await checkContainer(engine, id); + const found = await checkContainer(engine, containerName, true); + const foundDependentContainer = await checkContainer(engine, id, true); try { if (foundDependentContainer && !found) { @@ -186,7 +186,7 @@ export async function startHttpProxy( export async function startCoolifyProxy(engine: string): Promise { const host = getEngine(engine); - const found = await checkContainer(engine, 'coolify-haproxy'); + const found = await checkContainer(engine, 'coolify-haproxy', true); const { proxyPassword, proxyUser, id } = await db.listSettings(); if (!found) { const { stdout: Config } = await asyncExecShell( @@ -201,7 +201,25 @@ export async function startCoolifyProxy(engine: string): Promise { await configureNetworkCoolifyProxy(engine); } -export async function checkContainer(engine: string, container: string): Promise { +export async function isContainerExited(engine: string, containerName: string): Promise { + let isExited = false; + const host = getEngine(engine); + try { + const { stdout } = await asyncExecShell( + `DOCKER_HOST="${host}" docker inspect -f '{{.State.Status}}' ${containerName}` + ); + if (stdout.trim() === 'exited') { + isExited = true; + } + } catch (error) {} + + return isExited; +} +export async function checkContainer( + engine: string, + container: string, + remove: boolean = false +): Promise { const host = getEngine(engine); let containerFound = false; @@ -212,7 +230,10 @@ export async function checkContainer(engine: string, container: string): Promise const parsedStdout = JSON.parse(stdout); const status = parsedStdout.Status; const isRunning = status === 'running'; - if (status === 'exited' || status === 'created') { + if (status === 'created') { + await asyncExecShell(`DOCKER_HOST="${host}" docker rm ${container}`); + } + if (remove && status === 'exited') { await asyncExecShell(`DOCKER_HOST="${host}" docker rm ${container}`); } if (isRunning) { diff --git a/src/lib/store.ts b/src/lib/store.ts index 42cb12455..1473d93b2 100644 --- a/src/lib/store.ts +++ b/src/lib/store.ts @@ -5,3 +5,4 @@ export const gitTokens: Writable<{ githubToken: string | null; gitlabToken: stri githubToken: null, gitlabToken: null }); +export const disabledButton: Writable = writable(false); diff --git a/src/routes/applications/[id]/__layout.svelte b/src/routes/applications/[id]/__layout.svelte index 7b997fae4..44acd35ef 100644 --- a/src/routes/applications/[id]/__layout.svelte +++ b/src/routes/applications/[id]/__layout.svelte @@ -17,7 +17,7 @@ const endpoint = `/applications/${params.id}.json`; const res = await fetch(endpoint); if (res.ok) { - let { application, isRunning, appId, githubToken, gitlabToken } = await res.json(); + let { application, isRunning, isExited, appId, githubToken, gitlabToken } = await res.json(); if (!application || Object.entries(application).length === 0) { return { status: 302, @@ -46,6 +46,7 @@ props: { application, isRunning, + isExited, githubToken, gitlabToken }, @@ -67,6 +68,7 @@