Skip to content

Commit ded3058

Browse files
committed
Add Docker task generator to repo form
1 parent 1e88778 commit ded3058

1 file changed

Lines changed: 112 additions & 0 deletions

File tree

components/modals/RepoFormModal.tsx

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,6 +694,117 @@ const PythonTaskGenerator: React.FC<{
694694
);
695695
};
696696

697+
const DockerTaskGenerator: React.FC<{
698+
dockerCaps: DockerCapabilities | undefined;
699+
onAddTask: (task: Partial<Task>) => void;
700+
}> = ({ dockerCaps, onAddTask }) => {
701+
if (!dockerCaps) return null;
702+
const dockerfiles = dockerCaps.dockerfiles ?? [];
703+
const composeFiles = dockerCaps.composeFiles ?? [];
704+
if (dockerfiles.length === 0 && composeFiles.length === 0) return null;
705+
706+
const getBasename = (p: string) => p.split(/[\\/]/).pop() || p;
707+
708+
const createDockerBuildTask = (dockerfile: string) => {
709+
onAddTask({
710+
name: `Build Image (${getBasename(dockerfile)})`,
711+
steps: [
712+
{
713+
type: TaskStepType.DOCKER_BUILD_IMAGE,
714+
dockerfilePath: dockerfile,
715+
},
716+
].map(step => ({ ...step, id: '', enabled: true })),
717+
});
718+
};
719+
720+
const createComposeTask = (
721+
composePath: string,
722+
type: TaskStepType.DOCKER_COMPOSE_UP | TaskStepType.DOCKER_COMPOSE_DOWN | TaskStepType.DOCKER_COMPOSE_BUILD,
723+
) => {
724+
const labelMap: Record<
725+
TaskStepType.DOCKER_COMPOSE_UP | TaskStepType.DOCKER_COMPOSE_DOWN | TaskStepType.DOCKER_COMPOSE_BUILD,
726+
string
727+
> = {
728+
[TaskStepType.DOCKER_COMPOSE_UP]: 'Compose Up',
729+
[TaskStepType.DOCKER_COMPOSE_DOWN]: 'Compose Down',
730+
[TaskStepType.DOCKER_COMPOSE_BUILD]: 'Compose Build',
731+
};
732+
733+
const name = `${labelMap[type]} (${getBasename(composePath)})`;
734+
onAddTask({
735+
name,
736+
steps: [
737+
{
738+
type,
739+
dockerComposePath: composePath,
740+
},
741+
].map(step => ({ ...step, id: '', enabled: true })),
742+
});
743+
};
744+
745+
const detectedArtifacts = [
746+
...dockerfiles.map(file => `Dockerfile: ${getBasename(file)}`),
747+
...composeFiles.map(file => `Compose: ${getBasename(file)}`),
748+
];
749+
750+
return (
751+
<div className="p-3 mb-4 bg-sky-50 dark:bg-gray-900/50 rounded-lg border border-sky-200 dark:border-gray-700">
752+
<div className="flex items-center gap-2 mb-2">
753+
<DockerIcon className="h-5 w-5 text-sky-500" />
754+
<h3 className="text-md font-semibold text-gray-800 dark:text-gray-200">Docker Artifacts Detected</h3>
755+
</div>
756+
<div className="text-xs text-gray-600 dark:text-gray-400 mb-3 flex flex-wrap gap-2">
757+
{detectedArtifacts.map(artifact => (
758+
<span
759+
key={artifact}
760+
className="bg-sky-100 dark:bg-sky-900/50 text-sky-800 dark:text-sky-300 px-2 py-0.5 rounded-full"
761+
>
762+
{artifact}
763+
</span>
764+
))}
765+
</div>
766+
<div className="flex flex-wrap gap-2">
767+
{dockerfiles.map(file => (
768+
<button
769+
key={`dockerfile-${file}`}
770+
type="button"
771+
onClick={() => createDockerBuildTask(file)}
772+
className="text-xs font-medium text-white bg-sky-600 hover:bg-sky-700 px-3 py-1.5 rounded-md"
773+
>
774+
Add Build Task for {getBasename(file)}
775+
</button>
776+
))}
777+
{composeFiles.flatMap(file => [
778+
<button
779+
key={`compose-up-${file}`}
780+
type="button"
781+
onClick={() => createComposeTask(file, TaskStepType.DOCKER_COMPOSE_UP)}
782+
className="text-xs font-medium text-white bg-emerald-600 hover:bg-emerald-700 px-3 py-1.5 rounded-md"
783+
>
784+
Add Compose Up Task ({getBasename(file)})
785+
</button>,
786+
<button
787+
key={`compose-down-${file}`}
788+
type="button"
789+
onClick={() => createComposeTask(file, TaskStepType.DOCKER_COMPOSE_DOWN)}
790+
className="text-xs font-medium text-white bg-amber-600 hover:bg-amber-700 px-3 py-1.5 rounded-md"
791+
>
792+
Add Compose Down Task ({getBasename(file)})
793+
</button>,
794+
<button
795+
key={`compose-build-${file}`}
796+
type="button"
797+
onClick={() => createComposeTask(file, TaskStepType.DOCKER_COMPOSE_BUILD)}
798+
className="text-xs font-medium text-white bg-slate-600 hover:bg-slate-700 px-3 py-1.5 rounded-md"
799+
>
800+
Add Compose Build Task ({getBasename(file)})
801+
</button>,
802+
])}
803+
</div>
804+
</div>
805+
);
806+
};
807+
697808
const DelphiTaskGenerator: React.FC<{
698809
delphiCaps: DelphiCapabilities | undefined;
699810
onAddTask: (task: Partial<Task>) => void;
@@ -956,6 +1067,7 @@ const TaskStepsEditor: React.FC<{
9561067
</div>
9571068
)}
9581069

1070+
<DockerTaskGenerator dockerCaps={projectInfo?.docker} onAddTask={onAddTask} />
9591071
<NodejsTaskGenerator nodejsCaps={projectInfo?.nodejs} onAddTask={onAddTask} />
9601072
<LazarusTaskGenerator lazarusCaps={projectInfo?.lazarus} onAddTask={onAddTask} />
9611073
<DelphiTaskGenerator delphiCaps={projectInfo?.delphi} onAddTask={onAddTask} />

0 commit comments

Comments
 (0)