feat: update custom nodes to latest hash

This commit is contained in:
bennykok 2024-02-01 19:42:46 +08:00
parent 68b4d93639
commit 84802f5c4e
3 changed files with 79 additions and 59 deletions

View File

@ -53,9 +53,8 @@ import {
Plus, Plus,
} from "lucide-react"; } from "lucide-react";
import * as React from "react"; import * as React from "react";
import { toast } from "sonner";
import useSWR from "swr"; import useSWR from "swr";
import { z } from "zod"; import { getBranchInfo } from "./getBranchInfo";
export function SnapshotPickerView({ export function SnapshotPickerView({
field, field,
@ -131,7 +130,7 @@ export function SnapshotPickerView({
</DropdownMenuTrigger> </DropdownMenuTrigger>
<DropdownMenuContent> <DropdownMenuContent>
<DropdownMenuItem <DropdownMenuItem
disabled={key.endsWith("comfyui-deploy.git")} disabled={key.endsWith("comfyui-deploy")}
// className="opacity-50" // className="opacity-50"
onClick={() => { onClick={() => {
const newNodeList = { const newNodeList = {
@ -148,6 +147,29 @@ export function SnapshotPickerView({
> >
Delete Delete
</DropdownMenuItem> </DropdownMenuItem>
<DropdownMenuItem
// className="opacity-50"
onClick={async () => {
const newNodeList = {
...field.value.git_custom_nodes,
};
const branchInfo = await getBranchInfo(key);
if (!branchInfo) return;
newNodeList[key].hash = branchInfo?.commit.sha;
const nodeList = newNodeList;
const newValue = {
...field.value,
git_custom_nodes: nodeList,
};
field.onChange(newValue);
}}
>
Update
</DropdownMenuItem>
</DropdownMenuContent> </DropdownMenuContent>
</DropdownMenu> </DropdownMenu>
</Card> </Card>
@ -268,24 +290,6 @@ type CustomNodeList = {
}[]; }[];
}; };
const RepoSchema = z.object({
default_branch: z.string(),
});
const BranchInfoSchema = z.object({
commit: z.object({
sha: z.string(),
}),
});
function extractRepoName(repoUrl: string) {
const url = new URL(repoUrl);
const pathParts = url.pathname.split("/");
const repoName = pathParts[2].replace(".git", "");
const author = pathParts[1];
return `${author}/${repoName}`;
}
function CustomNodesSelector({ function CustomNodesSelector({
field, field,
}: Pick<AutoFormInputComponentProps, "field">) { }: Pick<AutoFormInputComponentProps, "field">) {
@ -362,43 +366,7 @@ function CustomNodesSelector({
delete newNodeList[currentValue]; delete newNodeList[currentValue];
nodeList = newNodeList; nodeList = newNodeList;
} else { } else {
const repoName = extractRepoName(currentValue); const branchInfo = await getBranchInfo(currentValue);
const id = toast.loading(`Fetching repo info...`);
const repo = await fetch(
`https://api.github.com/repos/${repoName}`,
)
.then((x) => x.json())
.then((x) => {
console.log(x);
return x;
})
.then((x) => RepoSchema.parse(x))
.catch((e) => {
console.error(e);
toast.dismiss(id);
toast.error(
`Failed to fetch repo info ${e.message}`,
);
return null;
});
if (!repo) return;
const branch = repo.default_branch;
const branchInfo = await fetch(
`https://api.github.com/repos/${repoName}/branches/${branch}`,
)
.then((x) => x.json())
.then((x) => BranchInfoSchema.parse(x))
.catch((e) => {
console.error(e);
toast.dismiss(id);
toast.error(
`Failed to fetch branch info ${e.message}`,
);
return null;
});
toast.dismiss(id);
if (!branchInfo) return; if (!branchInfo) return;

View File

@ -0,0 +1,52 @@
import { toast } from "sonner";
import { z } from "zod";
const RepoSchema = z.object({
default_branch: z.string(),
});
const BranchInfoSchema = z.object({
commit: z.object({
sha: z.string(),
}),
});
function extractRepoName(repoUrl: string) {
const url = new URL(repoUrl);
const pathParts = url.pathname.split("/");
const repoName = pathParts[2].replace(".git", "");
const author = pathParts[1];
return `${author}/${repoName}`;
}
export async function getBranchInfo(gitUrl: string) {
const repoName = extractRepoName(gitUrl);
const id = toast.loading(`Fetching repo info...`);
const repo = await fetch(`https://api.github.com/repos/${repoName}`)
.then((x) => x.json())
.then((x) => {
console.log(x);
return x;
})
.then((x) => RepoSchema.parse(x))
.catch((e) => {
console.error(e);
toast.dismiss(id);
toast.error(`Failed to fetch repo info ${e.message}`);
return null;
});
if (!repo) return;
const branch = repo.default_branch;
const branchInfo = await fetch(
`https://api.github.com/repos/${repoName}/branches/${branch}`,
)
.then((x) => x.json())
.then((x) => BranchInfoSchema.parse(x))
.catch((e) => {
console.error(e);
toast.dismiss(id);
toast.error(`Failed to fetch branch info ${e.message}`);
return null;
});
toast.dismiss(id);
return branchInfo;
}

View File

@ -16,7 +16,7 @@ export const insertCustomMachineSchema = createInsertSchema(machinesTable, {
schema.snapshot.default({ schema.snapshot.default({
comfyui: "d0165d819afe76bd4e6bdd710eb5f3e571b6a804", comfyui: "d0165d819afe76bd4e6bdd710eb5f3e571b6a804",
git_custom_nodes: { git_custom_nodes: {
"https://github.com/BennyKok/comfyui-deploy.git": { "https://github.com/bennykok/comfyui-deploy": {
hash: "a838cb7ad425e5652c3931fbafdc886b53c48a22", hash: "a838cb7ad425e5652c3931fbafdc886b53c48a22",
disabled: false, disabled: false,
}, },