mirror of
https://github.com/andwati/dokploy.git
synced 2026-11-14 16:05:18 +00:00
Merge pull request #2767 from aegypius/features/support-soft-serve-webhooks
feat: add support for Soft Serve webhooks
This commit is contained in:
@@ -83,6 +83,14 @@ describe("GitHub Webhook Skip CI", () => {
|
|||||||
{ commits: [{ message: "[skip ci] test" }] },
|
{ commits: [{ message: "[skip ci] test" }] },
|
||||||
),
|
),
|
||||||
).toBe("[skip ci] test");
|
).toBe("[skip ci] test");
|
||||||
|
|
||||||
|
// Soft Serve
|
||||||
|
expect(
|
||||||
|
extractCommitMessage(
|
||||||
|
{ "x-softserve-event": "push" },
|
||||||
|
{ commits: [{ message: "[skip ci] test" }] },
|
||||||
|
),
|
||||||
|
).toBe("[skip ci] test");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should handle missing commit message", () => {
|
it("should handle missing commit message", () => {
|
||||||
@@ -99,6 +107,9 @@ describe("GitHub Webhook Skip CI", () => {
|
|||||||
expect(extractCommitMessage({ "x-gitea-event": "push" }, {})).toBe(
|
expect(extractCommitMessage({ "x-gitea-event": "push" }, {})).toBe(
|
||||||
"NEW COMMIT",
|
"NEW COMMIT",
|
||||||
);
|
);
|
||||||
|
expect(extractCommitMessage({ "x-softserve-event": "push" }, {})).toBe(
|
||||||
|
"NEW COMMIT",
|
||||||
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
import { describe, expect, it } from "vitest";
|
||||||
|
import {
|
||||||
|
extractBranchName,
|
||||||
|
extractCommitMessage,
|
||||||
|
extractHash,
|
||||||
|
getProviderByHeader,
|
||||||
|
} from "@/pages/api/deploy/[refreshToken]";
|
||||||
|
|
||||||
|
describe("Soft Serve Webhook", () => {
|
||||||
|
const mockSoftServeHeaders = {
|
||||||
|
"x-softserve-event": "push",
|
||||||
|
};
|
||||||
|
|
||||||
|
const createMockBody = (message: string, hash: string, branch: string) => ({
|
||||||
|
event: "push",
|
||||||
|
ref: `refs/heads/${branch}`,
|
||||||
|
after: hash,
|
||||||
|
commits: [{ message: message }],
|
||||||
|
});
|
||||||
|
const message: string = "feat: add new feature";
|
||||||
|
const hash: string = "3c91c24ef9560bddc695bce138bf8a7094ec3df5";
|
||||||
|
const branch: string = "feat/add-new";
|
||||||
|
const goodWebhook = createMockBody(message, hash, branch);
|
||||||
|
|
||||||
|
it("should properly extract the provider name", () => {
|
||||||
|
expect(getProviderByHeader(mockSoftServeHeaders)).toBe("soft-serve");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should properly extract the commit message", () => {
|
||||||
|
expect(extractCommitMessage(mockSoftServeHeaders, goodWebhook)).toBe(
|
||||||
|
message,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should properly extract hash", () => {
|
||||||
|
expect(extractHash(mockSoftServeHeaders, goodWebhook)).toBe(hash);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should properly extract branch name", () => {
|
||||||
|
expect(extractBranchName(mockSoftServeHeaders, goodWebhook)).toBe(branch);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should gracefully handle invalid webhook", () => {
|
||||||
|
expect(getProviderByHeader({})).toBeNull();
|
||||||
|
expect(extractCommitMessage(mockSoftServeHeaders, {})).toBe("NEW COMMIT");
|
||||||
|
expect(extractHash(mockSoftServeHeaders, {})).toBe("NEW COMMIT");
|
||||||
|
expect(extractBranchName(mockSoftServeHeaders, {})).toBeNull();
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -152,6 +152,10 @@ export default async function handler(
|
|||||||
normalizedCommits = req.body?.commits?.flatMap(
|
normalizedCommits = req.body?.commits?.flatMap(
|
||||||
(commit: any) => commit.modified,
|
(commit: any) => commit.modified,
|
||||||
);
|
);
|
||||||
|
} else if (provider === "soft-serve") {
|
||||||
|
normalizedCommits = req.body?.commits?.flatMap(
|
||||||
|
(commit: any) => commit.modified,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const shouldDeployPaths = shouldDeploy(
|
const shouldDeployPaths = shouldDeploy(
|
||||||
@@ -439,6 +443,13 @@ export const extractCommitMessage = (headers: any, body: any) => {
|
|||||||
: "NEW COMMIT";
|
: "NEW COMMIT";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Soft Serve
|
||||||
|
if (headers["x-softserve-event"]) {
|
||||||
|
return body.commits && body.commits.length > 0
|
||||||
|
? body.commits[0].message
|
||||||
|
: "NEW COMMIT";
|
||||||
|
}
|
||||||
|
|
||||||
if (headers["user-agent"]?.includes("Go-http-client")) {
|
if (headers["user-agent"]?.includes("Go-http-client")) {
|
||||||
if (body.push_data && body.repository) {
|
if (body.push_data && body.repository) {
|
||||||
return `DockerHub image pushed: ${body.repository.repo_name}:${body.push_data.tag} by ${body.push_data.pusher}`;
|
return `DockerHub image pushed: ${body.repository.repo_name}:${body.push_data.tag} by ${body.push_data.pusher}`;
|
||||||
@@ -476,6 +487,11 @@ export const extractHash = (headers: any, body: any) => {
|
|||||||
return body.after || "NEW COMMIT";
|
return body.after || "NEW COMMIT";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Soft Serve
|
||||||
|
if (headers["x-softserve-event"]) {
|
||||||
|
return body.after || "NEW COMMIT";
|
||||||
|
}
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -484,7 +500,10 @@ export const extractBranchName = (headers: any, body: any) => {
|
|||||||
return body?.ref?.replace("refs/heads/", "");
|
return body?.ref?.replace("refs/heads/", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (headers["x-gitlab-event"]) {
|
if (
|
||||||
|
headers["x-gitlab-event"] ||
|
||||||
|
headers["x-softserve-event"]?.includes("push")
|
||||||
|
) {
|
||||||
return body?.ref ? body?.ref.replace("refs/heads/", "") : null;
|
return body?.ref ? body?.ref.replace("refs/heads/", "") : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -512,6 +531,10 @@ export const getProviderByHeader = (headers: any) => {
|
|||||||
return "bitbucket";
|
return "bitbucket";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (headers["x-softserve-event"]) {
|
||||||
|
return "soft-serve";
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user