Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
e645b31
change gitea permissions to new instances (#1832)
ShadowJonathan Aug 26, 2025
b4a3cbd
feat(notifications): add lark webhook
ischanx Sep 23, 2025
cd06b55
[autofix.ci] apply automated fixes
autofix-ci[bot] Sep 23, 2025
c451925
Pass DOKPLOY_DEPLOY_URL as build time argument so it can be used duri…
kirill-dev-pro Oct 1, 2025
571e97f
feat(docker): Build-time Secrets
iksaku Oct 2, 2025
2cc9855
fix(ci): Add missing buildSecrets declarations on tests
iksaku Oct 2, 2025
9b81d15
feat(ai): send Gemini API key as query param when listing models pac…
Harikrishnan1367709 Oct 9, 2025
8de5001
[autofix.ci] apply automated fixes
autofix-ci[bot] Oct 9, 2025
0c37d7b
fix(notifications): prevent blank email field on dialog reopen
vytenisstaugaitis Oct 9, 2025
ca6a93f
feat: Bump default MongoDB docker image version to 7
ajnart Oct 9, 2025
fd5fa32
fix: load remote middleware on app delete if a serverId is provided
SimonLoir Oct 11, 2025
7988de6
[autofix.ci] apply automated fixes
autofix-ci[bot] Oct 11, 2025
883e9f0
fix: profile picture fit
rodsnts Oct 11, 2025
8537b6f
fix: use actual memory usage excluding cache/buffers in monitoring
CorentinMre Oct 12, 2025
b200ed6
fix: update CPU usage calculation to use a one-second interval
CorentinMre Oct 12, 2025
d0fd8e7
fix: correct typos
dennisimoo Oct 13, 2025
b6e6705
feat(ui): move environment variables icon outside dropdown - Relocat…
Harikrishnan1367709 Oct 14, 2025
68be6f4
[autofix.ci] apply automated fixes
autofix-ci[bot] Oct 14, 2025
78a9fe9
feat: add a button to copy backup codes to clipboard
imran-vz Oct 14, 2025
b3cec53
fix: resources tooltips triggers form submission
Jupi2051 Oct 15, 2025
7a77755
Merge pull request #2799 from ajnart/patch-1
Siumauricio Oct 15, 2025
3aaef9c
Merge pull request #2807 from SimonLoir/fix-middleware-emptied-on-apl…
Siumauricio Oct 16, 2025
557923c
Merge pull request #2796 from vytenisstaugaitis/canary
Siumauricio Oct 16, 2025
5fd3984
[autofix.ci] apply automated fixes
autofix-ci[bot] Oct 16, 2025
8b82832
Merge pull request #2824 from Jupi2051/fix-tooltips-submitting-form
Siumauricio Oct 16, 2025
a99ac01
Merge pull request #2812 from dennisimoo/fix-typos
Siumauricio Oct 16, 2025
2b19632
Merge pull request #2809 from rodsnts/fix-profile-pic-fit
Siumauricio Oct 16, 2025
ceb4cc4
feat: add LambdaTest sponsorship to README
Siumauricio Oct 16, 2025
901013c
fix: ensure button type is correctly set when not explicitly defined
imran-vz Oct 16, 2025
8338b27
feat: add functionality to download
imran-vz Oct 16, 2025
819bb6c
fix(schedules): track loading state per scheduler
Harikrishnan1367709 Oct 16, 2025
6d52ab1
[autofix.ci] apply automated fixes
autofix-ci[bot] Oct 16, 2025
342b1d6
fix(schedules): prevent action buttons overflow for long commands
Harikrishnan1367709 Oct 16, 2025
9925470
[autofix.ci] apply automated fixes
autofix-ci[bot] Oct 16, 2025
d858acb
chore: add comment to ignore lint warning for img element in 2FA QR code
imran-vz Oct 16, 2025
7fe59ba
fix(volume-backups): track loading state per backup
Harikrishnan1367709 Oct 17, 2025
8510bcb
[autofix.ci] apply automated fixes
autofix-ci[bot] Oct 17, 2025
63f3bb8
refactor: Add a basic template to backup codes copy and download
imran-vz Oct 17, 2025
71152b6
feature: enhance 2FA management UI and logic in profile settings
imran-vz Oct 17, 2025
7817a3c
chore: rename disable-2fa to configure-2fa
imran-vz Oct 17, 2025
622bb3f
chore: simplify 2FA component rendering in profile form
imran-vz Oct 17, 2025
0077954
feat: add Ctrl+S/CMD+S shortcuts to .env file editing
Harikrishnan1367709 Oct 21, 2025
b662629
[autofix.ci] apply automated fixes
autofix-ci[bot] Oct 21, 2025
be80148
fix(templates): add trim on payload in value processor
SimonLoir Oct 21, 2025
036eaa3
[autofix.ci] apply automated fixes
autofix-ci[bot] Oct 21, 2025
7bddc6f
fix(templates): use trimStart and trimEnd instead of generic trim
SimonLoir Oct 22, 2025
74e17b4
fix(ui): prevent error message overflow in S3 Destinations modal
Harikrishnan1367709 Oct 24, 2025
166b58b
[autofix.ci] apply automated fixes
autofix-ci[bot] Oct 24, 2025
ba4626c
feat: add copy to clipboard functionality for deployment and runtime …
hl9020 Oct 24, 2025
6c3f728
Merge pull request #2886 from Harikrishnan1367709/S3-Destinations-Err…
Siumauricio Oct 25, 2025
24df8e7
Merge pull request #2834 from Harikrishnan1367709/Delete-Icon-Overflo…
Siumauricio Oct 25, 2025
ba7a325
test(helpers): add tests for JWT payload handling with newlines and w…
Siumauricio Oct 25, 2025
6b547db
Merge pull request #2868 from SimonLoir/fix-jwt-generator
Siumauricio Oct 25, 2025
962d405
Merge pull request #2468 from ShadowJonathan/fix-gitea-and-forgejo
Siumauricio Oct 25, 2025
66e0bcc
Merge branch 'canary' into copy-2fa-backup-codes
Siumauricio Oct 25, 2025
0b1e79a
Merge pull request #2821 from imran-vz/copy-2fa-backup-codes
Siumauricio Oct 25, 2025
b343347
refactor: remove deprecated SQL files and journal entries for left sm…
Siumauricio Oct 25, 2025
babc1c0
Merge branch 'canary' into feat/docker-build-secrets
Siumauricio Oct 25, 2025
71c01ff
feat: add previewBuildSecrets and buildSecrets columns to application…
Siumauricio Oct 25, 2025
88a8c06
[autofix.ci] apply automated fixes
autofix-ci[bot] Oct 25, 2025
05b2019
fix(docker): escape single quotes in secret values for Docker command
Siumauricio Oct 25, 2025
9f99185
Merge pull request #2745 from iksaku/feat/docker-build-secrets
Siumauricio Oct 25, 2025
32c302e
Merge branch 'canary' into Move-environment-variables-icon-outside-dr…
Siumauricio Oct 25, 2025
ea9c76c
refactor: replace SquareTerminal icon with a Button component in Envi…
Siumauricio Oct 25, 2025
d83783c
Merge pull request #2820 from Harikrishnan1367709/Move-environment-va…
Siumauricio Oct 25, 2025
2723703
Merge branch 'canary' into All-scheduled-tasks-show-loading-state-whe…
Siumauricio Oct 25, 2025
68be333
Merge pull request #2831 from Harikrishnan1367709/All-scheduled-tasks…
Siumauricio Oct 25, 2025
daa8184
fix(volumes): update FormItem class for better layout and adjust inpu…
Siumauricio Oct 25, 2025
60d1bc4
Merge pull request #2898 from Dokploy/2896-file-mount-box-width-expan…
Siumauricio Oct 25, 2025
997dd78
Merge pull request #2862 from Harikrishnan1367709/Add-Ctrl+S/CMD+S-ke…
Siumauricio Oct 25, 2025
6fb3584
Merge pull request #2810 from CorentinMre/fix/memory-monitoring-actua…
Siumauricio Oct 25, 2025
5100327
Merge branch 'canary' into feature/copy-logs-to-clipboard
Siumauricio Oct 25, 2025
fd2775e
feat(copy-logs): simplify clipboard copy functionality using copy-to-…
Siumauricio Oct 25, 2025
d1130c4
Merge pull request #2893 from hl9020/feature/copy-logs-to-clipboard
Siumauricio Oct 25, 2025
5a50d4b
chore: remove lark webhook SQL files and related journal entries
Siumauricio Oct 25, 2025
f4748bd
Merge branch 'canary' into feat-lark-webhook
Siumauricio Oct 25, 2025
d7e0413
feat(notification): add 'lark' notification type and create associate…
Siumauricio Oct 25, 2025
fd94a14
Merge pull request #2674 from ischanx/feat-lark-webhook
Siumauricio Oct 25, 2025
3dad8b4
Merge branch 'canary' into feat/recreate-2fa-backup-codes
Siumauricio Oct 25, 2025
a5eeb74
feat(2fa): add functionality to download and copy backup codes to cli…
Siumauricio Oct 25, 2025
75a6682
Merge pull request #2840 from imran-vz/feat/recreate-2fa-backup-codes
Siumauricio Oct 25, 2025
a65262b
Merge branch 'canary' into Loading-State-Applied-Globally-for-All-Vol…
Siumauricio Oct 25, 2025
6a4ef11
fix(volume-backups): adjust layout for volume backups display and rei…
Siumauricio Oct 25, 2025
0ff0695
refactor(volume-backups): rename backupServerId to serverId for clari…
Siumauricio Oct 25, 2025
b3c6645
Merge pull request #2837 from Harikrishnan1367709/Loading-State-Appli…
Siumauricio Oct 25, 2025
8c0db75
Merge pull request #2795 from Harikrishnan1367709/Support-query-param…
Siumauricio Oct 25, 2025
f34a65c
Merge branch 'canary' into pass-dokploy-preview-url-at-build-time
Siumauricio Oct 25, 2025
f6ff90e
fix(application): correct log path variable usage and update label sy…
Siumauricio Oct 25, 2025
e5aeff6
fix(application): update deployment comment syntax to use template li…
Siumauricio Oct 25, 2025
14e154b
fix(application): use template literals for dynamic content in deploy…
Siumauricio Oct 25, 2025
a527baf
Merge pull request #2740 from kirill-dev-pro/pass-dokploy-preview-url…
Siumauricio Oct 25, 2025
011792e
fix(api): update Bitbucket API URL construction to use a unified user…
Siumauricio Oct 26, 2025
25a6a5b
Merge pull request #2899 from Dokploy/2793-watch-paths-dont-work-with…
Siumauricio Oct 26, 2025
102a7a0
fix(compose): update environment file path handling to support raw so…
Siumauricio Oct 26, 2025
07368ff
fix(compose): add default compose path for raw source type in file ed…
Siumauricio Oct 26, 2025
d4f574a
Merge pull request #2900 from Dokploy/2777-bug-report-environment-var…
Siumauricio Oct 26, 2025
a0868ad
chore(package): bump version to v0.25.6
Siumauricio Oct 26, 2025
2cda982
feat(tracking): integrate HubSpot tracking functionality and reintrod…
Siumauricio Oct 26, 2025
dadef00
Merge pull request #2902 from Dokploy/feat/add-cloud-tracking
Siumauricio Oct 26, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,10 @@ For detailed documentation, visit [docs.dokploy.com](https://docs.dokploy.com).
<div>
<a href="https://www.hostinger.com/vps-hosting?ref=dokploy"><img src=".github/sponsors/hostinger.jpg" alt="Hostinger" width="300"/></a>
<a href="https://www.lxaer.com/?ref=dokploy"><img src=".github/sponsors/lxaer.png" alt="LX Aer" width="100"/></a>
<a href="https://www.lambdatest.com/?utm_source=dokploy&utm_medium=sponsor" target="_blank">
<img src="https://www.lambdatest.com/blue-logo.png" width="450" height="100" />
</a>

</div>

<!-- Premium Supporters πŸ₯‡ -->
Expand Down
2 changes: 2 additions & 0 deletions apps/dokploy/__test__/drop/drop.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ const baseApp: ApplicationNested = {
dockerBuildStage: "",
isPreviewDeploymentsActive: false,
previewBuildArgs: null,
previewBuildSecrets: null,
previewCertificateType: "none",
previewCustomCertResolver: null,
previewEnv: null,
Expand All @@ -73,6 +74,7 @@ const baseApp: ApplicationNested = {
},
},
buildArgs: null,
buildSecrets: null,
buildPath: "/",
gitlabPathNamespace: "",
buildType: "nixpacks",
Expand Down
53 changes: 53 additions & 0 deletions apps/dokploy/__test__/templates/helpers.template.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -228,5 +228,58 @@ describe("helpers functions", () => {
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3MzU2ODk2MDAsImV4cCI6MTczNTY5MzIwMCwiaXNzIjoidGVzdC1pc3N1ZXIiLCJjdXN0b21wcm9wIjoiY3VzdG9tdmFsdWUifQ.m42U7PZSUSCf7gBOJrxJir0rQmyPq4rA59Dydr_QahI",
);
});

it("should handle JWT payload with newlines and whitespace by trimming them", () => {
const iat = Math.floor(new Date("2025-01-01T00:00:00Z").getTime() / 1000);
const expiry = iat + 3600;
const payloadWithNewlines = `{
"role": "anon",
"iss": "supabase",
"exp": ${expiry}
}
`;
const jwt = processValue(
"${jwt:secret:payload}",
{
secret: "mysecret",
payload: payloadWithNewlines,
},
mockSchema,
);
expect(jwt).toMatch(jwtMatchExp);
const parts = jwt.split(".") as JWTParts;
jwtCheckHeader(parts[0]);
const decodedPayload = jwtBase64Decode(parts[1]);
expect(decodedPayload).toHaveProperty("role");
expect(decodedPayload.role).toEqual("anon");
expect(decodedPayload).toHaveProperty("iss");
expect(decodedPayload.iss).toEqual("supabase");
expect(decodedPayload).toHaveProperty("exp");
expect(decodedPayload.exp).toEqual(expiry);
});

it("should handle JWT payload with leading and trailing whitespace", () => {
const iat = Math.floor(new Date("2025-01-01T00:00:00Z").getTime() / 1000);
const expiry = iat + 3600;
const payloadWithWhitespace = ` {"role": "service_role", "iss": "supabase", "exp": ${expiry}} `;
const jwt = processValue(
"${jwt:secret:payload}",
{
secret: "mysecret",
payload: payloadWithWhitespace,
},
mockSchema,
);
expect(jwt).toMatch(jwtMatchExp);
const parts = jwt.split(".") as JWTParts;
jwtCheckHeader(parts[0]);
const decodedPayload = jwtBase64Decode(parts[1]);
expect(decodedPayload).toHaveProperty("role");
expect(decodedPayload.role).toEqual("service_role");
expect(decodedPayload).toHaveProperty("iss");
expect(decodedPayload.iss).toEqual("supabase");
expect(decodedPayload).toHaveProperty("exp");
expect(decodedPayload.exp).toEqual(expiry);
});
});
});
2 changes: 2 additions & 0 deletions apps/dokploy/__test__/traefik/traefik.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,10 @@ const baseApp: ApplicationNested = {
registryUrl: "",
watchPaths: [],
buildArgs: null,
buildSecrets: null,
isPreviewDeploymentsActive: false,
previewBuildArgs: null,
previewBuildSecrets: null,
triggerType: "push",
previewCertificateType: "none",
previewEnv: null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,10 @@ export const ShowResources = ({ id, type }: Props) => {
render={({ field }) => {
return (
<FormItem>
<div className="flex items-center gap-2">
<div
className="flex items-center gap-2"
onClick={(e) => e.preventDefault()}
>
<FormLabel>Memory Limit</FormLabel>
<TooltipProvider>
<Tooltip delayDuration={0}>
Expand Down Expand Up @@ -182,7 +185,10 @@ export const ShowResources = ({ id, type }: Props) => {
name="memoryReservation"
render={({ field }) => (
<FormItem>
<div className="flex items-center gap-2">
<div
className="flex items-center gap-2"
onClick={(e) => e.preventDefault()}
>
<FormLabel>Memory Reservation</FormLabel>
<TooltipProvider>
<Tooltip delayDuration={0}>
Expand Down Expand Up @@ -215,7 +221,10 @@ export const ShowResources = ({ id, type }: Props) => {
render={({ field }) => {
return (
<FormItem>
<div className="flex items-center gap-2">
<div
className="flex items-center gap-2"
onClick={(e) => e.preventDefault()}
>
<FormLabel>CPU Limit</FormLabel>
<TooltipProvider>
<Tooltip delayDuration={0}>
Expand Down Expand Up @@ -249,7 +258,10 @@ export const ShowResources = ({ id, type }: Props) => {
render={({ field }) => {
return (
<FormItem>
<div className="flex items-center gap-2">
<div
className="flex items-center gap-2"
onClick={(e) => e.preventDefault()}
>
<FormLabel>CPU Reservation</FormLabel>
<TooltipProvider>
<Tooltip delayDuration={0}>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,7 @@ export const AddVolumes = ({
control={form.control}
name="content"
render={({ field }) => (
<FormItem>
<FormItem className="max-w-full max-w-[45rem]">
<FormLabel>Content</FormLabel>
<FormControl>
<FormControl>
Expand All @@ -327,7 +327,7 @@ export const AddVolumes = ({
placeholder={`NODE_ENV=production
PORT=3000
`}
className="h-96 font-mono"
className="h-96 font-mono "
{...field}
/>
</FormControl>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { Loader2 } from "lucide-react";
import copy from "copy-to-clipboard";
import { Check, Copy, Loader2 } from "lucide-react";
import { useEffect, useRef, useState } from "react";
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import { Checkbox } from "@/components/ui/checkbox";
import {
Dialog,
Expand Down Expand Up @@ -29,9 +31,10 @@ export const ShowDeployment = ({
const [data, setData] = useState("");
const [showExtraLogs, setShowExtraLogs] = useState(false);
const [filteredLogs, setFilteredLogs] = useState<LogLine[]>([]);
const wsRef = useRef<WebSocket | null>(null); // Ref to hold WebSocket instance
const wsRef = useRef<WebSocket | null>(null);
const [autoScroll, setAutoScroll] = useState(true);
const scrollRef = useRef<HTMLDivElement>(null);
const [copied, setCopied] = useState(false);

const scrollToBottom = () => {
if (autoScroll && scrollRef.current) {
Expand Down Expand Up @@ -106,6 +109,20 @@ export const ShowDeployment = ({
}
}, [filteredLogs, autoScroll]);

const handleCopy = () => {
const logContent = filteredLogs
.map(({ timestamp, message }: LogLine) =>
`${timestamp?.toISOString() || ""} ${message}`.trim(),
)
.join("\n");

const success = copy(logContent);
if (success) {
setCopied(true);
setTimeout(() => setCopied(false), 2000);
}
};

const optionalErrors = parseLogs(errorMessage || "");

return (
Expand All @@ -128,13 +145,27 @@ export const ShowDeployment = ({
<DialogHeader>
<DialogTitle>Deployment</DialogTitle>
<DialogDescription className="flex items-center gap-2">
<span>
<span className="flex items-center gap-2">
See all the details of this deployment |{" "}
<Badge variant="blank" className="text-xs">
{filteredLogs.length} lines
</Badge>
</span>

<Button
variant="outline"
size="sm"
className="h-7"
onClick={handleCopy}
disabled={filteredLogs.length === 0}
>
{copied ? (
<Check className="h-3.5 w-3.5" />
) : (
<Copy className="h-3.5 w-3.5" />
)}
</Button>

{serverId && (
<div className="flex items-center space-x-2">
<Checkbox
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,21 @@ export const ShowEnvironment = ({ id, type }: Props) => {
});
};

// Add keyboard shortcut for Ctrl+S/Cmd+S
useEffect(() => {
const handleKeyDown = (e: KeyboardEvent) => {
if ((e.ctrlKey || e.metaKey) && e.key === "s" && !isLoading) {
e.preventDefault();
form.handleSubmit(onSubmit)();
}
};

document.addEventListener("keydown", handleKeyDown);
return () => {
document.removeEventListener("keydown", handleKeyDown);
};
}, [form, onSubmit, isLoading]);

return (
<div className="flex w-full flex-col gap-5 ">
<Card className="bg-background">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { api } from "@/utils/api";
const addEnvironmentSchema = z.object({
env: z.string(),
buildArgs: z.string(),
buildSecrets: z.string(),
});

type EnvironmentSchema = z.infer<typeof addEnvironmentSchema>;
Expand All @@ -37,22 +38,26 @@ export const ShowEnvironment = ({ applicationId }: Props) => {
defaultValues: {
env: "",
buildArgs: "",
buildSecrets: "",
},
resolver: zodResolver(addEnvironmentSchema),
});

// Watch form values
const currentEnv = form.watch("env");
const currentBuildArgs = form.watch("buildArgs");
const currentBuildSecrets = form.watch("buildSecrets");
const hasChanges =
currentEnv !== (data?.env || "") ||
currentBuildArgs !== (data?.buildArgs || "");
currentBuildArgs !== (data?.buildArgs || "") ||
currentBuildSecrets !== (data?.buildSecrets || "");

useEffect(() => {
if (data) {
form.reset({
env: data.env || "",
buildArgs: data.buildArgs || "",
buildSecrets: data.buildSecrets || "",
});
}
}, [data, form]);
Expand All @@ -61,6 +66,7 @@ export const ShowEnvironment = ({ applicationId }: Props) => {
mutateAsync({
env: formData.env,
buildArgs: formData.buildArgs,
buildSecrets: formData.buildSecrets,
applicationId,
})
.then(async () => {
Expand All @@ -76,9 +82,25 @@ export const ShowEnvironment = ({ applicationId }: Props) => {
form.reset({
env: data?.env || "",
buildArgs: data?.buildArgs || "",
buildSecrets: data?.buildSecrets || "",
});
};

// Add keyboard shortcut for Ctrl+S/Cmd+S
useEffect(() => {
const handleKeyDown = (e: KeyboardEvent) => {
if ((e.ctrlKey || e.metaKey) && e.key === "s" && !isLoading) {
e.preventDefault();
form.handleSubmit(onSubmit)();
}
};

document.addEventListener("keydown", handleKeyDown);
return () => {
document.removeEventListener("keydown", handleKeyDown);
};
}, [form, onSubmit, isLoading]);

return (
<Card className="bg-background px-6 pb-6">
<Form {...form}>
Expand All @@ -104,13 +126,36 @@ export const ShowEnvironment = ({ applicationId }: Props) => {
{data?.buildType === "dockerfile" && (
<Secrets
name="buildArgs"
title="Build-time Variables"
title="Build-time Arguments"
description={
<span>
Arguments are available only at build-time. See
documentation&nbsp;
<a
className="text-primary"
href="https://docs.docker.com/build/building/variables/"
target="_blank"
rel="noopener noreferrer"
>
here
</a>
.
</span>
}
placeholder="NPM_TOKEN=xyz"
/>
)}
{data?.buildType === "dockerfile" && (
<Secrets
name="buildSecrets"
title="Build-time Secrets"
description={
<span>
Available only at build-time. See documentation&nbsp;
Secrets are specially designed for sensitive information and
are only available at build-time. See documentation&nbsp;
<a
className="text-primary"
href="https://docs.docker.com/build/guide/build-args/"
href="https://docs.docker.com/build/building/secrets/"
target="_blank"
rel="noopener noreferrer"
>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ export const SaveBitbucketProvider = ({ applicationId }: Props) => {
enableSubmodules: data.enableSubmodules || false,
})
.then(async () => {
toast.success("Service Provided Saved");
toast.success("Service Provider Saved");
await refetch();
})
.catch(() => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ export const SaveGithubProvider = ({ applicationId }: Props) => {
enableSubmodules: data.enableSubmodules,
})
.then(async () => {
toast.success("Service Provided Saved");
toast.success("Service Provider Saved");
await refetch();
})
.catch(() => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ export const SaveGitlabProvider = ({ applicationId }: Props) => {
enableSubmodules: data.enableSubmodules,
})
.then(async () => {
toast.success("Service Provided Saved");
toast.success("Service Provider Saved");
await refetch();
})
.catch(() => {
Expand Down
Loading