Compare commits

...

6 Commits

Author SHA1 Message Date
Mauricio Siu
70c261d021 Update packages/server/src/constants/index.ts
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-03-06 11:43:57 -06:00
Mauricio Siu
9ae2ebff46 Bump version from v0.28.3 to v0.28.4 2026-03-06 08:27:12 -06:00
Mauricio Siu
8ce880d108 Merge pull request #3899 from Dokploy/3819-preview-deployments-incorrectly-inherit-www-redirect
fix: skip redirect middleware for preview deployments to prevent wild…
2026-03-05 11:12:12 -06:00
Mauricio Siu
34304526b1 fix: skip redirect middleware for preview deployments to prevent wildcard subdomain inheritance 2026-03-05 11:08:31 -06:00
Mauricio Siu
a16c4c1294 Merge pull request #3898 from Dokploy/3850-zod-validation-on-undefined-default-values
feat: add enableSubmodules and update watchPaths in application schema
2026-03-05 10:49:47 -06:00
Mauricio Siu
d1c4ac20e3 feat: add enableSubmodules and update watchPaths in application schema 2026-03-05 10:48:47 -06:00
4 changed files with 22 additions and 24 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "dokploy", "name": "dokploy",
"version": "v0.28.3", "version": "v0.28.4",
"private": true, "private": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"type": "module", "type": "module",

View File

@@ -4,7 +4,9 @@ import Docker from "dockerode";
export const IS_CLOUD = process.env.IS_CLOUD === "true"; export const IS_CLOUD = process.env.IS_CLOUD === "true";
export const DOCKER_API_VERSION = process.env.DOCKER_API_VERSION; export const DOCKER_API_VERSION = process.env.DOCKER_API_VERSION;
export const DOCKER_HOST = process.env.DOCKER_HOST; export const DOCKER_HOST = process.env.DOCKER_HOST;
export const DOCKER_PORT = process.env.DOCKER_PORT; export const DOCKER_PORT = process.env.DOCKER_PORT
? Number(process.env.DOCKER_PORT)
: undefined;
export const CLEANUP_CRON_JOB = "50 23 * * *"; export const CLEANUP_CRON_JOB = "50 23 * * *";
export const docker = new Docker({ export const docker = new Docker({

View File

@@ -365,12 +365,13 @@ const createSchema = createInsertSchema(applications, {
previewPath: z.string().optional(), previewPath: z.string().optional(),
previewCertificateType: z.enum(["letsencrypt", "none", "custom"]).optional(), previewCertificateType: z.enum(["letsencrypt", "none", "custom"]).optional(),
previewRequireCollaboratorPermissions: z.boolean().optional(), previewRequireCollaboratorPermissions: z.boolean().optional(),
watchPaths: z.array(z.string()).optional(), watchPaths: z.array(z.string()).optional().optional(),
previewLabels: z.array(z.string()).optional(), previewLabels: z.array(z.string()).optional(),
cleanCache: z.boolean().optional(), cleanCache: z.boolean().optional(),
stopGracePeriodSwarm: z.bigint().nullable(), stopGracePeriodSwarm: z.bigint().nullable(),
endpointSpecSwarm: EndpointSpecSwarmSchema.nullable(), endpointSpecSwarm: EndpointSpecSwarmSchema.nullable(),
ulimitsSwarm: UlimitsSwarmSchema.nullable(), ulimitsSwarm: UlimitsSwarmSchema.nullable(),
enableSubmodules: z.boolean().optional(),
}); });
export const apiCreateApplication = createSchema.pick({ export const apiCreateApplication = createSchema.pick({
@@ -433,13 +434,13 @@ export const apiSaveGithubProvider = createSchema
owner: true, owner: true,
buildPath: true, buildPath: true,
githubId: true, githubId: true,
watchPaths: true,
enableSubmodules: true,
}) })
.required() .required()
.extend({ .extend({
triggerType: z.enum(["push", "tag"]).default("push"), triggerType: z.enum(["push", "tag"]).default("push"),
}); })
.required()
.merge(createSchema.pick({ enableSubmodules: true, watchPaths: true }));
export const apiSaveGitlabProvider = createSchema export const apiSaveGitlabProvider = createSchema
.pick({ .pick({
@@ -451,10 +452,9 @@ export const apiSaveGitlabProvider = createSchema
gitlabId: true, gitlabId: true,
gitlabProjectId: true, gitlabProjectId: true,
gitlabPathNamespace: true, gitlabPathNamespace: true,
watchPaths: true,
enableSubmodules: true,
}) })
.required(); .required()
.merge(createSchema.pick({ enableSubmodules: true, watchPaths: true }));
export const apiSaveBitbucketProvider = createSchema export const apiSaveBitbucketProvider = createSchema
.pick({ .pick({
@@ -465,10 +465,9 @@ export const apiSaveBitbucketProvider = createSchema
bitbucketRepositorySlug: true, bitbucketRepositorySlug: true,
bitbucketId: true, bitbucketId: true,
applicationId: true, applicationId: true,
watchPaths: true,
enableSubmodules: true,
}) })
.required(); .required()
.merge(createSchema.pick({ enableSubmodules: true, watchPaths: true }));
export const apiSaveGiteaProvider = createSchema export const apiSaveGiteaProvider = createSchema
.pick({ .pick({
@@ -478,10 +477,9 @@ export const apiSaveGiteaProvider = createSchema
giteaOwner: true, giteaOwner: true,
giteaRepository: true, giteaRepository: true,
giteaId: true, giteaId: true,
watchPaths: true,
enableSubmodules: true,
}) })
.required(); .required()
.merge(createSchema.pick({ enableSubmodules: true, watchPaths: true }));
export const apiSaveDockerProvider = createSchema export const apiSaveDockerProvider = createSchema
.pick({ .pick({
@@ -506,6 +504,7 @@ export const apiSaveGitProvider = createSchema
.merge( .merge(
createSchema.pick({ createSchema.pick({
customGitSSHKeyId: true, customGitSSHKeyId: true,
enableSubmodules: true,
}), }),
); );

View File

@@ -152,16 +152,13 @@ export const createRouterConfig = async (
} }
if ((entryPoint === "websecure" && https) || !https) { if ((entryPoint === "websecure" && https) || !https) {
// redirects // redirects - skip for preview deployments as wildcard subdomains
for (const redirect of redirects) { // should not inherit parent redirect rules (e.g., www-redirect)
let middlewareName = `redirect-${appName}-${redirect.uniqueConfigKey}`; if (domain.domainType !== "preview") {
if (domain.domainType === "preview") { for (const redirect of redirects) {
middlewareName = `redirect-${appName.replace( const middlewareName = `redirect-${appName}-${redirect.uniqueConfigKey}`;
/^preview-(.+)-[^-]+$/, routerConfig.middlewares?.push(middlewareName);
"$1",
)}-${redirect.uniqueConfigKey}`;
} }
routerConfig.middlewares?.push(middlewareName);
} }
// security // security