mirror of
https://github.com/Dokploy/dokploy
synced 2025-06-26 18:27:59 +00:00
Merge pull request #960 from Dokploy/fix/add-latest-cases
refactor: update digest
This commit is contained in:
@@ -49,12 +49,12 @@ interface AdditionalPort {
|
||||
/**
|
||||
* ManageTraefikPorts is a component that provides a modal interface for managing
|
||||
* additional port mappings for Traefik in a Docker Swarm environment.
|
||||
*
|
||||
*
|
||||
* Features:
|
||||
* - Add, remove, and edit port mappings
|
||||
* - Configure target port, published port, and publish mode for each mapping
|
||||
* - Persist port configurations through API calls
|
||||
*
|
||||
*
|
||||
* @component
|
||||
* @example
|
||||
* ```tsx
|
||||
@@ -121,7 +121,10 @@ export const ManageTraefikPorts = ({ children, serverId }: Props) => {
|
||||
</DialogHeader>
|
||||
<div className="grid gap-4 py-4">
|
||||
{additionalPorts.map((port, index) => (
|
||||
<div key={index} className="grid grid-cols-[120px_120px_minmax(120px,1fr)_80px] gap-4 items-end">
|
||||
<div
|
||||
key={index}
|
||||
className="grid grid-cols-[120px_120px_minmax(120px,1fr)_80px] gap-4 items-end"
|
||||
>
|
||||
<div className="space-y-2">
|
||||
<Label htmlFor={`target-port-${index}`}>
|
||||
{t("settings.server.webServer.traefik.targetPort")}
|
||||
@@ -132,7 +135,9 @@ export const ManageTraefikPorts = ({ children, serverId }: Props) => {
|
||||
value={port.targetPort}
|
||||
onChange={(e) => {
|
||||
const newPorts = [...additionalPorts];
|
||||
newPorts[index].targetPort = Number.parseInt(
|
||||
|
||||
// @ts-ignore
|
||||
newPorts?.[index].targetPort = Number.parseInt(
|
||||
e.target.value,
|
||||
);
|
||||
setAdditionalPorts(newPorts);
|
||||
@@ -150,7 +155,8 @@ export const ManageTraefikPorts = ({ children, serverId }: Props) => {
|
||||
value={port.publishedPort}
|
||||
onChange={(e) => {
|
||||
const newPorts = [...additionalPorts];
|
||||
newPorts[index].publishedPort = Number.parseInt(
|
||||
// @ts-ignore
|
||||
newPorts?.[index].publishedPort = Number.parseInt(
|
||||
e.target.value,
|
||||
);
|
||||
setAdditionalPorts(newPorts);
|
||||
@@ -166,11 +172,15 @@ export const ManageTraefikPorts = ({ children, serverId }: Props) => {
|
||||
value={port.publishMode}
|
||||
onValueChange={(value: "ingress" | "host") => {
|
||||
const newPorts = [...additionalPorts];
|
||||
newPorts[index].publishMode = value;
|
||||
// @ts-ignore
|
||||
newPorts?.[index].publishMode = value;
|
||||
setAdditionalPorts(newPorts);
|
||||
}}
|
||||
>
|
||||
<SelectTrigger id={`publish-mode-${index}`} className="w-full">
|
||||
<SelectTrigger
|
||||
id={`publish-mode-${index}`}
|
||||
className="w-full"
|
||||
>
|
||||
<SelectValue />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
|
||||
@@ -65,7 +65,6 @@ export const getUpdateData = async (): Promise<IUpdateData> => {
|
||||
const baseUrl = "https://hub.docker.com/v2/repositories/dokploy/dokploy/tags";
|
||||
let url: string | null = `${baseUrl}?page_size=100`;
|
||||
let allResults: { digest: string; name: string }[] = [];
|
||||
|
||||
while (url) {
|
||||
const response = await fetch(url, {
|
||||
method: "GET",
|
||||
@@ -81,30 +80,29 @@ export const getUpdateData = async (): Promise<IUpdateData> => {
|
||||
url = data?.next;
|
||||
}
|
||||
|
||||
const latestTagDigest = allResults.find(
|
||||
(t) => t.name === getDokployImageTag(),
|
||||
)?.digest;
|
||||
const imageTag = getDokployImageTag();
|
||||
const searchedDigest = allResults.find((t) => t.name === imageTag)?.digest;
|
||||
|
||||
if (!latestTagDigest) {
|
||||
if (!searchedDigest) {
|
||||
return DEFAULT_UPDATE_DATA;
|
||||
}
|
||||
|
||||
const versionedTag = allResults.find(
|
||||
(t) => t.digest === latestTagDigest && t.name.startsWith("v"),
|
||||
);
|
||||
if (imageTag === "latest") {
|
||||
const versionedTag = allResults.find(
|
||||
(t) => t.digest === searchedDigest && t.name.startsWith("v"),
|
||||
);
|
||||
|
||||
if (!versionedTag) {
|
||||
return DEFAULT_UPDATE_DATA;
|
||||
if (!versionedTag) {
|
||||
return DEFAULT_UPDATE_DATA;
|
||||
}
|
||||
|
||||
const { name: latestVersion, digest } = versionedTag;
|
||||
const updateAvailable = digest !== currentDigest;
|
||||
|
||||
return { latestVersion, updateAvailable };
|
||||
}
|
||||
|
||||
const { name: latestVersion, digest } = versionedTag;
|
||||
const updateAvailable = digest !== currentDigest;
|
||||
|
||||
return { latestVersion, updateAvailable };
|
||||
};
|
||||
|
||||
export const getDokployVersion = () => {
|
||||
// return packageInfo.version;
|
||||
const updateAvailable = searchedDigest !== currentDigest;
|
||||
return { latestVersion: imageTag, updateAvailable };
|
||||
};
|
||||
|
||||
interface TreeDataItem {
|
||||
|
||||
Reference in New Issue
Block a user