diff --git a/.changeset/preserve-forwarded-app-origin.md b/.changeset/preserve-forwarded-app-origin.md new file mode 100644 index 0000000..8b28fae --- /dev/null +++ b/.changeset/preserve-forwarded-app-origin.md @@ -0,0 +1,5 @@ +--- +'@ankhorage/infra': patch +--- + +Preserve the browser-visible forwarded origin when generated app nginx redirects canonical static routes such as `/products` to `/products/`. diff --git a/README.md b/README.md index 20917b5..1762f7f 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ # INFRA -![license: MIT](././paradox/badges/license.svg) ![npm: v1.0.0](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg) +![license: MIT](././paradox/badges/license.svg) ![npm: v1.0.1](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg) Executable infra provider and standalone CLI for Ankhorage project workflows. diff --git a/paradox/badges/npm.svg b/paradox/badges/npm.svg index 18b7b93..8df396d 100644 --- a/paradox/badges/npm.svg +++ b/paradox/badges/npm.svg @@ -1,7 +1,7 @@ - -npm: v1.0.0 + +npm: v1.0.1 npm -v1.0.0 +v1.0.1 diff --git a/paradox/index.html b/paradox/index.html index adfc96f..f1259e5 100644 --- a/paradox/index.html +++ b/paradox/index.html @@ -2943,17 +2943,17 @@

getAppImageDockerfile

data-search="getPortForwardScript src/adapters/minikube/base/index.ts " >

getPortForwardScript

-

src/adapters/minikube/base/index.ts:2973:1

+

src/adapters/minikube/base/index.ts:2974:1

No description available.

getDownScript

-

src/adapters/minikube/base/index.ts:3308:1

+

src/adapters/minikube/base/index.ts:3309:1

No description available.

getResetScript

-

src/adapters/minikube/base/index.ts:3342:1

+

src/adapters/minikube/base/index.ts:3343:1

No description available.

getResetScript data-search="getDestroyScript src/adapters/minikube/base/index.ts " >

getDestroyScript

-

src/adapters/minikube/base/index.ts:3406:1

+

src/adapters/minikube/base/index.ts:3407:1

No description available.

getDestroyScript data-search="getStatusScript src/adapters/minikube/base/index.ts " >

getStatusScript

-

src/adapters/minikube/base/index.ts:3433:1

+

src/adapters/minikube/base/index.ts:3434:1

No description available.

getStatusScript data-search="getDefaultAppImage src/adapters/minikube/base/index.ts " >

getDefaultAppImage

-

src/adapters/minikube/base/index.ts:3602:1

+

src/adapters/minikube/base/index.ts:3603:1

No description available.

getDefaultAppImage data-search="resolveSupabaseHostPorts src/adapters/minikube/base/index.ts " >

resolveSupabaseHostPorts

-

src/adapters/minikube/base/index.ts:3606:1

+

src/adapters/minikube/base/index.ts:3607:1

No description available.

resolveSupabaseHostPorts data-search="resolvePortBucket src/adapters/minikube/base/index.ts " >

resolvePortBucket

-

src/adapters/minikube/base/index.ts:3616:1

+

src/adapters/minikube/base/index.ts:3617:1

No description available.

hashSlug

-

src/adapters/minikube/base/index.ts:3621:1

+

src/adapters/minikube/base/index.ts:3622:1

No description available.

hashSlug data-search="escapeYamlDoubleQuoted src/adapters/minikube/base/index.ts " >

escapeYamlDoubleQuoted

-

src/adapters/minikube/base/index.ts:3629:1

+

src/adapters/minikube/base/index.ts:3630:1

No description available.

diff --git a/paradox/paradox.json b/paradox/paradox.json index b625e15..82179a0 100644 --- a/paradox/paradox.json +++ b/paradox/paradox.json @@ -12,7 +12,7 @@ { "id": "npm", "label": "npm", - "value": "v1.0.0", + "value": "v1.0.1", "color": "cb3837" }, { @@ -1710,7 +1710,7 @@ "description": null, "sourceLocation": { "filePath": "src/adapters/minikube/base/index.ts", - "line": 2973, + "line": 2974, "column": 1 } }, @@ -1719,7 +1719,7 @@ "description": null, "sourceLocation": { "filePath": "src/adapters/minikube/base/index.ts", - "line": 3308, + "line": 3309, "column": 1 } }, @@ -1728,7 +1728,7 @@ "description": null, "sourceLocation": { "filePath": "src/adapters/minikube/base/index.ts", - "line": 3342, + "line": 3343, "column": 1 } }, @@ -1737,7 +1737,7 @@ "description": null, "sourceLocation": { "filePath": "src/adapters/minikube/base/index.ts", - "line": 3406, + "line": 3407, "column": 1 } }, @@ -1746,7 +1746,7 @@ "description": null, "sourceLocation": { "filePath": "src/adapters/minikube/base/index.ts", - "line": 3433, + "line": 3434, "column": 1 } }, @@ -1755,7 +1755,7 @@ "description": null, "sourceLocation": { "filePath": "src/adapters/minikube/base/index.ts", - "line": 3602, + "line": 3603, "column": 1 } }, @@ -1764,7 +1764,7 @@ "description": null, "sourceLocation": { "filePath": "src/adapters/minikube/base/index.ts", - "line": 3606, + "line": 3607, "column": 1 } }, @@ -1773,7 +1773,7 @@ "description": null, "sourceLocation": { "filePath": "src/adapters/minikube/base/index.ts", - "line": 3616, + "line": 3617, "column": 1 } }, @@ -1782,7 +1782,7 @@ "description": null, "sourceLocation": { "filePath": "src/adapters/minikube/base/index.ts", - "line": 3621, + "line": 3622, "column": 1 } }, @@ -1791,7 +1791,7 @@ "description": null, "sourceLocation": { "filePath": "src/adapters/minikube/base/index.ts", - "line": 3629, + "line": 3630, "column": 1 } }, diff --git a/src/adapters/minikube/appRuntimeServing.test.ts b/src/adapters/minikube/appRuntimeServing.test.ts new file mode 100644 index 0000000..2220bb4 --- /dev/null +++ b/src/adapters/minikube/appRuntimeServing.test.ts @@ -0,0 +1,28 @@ +import { describe, expect, test } from 'bun:test'; + +import { generateInfrastructure } from '../../index'; +import { createAppManifest } from '../../testSupport'; + +describe('generated Minikube app runtime serving', () => { + test('keeps nginx redirects relative so port-forwarded browser origins are preserved', () => { + const result = generateInfrastructure( + { + deployment: { + target: 'minikube', + monitoring: false, + }, + }, + { + appManifest: createAppManifest('forwarded-origin'), + }, + ); + const dockerfile = result.files.find( + (file) => file.path === 'infra/minikube/app-image/Dockerfile', + ); + + expect(dockerfile).toBeDefined(); + expect(dockerfile?.content).toContain('listen 8080;\n absolute_redirect off;'); + expect(dockerfile?.content).toContain('try_files $uri $uri/ /index.html;'); + expect(dockerfile?.content).not.toContain('port_in_redirect off;'); + }); +}); diff --git a/src/adapters/minikube/base/index.ts b/src/adapters/minikube/base/index.ts index 8cd61c0..c8c770e 100644 --- a/src/adapters/minikube/base/index.ts +++ b/src/adapters/minikube/base/index.ts @@ -2952,6 +2952,7 @@ function getAppImageDockerfile(): string { RUN cat <<'EOF' > /etc/nginx/conf.d/default.conf server { listen 8080; + absolute_redirect off; server_name _; root /usr/share/nginx/html; index index.html;