43 lines
1.2 KiB
TypeScript
43 lines
1.2 KiB
TypeScript
import * as db from '$lib/database';
|
|
import type { RequestHandler } from '@sveltejs/kit';
|
|
import cuid from 'cuid';
|
|
import crypto from 'crypto';
|
|
import { buildQueue } from '$lib/queues';
|
|
import { getUserDetails } from '$lib/common';
|
|
import { PrismaErrorHandler } from '$lib/database';
|
|
|
|
export const post: RequestHandler = async (event) => {
|
|
const { teamId, status, body } = await getUserDetails(event);
|
|
if (status === 401) return { status, body };
|
|
|
|
const { id } = event.params;
|
|
try {
|
|
const buildId = cuid();
|
|
const applicationFound = await db.getApplication({ id, teamId });
|
|
if (!applicationFound.configHash) {
|
|
const configHash = crypto
|
|
.createHash('sha256')
|
|
.update(
|
|
JSON.stringify({
|
|
buildPack: applicationFound.buildPack,
|
|
port: applicationFound.port,
|
|
installCommand: applicationFound.installCommand,
|
|
buildCommand: applicationFound.buildCommand,
|
|
startCommand: applicationFound.startCommand
|
|
})
|
|
)
|
|
.digest('hex');
|
|
await db.prisma.application.update({ where: { id }, data: { configHash } });
|
|
}
|
|
await buildQueue.add(buildId, { build_id: buildId, type: 'manual', ...applicationFound });
|
|
return {
|
|
status: 200,
|
|
body: {
|
|
buildId
|
|
}
|
|
};
|
|
} catch (error) {
|
|
return PrismaErrorHandler(error);
|
|
}
|
|
};
|