Compare commits

..

8 Commits

Author SHA1 Message Date
Owen
6dd161fe17 Add fosrl 2025-11-02 15:35:02 -08:00
Owen Schwartz
558bd040c6 Merge pull request #1801 from fosrl/revert-1792-main
Revert "Refactor CI/CD workflow for improved release process"
2025-11-02 15:22:12 -08:00
Owen Schwartz
f2c48975f6 Revert "Refactor CI/CD workflow for improved release process" 2025-11-02 15:22:03 -08:00
Owen Schwartz
fc43a56bb3 Merge pull request #1792 from marcschaeferger/main
Refactor CI/CD workflow for improved release process
2025-11-02 15:00:09 -08:00
Owen
ca7f557a3c Fix blueprints not applying
Fixes #1795
2025-11-02 14:56:19 -08:00
Owen
7477713eef Fix camel case in health checks 2025-11-02 14:17:38 -08:00
Owen
c16e762fa4 Fix rewritePath
Closes #1528
2025-11-02 14:05:41 -08:00
Marc Schäfer
eec3f183e6 Refactor CI/CD workflow for improved release process
Updated CI/CD workflow to include new permissions, job definitions, and steps for version validation, tagging, and artifact management.
2025-11-02 00:44:03 +01:00
4 changed files with 32 additions and 16 deletions

View File

@@ -31,7 +31,7 @@ jobs:
timeout-minutes: 120 timeout-minutes: 120
env: env:
# Target images # Target images
DOCKERHUB_IMAGE: docker.io/${{ secrets.DOCKER_HUB_USERNAME }}/${{ github.event.repository.name }} DOCKERHUB_IMAGE: docker.io/fosrl/${{ github.event.repository.name }}
GHCR_IMAGE: ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }} GHCR_IMAGE: ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}
steps: steps:

View File

@@ -34,11 +34,7 @@ export async function applyNewtDockerBlueprint(
return; return;
} }
if (isEmptyObject(blueprint["proxy-resources"])) { if (isEmptyObject(blueprint["proxy-resources"]) && isEmptyObject(blueprint["client-resources"])) {
return;
}
if (isEmptyObject(blueprint["client-resources"])) {
return; return;
} }

View File

@@ -114,7 +114,12 @@ export async function updateProxyResources(
internalPort: internalPortToCreate, internalPort: internalPortToCreate,
path: targetData.path, path: targetData.path,
pathMatchType: targetData["path-match"], pathMatchType: targetData["path-match"],
rewritePath: targetData.rewritePath, rewritePath:
targetData.rewritePath ||
targetData["rewrite-path"] ||
(targetData["rewrite-match"] === "stripPrefix"
? "/"
: undefined),
rewritePathType: targetData["rewrite-match"], rewritePathType: targetData["rewrite-match"],
priority: targetData.priority priority: targetData.priority
}) })
@@ -139,10 +144,14 @@ export async function updateProxyResources(
hcHostname: healthcheckData?.hostname, hcHostname: healthcheckData?.hostname,
hcPort: healthcheckData?.port, hcPort: healthcheckData?.port,
hcInterval: healthcheckData?.interval, hcInterval: healthcheckData?.interval,
hcUnhealthyInterval: healthcheckData?.unhealthyInterval, hcUnhealthyInterval:
healthcheckData?.unhealthyInterval ||
healthcheckData?.["unhealthy-interval"],
hcTimeout: healthcheckData?.timeout, hcTimeout: healthcheckData?.timeout,
hcHeaders: hcHeaders, hcHeaders: hcHeaders,
hcFollowRedirects: healthcheckData?.followRedirects, hcFollowRedirects:
healthcheckData?.followRedirects ||
healthcheckData?.["follow-redirects"],
hcMethod: healthcheckData?.method, hcMethod: healthcheckData?.method,
hcStatus: healthcheckData?.status, hcStatus: healthcheckData?.status,
hcHealth: "unknown" hcHealth: "unknown"
@@ -392,7 +401,12 @@ export async function updateProxyResources(
enabled: targetData.enabled, enabled: targetData.enabled,
path: targetData.path, path: targetData.path,
pathMatchType: targetData["path-match"], pathMatchType: targetData["path-match"],
rewritePath: targetData.rewritePath, rewritePath:
targetData.rewritePath ||
targetData["rewrite-path"] ||
(targetData["rewrite-match"] === "stripPrefix"
? "/"
: undefined),
rewritePathType: targetData["rewrite-match"], rewritePathType: targetData["rewrite-match"],
priority: targetData.priority priority: targetData.priority
}) })
@@ -452,10 +466,13 @@ export async function updateProxyResources(
hcPort: healthcheckData?.port, hcPort: healthcheckData?.port,
hcInterval: healthcheckData?.interval, hcInterval: healthcheckData?.interval,
hcUnhealthyInterval: hcUnhealthyInterval:
healthcheckData?.unhealthyInterval, healthcheckData?.unhealthyInterval ||
healthcheckData?.["unhealthy-interval"],
hcTimeout: healthcheckData?.timeout, hcTimeout: healthcheckData?.timeout,
hcHeaders: hcHeaders, hcHeaders: hcHeaders,
hcFollowRedirects: healthcheckData?.followRedirects, hcFollowRedirects:
healthcheckData?.followRedirects ||
healthcheckData?.["follow-redirects"],
hcMethod: healthcheckData?.method, hcMethod: healthcheckData?.method,
hcStatus: healthcheckData?.status hcStatus: healthcheckData?.status
}) })
@@ -535,7 +552,7 @@ export async function updateProxyResources(
.set({ .set({
action: getRuleAction(rule.action), action: getRuleAction(rule.action),
match: rule.match.toUpperCase(), match: rule.match.toUpperCase(),
value: rule.value.toUpperCase(), value: rule.value.toUpperCase()
}) })
.where( .where(
eq(resourceRules.ruleId, existingRule.ruleId) eq(resourceRules.ruleId, existingRule.ruleId)

View File

@@ -13,10 +13,12 @@ export const TargetHealthCheckSchema = z.object({
scheme: z.string().optional(), scheme: z.string().optional(),
mode: z.string().default("http"), mode: z.string().default("http"),
interval: z.number().int().default(30), interval: z.number().int().default(30),
unhealthyInterval: z.number().int().default(30), "unhealthy-interval": z.number().int().default(30),
unhealthyInterval: z.number().int().optional(), // deprecated alias
timeout: z.number().int().default(5), timeout: z.number().int().default(5),
headers: z.array(z.object({ name: z.string(), value: z.string() })).nullable().optional().default(null), headers: z.array(z.object({ name: z.string(), value: z.string() })).nullable().optional().default(null),
followRedirects: z.boolean().default(true), "follow-redirects": z.boolean().default(true),
followRedirects: z.boolean().optional(), // deprecated alias
method: z.string().default("GET"), method: z.string().default("GET"),
status: z.number().int().optional() status: z.number().int().optional()
}); });
@@ -32,7 +34,8 @@ export const TargetSchema = z.object({
path: z.string().optional(), path: z.string().optional(),
"path-match": z.enum(["exact", "prefix", "regex"]).optional().nullable(), "path-match": z.enum(["exact", "prefix", "regex"]).optional().nullable(),
healthcheck: TargetHealthCheckSchema.optional(), healthcheck: TargetHealthCheckSchema.optional(),
rewritePath: z.string().optional(), rewritePath: z.string().optional(), // deprecated alias
"rewrite-path": z.string().optional(),
"rewrite-match": z.enum(["exact", "prefix", "regex", "stripPrefix"]).optional().nullable(), "rewrite-match": z.enum(["exact", "prefix", "regex", "stripPrefix"]).optional().nullable(),
priority: z.number().int().min(1).max(1000).optional().default(100) priority: z.number().int().min(1).max(1000).optional().default(100)
}); });