Conversation
| export function matchesTagPattern(tag: string, pattern: string): boolean { | ||
| const parts = pattern.split("*"); | ||
| const prefix = parts[0] ?? ""; | ||
| if (parts.length === 1) return tag === prefix; | ||
| if (!tag.startsWith(prefix)) return false; | ||
|
|
||
| let offset = prefix.length; | ||
| for (const part of parts.slice(1, -1)) { | ||
| const index = tag.indexOf(part, offset); | ||
| if (index === -1) return false; | ||
| offset = index + part.length; | ||
| } | ||
| const suffix = parts[parts.length - 1] ?? ""; | ||
| return tag.endsWith(suffix) && tag.length - suffix.length >= offset; | ||
| } |
There was a problem hiding this comment.
Nit: this file hand-rolls wildcard matching instead of reusing micromatch, which is already a dependency.
This will remove +15 lines of custom logic
Check shouldDeploy function if needed
There was a problem hiding this comment.
Thanks for the suggestion! Replaced the custom matcher with the existing micromatch dependency in c0cbea0. Non-star glob characters are escaped to preserve the documented tag-pattern behavior, with regression coverage for special characters and slashes. The latest revision passes 90 focused tests and workspace typechecking.
|
Updated in c0cbea0 and 1de45f3. The tag matcher now reuses the existing I also added the triggering tag name to application and Compose deployment history. This helps identify which release triggered each service in a monorepo. The existing commit message and full commit hash remain unchanged; the tag is shown only once while running and is retained after completion. No separate tag SHA or shortened commit is displayed. Build/checkout behavior is unchanged. Validation: 90 focused tests passed, and Optional tag patterns Tag names in deployment history Ready for another review. Thank you! |


What is this PR about?
Adds an optional Tag patterns field to the GitHub On Tag trigger for applications and Docker Compose services. Each service can deploy only when a pushed tag matches one of its configured names or patterns. Leaving the field empty preserves the existing behavior: every tag triggers deployment.
Why this is needed
A monorepo can contain several independently deployed services. Today, a new tag triggers every service configured for On Tag in that repository, even when the release concerns only one service. This creates unnecessary builds and deployments.
Exact names alone are not sufficient for repeated releases because Git tag names must be unique. Patterns such as
go-*allow successive releases (go-1,go-2,go-v1.2.3) without changing the Dokploy settings or reusing an existing tag. A shared pattern lets users release all services together when needed.Example
For a repository containing three services:
all-*, go-*all-*, node-one-*all-*, node-two-*go-1orgo-2: deploy only the Go API.node-one-1: deploy only Node service one.all-1: deploy all three services.The comma separates filters in Dokploy; the Git tag itself is a single name, such as
go-2. The wordallhas no special meaning: it works because the same pattern is configured on each service.Behavior and implementation
*wildcards.*matches zero or more characters; all other characters are literal. Matching is case-sensitive and covers the entire tag name.micromatchdependency for matching, with non-star glob syntax escaped to preserve the documented behavior.triggerTagsarrays on applications and Compose services, with an additive database migration and generated Drizzle snapshot.Validation
pnpm -r run typecheckpassed across all workspace projects.go-1webhook payload through the local HTTP endpoint: exactly one service was selected and its Docker deployment completed successfully.all-*routing is covered by webhook tests. External webhook delivery was blocked by a timeout in the development proxy/Tailscale connection, so this is not claimed as a successful end-to-end public-webhook test.Checklist
canarybranch.CONTRIBUTING.md.Screenshots
The GitHub On Tag settings now include optional patterns and a versioned-tag example.
The deployment history retains the triggering tag (
all-6orgo-7) alongside the existing commit message and full commit hash.The PR appears safe to merge, with no concrete correctness, security, migration, or persistence failures identified.
Summary
This PR adds optional, service-specific GitHub tag filters for applications and Compose services while preserving deploy-on-every-tag behavior when no filters are configured.
*wildcard matching.Reviews (1) · Last reviewed commit: "feat(github): filter tag-triggered deplo..."