mirror of
https://github.com/Dokploy/dokploy
synced 2025-06-26 18:27:59 +00:00
refactor: add try catch, add default update data
This commit is contained in:
@@ -52,6 +52,7 @@ import {
|
|||||||
writeConfig,
|
writeConfig,
|
||||||
writeMainConfig,
|
writeMainConfig,
|
||||||
writeTraefikConfigInPath,
|
writeTraefikConfigInPath,
|
||||||
|
DEFAULT_UPDATE_DATA,
|
||||||
} from "@dokploy/server";
|
} from "@dokploy/server";
|
||||||
import { checkGPUStatus, setupGPUSupport } from "@dokploy/server";
|
import { checkGPUStatus, setupGPUSupport } from "@dokploy/server";
|
||||||
import { generateOpenApiDocument } from "@dokploy/trpc-openapi";
|
import { generateOpenApiDocument } from "@dokploy/trpc-openapi";
|
||||||
@@ -345,7 +346,7 @@ export const settingsRouter = createTRPCRouter({
|
|||||||
}),
|
}),
|
||||||
getUpdateData: adminProcedure.mutation(async () => {
|
getUpdateData: adminProcedure.mutation(async () => {
|
||||||
if (IS_CLOUD) {
|
if (IS_CLOUD) {
|
||||||
return { latestVersion: null, updateAvailable: false };
|
return DEFAULT_UPDATE_DATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
return await getUpdateData();
|
return await getUpdateData();
|
||||||
|
|||||||
@@ -7,6 +7,16 @@ import {
|
|||||||
} from "@dokploy/server/utils/process/execAsync";
|
} from "@dokploy/server/utils/process/execAsync";
|
||||||
// import packageInfo from "../../../package.json";
|
// import packageInfo from "../../../package.json";
|
||||||
|
|
||||||
|
export interface IUpdateData {
|
||||||
|
latestVersion: string | null;
|
||||||
|
updateAvailable: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const DEFAULT_UPDATE_DATA: IUpdateData = {
|
||||||
|
latestVersion: null,
|
||||||
|
updateAvailable: false,
|
||||||
|
};
|
||||||
|
|
||||||
/** Returns current Dokploy docker image tag or `latest` by default. */
|
/** Returns current Dokploy docker image tag or `latest` by default. */
|
||||||
export const getDokployImageTag = () => {
|
export const getDokployImageTag = () => {
|
||||||
return process.env.RELEASE_TAG || "latest";
|
return process.env.RELEASE_TAG || "latest";
|
||||||
@@ -30,17 +40,27 @@ export const getServiceImageDigest = async () => {
|
|||||||
const { stdout } = await execAsync(
|
const { stdout } = await execAsync(
|
||||||
"docker service inspect dokploy --format '{{.Spec.TaskTemplate.ContainerSpec.Image}}'",
|
"docker service inspect dokploy --format '{{.Spec.TaskTemplate.ContainerSpec.Image}}'",
|
||||||
);
|
);
|
||||||
|
|
||||||
const currentDigest = stdout.trim().split("@")[1];
|
const currentDigest = stdout.trim().split("@")[1];
|
||||||
|
|
||||||
|
if (!currentDigest) {
|
||||||
|
throw new Error("Could not get current service image digest");
|
||||||
|
}
|
||||||
|
|
||||||
return currentDigest;
|
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. */
|
/** 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<{
|
export const getUpdateData = async (): Promise<IUpdateData> => {
|
||||||
latestVersion: string | null;
|
let currentDigest: string;
|
||||||
updateAvailable: boolean;
|
try {
|
||||||
}> => {
|
currentDigest = await getServiceImageDigest();
|
||||||
const currentDigest = await getServiceImageDigest();
|
} catch {
|
||||||
|
// Docker service might not exist locally
|
||||||
|
// You can run the # Installation command for docker service create mentioned in the below docs to test it locally:
|
||||||
|
// https://docs.dokploy.com/docs/core/manual-installation
|
||||||
|
return DEFAULT_UPDATE_DATA;
|
||||||
|
}
|
||||||
|
|
||||||
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, {
|
||||||
@@ -55,7 +75,7 @@ export const getUpdateData = async (): Promise<{
|
|||||||
const latestTagDigest = results.find((t) => t.name === "latest")?.digest;
|
const latestTagDigest = results.find((t) => t.name === "latest")?.digest;
|
||||||
|
|
||||||
if (!latestTagDigest) {
|
if (!latestTagDigest) {
|
||||||
return { latestVersion: null, updateAvailable: false };
|
return DEFAULT_UPDATE_DATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
const versionedTag = results.find(
|
const versionedTag = results.find(
|
||||||
@@ -63,7 +83,7 @@ export const getUpdateData = async (): Promise<{
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (!versionedTag) {
|
if (!versionedTag) {
|
||||||
return { latestVersion: null, updateAvailable: false };
|
return DEFAULT_UPDATE_DATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
const { name: latestVersion, digest } = versionedTag;
|
const { name: latestVersion, digest } = versionedTag;
|
||||||
|
|||||||
Reference in New Issue
Block a user