import Caprover, { Application } from "../services/Caprover"; import DockerHub from "../services/DockerHub"; import Layout, { html } from "../ui/Layout"; const UpdateForm = (application: Application, latestVersions: string[]) => { // sort by number of "dots" in the version to have the most specific version first latestVersions.sort((a, b) => { return b.split(".").length - a.split(".").length; }); return html`
`; }; const Page = (application: Application, latestVersions: string[]) => { return html`

Updating ${application.name}

Last deployment
${application.lastDeployedAt.toLocaleString("fr-FR")}
Current version
${application.dockerImage ? `Docker hub ${application.dockerImage.name}:${application.dockerImage.tag} ` : `${application.imageName}… check yourself!`}
Latest versions
${latestVersions.length === 0 ? "No version found" : UpdateForm(application, latestVersions)}
`; }; export default async ( req: Request, caprover: Caprover, dockerHub: DockerHub ): Promise => { if (req.method === "POST") { const body = await req.formData(); console.log("TODO Implement application update", [...body.entries()]); throw new Error("Not implemented"); } const applications = await caprover.getApps(); const appToUpdate = applications .filter((app) => { // can we help to update this app? return app.dockerImage; }) .find((app) => app.isOlderThan(30)); if (!appToUpdate) { return new Response(Layout(html`

No application to update 🎉

`), { headers: { "Content-Type": "text/html" }, }); } const latestVersions = await dockerHub.getLatestVersions( appToUpdate.dockerImage!.name ); return new Response(Layout(Page(appToUpdate, latestVersions)), { headers: { "Content-Type": "text/html" }, }); };