refactor: add image tag helper, refactor update check logic, remove try/catch

This commit is contained in:
UndefinedPony
2024-12-20 17:29:01 +01:00
parent 2804748118
commit 256534570b

View File

@@ -3,37 +3,49 @@ import { join } from "node:path";
import { docker } from "@dokploy/server/constants"; import { docker } from "@dokploy/server/constants";
import { getServiceContainer } from "@dokploy/server/utils/docker/utils"; import { getServiceContainer } from "@dokploy/server/utils/docker/utils";
import { execAsyncRemote } from "@dokploy/server/utils/process/execAsync"; import { execAsyncRemote } from "@dokploy/server/utils/process/execAsync";
import { spawnAsync } from "../utils/process/spawnAsync";
// import packageInfo from "../../../package.json"; // import packageInfo from "../../../package.json";
const updateIsAvailable = async () => { /** Returns current Dokploy docker image tag or `latest` by default. */
try { export const getDokployImageTag = () => {
const service = await getServiceContainer("dokploy"); return process.env.RELEASE_TAG || "latest";
};
const localImage = await docker.getImage(getDokployImage()).inspect(); /** Checks if server update is available by comparing current image's digest against digest for provided image tag via Docker hub API */
return localImage.Id !== service?.ImageID; export const checkIsUpdateAvailable = async () => {
} catch (error) { const commandResult = await spawnAsync("docker", [
return false; "inspect",
} "--format={{index .RepoDigests 0}}",
getDokployImage(),
]);
const currentDigest = commandResult.toString().trim().split("@")[1];
const url = `https://hub.docker.com/v2/repositories/dokploy/dokploy/tags/${getDokployImageTag()}`;
const response = await fetch(url, {
method: "GET",
headers: { "Content-Type": "application/json" },
});
const data = (await response.json()) as { digest: string };
const { digest } = data;
return digest !== currentDigest;
}; };
export const getDokployImage = () => { export const getDokployImage = () => {
return `dokploy/dokploy:${process.env.RELEASE_TAG || "latest"}`; return `dokploy/dokploy:${getDokployImageTag()}`;
}; };
export const pullLatestRelease = async () => { export const pullLatestRelease = async () => {
try { const stream = await docker.pull(getDokployImage());
const stream = await docker.pull(getDokployImage(), {}); await new Promise((resolve, reject) => {
await new Promise((resolve, reject) => { docker.modem.followProgress(stream, (err, res) =>
docker.modem.followProgress(stream, (err, res) => err ? reject(err) : resolve(res),
err ? reject(err) : resolve(res), );
); });
});
const newUpdateIsAvailable = await updateIsAvailable();
return newUpdateIsAvailable;
} catch (error) {}
return false;
}; };
export const getDokployVersion = () => { export const getDokployVersion = () => {
// return packageInfo.version; // return packageInfo.version;
}; };