diff --git a/apps/api/src/lib/buildPacks/compose.ts b/apps/api/src/lib/buildPacks/compose.ts new file mode 100644 index 000000000..30af1f10b --- /dev/null +++ b/apps/api/src/lib/buildPacks/compose.ts @@ -0,0 +1,34 @@ +import { promises as fs } from 'fs'; +import { executeDockerCmd } from '../common'; +import { buildImage } from './common'; +import yaml from 'js-yaml'; + +export default async function (data) { + let { + applicationId, + dockerId, + debug, + tag, + workdir, + buildId, + baseDirectory, + secrets, + pullmergeRequestId, + dockerFileLocation + } = data + const file = `${workdir}${baseDirectory}/docker-compose.yml`; + const dockerComposeRaw = await fs.readFile(`${file}`, 'utf8') + const dockerComposeYaml = yaml.load(dockerComposeRaw) + if (!dockerComposeYaml.services) { + throw 'No Services found in docker-compose file.' + } + for (let [key, value] of Object.entries(dockerComposeYaml.services)) { + value['container_name'] = `${applicationId}-${key}` + console.log({key, value}); + } + + throw 'Halting' + // await executeDockerCmd({ debug, buildId, applicationId, dockerId, command: `docker compose --project-directory ${workdir} pull` }) + // await executeDockerCmd({ debug, buildId, applicationId, dockerId, command: `docker compose --project-directory ${workdir} build --progress plain --pull` }) + // await executeDockerCmd({ debug, buildId, applicationId, dockerId, command: `docker compose --project-directory ${workdir} up -d` }) +} diff --git a/apps/api/src/lib/buildPacks/index.ts b/apps/api/src/lib/buildPacks/index.ts index b8eb4d609..8e82047fe 100644 --- a/apps/api/src/lib/buildPacks/index.ts +++ b/apps/api/src/lib/buildPacks/index.ts @@ -16,6 +16,7 @@ import python from './python'; import deno from './deno'; import laravel from './laravel'; import heroku from './heroku'; +import compose from './compose' export { node, @@ -35,5 +36,6 @@ export { python, deno, laravel, - heroku + heroku, + compose }; diff --git a/apps/api/src/lib/common.ts b/apps/api/src/lib/common.ts index 32c9468a6..bb52979ec 100644 --- a/apps/api/src/lib/common.ts +++ b/apps/api/src/lib/common.ts @@ -598,7 +598,7 @@ export async function executeDockerCmd({ debug, buildId, applicationId, dockerId command = command.replace(/docker compose/gi, 'docker-compose'); } } - if (command.startsWith(`docker build --progress plain`) || command.startsWith(`pack build`)) { + if (command.startsWith(`docker build`) || command.startsWith(`pack build`)|| command.startsWith(`docker compose build`)) { return await asyncExecShellStream({ debug, buildId, applicationId, command, engine }); } return await execaCommand(command, { env: { DOCKER_BUILDKIT: "1", DOCKER_HOST: engine }, shell: true }) diff --git a/apps/ui/src/lib/templates.ts b/apps/ui/src/lib/templates.ts index 671bf9d5a..5219879e5 100644 --- a/apps/ui/src/lib/templates.ts +++ b/apps/ui/src/lib/templates.ts @@ -235,6 +235,14 @@ export const buildPacks = [ color: 'bg-sky-700', isCoolifyBuildPack: true, }, + { + name: 'compose', + type: 'base', + fancyName: 'Docker Compose', + hoverColor: 'hover:bg-sky-700', + color: 'bg-sky-700', + isCoolifyBuildPack: true, + }, { name: 'svelte', type: 'specific',