mirror of
https://github.com/Dokploy/dokploy
synced 2025-06-26 18:27:59 +00:00
fix: pull latest release in case of no image when checking update
This commit is contained in:
@@ -10,11 +10,21 @@ export const getDokployImageTag = () => {
|
|||||||
return process.env.RELEASE_TAG || "latest";
|
return process.env.RELEASE_TAG || "latest";
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Returns latest version number and information whether server update is available by comparing current image's digest against digest for provided image tag via Docker hub API. */
|
export const getDokployImage = () => {
|
||||||
export const getUpdateData = async (): Promise<{
|
return `dokploy/dokploy:${getDokployImageTag()}`;
|
||||||
latestVersion: string | null;
|
};
|
||||||
updateAvailable: boolean;
|
|
||||||
}> => {
|
export const pullLatestRelease = async () => {
|
||||||
|
const stream = await docker.pull(getDokployImage());
|
||||||
|
await new Promise((resolve, reject) => {
|
||||||
|
docker.modem.followProgress(stream, (err, res) =>
|
||||||
|
err ? reject(err) : resolve(res),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Returns current docker image digest */
|
||||||
|
export const getCurrentImageDigest = async () => {
|
||||||
const commandResult = await spawnAsync("docker", [
|
const commandResult = await spawnAsync("docker", [
|
||||||
"inspect",
|
"inspect",
|
||||||
"--format={{index .RepoDigests 0}}",
|
"--format={{index .RepoDigests 0}}",
|
||||||
@@ -23,6 +33,27 @@ export const getUpdateData = async (): Promise<{
|
|||||||
|
|
||||||
const currentDigest = commandResult.toString().trim().split("@")[1];
|
const currentDigest = commandResult.toString().trim().split("@")[1];
|
||||||
|
|
||||||
|
return currentDigest;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Returns latest version number and information whether server update is available by comparing current image's digest against digest for provided image tag via Docker hub API. */
|
||||||
|
export const getUpdateData = async (): Promise<{
|
||||||
|
latestVersion: string | null;
|
||||||
|
updateAvailable: boolean;
|
||||||
|
}> => {
|
||||||
|
let currentDigest: string | undefined;
|
||||||
|
try {
|
||||||
|
currentDigest = await getCurrentImageDigest();
|
||||||
|
} catch {
|
||||||
|
// In case image doesn't exist yet, pull latest release
|
||||||
|
await pullLatestRelease();
|
||||||
|
currentDigest = await getCurrentImageDigest();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!currentDigest) {
|
||||||
|
throw new Error("Could not get current image digest");
|
||||||
|
}
|
||||||
|
|
||||||
const url = "https://hub.docker.com/v2/repositories/dokploy/dokploy/tags";
|
const url = "https://hub.docker.com/v2/repositories/dokploy/dokploy/tags";
|
||||||
const response = await fetch(url, {
|
const response = await fetch(url, {
|
||||||
method: "GET",
|
method: "GET",
|
||||||
@@ -54,19 +85,6 @@ export const getUpdateData = async (): Promise<{
|
|||||||
return { latestVersion, updateAvailable };
|
return { latestVersion, updateAvailable };
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getDokployImage = () => {
|
|
||||||
return `dokploy/dokploy:${getDokployImageTag()}`;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const pullLatestRelease = async () => {
|
|
||||||
const stream = await docker.pull(getDokployImage());
|
|
||||||
await new Promise((resolve, reject) => {
|
|
||||||
docker.modem.followProgress(stream, (err, res) =>
|
|
||||||
err ? reject(err) : resolve(res),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const getDokployVersion = () => {
|
export const getDokployVersion = () => {
|
||||||
// return packageInfo.version;
|
// return packageInfo.version;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user