This commit is contained in:
Andras Bacsai
2022-12-01 16:29:38 +01:00
parent 1a28e65e50
commit 943a05edcc
7 changed files with 54 additions and 61 deletions

View File

@@ -121,7 +121,6 @@ import * as buildpacks from '../lib/buildPacks';
port: exposePort ? `${exposePort}:${port}` : port, port: exposePort ? `${exposePort}:${port}` : port,
}); });
try { try {
await saveBuildLog({ line: 'Deployment initiated', buildId, applicationId });
const composeVolumes = volumes.map((volume) => { const composeVolumes = volumes.map((volume) => {
return { return {
[`${volume.split(':')[0]}`]: { [`${volume.split(':')[0]}`]: {
@@ -156,7 +155,7 @@ import * as buildpacks from '../lib/buildPacks';
}; };
await fs.writeFile(`${workdir}/docker-compose.yml`, yaml.dump(composeFile)); await fs.writeFile(`${workdir}/docker-compose.yml`, yaml.dump(composeFile));
await executeDockerCmd({ dockerId: destinationDocker.id, command: `docker compose --project-directory ${workdir} up -d` }) await executeDockerCmd({ dockerId: destinationDocker.id, command: `docker compose --project-directory ${workdir} up -d` })
await saveBuildLog({ line: 'Deployed successfully 🎉', buildId, applicationId }); await saveBuildLog({ line: 'Deployed successfully', buildId, applicationId });
} catch (error) { } catch (error) {
await saveBuildLog({ line: error, buildId, applicationId }); await saveBuildLog({ line: error, buildId, applicationId });
const foundBuild = await prisma.build.findUnique({ where: { id: buildId } }) const foundBuild = await prisma.build.findUnique({ where: { id: buildId } })
@@ -185,6 +184,9 @@ import * as buildpacks from '../lib/buildPacks';
if (error !== 1) { if (error !== 1) {
await saveBuildLog({ line: error, buildId, applicationId: application.id }); await saveBuildLog({ line: error, buildId, applicationId: application.id });
} }
if (error instanceof Error) {
await saveBuildLog({ line: error.message, buildId, applicationId: application.id });
}
if (!isDev) { if (!isDev) {
await fs.rm(workdir, { recursive: true, force: true }); await fs.rm(workdir, { recursive: true, force: true });
} }
@@ -196,7 +198,7 @@ import * as buildpacks from '../lib/buildPacks';
const imageName = application.dockerRegistryImageName.split(':')[0]; const imageName = application.dockerRegistryImageName.split(':')[0];
await saveBuildLog({ line: `Pushing ${imageName}:${customTag} to Docker Registry... It could take a while...`, buildId, applicationId: application.id }); await saveBuildLog({ line: `Pushing ${imageName}:${customTag} to Docker Registry... It could take a while...`, buildId, applicationId: application.id });
await pushToRegistry(application, workdir, buildId, imageName, customTag) await pushToRegistry(application, workdir, buildId, imageName, customTag)
await saveBuildLog({ line: "Success 🎉", buildId, applicationId: application.id }); await saveBuildLog({ line: "Success", buildId, applicationId: application.id });
} }
} catch (error) { } catch (error) {
if (error.stdout) { if (error.stdout) {
@@ -310,6 +312,13 @@ import * as buildpacks from '../lib/buildPacks';
) )
.digest('hex'); .digest('hex');
const { debug } = settings; const { debug } = settings;
if (!debug) {
await saveBuildLog({
line: `Debug logging is disabled. Enable it above if necessary!`,
buildId,
applicationId
});
}
const volumes = const volumes =
persistentStorage?.map((storage) => { persistentStorage?.map((storage) => {
if (storage.oldPath) { if (storage.oldPath) {
@@ -370,12 +379,17 @@ import * as buildpacks from '../lib/buildPacks';
if (pullmergeRequestId) { if (pullmergeRequestId) {
tag = `${commit.slice(0, 7)}-${pullmergeRequestId}`; tag = `${commit.slice(0, 7)}-${pullmergeRequestId}`;
} }
if (application.dockerRegistryImageName) {
imageName = application.dockerRegistryImageName.split(':')[0]
customTag = application.dockerRegistryImageName.split(':')[1] || tag
} else {
customTag = tag
imageName = applicationId;
}
customTag = application.dockerRegistryImageName.split(':')[1] || tag;
if (pullmergeRequestId) { if (pullmergeRequestId) {
customTag = `${customTag}-${pullmergeRequestId}`; customTag = `${customTag}-${pullmergeRequestId}`;
} }
imageName = application.dockerRegistryImageName.split(':')[0];
try { try {
await prisma.build.update({ where: { id: buildId }, data: { commit } }); await prisma.build.update({ where: { id: buildId }, data: { commit } });
@@ -403,9 +417,10 @@ import * as buildpacks from '../lib/buildPacks';
} catch (error) { } catch (error) {
// //
} }
if (dockerRegistry) {
const { url, username, password } = dockerRegistry const { url, username, password } = dockerRegistry
location = await saveDockerRegistryCredentials({ url, username, password, workdir }) location = await saveDockerRegistryCredentials({ url, username, password, workdir })
}
try { try {
await executeDockerCmd({ await executeDockerCmd({
@@ -512,7 +527,7 @@ import * as buildpacks from '../lib/buildPacks';
} }
try { try {
await executeDockerCmd({ debug, buildId, applicationId, dockerId: destinationDocker.id, command: `docker compose --project-directory ${workdir} up -d` }) await executeDockerCmd({ debug, buildId, applicationId, dockerId: destinationDocker.id, command: `docker compose --project-directory ${workdir} up -d` })
await saveBuildLog({ line: 'Deployed successfully 🎉', buildId, applicationId }); await saveBuildLog({ line: 'Deployed successfully', buildId, applicationId });
await prisma.build.update({ where: { id: buildId }, data: { status: 'success' } }); await prisma.build.update({ where: { id: buildId }, data: { status: 'success' } });
await prisma.application.update({ await prisma.application.update({
where: { id: applicationId }, where: { id: applicationId },
@@ -565,9 +580,10 @@ import * as buildpacks from '../lib/buildPacks';
}); });
} }
await fs.writeFile(`${workdir}/.env`, envs.join('\n')); await fs.writeFile(`${workdir}/.env`, envs.join('\n'));
if (dockerRegistry) {
const { url, username, password } = dockerRegistry const { url, username, password } = dockerRegistry
await saveDockerRegistryCredentials({ url, username, password, workdir }) await saveDockerRegistryCredentials({ url, username, password, workdir })
}
let envFound = false; let envFound = false;
try { try {
@@ -576,7 +592,6 @@ import * as buildpacks from '../lib/buildPacks';
// //
} }
try { try {
await saveBuildLog({ line: 'Deployment initiated', buildId, applicationId });
const composeVolumes = volumes.map((volume) => { const composeVolumes = volumes.map((volume) => {
return { return {
[`${volume.split(':')[0]}`]: { [`${volume.split(':')[0]}`]: {
@@ -608,7 +623,7 @@ import * as buildpacks from '../lib/buildPacks';
}; };
await fs.writeFile(`${workdir}/docker-compose.yml`, yaml.dump(composeFile)); await fs.writeFile(`${workdir}/docker-compose.yml`, yaml.dump(composeFile));
await executeDockerCmd({ dockerId: destinationDocker.id, command: `docker compose --project-directory ${workdir} up -d` }) await executeDockerCmd({ dockerId: destinationDocker.id, command: `docker compose --project-directory ${workdir} up -d` })
await saveBuildLog({ line: 'Deployed successfully 🎉', buildId, applicationId }); await saveBuildLog({ line: 'Deployed successfully', buildId, applicationId });
} catch (error) { } catch (error) {
await saveBuildLog({ line: error, buildId, applicationId }); await saveBuildLog({ line: error, buildId, applicationId });
const foundBuild = await prisma.build.findUnique({ where: { id: buildId } }) const foundBuild = await prisma.build.findUnique({ where: { id: buildId } })
@@ -642,6 +657,9 @@ import * as buildpacks from '../lib/buildPacks';
if (error !== 1) { if (error !== 1) {
await saveBuildLog({ line: error, buildId, applicationId: application.id }); await saveBuildLog({ line: error, buildId, applicationId: application.id });
} }
if (error instanceof Error) {
await saveBuildLog({ line: error.message, buildId, applicationId: application.id });
}
if (!isDev) { if (!isDev) {
await fs.rm(workdir, { recursive: true, force: true }); await fs.rm(workdir, { recursive: true, force: true });
} }
@@ -651,7 +669,7 @@ import * as buildpacks from '../lib/buildPacks';
if (application.dockerRegistryImageName && (!imageFoundRemotely || forceRebuild)) { if (application.dockerRegistryImageName && (!imageFoundRemotely || forceRebuild)) {
await saveBuildLog({ line: `Pushing ${imageName}:${customTag} to Docker Registry... It could take a while...`, buildId, applicationId: application.id }); await saveBuildLog({ line: `Pushing ${imageName}:${customTag} to Docker Registry... It could take a while...`, buildId, applicationId: application.id });
await pushToRegistry(application, workdir, tag, imageName, customTag) await pushToRegistry(application, workdir, tag, imageName, customTag)
await saveBuildLog({ line: "Success 🎉", buildId, applicationId: application.id }); await saveBuildLog({ line: "Success", buildId, applicationId: application.id });
} }
} catch (error) { } catch (error) {
if (error.stdout) { if (error.stdout) {

View File

@@ -641,16 +641,9 @@ export async function buildImage({
commit commit
}) { }) {
if (isCache) { if (isCache) {
await saveBuildLog({ line: `Building cache image`, buildId, applicationId }); await saveBuildLog({ line: `Building cache image...`, buildId, applicationId });
} else { } else {
await saveBuildLog({ line: `Building production image`, buildId, applicationId }); await saveBuildLog({ line: `Building production image...`, buildId, applicationId });
}
if (!debug) {
await saveBuildLog({
line: `Debug logging is disabled. Enable it above if necessary!`,
buildId,
applicationId
});
} }
const dockerFile = isCache ? `${dockerFileLocation}-cache` : `${dockerFileLocation}` const dockerFile = isCache ? `${dockerFileLocation}-cache` : `${dockerFileLocation}`
const cache = `${applicationId}:${tag}${isCache ? '-cache' : ''}` const cache = `${applicationId}:${tag}${isCache ? '-cache' : ''}`
@@ -670,9 +663,9 @@ export async function buildImage({
throw new Error('Canceled.') throw new Error('Canceled.')
} }
if (isCache) { if (isCache) {
await saveBuildLog({ line: `Building cache image built successful 🎉`, buildId, applicationId }); await saveBuildLog({ line: `Built successfully`, buildId, applicationId });
} else { } else {
await saveBuildLog({ line: `Building production image built successful 🎉`, buildId, applicationId }); await saveBuildLog({ line: `Built successfully`, buildId, applicationId });
} }
} }
export function makeLabelForSimpleDockerfile({ applicationId, port, type }) { export function makeLabelForSimpleDockerfile({ applicationId, port, type }) {

View File

@@ -480,9 +480,7 @@ export async function restartApplication(request: FastifyRequest<RestartApplicat
}); });
} }
const { workdir } = await createDirectories({ repository, buildId }); const { workdir } = await createDirectories({ repository, buildId });
const labels = [ const labels = []
`coolify.managed=true`,
]
let image = null let image = null
if (imageId) { if (imageId) {
image = imageId image = imageId
@@ -499,8 +497,11 @@ export async function restartApplication(request: FastifyRequest<RestartApplicat
}) })
} }
} }
if (dockerRegistry) {
const { url, username, password } = dockerRegistry const { url, username, password } = dockerRegistry
location = await saveDockerRegistryCredentials({ url, username, password, workdir }) location = await saveDockerRegistryCredentials({ url, username, password, workdir })
}
let imageFoundLocally = false; let imageFoundLocally = false;
try { try {
await executeDockerCmd({ await executeDockerCmd({

View File

@@ -82,6 +82,7 @@ export const status: Writable<any> = writable({
statuses: [], statuses: [],
overallStatus: 'stopped', overallStatus: 'stopped',
loading: false, loading: false,
restarting: false,
initialLoading: true initialLoading: true
}, },
service: { service: {

View File

@@ -167,7 +167,7 @@
} }
} }
async function getStatus() { async function getStatus() {
if ($status.application.loading && stopping) return; if (($status.application.loading && stopping) || $status.application.restarting === true) return;
$status.application.loading = true; $status.application.loading = true;
const data = await get(`/applications/${id}/status`); const data = await get(`/applications/${id}/status`);
@@ -185,26 +185,6 @@
if ($status.application.statuses.length === 0) { if ($status.application.statuses.length === 0) {
$status.application.overallStatus = 'stopped'; $status.application.overallStatus = 'stopped';
} else { } else {
// if ($status.application.statuses.length !== numberOfApplications) {
// $status.application.overallStatus = 'degraded';
// } else {
// for (const oneStatus of $status.application.statuses) {
// if (oneStatus.status.isExited || oneStatus.status.isRestarting) {
// $status.application.overallStatus = 'degraded';
// break;
// }
// if (oneStatus.status.isRunning) {
// $status.application.overallStatus = 'healthy';
// }
// if (
// !oneStatus.status.isExited &&
// !oneStatus.status.isRestarting &&
// !oneStatus.status.isRunning
// ) {
// $status.application.overallStatus = 'stopped';
// }
// }
// }
for (const oneStatus of $status.application.statuses) { for (const oneStatus of $status.application.statuses) {
if (oneStatus.status.isExited || oneStatus.status.isRestarting) { if (oneStatus.status.isExited || oneStatus.status.isRestarting) {
$status.application.overallStatus = 'degraded'; $status.application.overallStatus = 'degraded';

View File

@@ -53,13 +53,11 @@
import { saveForm } from './utils'; import { saveForm } from './utils';
const { id } = $page.params; const { id } = $page.params;
$: isDisabled = $: isDisabled =
!$appSession.isAdmin || !$appSession.isAdmin ||
$status.application.overallStatus === 'degraded' || $status.application.overallStatus === 'degraded' ||
$status.application.overallStatus === 'healthy' || $status.application.overallStatus === 'healthy' ||
$status.application.initialLoading; $status.application.initialLoading;
$isDeploymentEnabled = checkIfDeploymentEnabledApplications($appSession.isAdmin, application); $isDeploymentEnabled = checkIfDeploymentEnabledApplications($appSession.isAdmin, application);
let statues: any = {}; let statues: any = {};
let loading = { let loading = {
@@ -274,12 +272,13 @@
$isDeploymentEnabled = checkIfDeploymentEnabledApplications($appSession.isAdmin, application); $isDeploymentEnabled = checkIfDeploymentEnabledApplications($appSession.isAdmin, application);
forceSave = false; forceSave = false;
if (toast) {
toast &&
addToast({ addToast({
message: 'Configuration saved.', message: 'Configuration saved.',
type: 'success' type: 'success'
}); });
}
if (application.fqdn && application.fqdn.startsWith('https')) { if (application.fqdn && application.fqdn.startsWith('https')) {
isHttps = true; isHttps = true;
} else { } else {
@@ -514,7 +513,6 @@
> >
{/if} {/if}
</div> </div>
<div class="grid grid-cols-2 items-center"> <div class="grid grid-cols-2 items-center">
<label for="repository">Git commit</label> <label for="repository">Git commit</label>
<div class="flex gap-2"> <div class="flex gap-2">

View File

@@ -57,6 +57,7 @@
try { try {
$status.application.initialLoading = true; $status.application.initialLoading = true;
$status.application.loading = true; $status.application.loading = true;
$status.application.restarting = true;
await post(`/applications/${id}/restart`, { imageId: remoteImage }); await post(`/applications/${id}/restart`, { imageId: remoteImage });
addToast({ addToast({
type: 'success', type: 'success',
@@ -67,6 +68,7 @@
} finally { } finally {
$status.application.initialLoading = false; $status.application.initialLoading = false;
$status.application.loading = false; $status.application.loading = false;
$status.application.restarting = false;
} }
} }
} }