mirror of
https://github.com/Dokploy/dokploy
synced 2025-06-26 18:27:59 +00:00
refactor: add image tag helper, refactor update check logic, remove try/catch
This commit is contained in:
@@ -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;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user