feat: import to docker form board, docker button on boards (#1714)

This commit is contained in:
Thomas Camlong
2023-12-30 20:11:38 +01:00
committed by GitHub
parent e13a4afdde
commit 082077ec9d
16 changed files with 234 additions and 138 deletions

View File

@@ -3,6 +3,7 @@ import Dockerode from 'dockerode';
import { z } from 'zod';
import { adminProcedure, createTRPCRouter } from '../../trpc';
import { IconRespositories } from '../icon';
import DockerSingleton from './DockerSingleton';
const dockerActionSchema = z.enum(['remove', 'start', 'stop', 'restart']);
@@ -12,7 +13,27 @@ export const dockerRouter = createTRPCRouter({
try {
const docker = new Dockerode({});
const containers = await docker.listContainers({ all: true });
return containers;
const fetches = IconRespositories.map((rep) => rep.fetch());
const data = await Promise.all(fetches);
const returnedData = containers.map((container) => {
const imageParsed = container.Image.split('/');
// Remove the version
const image = imageParsed[imageParsed.length - 1].split(':')[0];
const foundIcon = data
.flatMap((repository) =>
repository.entries.map((entry) => ({
...entry,
repository: repository.name,
}))
)
.find((entry) => entry.name.toLowerCase().includes(image.toLowerCase()));
return {
...container,
icon: foundIcon?.url ?? '/public/imgs/logo/logo.svg'
};
});
return returnedData;
} catch (err) {
throw new TRPCError({
code: 'INTERNAL_SERVER_ERROR',