From 23a3cfd4c972d06cd202a80b5040765d6ab0fa6f Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 10:18:23 +0200 Subject: [PATCH 01/56] Tar inn build-id env-var logikk fra annen branch --- .github/workflows/build-and-deploy.yml | 2 +- .github/workflows/deploy.prod.yml | 8 ++++---- .nais/config.yml | 2 ++ bun.lockb | Bin 549384 -> 548984 bytes .../src/helpers/html-element-builder.ts | 13 +++++++++++++ packages/server/.env.sample | 1 + packages/server/src/env/schema.ts | 5 ++++- packages/shared/params.ts | 1 + 8 files changed, 26 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index d8120a4c..591784a8 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -52,5 +52,5 @@ jobs: env: CLUSTER: ${{ inputs.CLUSTER }} RESOURCE: .nais/config.yml - VAR: image=${{ steps.docker-push.outputs.image }} + VAR: image=${{ steps.docker-push.outputs.image }},BUILD_ID=${{ github.sha }} VARS: .nais/vars/${{ inputs.DEPLOY_INSTANCE }}.yml diff --git a/.github/workflows/deploy.prod.yml b/.github/workflows/deploy.prod.yml index 0ec440ec..a53db7f6 100644 --- a/.github/workflows/deploy.prod.yml +++ b/.github/workflows/deploy.prod.yml @@ -58,7 +58,7 @@ jobs: env: CLUSTER: dev-gcp RESOURCE: .nais/config.yml - VAR: image=${{ needs.build-and-test.outputs.image }} + VAR: image=${{ needs.build-and-test.outputs.image }},BUILD_ID=${{ github.sha }} VARS: .nais/vars/dev-stable.yml deploy-beta-navno: @@ -73,7 +73,7 @@ jobs: env: CLUSTER: dev-gcp RESOURCE: .nais/config.yml - VAR: image=${{ needs.build-and-test.outputs.image }} + VAR: image=${{ needs.build-and-test.outputs.image }},BUILD_ID=${{ github.sha }} VARS: .nais/vars/dev-beta-navno.yml deploy-prod-next: @@ -88,7 +88,7 @@ jobs: env: CLUSTER: prod-gcp RESOURCE: .nais/config.yml - VAR: image=${{ needs.build-and-test.outputs.image }} + VAR: image=${{ needs.build-and-test.outputs.image }},BUILD_ID=${{ github.sha }} VARS: .nais/vars/prod-next.yml deploy-prod: @@ -103,5 +103,5 @@ jobs: env: CLUSTER: prod-gcp RESOURCE: .nais/config.yml - VAR: image=${{ needs.build-and-test.outputs.image }} + VAR: image=${{ needs.build-and-test.outputs.image }},BUILD_ID=${{ github.sha }} VARS: .nais/vars/prod.yml diff --git a/.nais/config.yml b/.nais/config.yml index 8ccbc8b2..33c0efe7 100644 --- a/.nais/config.yml +++ b/.nais/config.yml @@ -42,6 +42,8 @@ spec: - application: "*" namespace: "*" env: + - name: BUILD_ID + value: {{BUILD_ID}} {{#each env as |var|}} - name: {{var.name}} value: {{var.value}} diff --git a/bun.lockb b/bun.lockb index 1ecd10233ba94a835e1274c72aa0ad9fa05f2282..5e85518c3c59a3f814473ef579d41e47000eae57 100755 GIT binary patch delta 17256 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 P?V|zjiG0~K`u_g`=9xo4 delta 17427 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 ZM*-_3P_vbap9sx|<$vulJAs { + const selector = Object.entries(attribs).reduce( + (acc, [key, value]) => `${acc}[${key}="${value}"]`, + tag, + ); + + const result = !!document.querySelector(selector); + + console.log(`Result for ${selector}: ${result}`); + + return result; +}; + export const buildHtmlElement = ({ tag, attribs, body }: HtmlElementProps) => { const element = document.createElement(tag); diff --git a/packages/server/.env.sample b/packages/server/.env.sample index 0940134c..f3f87319 100644 --- a/packages/server/.env.sample +++ b/packages/server/.env.sample @@ -22,3 +22,4 @@ UNLEASH_SERVER_API_TOKEN=dummy_token BOOST_ENV=navtest HAS_EXTERNAL_DEV_CONSUMER=false PUZZEL_CUSTOMER_ID=C1302192-8BEC-4EA2-84AB-F4EDE8AC6230 +BUILD_ID=asdf diff --git a/packages/server/src/env/schema.ts b/packages/server/src/env/schema.ts index d5e9930b..eb39d425 100644 --- a/packages/server/src/env/schema.ts +++ b/packages/server/src/env/schema.ts @@ -3,6 +3,7 @@ import { z } from "zod"; export const serverSchema = z.object({ APP_URL: z.string().url(), + BUILD_ID: z.string(), CDN_URL: z.string().url(), DEKORATOREN_API_URL: z.string().url(), ENONICXP_SERVICES: z.string().url(), @@ -16,10 +17,11 @@ export const serverSchema = z.object({ UNLEASH_SERVER_API_TOKEN: z.string(), UNLEASH_SERVER_API_URL: z.string().url(), XP_BASE_URL: z.string().url(), -}); +} satisfies Record); export const serverEnv = { APP_URL: process.env.APP_URL, + BUILD_ID: process.env.BUILD_ID, CDN_URL: process.env.CDN_URL, DEKORATOREN_API_URL: process.env.DEKORATOREN_API_URL, ENONICXP_SERVICES: process.env.ENONICXP_SERVICES, @@ -41,6 +43,7 @@ export const serverEnv = { export const client_env = { APP_URL: process.env.APP_URL, BOOST_ENV: process.env.BOOST_ENV as BoostEnviroment, + BUILD_ID: process.env.BUILD_ID, CDN_URL: process.env.CDN_URL, ENV: process.env.ENV, LOGIN_SESSION_API_URL: process.env.LOGIN_SESSION_API_URL, diff --git a/packages/shared/params.ts b/packages/shared/params.ts index deaf6ccd..d9648bd1 100644 --- a/packages/shared/params.ts +++ b/packages/shared/params.ts @@ -82,6 +82,7 @@ export type ParamKey = keyof Params; export const clientEnvSchema = z.object({ APP_URL: z.string(), BOOST_ENV: z.enum(["nav", "navtest"]), + BUILD_ID: z.string(), CDN_URL: z.string(), ENV: z.enum(["prod", "dev", "localhost"]), LOGIN_SESSION_API_URL: z.string(), From 480fc53f4f36c1ff953afb4bcfa93b6c736d7b3d Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 11:32:39 +0200 Subject: [PATCH 02/56] Proxy til intern app --- packages/server/src/{ => handlers}/headers.ts | 2 +- packages/server/src/handlers/version-proxy.ts | 54 +++++++++++++++++++ packages/server/src/server.ts | 8 ++- packages/shared/constants.ts | 1 + 4 files changed, 63 insertions(+), 2 deletions(-) rename packages/server/src/{ => handlers}/headers.ts (95%) create mode 100644 packages/server/src/handlers/version-proxy.ts create mode 100644 packages/shared/constants.ts diff --git a/packages/server/src/headers.ts b/packages/server/src/handlers/headers.ts similarity index 95% rename from packages/server/src/headers.ts rename to packages/server/src/handlers/headers.ts index 11f9059c..76939346 100644 --- a/packages/server/src/headers.ts +++ b/packages/server/src/handlers/headers.ts @@ -1,5 +1,5 @@ import { MiddlewareHandler } from "hono"; -import { csp } from "./content-security-policy"; +import { csp } from "../content-security-policy"; const ALLOWED_DOMAINS = [ ".nav.no", diff --git a/packages/server/src/handlers/version-proxy.ts b/packages/server/src/handlers/version-proxy.ts new file mode 100644 index 00000000..4e618141 --- /dev/null +++ b/packages/server/src/handlers/version-proxy.ts @@ -0,0 +1,54 @@ +import { Hono, HonoRequest, MiddlewareHandler } from "hono"; +import { BUILD_ID_HEADER } from "decorator-shared/constants"; + +const serverBuildId = process.env.BUILD_ID as string; + +const fetchFromBuildVersion = async (request: HonoRequest) => { + const reqBuildId = request.query(BUILD_ID_HEADER); + + const newUrl = new URL(request.url); + newUrl.host = `nav-dekoratoren-${reqBuildId}`; + newUrl.protocol = "http:"; + newUrl.searchParams.set("is-proxied-req", "true"); + + console.log(`New url:`, newUrl.toString()); + + try { + const response = await fetch(newUrl.toString(), { + method: request.method, + headers: request.raw.headers, + body: request.raw.body, + }); + + console.log("Response:", response); + response.headers.delete("content-encoding"); + + return new Response(response.body, response); + } catch (e) { + console.log(`Request failed - ${e}`); + return null; + } +}; + +export const versionProxyHandler: MiddlewareHandler = async (c, next) => { + const reqBuildId = c.req.query(BUILD_ID_HEADER); + const isProxyReq = c.req.query("is-proxied-req"); + + console.log(`${reqBuildId} - ${isProxyReq}`); + + if (!reqBuildId || reqBuildId === serverBuildId || isProxyReq) { + return next(); + } + + console.log( + `Not my id! Wanted ${serverBuildId} - got ${reqBuildId} - url ${c.req.url}`, + ); + + const response = await fetchFromBuildVersion(c.req); + if (response) { + console.log("Returning response ", response); + return response; + } + + return next(); +}; diff --git a/packages/server/src/server.ts b/packages/server/src/server.ts index 43b09bca..9d206a9d 100644 --- a/packages/server/src/server.ts +++ b/packages/server/src/server.ts @@ -7,7 +7,7 @@ import { cspDirectives } from "./content-security-policy"; import { clientEnv, env } from "./env/server"; import { authHandler } from "./handlers/auth-handler"; import { searchHandler } from "./handlers/search-handler"; -import { headers } from "./headers"; +import { headers } from "./handlers/headers"; import i18n from "./i18n"; import { getMainMenuLinks, mainMenuContextLinks } from "./menu/main-menu"; import { setupMocks } from "./mocks"; @@ -21,6 +21,7 @@ import { csrAssets } from "./views"; import { MainMenu } from "./views/header/main-menu"; import { texts } from "./texts"; import { clientTextsKeys } from "decorator-shared/types"; +import { versionProxyHandler } from "./handlers/version-proxy"; const app = new Hono({ strict: false, @@ -37,6 +38,10 @@ if (env.NODE_ENV === "development" || env.IS_LOCAL_PROD) { app.use(headers); +if (!process.env.IS_INTERNAL_APP) { + app.use(versionProxyHandler); +} + app.get("/public/assets/*", serveStatic({})); app.get("/api/isAlive", ({ text }) => text("OK")); @@ -165,6 +170,7 @@ app.get("/", async ({ req, html }) => { ); }); +app.route(process.env.BUILD_ID as string, app); app.route("/decorator-next", app); app.route("/dekoratoren", app); app.route("/common-html/v4/navno", app); diff --git a/packages/shared/constants.ts b/packages/shared/constants.ts new file mode 100644 index 00000000..2a379ebb --- /dev/null +++ b/packages/shared/constants.ts @@ -0,0 +1 @@ +export const BUILD_ID_HEADER = "build-id"; From 254818eb36738c7c50d18587d145b98676e1e23a Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 11:37:07 +0200 Subject: [PATCH 03/56] =?UTF-8?q?Setter=20build-id=20parameter=20p=C3=A5?= =?UTF-8?q?=20request-url'er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/client/src/helpers/urls.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/client/src/helpers/urls.ts b/packages/client/src/helpers/urls.ts index 3b5a58fc..c39f4e2b 100644 --- a/packages/client/src/helpers/urls.ts +++ b/packages/client/src/helpers/urls.ts @@ -1,6 +1,7 @@ import { Params } from "decorator-shared/params"; import { formatParams } from "decorator-shared/json"; import { env } from "../params"; +import { BUILD_ID_HEADER } from "decorator-shared/constants"; export const endpointUrlWithParams = ( endpointUrl: `/${string}`, @@ -11,7 +12,7 @@ export const endpointUrlWithParams = ( ...params, }); - return `${env("APP_URL")}${endpointUrl}?${formattedParams}`; + return `${env("APP_URL")}${endpointUrl}?${formattedParams}&${BUILD_ID_HEADER}=${env("BUILD_ID")}`; }; export const cdnUrl = (url: string) => `${env("CDN_URL")}${url}`; From 3a1a20e861a1dfb5e73eeae6888820360deae392 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 11:43:54 +0200 Subject: [PATCH 04/56] Config for internal app --- .nais/config-internal.yml | 66 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 .nais/config-internal.yml diff --git a/.nais/config-internal.yml b/.nais/config-internal.yml new file mode 100644 index 00000000..ccd183b1 --- /dev/null +++ b/.nais/config-internal.yml @@ -0,0 +1,66 @@ +--- +apiVersion: nais.io/v1alpha1 +kind: Application +metadata: + name: nav-dekoratoren-{{BUILD_ID}} + namespace: personbruker + labels: + team: personbruker + annotations: + nginx.ingress.kubernetes.io/proxy-body-size: "256M" + nginx.ingress.kubernetes.io/proxy-buffer-size: "16k" + nginx.ingress.kubernetes.io/proxy-read-timeout: "600" +spec: + image: {{image}} + port: 8089 + ttl: 1h + liveness: + path: /api/isAlive + initialDelay: 10 + readiness: + path: /api/isReady + initialDelay: 10 + prometheus: + enabled: true + path: /metrics + accessPolicy: + outbound: + rules: + - application: "*" + namespace: personbruker + - application: tms-varsel-api + namespace: min-side + external: + {{#each outboundHosts as |host|}} + - host: {{host}} + {{/each}} + inbound: + rules: + - application: "*" + namespace: "*" + env: + - name: BUILD_ID + value: {{BUILD_ID}} + {{#each env as |var|}} + - name: {{var.name}} + value: {{var.value}} + {{/each}} + envFrom: + - secret: nav-dekoratoren + - secret: nav-dekoratoren-unleash-api-token + filesFrom: + - configmap: dekoratoren-config + mountPath: /app/config + replicas: + {{#with replicas}} + min: {{min}} + max: {{max}} + {{/with}} + resources: + {{#with resources}} + requests: + cpu: {{requests.cpu}} + memory: {{requests.memory}} + limits: + memory: {{limits.memory}} + {{/with}} From 4e8a7073bca6633adb9335f3852e95770c6ca584 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 11:46:24 +0200 Subject: [PATCH 05/56] Deployer internal app --- .github/workflows/build-and-deploy.yml | 6 ++++++ .nais/config-internal.yml | 2 ++ 2 files changed, 8 insertions(+) diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index 591784a8..4960712b 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -54,3 +54,9 @@ jobs: RESOURCE: .nais/config.yml VAR: image=${{ steps.docker-push.outputs.image }},BUILD_ID=${{ github.sha }} VARS: .nais/vars/${{ inputs.DEPLOY_INSTANCE }}.yml + - uses: nais/deploy/actions/deploy@v2 + env: + CLUSTER: ${{ inputs.CLUSTER }} + RESOURCE: .nais/config-internal.yml + VAR: image=${{ steps.docker-push.outputs.image }},BUILD_ID=${{ github.sha }} + VARS: .nais/vars/${{ inputs.DEPLOY_INSTANCE }}.yml diff --git a/.nais/config-internal.yml b/.nais/config-internal.yml index ccd183b1..4859c450 100644 --- a/.nais/config-internal.yml +++ b/.nais/config-internal.yml @@ -41,6 +41,8 @@ spec: env: - name: BUILD_ID value: {{BUILD_ID}} + - name: IS_INTERNAL_APP + value: "true" {{#each env as |var|}} - name: {{var.name}} value: {{var.value}} From f88e3d053684334690da560f3645f8ff515fbf62 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 11:47:57 +0200 Subject: [PATCH 06/56] Outbound rules for vanlig app --- .nais/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.nais/config.yml b/.nais/config.yml index 33c0efe7..ae297338 100644 --- a/.nais/config.yml +++ b/.nais/config.yml @@ -29,8 +29,8 @@ spec: accessPolicy: outbound: rules: - - application: nav-dekoratoren-api - - application: navno-search-api + - application: "*" + namespace: personbruker - application: tms-varsel-api namespace: min-side external: From 4f4dc3eb19378f7f8ffe4a35cdfe73985acd0b74 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 11:48:37 +0200 Subject: [PATCH 07/56] Revert irrelevant endring --- packages/client/src/helpers/html-element-builder.ts | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/packages/client/src/helpers/html-element-builder.ts b/packages/client/src/helpers/html-element-builder.ts index 6b9d969b..1e7872af 100644 --- a/packages/client/src/helpers/html-element-builder.ts +++ b/packages/client/src/helpers/html-element-builder.ts @@ -1,18 +1,5 @@ import { HtmlElementProps } from "decorator-shared/types"; -export const htmlElementExists = ({ tag, attribs }: HtmlElementProps) => { - const selector = Object.entries(attribs).reduce( - (acc, [key, value]) => `${acc}[${key}="${value}"]`, - tag, - ); - - const result = !!document.querySelector(selector); - - console.log(`Result for ${selector}: ${result}`); - - return result; -}; - export const buildHtmlElement = ({ tag, attribs, body }: HtmlElementProps) => { const element = document.createElement(tag); From 020a4e98f680ec5434348dde1829364a706876e7 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 11:51:00 +0200 Subject: [PATCH 08/56] Fikser test --- packages/client/src/helpers/urls.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/client/src/helpers/urls.test.ts b/packages/client/src/helpers/urls.test.ts index 45e2f31f..8980cba1 100644 --- a/packages/client/src/helpers/urls.test.ts +++ b/packages/client/src/helpers/urls.test.ts @@ -9,6 +9,7 @@ describe("Endpoint urls", () => { }, env: { APP_URL: "http://localhost:3000", + BUILD_ID: "1234", }, } as typeof window.__DECORATOR_DATA__; @@ -19,7 +20,7 @@ describe("Endpoint urls", () => { }); expect(url).toBe( - "http://localhost:3000/user-menu?simple=true&feedback=true", + "http://localhost:3000/user-menu?simple=true&feedback=true&build-id=1234", ); }); }); From 6e95872ece3498603ad53fe9478a6dc0784930f4 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 12:02:41 +0200 Subject: [PATCH 09/56] =?UTF-8?q?Gj=C3=B8r=20noe=20visuelle=20endringer=20?= =?UTF-8?q?for=20=C3=A5=20teste!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/client/src/styles/arbeidsgiver-user-menu.module.css | 4 ++-- packages/client/src/styles/simple-user-menu.module.css | 4 ++-- packages/client/src/styles/sticky.module.css | 2 +- packages/client/src/styles/user-menu-dropdown.module.css | 2 +- packages/client/src/styles/user-menu.module.css | 4 ++-- packages/server/src/views/header/user-menu.ts | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/client/src/styles/arbeidsgiver-user-menu.module.css b/packages/client/src/styles/arbeidsgiver-user-menu.module.css index a519eafc..d4e5ee25 100644 --- a/packages/client/src/styles/arbeidsgiver-user-menu.module.css +++ b/packages/client/src/styles/arbeidsgiver-user-menu.module.css @@ -35,13 +35,13 @@ color: var(--a-text-subtle); } -.name { +.nameTest { font-weight: var(--a-font-weight-bold); font-size: var(--a-font-size-heading-large); } @media (min-width: 768px) { - .name { + .nameTest { font-size: var(--a-font-size-heading-xlarge); } } diff --git a/packages/client/src/styles/simple-user-menu.module.css b/packages/client/src/styles/simple-user-menu.module.css index f2fd172c..5d978a42 100644 --- a/packages/client/src/styles/simple-user-menu.module.css +++ b/packages/client/src/styles/simple-user-menu.module.css @@ -4,12 +4,12 @@ gap: var(--a-spacing-2); } -.name { +.nameTest { display: grid; } @media (min-width: 768px) { - .name { + .nameTest { grid-auto-flow: column; gap: var(--a-spacing-1); } diff --git a/packages/client/src/styles/sticky.module.css b/packages/client/src/styles/sticky.module.css index 535f0bc5..b9f569c3 100644 --- a/packages/client/src/styles/sticky.module.css +++ b/packages/client/src/styles/sticky.module.css @@ -17,7 +17,7 @@ .fixedWrapper { width: 100%; border-bottom: 1px solid var(--a-border-subtle); - background-color: var(--a-surface-default); + background-color: red; } .fixed { diff --git a/packages/client/src/styles/user-menu-dropdown.module.css b/packages/client/src/styles/user-menu-dropdown.module.css index 4fbcc9c5..f0c8b6c3 100644 --- a/packages/client/src/styles/user-menu-dropdown.module.css +++ b/packages/client/src/styles/user-menu-dropdown.module.css @@ -8,7 +8,7 @@ } } -.name { +.nameTest { display: inline-block; text-overflow: ellipsis; max-width: 124px; diff --git a/packages/client/src/styles/user-menu.module.css b/packages/client/src/styles/user-menu.module.css index d5a70834..47127629 100644 --- a/packages/client/src/styles/user-menu.module.css +++ b/packages/client/src/styles/user-menu.module.css @@ -36,13 +36,13 @@ color: var(--a-text-subtle); } -.name { +.nameTest { font-weight: var(--a-font-weight-bold); font-size: var(--a-font-size-heading-large); } @media (min-width: 768px) { - .name { + .nameTest { font-size: var(--a-font-size-heading-xlarge); } } diff --git a/packages/server/src/views/header/user-menu.ts b/packages/server/src/views/header/user-menu.ts index 632105b8..e80c5125 100644 --- a/packages/server/src/views/header/user-menu.ts +++ b/packages/server/src/views/header/user-menu.ts @@ -37,7 +37,7 @@ export const UserMenu = ({
${i18n("logged_in")}
-
${name}
+
${name} McNameson
${level !== "Level4" && Alert({ From 5189a65ecbb0caf2ef054a959cf826b9dc71e833 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 12:04:05 +0200 Subject: [PATCH 10/56] =?UTF-8?q?Fjerner=20log-st=C3=B8y?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/server/src/handlers/version-proxy.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/server/src/handlers/version-proxy.ts b/packages/server/src/handlers/version-proxy.ts index 4e618141..e3e8fd6e 100644 --- a/packages/server/src/handlers/version-proxy.ts +++ b/packages/server/src/handlers/version-proxy.ts @@ -32,11 +32,8 @@ const fetchFromBuildVersion = async (request: HonoRequest) => { export const versionProxyHandler: MiddlewareHandler = async (c, next) => { const reqBuildId = c.req.query(BUILD_ID_HEADER); - const isProxyReq = c.req.query("is-proxied-req"); - console.log(`${reqBuildId} - ${isProxyReq}`); - - if (!reqBuildId || reqBuildId === serverBuildId || isProxyReq) { + if (!reqBuildId || reqBuildId === serverBuildId) { return next(); } From c3710e9c6e5414898c88ee06f08ae133e5065ca3 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 13:14:02 +0200 Subject: [PATCH 11/56] =?UTF-8?q?Setter=20headere=20p=C3=A5=20proxy=20resp?= =?UTF-8?q?onse?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/server/src/handlers/headers.ts | 36 +++++++++++-------- packages/server/src/handlers/version-proxy.ts | 9 ++++- packages/server/src/server.ts | 1 + 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/packages/server/src/handlers/headers.ts b/packages/server/src/handlers/headers.ts index 76939346..09a4c51f 100644 --- a/packages/server/src/handlers/headers.ts +++ b/packages/server/src/handlers/headers.ts @@ -15,23 +15,31 @@ const isAllowedOrigin = (origin?: string) => (ALLOWED_DOMAINS.some((domain) => origin.endsWith(domain)) || origin.includes("localhost:")); +export const getHeaders = (origin: string) => { + const headers: Record = {}; + + if (isAllowedOrigin(origin)) { + headers["Access-Control-Allow-Origin"] = origin; + headers["Access-Control-Allow-Methods"] = "GET,HEAD,OPTIONS,POST,PUT"; + headers["Access-Control-Allow-Credentials"] = "true"; + headers["Access-Control-Allow-Headers"] = + "cookie,Content-Type,Authorization"; + } + + headers["Content-Security-Policy"] = csp; + headers["Cache-Control"] = "private, no-cache, no-store, must-revalidate"; + headers["Pragma"] = "no-cache"; + headers["Expires"] = "-1"; + + return headers; +}; + export const headers: MiddlewareHandler = async (c, next) => { await next(); const origin = c.req.header("origin"); - if (isAllowedOrigin(origin)) { - c.header("Access-Control-Allow-Origin", origin); - c.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT"); - c.header("Access-Control-Allow-Credentials", "true"); - c.header( - "Access-Control-Allow-Headers", - "cookie,Content-Type,Authorization", - ); - } - - c.header("Content-Security-Policy", csp); - c.header("Cache-Control", "private, no-cache, no-store, must-revalidate"); - c.header("Pragma", "no-cache"); - c.header("Expires", "-1"); + Object.entries(getHeaders(origin)).forEach(([name, value]) => + c.header(name, value), + ); }; diff --git a/packages/server/src/handlers/version-proxy.ts b/packages/server/src/handlers/version-proxy.ts index e3e8fd6e..d26eb718 100644 --- a/packages/server/src/handlers/version-proxy.ts +++ b/packages/server/src/handlers/version-proxy.ts @@ -1,5 +1,6 @@ import { Hono, HonoRequest, MiddlewareHandler } from "hono"; import { BUILD_ID_HEADER } from "decorator-shared/constants"; +import { getHeaders } from "./headers"; const serverBuildId = process.env.BUILD_ID as string; @@ -43,7 +44,13 @@ export const versionProxyHandler: MiddlewareHandler = async (c, next) => { const response = await fetchFromBuildVersion(c.req); if (response) { - console.log("Returning response ", response); + console.log("Returning response ", { + ...response, + headers: { + ...response.headers, + ...getHeaders(c.req.header("origin")), + }, + }); return response; } diff --git a/packages/server/src/server.ts b/packages/server/src/server.ts index 9d206a9d..0411fea3 100644 --- a/packages/server/src/server.ts +++ b/packages/server/src/server.ts @@ -116,6 +116,7 @@ app.get("/auth", async ({ req, json }) => ); app.get("/ops-messages", async ({ json }) => json(await fetchOpsMessages())); app.get("/header", async ({ req, html }) => { + console.log("Running header"); const data = validParams(req.query()); return html(renderHeader({ data }).render(data)); From 78de3ed04d851b828af6e9960f4c3446a1ad2460 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 13:15:10 +0200 Subject: [PATCH 12/56] =?UTF-8?q?Revert=20r=C3=B8d=20header?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/client/src/styles/sticky.module.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/client/src/styles/sticky.module.css b/packages/client/src/styles/sticky.module.css index b9f569c3..535f0bc5 100644 --- a/packages/client/src/styles/sticky.module.css +++ b/packages/client/src/styles/sticky.module.css @@ -17,7 +17,7 @@ .fixedWrapper { width: 100%; border-bottom: 1px solid var(--a-border-subtle); - background-color: red; + background-color: var(--a-surface-default); } .fixed { From d26ec4294c2453cd09bac7b7fdcfd53e143e2ca0 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 13:22:34 +0200 Subject: [PATCH 13/56] Wildcard namespace --- .nais/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nais/config.yml b/.nais/config.yml index ae297338..35967b44 100644 --- a/.nais/config.yml +++ b/.nais/config.yml @@ -30,7 +30,7 @@ spec: outbound: rules: - application: "*" - namespace: personbruker + namespace: "*" - application: tms-varsel-api namespace: min-side external: From 7ef9ca4ddbbe77c8e4724669f193b05b8c4c8b86 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 13:23:59 +0200 Subject: [PATCH 14/56] Wildcard namespace for internal --- .nais/config-internal.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nais/config-internal.yml b/.nais/config-internal.yml index 4859c450..0ba03b17 100644 --- a/.nais/config-internal.yml +++ b/.nais/config-internal.yml @@ -27,7 +27,7 @@ spec: outbound: rules: - application: "*" - namespace: personbruker + namespace: "*" - application: tms-varsel-api namespace: min-side external: From 10ef1bb579e74fdba54298f56455b7e36556dc1a Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 13:57:25 +0200 Subject: [PATCH 15/56] Bruker ekstern ingress --- .nais/config-internal.yml | 6 ++++-- .nais/config.yml | 4 ++-- .nais/vars/dev-beta-navno.yml | 1 + packages/server/src/handlers/version-proxy.ts | 5 ++--- packages/server/src/server.ts | 15 +++++++++++---- 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/.nais/config-internal.yml b/.nais/config-internal.yml index 0ba03b17..88ea88ed 100644 --- a/.nais/config-internal.yml +++ b/.nais/config-internal.yml @@ -23,11 +23,13 @@ spec: prometheus: enabled: true path: /metrics + ingresses: + - url: https://dekoratoren.ekstern.dev.nav.no/{{BUILD_ID}} accessPolicy: outbound: rules: - - application: "*" - namespace: "*" + - application: nav-dekoratoren-api + - application: navno-search-api - application: tms-varsel-api namespace: min-side external: diff --git a/.nais/config.yml b/.nais/config.yml index 35967b44..33c0efe7 100644 --- a/.nais/config.yml +++ b/.nais/config.yml @@ -29,8 +29,8 @@ spec: accessPolicy: outbound: rules: - - application: "*" - namespace: "*" + - application: nav-dekoratoren-api + - application: navno-search-api - application: tms-varsel-api namespace: min-side external: diff --git a/.nais/vars/dev-beta-navno.yml b/.nais/vars/dev-beta-navno.yml index db06c830..05a893d1 100644 --- a/.nais/vars/dev-beta-navno.yml +++ b/.nais/vars/dev-beta-navno.yml @@ -5,6 +5,7 @@ ingresses: outboundHosts: - www.nav.no - www.intern.dev.nav.no + - dekoratoren.ekstern.dev.nav.no - www-q6.nav.no - navno-unleash-api.nav.cloud.nais.io - tokendings.dev-gcp.nais.io diff --git a/packages/server/src/handlers/version-proxy.ts b/packages/server/src/handlers/version-proxy.ts index d26eb718..3c60d4c9 100644 --- a/packages/server/src/handlers/version-proxy.ts +++ b/packages/server/src/handlers/version-proxy.ts @@ -1,4 +1,4 @@ -import { Hono, HonoRequest, MiddlewareHandler } from "hono"; +import { HonoRequest, MiddlewareHandler } from "hono"; import { BUILD_ID_HEADER } from "decorator-shared/constants"; import { getHeaders } from "./headers"; @@ -8,8 +8,7 @@ const fetchFromBuildVersion = async (request: HonoRequest) => { const reqBuildId = request.query(BUILD_ID_HEADER); const newUrl = new URL(request.url); - newUrl.host = `nav-dekoratoren-${reqBuildId}`; - newUrl.protocol = "http:"; + newUrl.pathname = `/${reqBuildId}${newUrl.pathname}`; newUrl.searchParams.set("is-proxied-req", "true"); console.log(`New url:`, newUrl.toString()); diff --git a/packages/server/src/server.ts b/packages/server/src/server.ts index 0411fea3..1b390026 100644 --- a/packages/server/src/server.ts +++ b/packages/server/src/server.ts @@ -171,10 +171,17 @@ app.get("/", async ({ req, html }) => { ); }); -app.route(process.env.BUILD_ID as string, app); -app.route("/decorator-next", app); -app.route("/dekoratoren", app); -app.route("/common-html/v4/navno", app); +if (process.env.IS_INTERNAL_APP) { + const prefix = `/${process.env.BUILD_ID}`; + app.route(prefix, app); + app.route(`${prefix}/decorator-next`, app); + app.route(`${prefix}/dekoratoren`, app); + app.route(`${prefix}/common-html/v4/navno`, app); +} else { + app.route("/decorator-next", app); + app.route("/dekoratoren", app); + app.route("/common-html/v4/navno", app); +} export default { ...app, From c8fb26c68b1616521f7fb7ce1fb81054272d2f75 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 14:02:21 +0200 Subject: [PATCH 16/56] Typo i app config --- .nais/config-internal.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nais/config-internal.yml b/.nais/config-internal.yml index 88ea88ed..437a9b1b 100644 --- a/.nais/config-internal.yml +++ b/.nais/config-internal.yml @@ -24,7 +24,7 @@ spec: enabled: true path: /metrics ingresses: - - url: https://dekoratoren.ekstern.dev.nav.no/{{BUILD_ID}} + - https://dekoratoren.ekstern.dev.nav.no/{{BUILD_ID}} accessPolicy: outbound: rules: From 8a537e20e17b84d7d381e8bd6e6b6de7c754ee32 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 14:10:37 +0200 Subject: [PATCH 17/56] =?UTF-8?q?Gj=C3=B8r=20noen=20random=20endringer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/client/src/styles/arbeidsgiver-user-menu.module.css | 4 ++-- packages/client/src/styles/simple-user-menu.module.css | 4 ++-- packages/client/src/styles/user-menu-dropdown.module.css | 2 +- packages/client/src/styles/user-menu.module.css | 4 ++-- packages/server/src/views/header/complex-header.ts | 1 + packages/server/src/views/header/user-menu.ts | 2 +- 6 files changed, 9 insertions(+), 8 deletions(-) diff --git a/packages/client/src/styles/arbeidsgiver-user-menu.module.css b/packages/client/src/styles/arbeidsgiver-user-menu.module.css index d4e5ee25..166fc658 100644 --- a/packages/client/src/styles/arbeidsgiver-user-menu.module.css +++ b/packages/client/src/styles/arbeidsgiver-user-menu.module.css @@ -35,13 +35,13 @@ color: var(--a-text-subtle); } -.nameTest { +.nameTestNew { font-weight: var(--a-font-weight-bold); font-size: var(--a-font-size-heading-large); } @media (min-width: 768px) { - .nameTest { + .nameTestNew { font-size: var(--a-font-size-heading-xlarge); } } diff --git a/packages/client/src/styles/simple-user-menu.module.css b/packages/client/src/styles/simple-user-menu.module.css index 5d978a42..29bf1ae5 100644 --- a/packages/client/src/styles/simple-user-menu.module.css +++ b/packages/client/src/styles/simple-user-menu.module.css @@ -4,12 +4,12 @@ gap: var(--a-spacing-2); } -.nameTest { +.nameTestNew { display: grid; } @media (min-width: 768px) { - .nameTest { + .nameTestNew { grid-auto-flow: column; gap: var(--a-spacing-1); } diff --git a/packages/client/src/styles/user-menu-dropdown.module.css b/packages/client/src/styles/user-menu-dropdown.module.css index f0c8b6c3..c34ec39e 100644 --- a/packages/client/src/styles/user-menu-dropdown.module.css +++ b/packages/client/src/styles/user-menu-dropdown.module.css @@ -8,7 +8,7 @@ } } -.nameTest { +.nameTestNew { display: inline-block; text-overflow: ellipsis; max-width: 124px; diff --git a/packages/client/src/styles/user-menu.module.css b/packages/client/src/styles/user-menu.module.css index 47127629..76bc5834 100644 --- a/packages/client/src/styles/user-menu.module.css +++ b/packages/client/src/styles/user-menu.module.css @@ -36,13 +36,13 @@ color: var(--a-text-subtle); } -.nameTest { +.nameTestNew { font-weight: var(--a-font-weight-bold); font-size: var(--a-font-size-heading-large); } @media (min-width: 768px) { - .nameTest { + .nameTestNew { font-size: var(--a-font-size-heading-xlarge); } } diff --git a/packages/server/src/views/header/complex-header.ts b/packages/server/src/views/header/complex-header.ts index 81d23e61..bf4d8896 100644 --- a/packages/server/src/views/header/complex-header.ts +++ b/packages/server/src/views/header/complex-header.ts @@ -88,6 +88,7 @@ export function ComplexHeader({ ${i18n(lenkeTekstId)} `, )} + Ny versjon
`}
diff --git a/packages/server/src/views/header/user-menu.ts b/packages/server/src/views/header/user-menu.ts index e80c5125..a109045d 100644 --- a/packages/server/src/views/header/user-menu.ts +++ b/packages/server/src/views/header/user-menu.ts @@ -37,7 +37,7 @@ export const UserMenu = ({
${i18n("logged_in")}
-
${name} McNameson
+
${name} McNyVersjon
${level !== "Level4" && Alert({ From 0835b14631844eef3d390e37bd582322465d39cb Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 14:12:07 +0200 Subject: [PATCH 18/56] =?UTF-8?q?Gj=C3=B8r=20noen=20CSS=20endringer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/client/src/styles/main-menu.module.css | 2 +- packages/server/src/views/header/main-menu.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/client/src/styles/main-menu.module.css b/packages/client/src/styles/main-menu.module.css index f7befd67..a5f64fcc 100644 --- a/packages/client/src/styles/main-menu.module.css +++ b/packages/client/src/styles/main-menu.module.css @@ -27,7 +27,7 @@ gap: var(--a-spacing-3); } -.title { +.titleNew2 { font-size: var(--a-font-size-heading-medium); line-height: var(--a-font-line-height-heading-medium); margin-block: 0; diff --git a/packages/server/src/views/header/main-menu.ts b/packages/server/src/views/header/main-menu.ts index 8f9505f2..8bf468f6 100644 --- a/packages/server/src/views/header/main-menu.ts +++ b/packages/server/src/views/header/main-menu.ts @@ -20,7 +20,7 @@ export function MainMenu({ return html`
-

${title}

+

${title} ny versjon

Date: Fri, 5 Jul 2024 14:17:53 +0200 Subject: [PATCH 19/56] Fikser ingress --- .nais/config-internal.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.nais/config-internal.yml b/.nais/config-internal.yml index 437a9b1b..4dc362ee 100644 --- a/.nais/config-internal.yml +++ b/.nais/config-internal.yml @@ -24,7 +24,9 @@ spec: enabled: true path: /metrics ingresses: - - https://dekoratoren.ekstern.dev.nav.no/{{BUILD_ID}} + {{#each ingresses as |url|}} + - {{url}}/{{BUILD_ID}} + {{/each}} accessPolicy: outbound: rules: From 44d2d474f834e1d3b39037b5627c0a7c801adba8 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 14:18:22 +0200 Subject: [PATCH 20/56] Fikser outbound hosts --- .nais/vars/dev-beta-navno.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nais/vars/dev-beta-navno.yml b/.nais/vars/dev-beta-navno.yml index 05a893d1..d9865f98 100644 --- a/.nais/vars/dev-beta-navno.yml +++ b/.nais/vars/dev-beta-navno.yml @@ -5,7 +5,7 @@ ingresses: outboundHosts: - www.nav.no - www.intern.dev.nav.no - - dekoratoren.ekstern.dev.nav.no + - dekoratoren-beta.intern.dev.nav.no - www-q6.nav.no - navno-unleash-api.nav.cloud.nais.io - tokendings.dev-gcp.nais.io From 784c68c584a377ee853b0180c3e760c19380dc94 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 14:19:46 +0200 Subject: [PATCH 21/56] =?UTF-8?q?Gj=C3=B8r=20noen=20endringer!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/client/src/styles/arbeidsgiver-user-menu.module.css | 4 ++-- packages/client/src/styles/main-menu.module.css | 2 +- packages/client/src/styles/simple-user-menu.module.css | 4 ++-- packages/client/src/styles/user-menu-dropdown.module.css | 2 +- packages/client/src/styles/user-menu.module.css | 4 ++-- packages/server/src/views/header/complex-header.ts | 2 +- packages/server/src/views/header/main-menu.ts | 2 +- packages/server/src/views/header/user-menu.ts | 2 +- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/client/src/styles/arbeidsgiver-user-menu.module.css b/packages/client/src/styles/arbeidsgiver-user-menu.module.css index 166fc658..7e222353 100644 --- a/packages/client/src/styles/arbeidsgiver-user-menu.module.css +++ b/packages/client/src/styles/arbeidsgiver-user-menu.module.css @@ -35,13 +35,13 @@ color: var(--a-text-subtle); } -.nameTestNew { +.nameTestNew2 { font-weight: var(--a-font-weight-bold); font-size: var(--a-font-size-heading-large); } @media (min-width: 768px) { - .nameTestNew { + .nameTestNew2 { font-size: var(--a-font-size-heading-xlarge); } } diff --git a/packages/client/src/styles/main-menu.module.css b/packages/client/src/styles/main-menu.module.css index a5f64fcc..1f6f626a 100644 --- a/packages/client/src/styles/main-menu.module.css +++ b/packages/client/src/styles/main-menu.module.css @@ -27,7 +27,7 @@ gap: var(--a-spacing-3); } -.titleNew2 { +.titleNew3 { font-size: var(--a-font-size-heading-medium); line-height: var(--a-font-line-height-heading-medium); margin-block: 0; diff --git a/packages/client/src/styles/simple-user-menu.module.css b/packages/client/src/styles/simple-user-menu.module.css index 29bf1ae5..656a2dee 100644 --- a/packages/client/src/styles/simple-user-menu.module.css +++ b/packages/client/src/styles/simple-user-menu.module.css @@ -4,12 +4,12 @@ gap: var(--a-spacing-2); } -.nameTestNew { +.nameTestNew2 { display: grid; } @media (min-width: 768px) { - .nameTestNew { + .nameTestNew2 { grid-auto-flow: column; gap: var(--a-spacing-1); } diff --git a/packages/client/src/styles/user-menu-dropdown.module.css b/packages/client/src/styles/user-menu-dropdown.module.css index c34ec39e..76c796b5 100644 --- a/packages/client/src/styles/user-menu-dropdown.module.css +++ b/packages/client/src/styles/user-menu-dropdown.module.css @@ -8,7 +8,7 @@ } } -.nameTestNew { +.nameTestNew2 { display: inline-block; text-overflow: ellipsis; max-width: 124px; diff --git a/packages/client/src/styles/user-menu.module.css b/packages/client/src/styles/user-menu.module.css index 76bc5834..a8d399d6 100644 --- a/packages/client/src/styles/user-menu.module.css +++ b/packages/client/src/styles/user-menu.module.css @@ -36,13 +36,13 @@ color: var(--a-text-subtle); } -.nameTestNew { +.nameTestNew2 { font-weight: var(--a-font-weight-bold); font-size: var(--a-font-size-heading-large); } @media (min-width: 768px) { - .nameTestNew { + .nameTestNew2 { font-size: var(--a-font-size-heading-xlarge); } } diff --git a/packages/server/src/views/header/complex-header.ts b/packages/server/src/views/header/complex-header.ts index bf4d8896..28d8a096 100644 --- a/packages/server/src/views/header/complex-header.ts +++ b/packages/server/src/views/header/complex-header.ts @@ -88,7 +88,7 @@ export function ComplexHeader({ ${i18n(lenkeTekstId)} `, )} - Ny versjon + Nyere versjon
`}
diff --git a/packages/server/src/views/header/main-menu.ts b/packages/server/src/views/header/main-menu.ts index 8bf468f6..d828bbae 100644 --- a/packages/server/src/views/header/main-menu.ts +++ b/packages/server/src/views/header/main-menu.ts @@ -20,7 +20,7 @@ export function MainMenu({ return html`
-

${title} ny versjon

+

${title} nyere versjon

${i18n("logged_in")}
-
${name} McNyVersjon
+
${name} McNyVersjon
${level !== "Level4" && Alert({ From ba5114b244ab477e61805194b18e61f317fd884c Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 14:25:35 +0200 Subject: [PATCH 22/56] Setter https --- packages/server/src/handlers/version-proxy.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/server/src/handlers/version-proxy.ts b/packages/server/src/handlers/version-proxy.ts index 3c60d4c9..83688cb3 100644 --- a/packages/server/src/handlers/version-proxy.ts +++ b/packages/server/src/handlers/version-proxy.ts @@ -8,6 +8,7 @@ const fetchFromBuildVersion = async (request: HonoRequest) => { const reqBuildId = request.query(BUILD_ID_HEADER); const newUrl = new URL(request.url); + newUrl.protocol = "https:"; newUrl.pathname = `/${reqBuildId}${newUrl.pathname}`; newUrl.searchParams.set("is-proxied-req", "true"); From e8994d1a31e010b5665e1d24f67d2c35a8aea7b0 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 14:37:50 +0200 Subject: [PATCH 23/56] loopback sjekk --- packages/server/src/handlers/version-proxy.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/server/src/handlers/version-proxy.ts b/packages/server/src/handlers/version-proxy.ts index 83688cb3..93237c85 100644 --- a/packages/server/src/handlers/version-proxy.ts +++ b/packages/server/src/handlers/version-proxy.ts @@ -33,8 +33,9 @@ const fetchFromBuildVersion = async (request: HonoRequest) => { export const versionProxyHandler: MiddlewareHandler = async (c, next) => { const reqBuildId = c.req.query(BUILD_ID_HEADER); + const isProxied = c.req.query("is-proxied-req"); - if (!reqBuildId || reqBuildId === serverBuildId) { + if (!reqBuildId || reqBuildId === serverBuildId || isProxied) { return next(); } From 0ea5fa5eaf3ce454ae8199b5a5aa99a819458734 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 14:44:20 +0200 Subject: [PATCH 24/56] =?UTF-8?q?Gj=C3=B8r=20flere=20endringer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/client/src/styles/arbeidsgiver-user-menu.module.css | 4 ++-- packages/client/src/styles/main-menu.module.css | 2 +- packages/client/src/styles/simple-user-menu.module.css | 4 ++-- packages/client/src/styles/user-menu-dropdown.module.css | 2 +- packages/client/src/styles/user-menu.module.css | 4 ++-- packages/server/src/views/header/complex-header.ts | 2 +- packages/server/src/views/header/main-menu.ts | 2 +- packages/server/src/views/header/user-menu.ts | 2 +- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/client/src/styles/arbeidsgiver-user-menu.module.css b/packages/client/src/styles/arbeidsgiver-user-menu.module.css index 7e222353..8467935b 100644 --- a/packages/client/src/styles/arbeidsgiver-user-menu.module.css +++ b/packages/client/src/styles/arbeidsgiver-user-menu.module.css @@ -35,13 +35,13 @@ color: var(--a-text-subtle); } -.nameTestNew2 { +.nameTestNew3 { font-weight: var(--a-font-weight-bold); font-size: var(--a-font-size-heading-large); } @media (min-width: 768px) { - .nameTestNew2 { + .nameTestNew3 { font-size: var(--a-font-size-heading-xlarge); } } diff --git a/packages/client/src/styles/main-menu.module.css b/packages/client/src/styles/main-menu.module.css index 1f6f626a..3c2c991a 100644 --- a/packages/client/src/styles/main-menu.module.css +++ b/packages/client/src/styles/main-menu.module.css @@ -27,7 +27,7 @@ gap: var(--a-spacing-3); } -.titleNew3 { +.titleNew4 { font-size: var(--a-font-size-heading-medium); line-height: var(--a-font-line-height-heading-medium); margin-block: 0; diff --git a/packages/client/src/styles/simple-user-menu.module.css b/packages/client/src/styles/simple-user-menu.module.css index 656a2dee..115e2e1e 100644 --- a/packages/client/src/styles/simple-user-menu.module.css +++ b/packages/client/src/styles/simple-user-menu.module.css @@ -4,12 +4,12 @@ gap: var(--a-spacing-2); } -.nameTestNew2 { +.nameTestNew3 { display: grid; } @media (min-width: 768px) { - .nameTestNew2 { + .nameTestNew3 { grid-auto-flow: column; gap: var(--a-spacing-1); } diff --git a/packages/client/src/styles/user-menu-dropdown.module.css b/packages/client/src/styles/user-menu-dropdown.module.css index 76c796b5..5043e524 100644 --- a/packages/client/src/styles/user-menu-dropdown.module.css +++ b/packages/client/src/styles/user-menu-dropdown.module.css @@ -8,7 +8,7 @@ } } -.nameTestNew2 { +.nameTestNew3 { display: inline-block; text-overflow: ellipsis; max-width: 124px; diff --git a/packages/client/src/styles/user-menu.module.css b/packages/client/src/styles/user-menu.module.css index a8d399d6..051cf984 100644 --- a/packages/client/src/styles/user-menu.module.css +++ b/packages/client/src/styles/user-menu.module.css @@ -36,13 +36,13 @@ color: var(--a-text-subtle); } -.nameTestNew2 { +.nameTestNew3 { font-weight: var(--a-font-weight-bold); font-size: var(--a-font-size-heading-large); } @media (min-width: 768px) { - .nameTestNew2 { + .nameTestNew3 { font-size: var(--a-font-size-heading-xlarge); } } diff --git a/packages/server/src/views/header/complex-header.ts b/packages/server/src/views/header/complex-header.ts index 28d8a096..aceb6ed9 100644 --- a/packages/server/src/views/header/complex-header.ts +++ b/packages/server/src/views/header/complex-header.ts @@ -88,7 +88,7 @@ export function ComplexHeader({ ${i18n(lenkeTekstId)} `, )} - Nyere versjon + Enda nyere versjon!
`}
diff --git a/packages/server/src/views/header/main-menu.ts b/packages/server/src/views/header/main-menu.ts index d828bbae..4598b3d8 100644 --- a/packages/server/src/views/header/main-menu.ts +++ b/packages/server/src/views/header/main-menu.ts @@ -20,7 +20,7 @@ export function MainMenu({ return html`
-

${title} nyere versjon

+

${title} enda nyere versjon

${i18n("logged_in")}
-
${name} McNyVersjon
+
${name} McNyVersjon 2
${level !== "Level4" && Alert({ From 5af5412e109b982e82fda6daadc976ede3b2bf15 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 14:57:25 +0200 Subject: [PATCH 25/56] Setter label for internal instans av appen --- .nais/config-internal.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.nais/config-internal.yml b/.nais/config-internal.yml index 4dc362ee..9bbf45ae 100644 --- a/.nais/config-internal.yml +++ b/.nais/config-internal.yml @@ -6,6 +6,7 @@ metadata: namespace: personbruker labels: team: personbruker + dekoratorenType: internal annotations: nginx.ingress.kubernetes.io/proxy-body-size: "256M" nginx.ingress.kubernetes.io/proxy-buffer-size: "16k" From ba6f598944299e92282e66d17bdf319c8c2713e7 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 15:33:15 +0200 Subject: [PATCH 26/56] Setter label for external app. Config for networkpolicy --- .nais/config.yml | 1 + .nais/network-policy.yml | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 .nais/network-policy.yml diff --git a/.nais/config.yml b/.nais/config.yml index 33c0efe7..bad2c10b 100644 --- a/.nais/config.yml +++ b/.nais/config.yml @@ -6,6 +6,7 @@ metadata: namespace: personbruker labels: team: personbruker + dekoratorenType: external annotations: nginx.ingress.kubernetes.io/proxy-body-size: "256M" nginx.ingress.kubernetes.io/proxy-buffer-size: "16k" diff --git a/.nais/network-policy.yml b/.nais/network-policy.yml new file mode 100644 index 00000000..99bd6abc --- /dev/null +++ b/.nais/network-policy.yml @@ -0,0 +1,18 @@ +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: nav-dekoratoren-internal + namespace: personbruker + labels: + team: personbruker +spec: + podSelector: + matchLabels: + dekoratorenType: external + policyTypes: + - Egress + egress: + - to: + - namespaceSelector: + matchLabels: + dekoratorenType: internal From e77e7c815e7fd59ba26ddf143044fa78875a55a9 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 15:43:39 +0200 Subject: [PATCH 27/56] Bruker service host igjen... --- .nais/config-internal.yml | 4 ---- .nais/network-policy.yml | 2 +- packages/server/src/handlers/headers.ts | 4 ++-- packages/server/src/handlers/version-proxy.ts | 4 ++-- 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/.nais/config-internal.yml b/.nais/config-internal.yml index 9bbf45ae..5efd0573 100644 --- a/.nais/config-internal.yml +++ b/.nais/config-internal.yml @@ -24,10 +24,6 @@ spec: prometheus: enabled: true path: /metrics - ingresses: - {{#each ingresses as |url|}} - - {{url}}/{{BUILD_ID}} - {{/each}} accessPolicy: outbound: rules: diff --git a/.nais/network-policy.yml b/.nais/network-policy.yml index 99bd6abc..632503c9 100644 --- a/.nais/network-policy.yml +++ b/.nais/network-policy.yml @@ -13,6 +13,6 @@ spec: - Egress egress: - to: - - namespaceSelector: + - podSelector: matchLabels: dekoratorenType: internal diff --git a/packages/server/src/handlers/headers.ts b/packages/server/src/handlers/headers.ts index 09a4c51f..e11ec5fb 100644 --- a/packages/server/src/handlers/headers.ts +++ b/packages/server/src/handlers/headers.ts @@ -15,10 +15,10 @@ const isAllowedOrigin = (origin?: string) => (ALLOWED_DOMAINS.some((domain) => origin.endsWith(domain)) || origin.includes("localhost:")); -export const getHeaders = (origin: string) => { +export const getHeaders = (origin?: string) => { const headers: Record = {}; - if (isAllowedOrigin(origin)) { + if (origin && isAllowedOrigin(origin)) { headers["Access-Control-Allow-Origin"] = origin; headers["Access-Control-Allow-Methods"] = "GET,HEAD,OPTIONS,POST,PUT"; headers["Access-Control-Allow-Credentials"] = "true"; diff --git a/packages/server/src/handlers/version-proxy.ts b/packages/server/src/handlers/version-proxy.ts index 93237c85..1667509d 100644 --- a/packages/server/src/handlers/version-proxy.ts +++ b/packages/server/src/handlers/version-proxy.ts @@ -8,8 +8,8 @@ const fetchFromBuildVersion = async (request: HonoRequest) => { const reqBuildId = request.query(BUILD_ID_HEADER); const newUrl = new URL(request.url); - newUrl.protocol = "https:"; - newUrl.pathname = `/${reqBuildId}${newUrl.pathname}`; + newUrl.protocol = "http:"; + newUrl.host = `nav-dekoratoren-${reqBuildId}`; newUrl.searchParams.set("is-proxied-req", "true"); console.log(`New url:`, newUrl.toString()); From 9a8ae91ca88a2acdbf5ad5a057dd1c2d5b2bf5f4 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 15:45:03 +0200 Subject: [PATCH 28/56] Revert routing endring for ekstern ingress --- packages/server/src/server.ts | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/server/src/server.ts b/packages/server/src/server.ts index 1b390026..68220479 100644 --- a/packages/server/src/server.ts +++ b/packages/server/src/server.ts @@ -171,17 +171,17 @@ app.get("/", async ({ req, html }) => { ); }); -if (process.env.IS_INTERNAL_APP) { - const prefix = `/${process.env.BUILD_ID}`; - app.route(prefix, app); - app.route(`${prefix}/decorator-next`, app); - app.route(`${prefix}/dekoratoren`, app); - app.route(`${prefix}/common-html/v4/navno`, app); -} else { - app.route("/decorator-next", app); - app.route("/dekoratoren", app); - app.route("/common-html/v4/navno", app); -} +// if (process.env.IS_INTERNAL_APP) { +// const prefix = `/${process.env.BUILD_ID}`; +// app.route(prefix, app); +// app.route(`${prefix}/decorator-next`, app); +// app.route(`${prefix}/dekoratoren`, app); +// app.route(`${prefix}/common-html/v4/navno`, app); +// } else { +app.route("/decorator-next", app); +app.route("/dekoratoren", app); +app.route("/common-html/v4/navno", app); +// } export default { ...app, From fa530169fad9e25749a68eaad3de3054c066acec Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Fri, 5 Jul 2024 15:52:34 +0200 Subject: [PATCH 29/56] =?UTF-8?q?Gj=C3=B8r=20random=20endringer!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/client/src/styles/arbeidsgiver-user-menu.module.css | 4 ++-- packages/client/src/styles/main-menu.module.css | 2 +- packages/client/src/styles/simple-user-menu.module.css | 4 ++-- packages/client/src/styles/user-menu-dropdown.module.css | 2 +- packages/client/src/styles/user-menu.module.css | 4 ++-- packages/server/src/views/header/main-menu.ts | 4 +++- packages/server/src/views/header/user-menu.ts | 4 +++- 7 files changed, 14 insertions(+), 10 deletions(-) diff --git a/packages/client/src/styles/arbeidsgiver-user-menu.module.css b/packages/client/src/styles/arbeidsgiver-user-menu.module.css index 8467935b..a03b2d25 100644 --- a/packages/client/src/styles/arbeidsgiver-user-menu.module.css +++ b/packages/client/src/styles/arbeidsgiver-user-menu.module.css @@ -35,13 +35,13 @@ color: var(--a-text-subtle); } -.nameTestNew3 { +.nameTestNew4 { font-weight: var(--a-font-weight-bold); font-size: var(--a-font-size-heading-large); } @media (min-width: 768px) { - .nameTestNew3 { + .nameTestNew4 { font-size: var(--a-font-size-heading-xlarge); } } diff --git a/packages/client/src/styles/main-menu.module.css b/packages/client/src/styles/main-menu.module.css index 3c2c991a..18678da4 100644 --- a/packages/client/src/styles/main-menu.module.css +++ b/packages/client/src/styles/main-menu.module.css @@ -27,7 +27,7 @@ gap: var(--a-spacing-3); } -.titleNew4 { +.titleNew5 { font-size: var(--a-font-size-heading-medium); line-height: var(--a-font-line-height-heading-medium); margin-block: 0; diff --git a/packages/client/src/styles/simple-user-menu.module.css b/packages/client/src/styles/simple-user-menu.module.css index 115e2e1e..4861a213 100644 --- a/packages/client/src/styles/simple-user-menu.module.css +++ b/packages/client/src/styles/simple-user-menu.module.css @@ -4,12 +4,12 @@ gap: var(--a-spacing-2); } -.nameTestNew3 { +.nameTestNew4 { display: grid; } @media (min-width: 768px) { - .nameTestNew3 { + .nameTestNew4 { grid-auto-flow: column; gap: var(--a-spacing-1); } diff --git a/packages/client/src/styles/user-menu-dropdown.module.css b/packages/client/src/styles/user-menu-dropdown.module.css index 5043e524..017de102 100644 --- a/packages/client/src/styles/user-menu-dropdown.module.css +++ b/packages/client/src/styles/user-menu-dropdown.module.css @@ -8,7 +8,7 @@ } } -.nameTestNew3 { +.nameTestNew4 { display: inline-block; text-overflow: ellipsis; max-width: 124px; diff --git a/packages/client/src/styles/user-menu.module.css b/packages/client/src/styles/user-menu.module.css index 051cf984..eee2807a 100644 --- a/packages/client/src/styles/user-menu.module.css +++ b/packages/client/src/styles/user-menu.module.css @@ -36,13 +36,13 @@ color: var(--a-text-subtle); } -.nameTestNew3 { +.nameTestNew4 { font-weight: var(--a-font-weight-bold); font-size: var(--a-font-size-heading-large); } @media (min-width: 768px) { - .nameTestNew3 { + .nameTestNew4 { font-size: var(--a-font-size-heading-xlarge); } } diff --git a/packages/server/src/views/header/main-menu.ts b/packages/server/src/views/header/main-menu.ts index 4598b3d8..02660b98 100644 --- a/packages/server/src/views/header/main-menu.ts +++ b/packages/server/src/views/header/main-menu.ts @@ -20,7 +20,9 @@ export function MainMenu({ return html`
-

${title} enda nyere versjon

+

+ ${title} enda ENDA nyere versjon +

${i18n("logged_in")}
-
${name} McNyVersjon 2
+
+ ${name} McEndaNyereVersjon +
${level !== "Level4" && Alert({ From 9bc889372c0bd4e377f6321ce1c3055ef938d53a Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 08:33:23 +0200 Subject: [PATCH 30/56] Setter env var for app-name. BUILD_ID -> VERSION_ID --- .github/workflows/build-and-deploy.yml | 4 +-- .github/workflows/deploy.prod.yml | 8 +++--- .nais/config-internal.yml | 8 +++--- .nais/config.yml | 4 +-- packages/client/src/helpers/urls.test.ts | 2 +- packages/client/src/helpers/urls.ts | 4 +-- packages/server/.env.sample | 3 ++- packages/server/src/env/schema.ts | 10 ++++--- packages/server/src/handlers/headers.ts | 4 +-- packages/server/src/handlers/version-proxy.ts | 27 ++++++++----------- packages/server/src/server.ts | 8 ------ packages/shared/constants.ts | 2 +- packages/shared/params.ts | 2 +- 13 files changed, 40 insertions(+), 46 deletions(-) diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index 4960712b..fdb0463b 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -52,11 +52,11 @@ jobs: env: CLUSTER: ${{ inputs.CLUSTER }} RESOURCE: .nais/config.yml - VAR: image=${{ steps.docker-push.outputs.image }},BUILD_ID=${{ github.sha }} + VAR: image=${{ steps.docker-push.outputs.image }},VERSION_ID=${{ github.sha }} VARS: .nais/vars/${{ inputs.DEPLOY_INSTANCE }}.yml - uses: nais/deploy/actions/deploy@v2 env: CLUSTER: ${{ inputs.CLUSTER }} RESOURCE: .nais/config-internal.yml - VAR: image=${{ steps.docker-push.outputs.image }},BUILD_ID=${{ github.sha }} + VAR: image=${{ steps.docker-push.outputs.image }},VERSION_ID=${{ github.sha }} VARS: .nais/vars/${{ inputs.DEPLOY_INSTANCE }}.yml diff --git a/.github/workflows/deploy.prod.yml b/.github/workflows/deploy.prod.yml index a53db7f6..fce7e227 100644 --- a/.github/workflows/deploy.prod.yml +++ b/.github/workflows/deploy.prod.yml @@ -58,7 +58,7 @@ jobs: env: CLUSTER: dev-gcp RESOURCE: .nais/config.yml - VAR: image=${{ needs.build-and-test.outputs.image }},BUILD_ID=${{ github.sha }} + VAR: image=${{ needs.build-and-test.outputs.image }},VERSION_ID=${{ github.sha }} VARS: .nais/vars/dev-stable.yml deploy-beta-navno: @@ -73,7 +73,7 @@ jobs: env: CLUSTER: dev-gcp RESOURCE: .nais/config.yml - VAR: image=${{ needs.build-and-test.outputs.image }},BUILD_ID=${{ github.sha }} + VAR: image=${{ needs.build-and-test.outputs.image }},VERSION_ID=${{ github.sha }} VARS: .nais/vars/dev-beta-navno.yml deploy-prod-next: @@ -88,7 +88,7 @@ jobs: env: CLUSTER: prod-gcp RESOURCE: .nais/config.yml - VAR: image=${{ needs.build-and-test.outputs.image }},BUILD_ID=${{ github.sha }} + VAR: image=${{ needs.build-and-test.outputs.image }},VERSION_ID=${{ github.sha }} VARS: .nais/vars/prod-next.yml deploy-prod: @@ -103,5 +103,5 @@ jobs: env: CLUSTER: prod-gcp RESOURCE: .nais/config.yml - VAR: image=${{ needs.build-and-test.outputs.image }},BUILD_ID=${{ github.sha }} + VAR: image=${{ needs.build-and-test.outputs.image }},VERSION_ID=${{ github.sha }} VARS: .nais/vars/prod.yml diff --git a/.nais/config-internal.yml b/.nais/config-internal.yml index 5efd0573..b60d240f 100644 --- a/.nais/config-internal.yml +++ b/.nais/config-internal.yml @@ -2,7 +2,7 @@ apiVersion: nais.io/v1alpha1 kind: Application metadata: - name: nav-dekoratoren-{{BUILD_ID}} + name: {{appName}}-{{VERSION_ID}} namespace: personbruker labels: team: personbruker @@ -40,8 +40,10 @@ spec: - application: "*" namespace: "*" env: - - name: BUILD_ID - value: {{BUILD_ID}} + - name: APP_NAME + value: {{appName}} + - name: VERSION_ID + value: {{VERSION_ID}} - name: IS_INTERNAL_APP value: "true" {{#each env as |var|}} diff --git a/.nais/config.yml b/.nais/config.yml index bad2c10b..8da02b5f 100644 --- a/.nais/config.yml +++ b/.nais/config.yml @@ -43,8 +43,8 @@ spec: - application: "*" namespace: "*" env: - - name: BUILD_ID - value: {{BUILD_ID}} + - name: VERSION_ID + value: {{VERSION_ID}} {{#each env as |var|}} - name: {{var.name}} value: {{var.value}} diff --git a/packages/client/src/helpers/urls.test.ts b/packages/client/src/helpers/urls.test.ts index 8980cba1..80ae2361 100644 --- a/packages/client/src/helpers/urls.test.ts +++ b/packages/client/src/helpers/urls.test.ts @@ -9,7 +9,7 @@ describe("Endpoint urls", () => { }, env: { APP_URL: "http://localhost:3000", - BUILD_ID: "1234", + VERSION_ID: "1234", }, } as typeof window.__DECORATOR_DATA__; diff --git a/packages/client/src/helpers/urls.ts b/packages/client/src/helpers/urls.ts index c39f4e2b..ca171487 100644 --- a/packages/client/src/helpers/urls.ts +++ b/packages/client/src/helpers/urls.ts @@ -1,7 +1,7 @@ import { Params } from "decorator-shared/params"; import { formatParams } from "decorator-shared/json"; import { env } from "../params"; -import { BUILD_ID_HEADER } from "decorator-shared/constants"; +import { VERSION_ID_HEADER } from "decorator-shared/constants"; export const endpointUrlWithParams = ( endpointUrl: `/${string}`, @@ -12,7 +12,7 @@ export const endpointUrlWithParams = ( ...params, }); - return `${env("APP_URL")}${endpointUrl}?${formattedParams}&${BUILD_ID_HEADER}=${env("BUILD_ID")}`; + return `${env("APP_URL")}${endpointUrl}?${formattedParams}&${VERSION_ID_HEADER}=${env("VERSION_ID")}`; }; export const cdnUrl = (url: string) => `${env("CDN_URL")}${url}`; diff --git a/packages/server/.env.sample b/packages/server/.env.sample index f3f87319..6e559559 100644 --- a/packages/server/.env.sample +++ b/packages/server/.env.sample @@ -22,4 +22,5 @@ UNLEASH_SERVER_API_TOKEN=dummy_token BOOST_ENV=navtest HAS_EXTERNAL_DEV_CONSUMER=false PUZZEL_CUSTOMER_ID=C1302192-8BEC-4EA2-84AB-F4EDE8AC6230 -BUILD_ID=asdf +VERSION_ID=asdf +APP_NAME=nav-dekoratoren diff --git a/packages/server/src/env/schema.ts b/packages/server/src/env/schema.ts index eb39d425..f214df4f 100644 --- a/packages/server/src/env/schema.ts +++ b/packages/server/src/env/schema.ts @@ -2,13 +2,15 @@ import { BoostEnviroment, Environment } from "decorator-shared/params"; import { z } from "zod"; export const serverSchema = z.object({ + APP_NAME: z.string(), APP_URL: z.string().url(), - BUILD_ID: z.string(), + VERSION_ID: z.string(), CDN_URL: z.string().url(), DEKORATOREN_API_URL: z.string().url(), ENONICXP_SERVICES: z.string().url(), ENV: z.enum(["localhost", "dev", "prod"]), HAS_EXTERNAL_DEV_CONSUMER: z.boolean().optional(), + IS_INTERNAL_APP: z.boolean(), IS_LOCAL_PROD: z.boolean().optional(), LOGIN_URL: z.string().url(), NODE_ENV: z.enum(["production", "development"]), @@ -20,13 +22,15 @@ export const serverSchema = z.object({ } satisfies Record); export const serverEnv = { + APP_NAME: process.env.APP_NAME, APP_URL: process.env.APP_URL, - BUILD_ID: process.env.BUILD_ID, + VERSION_ID: process.env.VERSION_ID, CDN_URL: process.env.CDN_URL, DEKORATOREN_API_URL: process.env.DEKORATOREN_API_URL, ENONICXP_SERVICES: process.env.ENONICXP_SERVICES, ENV: process.env.ENV, HAS_EXTERNAL_DEV_CONSUMER: process.env.HAS_EXTERNAL_DEV_CONSUMER === "true", + IS_INTERNAL_APP: process.env.IS_INTERNAL_APP === "true", IS_LOCAL_PROD: process.env.IS_LOCAL_PROD === "true", LOGIN_URL: process.env.LOGIN_URL, NODE_ENV: @@ -43,7 +47,7 @@ export const serverEnv = { export const client_env = { APP_URL: process.env.APP_URL, BOOST_ENV: process.env.BOOST_ENV as BoostEnviroment, - BUILD_ID: process.env.BUILD_ID, + VERSION_ID: process.env.VERSION_ID, CDN_URL: process.env.CDN_URL, ENV: process.env.ENV, LOGIN_SESSION_API_URL: process.env.LOGIN_SESSION_API_URL, diff --git a/packages/server/src/handlers/headers.ts b/packages/server/src/handlers/headers.ts index e11ec5fb..42fd832e 100644 --- a/packages/server/src/handlers/headers.ts +++ b/packages/server/src/handlers/headers.ts @@ -35,11 +35,11 @@ export const getHeaders = (origin?: string) => { }; export const headers: MiddlewareHandler = async (c, next) => { - await next(); - const origin = c.req.header("origin"); Object.entries(getHeaders(origin)).forEach(([name, value]) => c.header(name, value), ); + + return next(); }; diff --git a/packages/server/src/handlers/version-proxy.ts b/packages/server/src/handlers/version-proxy.ts index 1667509d..3fb4355a 100644 --- a/packages/server/src/handlers/version-proxy.ts +++ b/packages/server/src/handlers/version-proxy.ts @@ -1,15 +1,15 @@ import { HonoRequest, MiddlewareHandler } from "hono"; -import { BUILD_ID_HEADER } from "decorator-shared/constants"; -import { getHeaders } from "./headers"; +import { VERSION_ID_HEADER } from "decorator-shared/constants"; -const serverBuildId = process.env.BUILD_ID as string; +const serverBuildId = process.env.VERSION_ID as string; +const appName = process.env.APP_NAME; const fetchFromBuildVersion = async (request: HonoRequest) => { - const reqBuildId = request.query(BUILD_ID_HEADER); + const reqBuildId = request.query(VERSION_ID_HEADER); const newUrl = new URL(request.url); newUrl.protocol = "http:"; - newUrl.host = `nav-dekoratoren-${reqBuildId}`; + newUrl.host = `${appName}-${reqBuildId}`; newUrl.searchParams.set("is-proxied-req", "true"); console.log(`New url:`, newUrl.toString()); @@ -32,7 +32,7 @@ const fetchFromBuildVersion = async (request: HonoRequest) => { }; export const versionProxyHandler: MiddlewareHandler = async (c, next) => { - const reqBuildId = c.req.query(BUILD_ID_HEADER); + const reqBuildId = c.req.query(VERSION_ID_HEADER); const isProxied = c.req.query("is-proxied-req"); if (!reqBuildId || reqBuildId === serverBuildId || isProxied) { @@ -44,16 +44,11 @@ export const versionProxyHandler: MiddlewareHandler = async (c, next) => { ); const response = await fetchFromBuildVersion(c.req); - if (response) { - console.log("Returning response ", { - ...response, - headers: { - ...response.headers, - ...getHeaders(c.req.header("origin")), - }, - }); - return response; + if (!response) { + return next(); } - return next(); + console.log("Returning response ", response); + + return response; }; diff --git a/packages/server/src/server.ts b/packages/server/src/server.ts index 68220479..cf267ee1 100644 --- a/packages/server/src/server.ts +++ b/packages/server/src/server.ts @@ -171,17 +171,9 @@ app.get("/", async ({ req, html }) => { ); }); -// if (process.env.IS_INTERNAL_APP) { -// const prefix = `/${process.env.BUILD_ID}`; -// app.route(prefix, app); -// app.route(`${prefix}/decorator-next`, app); -// app.route(`${prefix}/dekoratoren`, app); -// app.route(`${prefix}/common-html/v4/navno`, app); -// } else { app.route("/decorator-next", app); app.route("/dekoratoren", app); app.route("/common-html/v4/navno", app); -// } export default { ...app, diff --git a/packages/shared/constants.ts b/packages/shared/constants.ts index 2a379ebb..a470e7af 100644 --- a/packages/shared/constants.ts +++ b/packages/shared/constants.ts @@ -1 +1 @@ -export const BUILD_ID_HEADER = "build-id"; +export const VERSION_ID_HEADER = "build-id"; diff --git a/packages/shared/params.ts b/packages/shared/params.ts index d9648bd1..e109df34 100644 --- a/packages/shared/params.ts +++ b/packages/shared/params.ts @@ -82,7 +82,7 @@ export type ParamKey = keyof Params; export const clientEnvSchema = z.object({ APP_URL: z.string(), BOOST_ENV: z.enum(["nav", "navtest"]), - BUILD_ID: z.string(), + VERSION_ID: z.string(), CDN_URL: z.string(), ENV: z.enum(["prod", "dev", "localhost"]), LOGIN_SESSION_API_URL: z.string(), From 549bef20526a3da6565e0432cce324a9ec099481 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 08:39:39 +0200 Subject: [PATCH 31/56] Revert varsel api url inntil videre --- .nais/vars/dev-beta-navno.yml | 2 +- .nais/vars/dev-beta-tms.yml | 2 +- .nais/vars/dev-stable.yml | 2 +- .nais/vars/prod-next.yml | 2 +- .nais/vars/prod.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.nais/vars/dev-beta-navno.yml b/.nais/vars/dev-beta-navno.yml index d9865f98..a1f50f6e 100644 --- a/.nais/vars/dev-beta-navno.yml +++ b/.nais/vars/dev-beta-navno.yml @@ -27,7 +27,7 @@ env: - name: LOGOUT_URL value: https://login.ekstern.dev.nav.no/oauth2/logout - name: VARSEL_API_URL - value: http://tms-varsel-api.min-side/tms-varsel-api + value: https://www.intern.dev.nav.no/tms-varsel-api - name: DEKORATOREN_API_URL value: http://nav-dekoratoren-api/person/nav-dekoratoren-api - name: LOGIN_SESSION_API_URL diff --git a/.nais/vars/dev-beta-tms.yml b/.nais/vars/dev-beta-tms.yml index 0f723359..8e77c94d 100644 --- a/.nais/vars/dev-beta-tms.yml +++ b/.nais/vars/dev-beta-tms.yml @@ -25,7 +25,7 @@ env: - name: LOGOUT_URL value: https://login.ekstern.dev.nav.no/oauth2/logout - name: VARSEL_API_URL - value: http://tms-varsel-api.min-side/tms-varsel-api + value: https://www.intern.dev.nav.no/tms-varsel-api - name: DEKORATOREN_API_URL value: http://nav-dekoratoren-api/person/nav-dekoratoren-api - name: LOGIN_SESSION_API_URL diff --git a/.nais/vars/dev-stable.yml b/.nais/vars/dev-stable.yml index fcd0bbad..b6254349 100644 --- a/.nais/vars/dev-stable.yml +++ b/.nais/vars/dev-stable.yml @@ -27,7 +27,7 @@ env: - name: LOGOUT_URL value: https://login.ekstern.dev.nav.no/oauth2/logout - name: VARSEL_API_URL - value: http://tms-varsel-api.min-side/tms-varsel-api + value: https://www.intern.dev.nav.no/tms-varsel-api - name: DEKORATOREN_API_URL value: http://nav-dekoratoren-api/person/nav-dekoratoren-api - name: LOGIN_SESSION_API_URL diff --git a/.nais/vars/prod-next.yml b/.nais/vars/prod-next.yml index b12acd7b..a20176cc 100644 --- a/.nais/vars/prod-next.yml +++ b/.nais/vars/prod-next.yml @@ -24,7 +24,7 @@ env: - name: LOGOUT_URL value: https://login.nav.no/oauth2/logout - name: VARSEL_API_URL - value: http://tms-varsel-api.min-side/tms-varsel-api + value: https://www.nav.no/tms-varsel-api - name: DEKORATOREN_API_URL value: http://nav-dekoratoren-api/person/nav-dekoratoren-api - name: LOGIN_SESSION_API_URL diff --git a/.nais/vars/prod.yml b/.nais/vars/prod.yml index 8b4af031..4b7ebc0b 100644 --- a/.nais/vars/prod.yml +++ b/.nais/vars/prod.yml @@ -25,7 +25,7 @@ env: - name: LOGOUT_URL value: https://login.nav.no/oauth2/logout - name: VARSEL_API_URL - value: http://tms-varsel-api.min-side/tms-varsel-api + value: https://www.nav.no/tms-varsel-api - name: DEKORATOREN_API_URL value: http://nav-dekoratoren-api/person/nav-dekoratoren-api - name: LOGIN_SESSION_API_URL From 1d6a6830cdcfdb9af2d1b5f74980a86a9f767ed7 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 08:41:22 +0200 Subject: [PATCH 32/56] Test endringer --- packages/client/src/styles/arbeidsgiver-user-menu.module.css | 4 ++-- packages/client/src/styles/main-menu.module.css | 2 +- packages/client/src/styles/simple-user-menu.module.css | 4 ++-- packages/client/src/styles/user-menu-dropdown.module.css | 2 +- packages/client/src/styles/user-menu.module.css | 4 ++-- packages/server/src/views/header/main-menu.ts | 4 +--- packages/server/src/views/header/user-menu.ts | 4 +--- 7 files changed, 10 insertions(+), 14 deletions(-) diff --git a/packages/client/src/styles/arbeidsgiver-user-menu.module.css b/packages/client/src/styles/arbeidsgiver-user-menu.module.css index a03b2d25..a519eafc 100644 --- a/packages/client/src/styles/arbeidsgiver-user-menu.module.css +++ b/packages/client/src/styles/arbeidsgiver-user-menu.module.css @@ -35,13 +35,13 @@ color: var(--a-text-subtle); } -.nameTestNew4 { +.name { font-weight: var(--a-font-weight-bold); font-size: var(--a-font-size-heading-large); } @media (min-width: 768px) { - .nameTestNew4 { + .name { font-size: var(--a-font-size-heading-xlarge); } } diff --git a/packages/client/src/styles/main-menu.module.css b/packages/client/src/styles/main-menu.module.css index 18678da4..f7befd67 100644 --- a/packages/client/src/styles/main-menu.module.css +++ b/packages/client/src/styles/main-menu.module.css @@ -27,7 +27,7 @@ gap: var(--a-spacing-3); } -.titleNew5 { +.title { font-size: var(--a-font-size-heading-medium); line-height: var(--a-font-line-height-heading-medium); margin-block: 0; diff --git a/packages/client/src/styles/simple-user-menu.module.css b/packages/client/src/styles/simple-user-menu.module.css index 4861a213..f2fd172c 100644 --- a/packages/client/src/styles/simple-user-menu.module.css +++ b/packages/client/src/styles/simple-user-menu.module.css @@ -4,12 +4,12 @@ gap: var(--a-spacing-2); } -.nameTestNew4 { +.name { display: grid; } @media (min-width: 768px) { - .nameTestNew4 { + .name { grid-auto-flow: column; gap: var(--a-spacing-1); } diff --git a/packages/client/src/styles/user-menu-dropdown.module.css b/packages/client/src/styles/user-menu-dropdown.module.css index 017de102..4fbcc9c5 100644 --- a/packages/client/src/styles/user-menu-dropdown.module.css +++ b/packages/client/src/styles/user-menu-dropdown.module.css @@ -8,7 +8,7 @@ } } -.nameTestNew4 { +.name { display: inline-block; text-overflow: ellipsis; max-width: 124px; diff --git a/packages/client/src/styles/user-menu.module.css b/packages/client/src/styles/user-menu.module.css index eee2807a..d5a70834 100644 --- a/packages/client/src/styles/user-menu.module.css +++ b/packages/client/src/styles/user-menu.module.css @@ -36,13 +36,13 @@ color: var(--a-text-subtle); } -.nameTestNew4 { +.name { font-weight: var(--a-font-weight-bold); font-size: var(--a-font-size-heading-large); } @media (min-width: 768px) { - .nameTestNew4 { + .name { font-size: var(--a-font-size-heading-xlarge); } } diff --git a/packages/server/src/views/header/main-menu.ts b/packages/server/src/views/header/main-menu.ts index 02660b98..40d8a9d3 100644 --- a/packages/server/src/views/header/main-menu.ts +++ b/packages/server/src/views/header/main-menu.ts @@ -20,9 +20,7 @@ export function MainMenu({ return html`
-

- ${title} enda ENDA nyere versjon -

+

${title} version 8:40

${i18n("logged_in")}
-
- ${name} McEndaNyereVersjon -
+
${name} version 8:40
${level !== "Level4" && Alert({ From 1fa6c6ff6ef5850cfb35af6e1ed900ceb29d52b1 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 08:47:46 +0200 Subject: [PATCH 33/56] Setter min replicas til 1 for internal apps --- .nais/config-internal.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.nais/config-internal.yml b/.nais/config-internal.yml index b60d240f..50767d12 100644 --- a/.nais/config-internal.yml +++ b/.nais/config-internal.yml @@ -37,8 +37,8 @@ spec: {{/each}} inbound: rules: - - application: "*" - namespace: "*" + - application: {{appName}} + namespace: personbruker env: - name: APP_NAME value: {{appName}} @@ -58,7 +58,7 @@ spec: mountPath: /app/config replicas: {{#with replicas}} - min: {{min}} + min: 1 max: {{max}} {{/with}} resources: From c16c754d4b9d09795ac4b0ab61ae2a68f8d2e056 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 08:54:01 +0200 Subject: [PATCH 34/56] Rydder --- .github/workflows/build-and-deploy.yml | 4 ++-- .github/workflows/deploy.prod.yml | 8 ++++---- .nais/config-internal.yml | 4 ++-- .nais/config.yml | 2 +- packages/client/src/helpers/urls.test.ts | 2 +- packages/server/src/env/schema.ts | 6 +++--- packages/server/src/handlers/headers.ts | 2 +- packages/server/src/server.ts | 5 ++--- packages/server/src/views/header/complex-header.ts | 2 +- packages/shared/constants.ts | 2 +- packages/shared/params.ts | 2 +- 11 files changed, 19 insertions(+), 20 deletions(-) diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index fdb0463b..981cf8c4 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -52,11 +52,11 @@ jobs: env: CLUSTER: ${{ inputs.CLUSTER }} RESOURCE: .nais/config.yml - VAR: image=${{ steps.docker-push.outputs.image }},VERSION_ID=${{ github.sha }} + VAR: image=${{ steps.docker-push.outputs.image }},versionId=${{ github.sha }} VARS: .nais/vars/${{ inputs.DEPLOY_INSTANCE }}.yml - uses: nais/deploy/actions/deploy@v2 env: CLUSTER: ${{ inputs.CLUSTER }} RESOURCE: .nais/config-internal.yml - VAR: image=${{ steps.docker-push.outputs.image }},VERSION_ID=${{ github.sha }} + VAR: image=${{ steps.docker-push.outputs.image }},versionId=${{ github.sha }} VARS: .nais/vars/${{ inputs.DEPLOY_INSTANCE }}.yml diff --git a/.github/workflows/deploy.prod.yml b/.github/workflows/deploy.prod.yml index fce7e227..427b4f61 100644 --- a/.github/workflows/deploy.prod.yml +++ b/.github/workflows/deploy.prod.yml @@ -58,7 +58,7 @@ jobs: env: CLUSTER: dev-gcp RESOURCE: .nais/config.yml - VAR: image=${{ needs.build-and-test.outputs.image }},VERSION_ID=${{ github.sha }} + VAR: image=${{ needs.build-and-test.outputs.image }},versionId=${{ github.sha }} VARS: .nais/vars/dev-stable.yml deploy-beta-navno: @@ -73,7 +73,7 @@ jobs: env: CLUSTER: dev-gcp RESOURCE: .nais/config.yml - VAR: image=${{ needs.build-and-test.outputs.image }},VERSION_ID=${{ github.sha }} + VAR: image=${{ needs.build-and-test.outputs.image }},versionId=${{ github.sha }} VARS: .nais/vars/dev-beta-navno.yml deploy-prod-next: @@ -88,7 +88,7 @@ jobs: env: CLUSTER: prod-gcp RESOURCE: .nais/config.yml - VAR: image=${{ needs.build-and-test.outputs.image }},VERSION_ID=${{ github.sha }} + VAR: image=${{ needs.build-and-test.outputs.image }},versionId=${{ github.sha }} VARS: .nais/vars/prod-next.yml deploy-prod: @@ -103,5 +103,5 @@ jobs: env: CLUSTER: prod-gcp RESOURCE: .nais/config.yml - VAR: image=${{ needs.build-and-test.outputs.image }},VERSION_ID=${{ github.sha }} + VAR: image=${{ needs.build-and-test.outputs.image }},versionId=${{ github.sha }} VARS: .nais/vars/prod.yml diff --git a/.nais/config-internal.yml b/.nais/config-internal.yml index 50767d12..1e95eb7e 100644 --- a/.nais/config-internal.yml +++ b/.nais/config-internal.yml @@ -2,7 +2,7 @@ apiVersion: nais.io/v1alpha1 kind: Application metadata: - name: {{appName}}-{{VERSION_ID}} + name: {{appName}}-{{versionId}} namespace: personbruker labels: team: personbruker @@ -43,7 +43,7 @@ spec: - name: APP_NAME value: {{appName}} - name: VERSION_ID - value: {{VERSION_ID}} + value: {{versionId}} - name: IS_INTERNAL_APP value: "true" {{#each env as |var|}} diff --git a/.nais/config.yml b/.nais/config.yml index 8da02b5f..a224ce74 100644 --- a/.nais/config.yml +++ b/.nais/config.yml @@ -44,7 +44,7 @@ spec: namespace: "*" env: - name: VERSION_ID - value: {{VERSION_ID}} + value: {{versionId}} {{#each env as |var|}} - name: {{var.name}} value: {{var.value}} diff --git a/packages/client/src/helpers/urls.test.ts b/packages/client/src/helpers/urls.test.ts index 80ae2361..868302aa 100644 --- a/packages/client/src/helpers/urls.test.ts +++ b/packages/client/src/helpers/urls.test.ts @@ -20,7 +20,7 @@ describe("Endpoint urls", () => { }); expect(url).toBe( - "http://localhost:3000/user-menu?simple=true&feedback=true&build-id=1234", + "http://localhost:3000/user-menu?simple=true&feedback=true&version-id=1234", ); }); }); diff --git a/packages/server/src/env/schema.ts b/packages/server/src/env/schema.ts index f214df4f..4697df8e 100644 --- a/packages/server/src/env/schema.ts +++ b/packages/server/src/env/schema.ts @@ -4,7 +4,6 @@ import { z } from "zod"; export const serverSchema = z.object({ APP_NAME: z.string(), APP_URL: z.string().url(), - VERSION_ID: z.string(), CDN_URL: z.string().url(), DEKORATOREN_API_URL: z.string().url(), ENONICXP_SERVICES: z.string().url(), @@ -18,13 +17,13 @@ export const serverSchema = z.object({ VARSEL_API_URL: z.string().url(), UNLEASH_SERVER_API_TOKEN: z.string(), UNLEASH_SERVER_API_URL: z.string().url(), + VERSION_ID: z.string(), XP_BASE_URL: z.string().url(), } satisfies Record); export const serverEnv = { APP_NAME: process.env.APP_NAME, APP_URL: process.env.APP_URL, - VERSION_ID: process.env.VERSION_ID, CDN_URL: process.env.CDN_URL, DEKORATOREN_API_URL: process.env.DEKORATOREN_API_URL, ENONICXP_SERVICES: process.env.ENONICXP_SERVICES, @@ -39,6 +38,7 @@ export const serverEnv = { UNLEASH_SERVER_API_TOKEN: process.env.UNLEASH_SERVER_API_TOKEN, UNLEASH_SERVER_API_URL: process.env.UNLEASH_SERVER_API_URL, VARSEL_API_URL: process.env.VARSEL_API_URL, + VERSION_ID: process.env.VERSION_ID, XP_BASE_URL: process.env.XP_BASE_URL, }; @@ -47,7 +47,6 @@ export const serverEnv = { export const client_env = { APP_URL: process.env.APP_URL, BOOST_ENV: process.env.BOOST_ENV as BoostEnviroment, - VERSION_ID: process.env.VERSION_ID, CDN_URL: process.env.CDN_URL, ENV: process.env.ENV, LOGIN_SESSION_API_URL: process.env.LOGIN_SESSION_API_URL, @@ -56,5 +55,6 @@ export const client_env = { MIN_SIDE_URL: process.env.MIN_SIDE_URL, PERSONOPPLYSNINGER_URL: process.env.PERSONOPPLYSNINGER_URL, PUZZEL_CUSTOMER_ID: process.env.PUZZEL_CUSTOMER_ID, + VERSION_ID: process.env.VERSION_ID, XP_BASE_URL: process.env.XP_BASE_URL, } satisfies Record; diff --git a/packages/server/src/handlers/headers.ts b/packages/server/src/handlers/headers.ts index 42fd832e..df1f84ab 100644 --- a/packages/server/src/handlers/headers.ts +++ b/packages/server/src/handlers/headers.ts @@ -34,7 +34,7 @@ export const getHeaders = (origin?: string) => { return headers; }; -export const headers: MiddlewareHandler = async (c, next) => { +export const headersMiddleware: MiddlewareHandler = async (c, next) => { const origin = c.req.header("origin"); Object.entries(getHeaders(origin)).forEach(([name, value]) => diff --git a/packages/server/src/server.ts b/packages/server/src/server.ts index cf267ee1..be31f2c9 100644 --- a/packages/server/src/server.ts +++ b/packages/server/src/server.ts @@ -7,7 +7,7 @@ import { cspDirectives } from "./content-security-policy"; import { clientEnv, env } from "./env/server"; import { authHandler } from "./handlers/auth-handler"; import { searchHandler } from "./handlers/search-handler"; -import { headers } from "./handlers/headers"; +import { headersMiddleware } from "./handlers/headers"; import i18n from "./i18n"; import { getMainMenuLinks, mainMenuContextLinks } from "./menu/main-menu"; import { setupMocks } from "./mocks"; @@ -36,7 +36,7 @@ if (env.NODE_ENV === "development" || env.IS_LOCAL_PROD) { ); } -app.use(headers); +app.use(headersMiddleware); if (!process.env.IS_INTERNAL_APP) { app.use(versionProxyHandler); @@ -116,7 +116,6 @@ app.get("/auth", async ({ req, json }) => ); app.get("/ops-messages", async ({ json }) => json(await fetchOpsMessages())); app.get("/header", async ({ req, html }) => { - console.log("Running header"); const data = validParams(req.query()); return html(renderHeader({ data }).render(data)); diff --git a/packages/server/src/views/header/complex-header.ts b/packages/server/src/views/header/complex-header.ts index aceb6ed9..56c400da 100644 --- a/packages/server/src/views/header/complex-header.ts +++ b/packages/server/src/views/header/complex-header.ts @@ -88,7 +88,7 @@ export function ComplexHeader({ ${i18n(lenkeTekstId)} `, )} - Enda nyere versjon! + Version 8:40
`}
diff --git a/packages/shared/constants.ts b/packages/shared/constants.ts index a470e7af..ca7a329b 100644 --- a/packages/shared/constants.ts +++ b/packages/shared/constants.ts @@ -1 +1 @@ -export const VERSION_ID_HEADER = "build-id"; +export const VERSION_ID_HEADER = "version-id"; diff --git a/packages/shared/params.ts b/packages/shared/params.ts index e109df34..83f010c9 100644 --- a/packages/shared/params.ts +++ b/packages/shared/params.ts @@ -82,7 +82,6 @@ export type ParamKey = keyof Params; export const clientEnvSchema = z.object({ APP_URL: z.string(), BOOST_ENV: z.enum(["nav", "navtest"]), - VERSION_ID: z.string(), CDN_URL: z.string(), ENV: z.enum(["prod", "dev", "localhost"]), LOGIN_SESSION_API_URL: z.string(), @@ -91,6 +90,7 @@ export const clientEnvSchema = z.object({ MIN_SIDE_URL: z.string(), PERSONOPPLYSNINGER_URL: z.string(), PUZZEL_CUSTOMER_ID: z.string(), + VERSION_ID: z.string(), XP_BASE_URL: z.string(), }); From 3d0d1f8cae32f54efd1a60b32ab846edc954e158 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 08:58:22 +0200 Subject: [PATCH 35/56] =?UTF-8?q?Setter=20ttl=20per=20milj=C3=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build-and-deploy.yml | 6 ++++-- .nais/config-internal.yml | 2 +- .nais/vars/dev-beta-navno.yml | 1 + .nais/vars/dev-beta-tms.yml | 1 + .nais/vars/dev-stable.yml | 1 + .nais/vars/prod-next.yml | 1 + .nais/vars/prod.yml | 1 + 7 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index 981cf8c4..44fd6ccf 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -48,13 +48,15 @@ jobs: project_id: ${{ vars.NAIS_MANAGEMENT_PROJECT_ID }} identity_provider: ${{ secrets.NAIS_WORKLOAD_IDENTITY_PROVIDER }} image_suffix: ${{ inputs.DEPLOY_INSTANCE }} - - uses: nais/deploy/actions/deploy@v2 + - name: Deploy external app + uses: nais/deploy/actions/deploy@v2 env: CLUSTER: ${{ inputs.CLUSTER }} RESOURCE: .nais/config.yml VAR: image=${{ steps.docker-push.outputs.image }},versionId=${{ github.sha }} VARS: .nais/vars/${{ inputs.DEPLOY_INSTANCE }}.yml - - uses: nais/deploy/actions/deploy@v2 + - name: Deploy internal versioned app + uses: nais/deploy/actions/deploy@v2 env: CLUSTER: ${{ inputs.CLUSTER }} RESOURCE: .nais/config-internal.yml diff --git a/.nais/config-internal.yml b/.nais/config-internal.yml index 1e95eb7e..d9baeb5b 100644 --- a/.nais/config-internal.yml +++ b/.nais/config-internal.yml @@ -14,7 +14,7 @@ metadata: spec: image: {{image}} port: 8089 - ttl: 1h + ttl: {{ttlInternal}} liveness: path: /api/isAlive initialDelay: 10 diff --git a/.nais/vars/dev-beta-navno.yml b/.nais/vars/dev-beta-navno.yml index a1f50f6e..e903798d 100644 --- a/.nais/vars/dev-beta-navno.yml +++ b/.nais/vars/dev-beta-navno.yml @@ -42,6 +42,7 @@ env: value: "navtest" - name: PUZZEL_CUSTOMER_ID value: C1302192-8BEC-4EA2-84AB-F4EDE8AC6230 +ttlInternal: 1h replicas: min: 1 max: 1 diff --git a/.nais/vars/dev-beta-tms.yml b/.nais/vars/dev-beta-tms.yml index 8e77c94d..468ce22b 100644 --- a/.nais/vars/dev-beta-tms.yml +++ b/.nais/vars/dev-beta-tms.yml @@ -40,6 +40,7 @@ env: value: "navtest" - name: PUZZEL_CUSTOMER_ID value: C1302192-8BEC-4EA2-84AB-F4EDE8AC6230 +ttlInternal: 1h replicas: min: 1 max: 1 diff --git a/.nais/vars/dev-stable.yml b/.nais/vars/dev-stable.yml index b6254349..1894a0b2 100644 --- a/.nais/vars/dev-stable.yml +++ b/.nais/vars/dev-stable.yml @@ -42,6 +42,7 @@ env: value: "navtest" - name: PUZZEL_CUSTOMER_ID value: 83BD7664-B38B-4EEE-8D99-200669A32551 +ttlInternal: 1h replicas: min: 1 max: 4 diff --git a/.nais/vars/prod-next.yml b/.nais/vars/prod-next.yml index a20176cc..45ad174a 100644 --- a/.nais/vars/prod-next.yml +++ b/.nais/vars/prod-next.yml @@ -39,6 +39,7 @@ env: value: "nav" - name: PUZZEL_CUSTOMER_ID value: 83BD7664-B38B-4EEE-8D99-200669A32551 +ttlInternal: 1w replicas: min: 2 max: 40 diff --git a/.nais/vars/prod.yml b/.nais/vars/prod.yml index 4b7ebc0b..2ce93645 100644 --- a/.nais/vars/prod.yml +++ b/.nais/vars/prod.yml @@ -40,6 +40,7 @@ env: value: "nav" - name: PUZZEL_CUSTOMER_ID value: 83BD7664-B38B-4EEE-8D99-200669A32551 +ttlInternal: 1w replicas: min: 2 max: 40 From 577c502230a5eac4a2bf3c53f36f20c31dadefaf Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 09:07:04 +0200 Subject: [PATCH 36/56] =?UTF-8?q?Setter=20app=5Fname=20p=C3=A5=20external?= =?UTF-8?q?=20app?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .nais/config.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.nais/config.yml b/.nais/config.yml index a224ce74..c5347c1d 100644 --- a/.nais/config.yml +++ b/.nais/config.yml @@ -43,6 +43,8 @@ spec: - application: "*" namespace: "*" env: + - name: APP_NAME + value: {{appName}} - name: VERSION_ID value: {{versionId}} {{#each env as |var|}} From 29019bff4f2fd2efe0159d70f13255f8c50d1d49 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 09:12:42 +0200 Subject: [PATCH 37/56] Test endring --- packages/server/src/views/header/complex-header.ts | 3 ++- packages/server/src/views/header/main-menu.ts | 3 ++- packages/server/src/views/header/user-menu.ts | 3 ++- packages/shared/constants.ts | 1 + 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/server/src/views/header/complex-header.ts b/packages/server/src/views/header/complex-header.ts index 56c400da..b1971feb 100644 --- a/packages/server/src/views/header/complex-header.ts +++ b/packages/server/src/views/header/complex-header.ts @@ -16,6 +16,7 @@ import { SearchForm } from "../search-form"; import { SkipLink } from "../skip-link"; import { Sticky } from "../sticky"; import { UserMenu } from "../user-menu"; +import { TEST_VERSION_LABEL } from "decorator-shared/constants"; export type ComplexHeaderProps = { frontPageUrl: string; @@ -88,7 +89,7 @@ export function ComplexHeader({ ${i18n(lenkeTekstId)} `, )} - Version 8:40 + ${TEST_VERSION_LABEL}
`}
diff --git a/packages/server/src/views/header/main-menu.ts b/packages/server/src/views/header/main-menu.ts index 40d8a9d3..79e44129 100644 --- a/packages/server/src/views/header/main-menu.ts +++ b/packages/server/src/views/header/main-menu.ts @@ -3,6 +3,7 @@ import cls from "decorator-client/src/styles/main-menu.module.css"; import html, { Template } from "decorator-shared/html"; import { LinkGroup, MainMenuContextLink } from "decorator-shared/types"; import i18n from "../../i18n"; +import { TEST_VERSION_LABEL } from "decorator-shared/constants"; export type MainMenuProps = { title: Template; @@ -20,7 +21,7 @@ export function MainMenu({ return html`
-

${title} version 8:40

+

${title} ${TEST_VERSION_LABEL}

${i18n("logged_in")}
-
${name} version 8:40
+
${name} ${TEST_VERSION_LABEL}
${level !== "Level4" && Alert({ diff --git a/packages/shared/constants.ts b/packages/shared/constants.ts index ca7a329b..8442052c 100644 --- a/packages/shared/constants.ts +++ b/packages/shared/constants.ts @@ -1 +1,2 @@ export const VERSION_ID_HEADER = "version-id"; +export const TEST_VERSION_LABEL = "version 9:08"; From bb5f6c23eb6f72f63eeba1746a0e4658f2341de7 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 09:20:44 +0200 Subject: [PATCH 38/56] Fjerner prod-next --- .github/workflows/deploy.prod.yml | 6 ++-- .nais/vars/prod-next.yml | 51 ------------------------------- 2 files changed, 3 insertions(+), 54 deletions(-) delete mode 100644 .nais/vars/prod-next.yml diff --git a/.github/workflows/deploy.prod.yml b/.github/workflows/deploy.prod.yml index 427b4f61..b7ed3f79 100644 --- a/.github/workflows/deploy.prod.yml +++ b/.github/workflows/deploy.prod.yml @@ -76,7 +76,7 @@ jobs: VAR: image=${{ needs.build-and-test.outputs.image }},versionId=${{ github.sha }} VARS: .nais/vars/dev-beta-navno.yml - deploy-prod-next: + deploy-prod-internal: runs-on: ubuntu-latest needs: build-and-test permissions: @@ -87,9 +87,9 @@ jobs: - uses: nais/deploy/actions/deploy@v2 env: CLUSTER: prod-gcp - RESOURCE: .nais/config.yml + RESOURCE: .nais/config-internal.yml VAR: image=${{ needs.build-and-test.outputs.image }},versionId=${{ github.sha }} - VARS: .nais/vars/prod-next.yml + VARS: .nais/vars/prod.yml deploy-prod: runs-on: ubuntu-latest diff --git a/.nais/vars/prod-next.yml b/.nais/vars/prod-next.yml deleted file mode 100644 index 45ad174a..00000000 --- a/.nais/vars/prod-next.yml +++ /dev/null @@ -1,51 +0,0 @@ -appName: decorator-next -appPath: /decorator-next -ingresses: - - https://www.nav.no/decorator-next -outboundHosts: - - www.nav.no - - navno-unleash-api.nav.cloud.nais.io - - tokendings.dev-gcp.nais.io -env: - - name: ENV - value: prod - - name: APP_URL - value: https://www.nav.no/decorator-next - - name: CDN_URL - value: https://cdn.nav.no/personbruker/decorator-next/public - - name: ENONICXP_SERVICES - value: https://www.nav.no/_/service - - name: SEARCH_API_URL - value: http://navno-search-api/content/decorator-search - - name: XP_BASE_URL - value: https://www.nav.no - - name: LOGIN_URL - value: https://login.nav.no/oauth2/login - - name: LOGOUT_URL - value: https://login.nav.no/oauth2/logout - - name: VARSEL_API_URL - value: https://www.nav.no/tms-varsel-api - - name: DEKORATOREN_API_URL - value: http://nav-dekoratoren-api/person/nav-dekoratoren-api - - name: LOGIN_SESSION_API_URL - value: https://login.nav.no/oauth2/session - - name: MIN_SIDE_URL - value: https://www.nav.no/minside - - name: MIN_SIDE_ARBEIDSGIVER_URL - value: https://arbeidsgiver.nav.no/min-side-arbeidsgiver - - name: PERSONOPPLYSNINGER_URL - value: https://www.nav.no/person/personopplysninger - - name: BOOST_ENV - value: "nav" - - name: PUZZEL_CUSTOMER_ID - value: 83BD7664-B38B-4EEE-8D99-200669A32551 -ttlInternal: 1w -replicas: - min: 2 - max: 40 -resources: - requests: - cpu: 200m - memory: 256Mi - limits: - memory: 1024Mi From f38b82bd2e64e1702743b1fdad6d2fb30dd2d2dd Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 09:29:01 +0200 Subject: [PATCH 39/56] lockfile --- bun.lockb | Bin 552440 -> 552384 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bun.lockb b/bun.lockb index 242f3b8ddb50e422b72142e86eb923249740939f..c0c94e34e63db6dcad1a1e9d35eae3dc6e193d97 100755 GIT binary patch delta 3795 zcmZXXdr(!^6^G9SE&;4jG*&HI;YP=6RRZ$z5mbEOGX;Fq2R2I8MgxchT20ynn3fS@ zr-@A`+fJuZsx^v&BE{0YXql;L6Gg}TVM$`b*p5wVYSM4PuhT!ehjrIF-&*H) z_E~4|b1z?9PiVcK@alJcNmV)3Ilk(guYRv{9RJ1?UxaH-@#n_wi|{<3*JC(u zpG!#f_s^^s4hQuy&e$)8^ZIoY&pROI=XiivgDW+OMx`DBw@3Hn4vIx_*lG#JAu%gC zE!O1POyaOoy+{=*)eH;c_#4=bNIn=Xs_RX>UF?X9O+zB2a=VFKrH-k*FDz5+xL7P~ z3e0Z&gex$KlS=gmWmvBmZ%g(u;+x%s8&aM1;g(pNYch# zIi6;B%{b?L=}25uDh`wp)1C1yi4EcKzFPdQ*ihIDVwYW>Nn9ai_caXrNbPKg@#n>3 zAB$a+L;~!t*n6(dB>tlE$4PZ5bzSAdVT&*uH^fE|zpT0rch4klDm9YS?`Wsp<}H{# z)F8G~>^98K9EH`vY;?M;3?x31gte_vsgK3Rzz&LiBH6L9Cb3W5Hk0^FWnvG+(qPMUsV`mfcz^$je=C(i z>LicGR^&sNJ*Dy3RLX5ddh9Qgoq#1t!Y4Kn_J-|0Mwr+n;`3tRVo$;@iACV)_oH4W z@Umc}YiCZG(W;+9Y9bf4Wgi2xXE7BUtuDm&Xn0w$aIyX_VFD75Nn$#wDy`K4DxU$H zEjCbfGhuVZ2Dws`7_8JRQZH#4e@kpOYzxemc%0ZA;##pGuFWKdDm9N(wj{nSHXr8k z7P74{OzbJ*aC)iHjPFQdG4X1#F|NrZ#;SY?sh5zjos%fGl(>3X>5ufhzOd><6m7uS*2FHu7g86KLFeZo<5Qm9P zbaf^%i4?2bTaE4Jinh_FsC*6aKA4TEVrz+8#IoEylbEj5Go;dK(>VMLv30~5YTZn+ z^{^DNY?t*U60?*lBsEFuv&D*FH;HY`!CSf*yG3l9YM$F>5>F{r0(y_w_Erwww!ud1 z3bAdiT(MH(t73WXwn;2ds*Kc|#FOz0#mb580ooQ^B=#fXT4EcEU2-N8-&1N6Xr59_ z#5Tj`i!Bv<9%eJQvCLJO#B!y60y@VYnTF37`zi4;?aCD}JM%@X1~wgE;Mz^%2P&@s z?b0?|EmjE|Aht%V3f96NvF*0jB}_)*hf4hn)IrL&)-z&1C%z@NPOKW{*OOcCN|DGa zRB8*UJz8}|Vl}Wg#frshVbzk@01FSDo$SvEvzzehRI``3mKv-5z1TkDtzx^x>R|!c zR{Ut+u?FHVVK!I>72Qjyk%Jo)ypG?i!h^)k#M|-v#10X! zB>pYFUaX1O-e@-ViybCz*Cse1)(oqM?Z7vP{gLZ?oqFVrf-Mwui5-O5WRGC?#F|tW zg8g0Wu-H+U#dUa_yq$XtyGGq^e2eOi6DQa@vHl+sJVD%xGxp#^Vs8=m7CS0-5@xNg z#~%}WoA@Ej+Iw8=6!9uz>)HviR^lsk!8-I7tirm~h7Ih+2ji3q-yt3Zvu?DCohE+B zome;8U|i2TgMFngoL1dg*aMh#=#1DoV(W-?=&aazyZ=6@*qxsfyg*z)Y_mU)w~JiF z7De#ExTv~I#3PuXP2Rrdt?pgyYc6b)vTu1iasF#MZuLzcjre{1%2ZaQxjA8 ziPKo*vmaBHNhMc*vu)suX+bx%B64tC(3hT=l$gY+U9tQmp`frN_qp{Ot{n)tJPLdP zS7>#C$obUtA-}FO~oTljcS;?DByN<*M*K%L=KB$E@=|%*zB|4UX{OG*!bM0 zJHPrz(3h&rr^EBbTXM1$?$TV{n4{A_eEsT& z0k@KZw17Pm`}6X-n)Ts*|C+ly>Z^DDua&mJ*r1i!Bl}$VWY*jV0oTxdiO~7l$mo$V zorijU5p*67eQ+o;J1lxoa}VgZWmI!yXjJnf$wy;y3!~8I$rrlgMNz|DO<`1g^ijdh euBkBU>zKVoJvA4KtR_3UZ*k9Yl8Y{m>iQ1|O!P7U delta 3818 zcmXY!4Rns@8ONXJ<$b;Jk$S1Gsu5+{(YM|t5$4_5B?YuOI{^zG}_ZnwGMjvyPTCjWcU!2m4*g|30o<*Ymrs=YK!Xb>H`s zsJW8#{gtHOjq~ReINO)GPPuc!EZTun-Fd}LEo&-1-T!+D!rQfjbm z=4Rn0pvR0ewus@pHVwq{wu%M0ZYQ?Q6_~_!rJ8~35*l+m#KK(GSc0)r%t}s*?Q+LW zVz*K)NaZWF2WC&z61y7W2VdH;xn94hVZ!2|NS>t{W_Lb=mBDO$<+9R|_@^YSZM&7aA=U@BN9?9#pM{l+edE@e#4VLSN9vyTz-^WH zh0Rv^zhM0HV%S2lyY5Sq__xYaNEINFi2o1Fs#38>kmD~X3<17Lr!^T&83Hjubh%){Fw4Z_Ze`FQ%B=w$*g z2sUwbJX2;!^+QMv;6~f_&0w|`L$TiKLSmzamj!Dg*4iayAQ6$oa8gCut8G+10+ucI zxavm2MvJv`1t!s6spm;8(>CrPmJM40vn}3H>;>Xdu}3~-V~LyCmxI4yq}ZX}ENmk)+Cdwn^4Y}OU^X(vUL~#+8|>;$VyIHDkxHXY$@na>ImGE|-7vAa zuoSW3E^81HBb3S~HBjm!#pc7V5!)DrxAX$+Iw>{YR1SWqkXGgp8_ z)*Pi)klL(WH&?6#wnc27SShSn68W%D{M6uJPN2|u8P}HDij@)=`#|??BVHx8QEWSG zwb&-zy93r8whC{{Ydd2n)&sT{zg27(u`TsF{I;N1*ig8ei~j*_Y**nP;;Y2(;dhAb zC9WWTAHP$qoY-4&}8tAg1*W%vWS_Ym=?)NQm)bWnwdiIWoe!Ke~DLfnGcHscS8 zRTH-oJ1lk-_FLF?{1LHZ#MXXWnrg8c;s-G6_)%D)tP)TbYMI}=545(O5j;a|Yiw;h zD|VLnF;uJ@=futt+Yz&eKaaOb&SR78gUk3xbr*xMg*4zxz;yHiX?H3c3XRe$nJ;j3@1awWgq^A|-aA zF86RCl;{?e20QoxH?|O|fS(#ojmD5Vk5nR+Z~kKR-P$pE(*yCM!cf;RbC#`WnEEh| zsZ*kTqiLun(77^20sc=K1073E2x8 L;T%^tKYZu^b;R}S From 312623cb22b910f3c576fe0b214d750cfeda2f51 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 09:38:34 +0200 Subject: [PATCH 40/56] Bruker alltid endpointUrlWithParams ved kall til endepunkter som returnerer HTML-fragmenter --- packages/client/src/main.ts | 9 ++++----- packages/client/src/views/search-menu.ts | 7 +++---- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/packages/client/src/main.ts b/packages/client/src/main.ts index 9277b670..bcf1e69f 100644 --- a/packages/client/src/main.ts +++ b/packages/client/src/main.ts @@ -1,5 +1,4 @@ /// -import { formatParams } from "decorator-shared/json"; import { type Context, type ParamKey } from "decorator-shared/params"; import Cookies from "js-cookie"; import "vite/modulepreload-polyfill"; @@ -13,7 +12,7 @@ import { env, param, updateDecoratorParams } from "./params"; import { useLoadIfActiveSession } from "./screensharing"; import { getHeadAssetsProps } from "decorator-shared/head"; import { buildHtmlElement } from "./helpers/html-element-builder"; -import { cdnUrl } from "./helpers/urls"; +import { cdnUrl, endpointUrlWithParams } from "./helpers/urls"; import.meta.glob("./styles/*.css", { eager: true }); import.meta.glob(["./views/**/*.ts", "!./views/**/*.test.ts"], { eager: true }); @@ -24,9 +23,9 @@ window.addEventListener("paramsupdated", (e) => { if (e.detail.params.language) { Promise.all( ["header", "footer"].map((key) => - fetch( - `${env("APP_URL")}/${key}?${formatParams(window.__DECORATOR_DATA__.params)}`, - ).then((res) => res.text()), + fetch(endpointUrlWithParams(`/${key}`)).then((res) => + res.text(), + ), ), ).then(([header, footer]) => { const headerEl = document.getElementById("decorator-header"); diff --git a/packages/client/src/views/search-menu.ts b/packages/client/src/views/search-menu.ts index 581c9000..955dd375 100644 --- a/packages/client/src/views/search-menu.ts +++ b/packages/client/src/views/search-menu.ts @@ -4,6 +4,7 @@ import cls from "../styles/search-form.module.css"; import { env, param } from "../params"; import { amplitudeEvent } from "../analytics/amplitude"; import { defineCustomElement } from "../custom-elements"; +import { endpointUrlWithParams } from "../helpers/urls"; class SearchMenu extends HTMLElement { form: HTMLFormElement | null = null; @@ -47,13 +48,11 @@ class SearchMenu extends HTMLElement { }); const fetchSearch = (query: string) => { - const url = `${env("APP_URL")}/api/search?${Object.entries({ + const url = endpointUrlWithParams("/api/search", { language: param("language"), context: param("context"), q: encodeURIComponent(query), - }) - .map(([key, value]) => `${key}=${value}`) - .join("&")}`; + }); amplitudeEvent({ eventName: "søk", From 49375d184b7286149483430de22c5bc9fc532321 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 10:20:23 +0200 Subject: [PATCH 41/56] Workflow for deploy spesifikt image til intern app --- .github/workflows/deploy-internal-app.yml | 46 +++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 .github/workflows/deploy-internal-app.yml diff --git a/.github/workflows/deploy-internal-app.yml b/.github/workflows/deploy-internal-app.yml new file mode 100644 index 00000000..e29e0695 --- /dev/null +++ b/.github/workflows/deploy-internal-app.yml @@ -0,0 +1,46 @@ +name: Deploy intern app-versjon +on: + workflow_dispatch: + inputs: + image: + description: "Docker image" + required: true + type: string + versionId: + description: "Version id" + required: true + type: string + cluster: + description: 'Cluster' + required: true + type: choice + options: + - prod-gcp + - dev-gcp + varsFile: + description: 'Vars file' + required: true + type: choice + options: + - dev-beta-navno + - dev-stable + - prod + +jobs: + deploy_internal: + name: Deploy intern app-versjon + runs-on: ubuntu-latest + environment: ${{ inputs.DEPLOY_INSTANCE }} + permissions: + contents: read + id-token: write + steps: + - name: Checkout repo + uses: actions/checkout@v4 + - name: Deploy internal versioned app + uses: nais/deploy/actions/deploy@v2 + env: + CLUSTER: ${{ inputs.cluster }} + RESOURCE: .nais/config-internal.yml + VAR: image=${{ inputs.image }},versionId=${{ inputs.versionId }} + VARS: .nais/vars/${{ inputs.varsFile }}.yml From 497ddc1a60fef0eb5f47bdea11c03f6ef912ae77 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 10:25:16 +0200 Subject: [PATCH 42/56] Tweaker ny workflow --- .github/workflows/deploy-internal-app.yml | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/.github/workflows/deploy-internal-app.yml b/.github/workflows/deploy-internal-app.yml index e29e0695..9413b9ff 100644 --- a/.github/workflows/deploy-internal-app.yml +++ b/.github/workflows/deploy-internal-app.yml @@ -3,22 +3,15 @@ on: workflow_dispatch: inputs: image: - description: "Docker image" + description: "Image version" required: true type: string versionId: description: "Version id" required: true type: string - cluster: - description: 'Cluster' - required: true - type: choice - options: - - prod-gcp - - dev-gcp - varsFile: - description: 'Vars file' + deployInstance: + description: 'Deploy instance' required: true type: choice options: @@ -40,7 +33,7 @@ jobs: - name: Deploy internal versioned app uses: nais/deploy/actions/deploy@v2 env: - CLUSTER: ${{ inputs.cluster }} + CLUSTER: ${{ inputs.deployInstance == 'prod' && 'prod-gcp' || 'dev-gcp' }} RESOURCE: .nais/config-internal.yml - VAR: image=${{ inputs.image }},versionId=${{ inputs.versionId }} - VARS: .nais/vars/${{ inputs.varsFile }}.yml + VAR: image=europe-north1-docker.pkg.dev/nais-management-233d/personbruker/${{ inputs.image }},versionId=${{ inputs.versionId }} + VARS: .nais/vars/${{ inputs.deployInstance }}.yml From 4fbc00f653d00a7c91ed05ba731946827f18e822 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 10:25:33 +0200 Subject: [PATCH 43/56] Description --- .github/workflows/deploy-internal-app.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-internal-app.yml b/.github/workflows/deploy-internal-app.yml index 9413b9ff..9dc7dcb5 100644 --- a/.github/workflows/deploy-internal-app.yml +++ b/.github/workflows/deploy-internal-app.yml @@ -7,7 +7,7 @@ on: required: true type: string versionId: - description: "Version id" + description: "App version id" required: true type: string deployInstance: From e6e23c1955f1339a21468ba9642e0b213078238c Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 10:26:28 +0200 Subject: [PATCH 44/56] Description --- .github/workflows/deploy-internal-app.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-internal-app.yml b/.github/workflows/deploy-internal-app.yml index 9dc7dcb5..70f13f40 100644 --- a/.github/workflows/deploy-internal-app.yml +++ b/.github/workflows/deploy-internal-app.yml @@ -3,7 +3,7 @@ on: workflow_dispatch: inputs: image: - description: "Image version" + description: "Image version (last segment of GAR tag)" required: true type: string versionId: From 62be4e3d6d74c9c30f57ed480bb457ce77593a22 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 10:33:14 +0200 Subject: [PATCH 45/56] Fjerner test-tekster --- packages/server/src/handlers/headers.ts | 4 ++-- packages/server/src/views/header/complex-header.ts | 2 -- packages/server/src/views/header/main-menu.ts | 3 +-- packages/server/src/views/header/user-menu.ts | 3 +-- 4 files changed, 4 insertions(+), 8 deletions(-) diff --git a/packages/server/src/handlers/headers.ts b/packages/server/src/handlers/headers.ts index df1f84ab..ca98f7ff 100644 --- a/packages/server/src/handlers/headers.ts +++ b/packages/server/src/handlers/headers.ts @@ -35,11 +35,11 @@ export const getHeaders = (origin?: string) => { }; export const headersMiddleware: MiddlewareHandler = async (c, next) => { + await next(); + const origin = c.req.header("origin"); Object.entries(getHeaders(origin)).forEach(([name, value]) => c.header(name, value), ); - - return next(); }; diff --git a/packages/server/src/views/header/complex-header.ts b/packages/server/src/views/header/complex-header.ts index b1971feb..81d23e61 100644 --- a/packages/server/src/views/header/complex-header.ts +++ b/packages/server/src/views/header/complex-header.ts @@ -16,7 +16,6 @@ import { SearchForm } from "../search-form"; import { SkipLink } from "../skip-link"; import { Sticky } from "../sticky"; import { UserMenu } from "../user-menu"; -import { TEST_VERSION_LABEL } from "decorator-shared/constants"; export type ComplexHeaderProps = { frontPageUrl: string; @@ -89,7 +88,6 @@ export function ComplexHeader({ ${i18n(lenkeTekstId)} `, )} - ${TEST_VERSION_LABEL}
`}
diff --git a/packages/server/src/views/header/main-menu.ts b/packages/server/src/views/header/main-menu.ts index 79e44129..8f9505f2 100644 --- a/packages/server/src/views/header/main-menu.ts +++ b/packages/server/src/views/header/main-menu.ts @@ -3,7 +3,6 @@ import cls from "decorator-client/src/styles/main-menu.module.css"; import html, { Template } from "decorator-shared/html"; import { LinkGroup, MainMenuContextLink } from "decorator-shared/types"; import i18n from "../../i18n"; -import { TEST_VERSION_LABEL } from "decorator-shared/constants"; export type MainMenuProps = { title: Template; @@ -21,7 +20,7 @@ export function MainMenu({ return html`
-

${title} ${TEST_VERSION_LABEL}

+

${title}

${i18n("logged_in")}
-
${name} ${TEST_VERSION_LABEL}
+
${name}
${level !== "Level4" && Alert({ From 5b76e324cba41c58b05114e43181e0fd9a013707 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 10:33:55 +0200 Subject: [PATCH 46/56] Fjerner test-constant --- packages/shared/constants.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/shared/constants.ts b/packages/shared/constants.ts index 8442052c..ca7a329b 100644 --- a/packages/shared/constants.ts +++ b/packages/shared/constants.ts @@ -1,2 +1 @@ export const VERSION_ID_HEADER = "version-id"; -export const TEST_VERSION_LABEL = "version 9:08"; From af046413c72021363144b5da2e5ed293755c9e46 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 10:36:32 +0200 Subject: [PATCH 47/56] Fjerner logging --- packages/server/src/handlers/version-proxy.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/server/src/handlers/version-proxy.ts b/packages/server/src/handlers/version-proxy.ts index 3fb4355a..1216271a 100644 --- a/packages/server/src/handlers/version-proxy.ts +++ b/packages/server/src/handlers/version-proxy.ts @@ -48,7 +48,5 @@ export const versionProxyHandler: MiddlewareHandler = async (c, next) => { return next(); } - console.log("Returning response ", response); - return response; }; From fd18db026ba167198210f46fd6db45b3dd6328b9 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 11:26:50 +0200 Subject: [PATCH 48/56] Revert headers middleware endringer --- packages/server/src/handlers/headers.ts | 38 ++++++++----------- packages/server/src/handlers/version-proxy.ts | 24 ++++++------ packages/server/src/server.ts | 4 +- 3 files changed, 30 insertions(+), 36 deletions(-) diff --git a/packages/server/src/handlers/headers.ts b/packages/server/src/handlers/headers.ts index ca98f7ff..76939346 100644 --- a/packages/server/src/handlers/headers.ts +++ b/packages/server/src/handlers/headers.ts @@ -15,31 +15,23 @@ const isAllowedOrigin = (origin?: string) => (ALLOWED_DOMAINS.some((domain) => origin.endsWith(domain)) || origin.includes("localhost:")); -export const getHeaders = (origin?: string) => { - const headers: Record = {}; - - if (origin && isAllowedOrigin(origin)) { - headers["Access-Control-Allow-Origin"] = origin; - headers["Access-Control-Allow-Methods"] = "GET,HEAD,OPTIONS,POST,PUT"; - headers["Access-Control-Allow-Credentials"] = "true"; - headers["Access-Control-Allow-Headers"] = - "cookie,Content-Type,Authorization"; - } - - headers["Content-Security-Policy"] = csp; - headers["Cache-Control"] = "private, no-cache, no-store, must-revalidate"; - headers["Pragma"] = "no-cache"; - headers["Expires"] = "-1"; - - return headers; -}; - -export const headersMiddleware: MiddlewareHandler = async (c, next) => { +export const headers: MiddlewareHandler = async (c, next) => { await next(); const origin = c.req.header("origin"); - Object.entries(getHeaders(origin)).forEach(([name, value]) => - c.header(name, value), - ); + if (isAllowedOrigin(origin)) { + c.header("Access-Control-Allow-Origin", origin); + c.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT"); + c.header("Access-Control-Allow-Credentials", "true"); + c.header( + "Access-Control-Allow-Headers", + "cookie,Content-Type,Authorization", + ); + } + + c.header("Content-Security-Policy", csp); + c.header("Cache-Control", "private, no-cache, no-store, must-revalidate"); + c.header("Pragma", "no-cache"); + c.header("Expires", "-1"); }; diff --git a/packages/server/src/handlers/version-proxy.ts b/packages/server/src/handlers/version-proxy.ts index 1216271a..d0611156 100644 --- a/packages/server/src/handlers/version-proxy.ts +++ b/packages/server/src/handlers/version-proxy.ts @@ -1,21 +1,23 @@ import { HonoRequest, MiddlewareHandler } from "hono"; import { VERSION_ID_HEADER } from "decorator-shared/constants"; -const serverBuildId = process.env.VERSION_ID as string; +const serverVersionId = process.env.VERSION_ID as string; const appName = process.env.APP_NAME; const fetchFromBuildVersion = async (request: HonoRequest) => { - const reqBuildId = request.query(VERSION_ID_HEADER); + const reqVersionId = request.query(VERSION_ID_HEADER); - const newUrl = new URL(request.url); - newUrl.protocol = "http:"; - newUrl.host = `${appName}-${reqBuildId}`; - newUrl.searchParams.set("is-proxied-req", "true"); + const urlObj = new URL(request.url); + urlObj.protocol = "http:"; + urlObj.host = `${appName}-${reqVersionId}`; + urlObj.searchParams.set("is-proxied-req", "true"); - console.log(`New url:`, newUrl.toString()); + const url = urlObj.toString(); + + console.log(`Trying to fetch response from ${url}`); try { - const response = await fetch(newUrl.toString(), { + const response = await fetch(url, { method: request.method, headers: request.raw.headers, body: request.raw.body, @@ -32,15 +34,15 @@ const fetchFromBuildVersion = async (request: HonoRequest) => { }; export const versionProxyHandler: MiddlewareHandler = async (c, next) => { - const reqBuildId = c.req.query(VERSION_ID_HEADER); + const reqVersionId = c.req.query(VERSION_ID_HEADER); const isProxied = c.req.query("is-proxied-req"); - if (!reqBuildId || reqBuildId === serverBuildId || isProxied) { + if (!reqVersionId || reqVersionId === serverVersionId || isProxied) { return next(); } console.log( - `Not my id! Wanted ${serverBuildId} - got ${reqBuildId} - url ${c.req.url}`, + `Version id did not match - got ${reqVersionId}, expected ${serverVersionId}`, ); const response = await fetchFromBuildVersion(c.req); diff --git a/packages/server/src/server.ts b/packages/server/src/server.ts index be31f2c9..96f92fc9 100644 --- a/packages/server/src/server.ts +++ b/packages/server/src/server.ts @@ -7,7 +7,7 @@ import { cspDirectives } from "./content-security-policy"; import { clientEnv, env } from "./env/server"; import { authHandler } from "./handlers/auth-handler"; import { searchHandler } from "./handlers/search-handler"; -import { headersMiddleware } from "./handlers/headers"; +import { headers } from "./handlers/headers"; import i18n from "./i18n"; import { getMainMenuLinks, mainMenuContextLinks } from "./menu/main-menu"; import { setupMocks } from "./mocks"; @@ -36,7 +36,7 @@ if (env.NODE_ENV === "development" || env.IS_LOCAL_PROD) { ); } -app.use(headersMiddleware); +app.use(headers); if (!process.env.IS_INTERNAL_APP) { app.use(versionProxyHandler); From a00e827eab7cf103858f28e22f148ab5fa021541 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 11:56:31 +0200 Subject: [PATCH 49/56] =?UTF-8?q?H=C3=A5ndterer=20requests=20fra=20tidlige?= =?UTF-8?q?re=20versjoner?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/client/src/helpers/urls.ts | 4 +- packages/server/src/handlers/version-proxy.ts | 56 ++++++++++++------- packages/shared/constants.ts | 2 +- 3 files changed, 39 insertions(+), 23 deletions(-) diff --git a/packages/client/src/helpers/urls.ts b/packages/client/src/helpers/urls.ts index ca171487..59f99627 100644 --- a/packages/client/src/helpers/urls.ts +++ b/packages/client/src/helpers/urls.ts @@ -1,7 +1,7 @@ import { Params } from "decorator-shared/params"; import { formatParams } from "decorator-shared/json"; import { env } from "../params"; -import { VERSION_ID_HEADER } from "decorator-shared/constants"; +import { VERSION_ID_PARAM } from "decorator-shared/constants"; export const endpointUrlWithParams = ( endpointUrl: `/${string}`, @@ -12,7 +12,7 @@ export const endpointUrlWithParams = ( ...params, }); - return `${env("APP_URL")}${endpointUrl}?${formattedParams}&${VERSION_ID_HEADER}=${env("VERSION_ID")}`; + return `${env("APP_URL")}${endpointUrl}?${formattedParams}&${VERSION_ID_PARAM}=${env("VERSION_ID")}`; }; export const cdnUrl = (url: string) => `${env("CDN_URL")}${url}`; diff --git a/packages/server/src/handlers/version-proxy.ts b/packages/server/src/handlers/version-proxy.ts index d0611156..ad957e89 100644 --- a/packages/server/src/handlers/version-proxy.ts +++ b/packages/server/src/handlers/version-proxy.ts @@ -1,54 +1,70 @@ import { HonoRequest, MiddlewareHandler } from "hono"; -import { VERSION_ID_HEADER } from "decorator-shared/constants"; +import { VERSION_ID_PARAM } from "decorator-shared/constants"; -const serverVersionId = process.env.VERSION_ID as string; -const appName = process.env.APP_NAME; +const SERVER_VERSION_ID = process.env.VERSION_ID as string; +const APP_NAME = process.env.APP_NAME; +const LOOPBACK_HEADER = "x-is-proxy-req"; -const fetchFromBuildVersion = async (request: HonoRequest) => { - const reqVersionId = request.query(VERSION_ID_HEADER); +// Temporarily used to handle requests from previous versions, which did not submit the version-id param +// Can be removed once the "lastversion" instance no longer receives requests +const VERSION_ID_TEMP_FALLBACK = "lastversion"; +const fetchFromOtherVersion = async ( + request: HonoRequest, + targetVersionId: string, +) => { const urlObj = new URL(request.url); urlObj.protocol = "http:"; - urlObj.host = `${appName}-${reqVersionId}`; - urlObj.searchParams.set("is-proxied-req", "true"); + urlObj.host = `${APP_NAME}-${targetVersionId}`; const url = urlObj.toString(); - console.log(`Trying to fetch response from ${url}`); + console.log(`Attemping to proxy request to ${url}`); try { const response = await fetch(url, { method: request.method, - headers: request.raw.headers, + headers: { ...request.raw.headers, [LOOPBACK_HEADER]: "true" }, body: request.raw.body, }); - console.log("Response:", response); response.headers.delete("content-encoding"); return new Response(response.body, response); } catch (e) { - console.log(`Request failed - ${e}`); + console.log(`Request failed for ${url}`, e); return null; } }; export const versionProxyHandler: MiddlewareHandler = async (c, next) => { - const reqVersionId = c.req.query(VERSION_ID_HEADER); - const isProxied = c.req.query("is-proxied-req"); + const reqVersionId = c.req.query(VERSION_ID_PARAM); - if (!reqVersionId || reqVersionId === serverVersionId || isProxied) { + // Prevent request loops. Shouldn't happen, but just in case. :) + const isLoopback = c.req.header(LOOPBACK_HEADER); + if (isLoopback) { + console.error(`Loopback for request to version id ${reqVersionId}!`); + } + + const isClientRequest = !!c.req.header("referer"); + + if ( + reqVersionId === SERVER_VERSION_ID || + isLoopback || + // Requests from clients should be proxied to the fallback instance for now (see comment above) + (!reqVersionId && !isClientRequest) + ) { return next(); } console.log( - `Version id did not match - got ${reqVersionId}, expected ${serverVersionId}`, + `Version id did not match this server version - got ${reqVersionId}, expected ${SERVER_VERSION_ID}`, ); - const response = await fetchFromBuildVersion(c.req); - if (!response) { - return next(); - } + const response = await fetchFromOtherVersion( + c.req, + reqVersionId || VERSION_ID_TEMP_FALLBACK, + ); - return response; + return response || next(); }; diff --git a/packages/shared/constants.ts b/packages/shared/constants.ts index ca7a329b..fa82512c 100644 --- a/packages/shared/constants.ts +++ b/packages/shared/constants.ts @@ -1 +1 @@ -export const VERSION_ID_HEADER = "version-id"; +export const VERSION_ID_PARAM = "version-id"; From a7aeb63cc828934cb81c509fe8c8f0d7f5a8b68b Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 12:14:56 +0200 Subject: [PATCH 50/56] Refactor midlertidig fallback --- packages/server/src/handlers/version-proxy.ts | 48 ++++++++++++------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/packages/server/src/handlers/version-proxy.ts b/packages/server/src/handlers/version-proxy.ts index ad957e89..12ea2a5c 100644 --- a/packages/server/src/handlers/version-proxy.ts +++ b/packages/server/src/handlers/version-proxy.ts @@ -5,9 +5,34 @@ const SERVER_VERSION_ID = process.env.VERSION_ID as string; const APP_NAME = process.env.APP_NAME; const LOOPBACK_HEADER = "x-is-proxy-req"; -// Temporarily used to handle requests from previous versions, which did not submit the version-id param -// Can be removed once the "lastversion" instance no longer receives requests -const VERSION_ID_TEMP_FALLBACK = "lastversion"; +const pathsToProxy = [ + "/api/search", + "/main-menu", + "/auth", + "/header", + "/footer", +]; + +const pathsToProxyOnEmptyVersionId = new Set([ + ...pathsToProxy, + ...pathsToProxy.map((path) => `/dekoratoren${path}`), + ...pathsToProxy.map((path) => `/common-html/v4/navno${path}`), +]); + +// We temporarily need to handle requests for some paths from previous versions, which does not submit the version-id param +// The "lastversion" instance of the internal server has been deployed for this purpose +// Can be removed once the lastversion instance no longer receives requests +const getVersionId = (req: HonoRequest) => { + const reqVersionId = req.query(VERSION_ID_PARAM); + + if (!reqVersionId) { + return pathsToProxyOnEmptyVersionId.has(req.path) + ? "lastversion" + : undefined; + } + + return reqVersionId; +}; const fetchFromOtherVersion = async ( request: HonoRequest, @@ -28,6 +53,7 @@ const fetchFromOtherVersion = async ( body: request.raw.body, }); + // This header won't always match what we actually return in our response and can cause client errors response.headers.delete("content-encoding"); return new Response(response.body, response); @@ -38,7 +64,7 @@ const fetchFromOtherVersion = async ( }; export const versionProxyHandler: MiddlewareHandler = async (c, next) => { - const reqVersionId = c.req.query(VERSION_ID_PARAM); + const reqVersionId = getVersionId(c.req); // Prevent request loops. Shouldn't happen, but just in case. :) const isLoopback = c.req.header(LOOPBACK_HEADER); @@ -46,14 +72,7 @@ export const versionProxyHandler: MiddlewareHandler = async (c, next) => { console.error(`Loopback for request to version id ${reqVersionId}!`); } - const isClientRequest = !!c.req.header("referer"); - - if ( - reqVersionId === SERVER_VERSION_ID || - isLoopback || - // Requests from clients should be proxied to the fallback instance for now (see comment above) - (!reqVersionId && !isClientRequest) - ) { + if (reqVersionId === SERVER_VERSION_ID || isLoopback || !reqVersionId) { return next(); } @@ -61,10 +80,7 @@ export const versionProxyHandler: MiddlewareHandler = async (c, next) => { `Version id did not match this server version - got ${reqVersionId}, expected ${SERVER_VERSION_ID}`, ); - const response = await fetchFromOtherVersion( - c.req, - reqVersionId || VERSION_ID_TEMP_FALLBACK, - ); + const response = await fetchFromOtherVersion(c.req, reqVersionId); return response || next(); }; From 36ba9a2921bcb31286db904b85d901f0c5ddd4f2 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 12:43:02 +0200 Subject: [PATCH 51/56] Bruker igjen service host for tms-varsel-api --- .nais/vars/dev-beta-navno.yml | 2 +- .nais/vars/dev-beta-tms.yml | 2 +- .nais/vars/dev-stable.yml | 2 +- .nais/vars/prod.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.nais/vars/dev-beta-navno.yml b/.nais/vars/dev-beta-navno.yml index e903798d..3e1c840f 100644 --- a/.nais/vars/dev-beta-navno.yml +++ b/.nais/vars/dev-beta-navno.yml @@ -27,7 +27,7 @@ env: - name: LOGOUT_URL value: https://login.ekstern.dev.nav.no/oauth2/logout - name: VARSEL_API_URL - value: https://www.intern.dev.nav.no/tms-varsel-api + value: http://tms-varsel-api.min-side/tms-varsel-api - name: DEKORATOREN_API_URL value: http://nav-dekoratoren-api/person/nav-dekoratoren-api - name: LOGIN_SESSION_API_URL diff --git a/.nais/vars/dev-beta-tms.yml b/.nais/vars/dev-beta-tms.yml index 468ce22b..e65eb276 100644 --- a/.nais/vars/dev-beta-tms.yml +++ b/.nais/vars/dev-beta-tms.yml @@ -25,7 +25,7 @@ env: - name: LOGOUT_URL value: https://login.ekstern.dev.nav.no/oauth2/logout - name: VARSEL_API_URL - value: https://www.intern.dev.nav.no/tms-varsel-api + value: http://tms-varsel-api.min-side/tms-varsel-api - name: DEKORATOREN_API_URL value: http://nav-dekoratoren-api/person/nav-dekoratoren-api - name: LOGIN_SESSION_API_URL diff --git a/.nais/vars/dev-stable.yml b/.nais/vars/dev-stable.yml index 1894a0b2..af0ba548 100644 --- a/.nais/vars/dev-stable.yml +++ b/.nais/vars/dev-stable.yml @@ -27,7 +27,7 @@ env: - name: LOGOUT_URL value: https://login.ekstern.dev.nav.no/oauth2/logout - name: VARSEL_API_URL - value: https://www.intern.dev.nav.no/tms-varsel-api + value: http://tms-varsel-api.min-side/tms-varsel-api - name: DEKORATOREN_API_URL value: http://nav-dekoratoren-api/person/nav-dekoratoren-api - name: LOGIN_SESSION_API_URL diff --git a/.nais/vars/prod.yml b/.nais/vars/prod.yml index 2ce93645..d9748271 100644 --- a/.nais/vars/prod.yml +++ b/.nais/vars/prod.yml @@ -25,7 +25,7 @@ env: - name: LOGOUT_URL value: https://login.nav.no/oauth2/logout - name: VARSEL_API_URL - value: https://www.nav.no/tms-varsel-api + value: http://tms-varsel-api.min-side/tms-varsel-api - name: DEKORATOREN_API_URL value: http://nav-dekoratoren-api/person/nav-dekoratoren-api - name: LOGIN_SESSION_API_URL From b459a487efac793fcdf1c6a8a1ecfd68169fda7a Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 12:47:13 +0200 Subject: [PATCH 52/56] Deployer network-policy --- .github/workflows/deploy.prod.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/.github/workflows/deploy.prod.yml b/.github/workflows/deploy.prod.yml index b7ed3f79..55a6eb78 100644 --- a/.github/workflows/deploy.prod.yml +++ b/.github/workflows/deploy.prod.yml @@ -46,6 +46,23 @@ jobs: project_id: ${{ vars.NAIS_MANAGEMENT_PROJECT_ID }} identity_provider: ${{ secrets.NAIS_WORKLOAD_IDENTITY_PROVIDER }} + deploy-network-policy: + runs-on: ubuntu-latest + needs: build-and-test + permissions: + contents: read + id-token: write + steps: + - uses: actions/checkout@v4 + - uses: nais/deploy/actions/deploy@v2 + env: + CLUSTER: prod-gcp + RESOURCE: .nais/network-policy.yml + - uses: nais/deploy/actions/deploy@v2 + env: + CLUSTER: dev-gcp + RESOURCE: .nais/network-policy.yml + deploy-dev: runs-on: ubuntu-latest needs: build-and-test From c4f5b77985a779ba3cbc5f3c04c941915b9dd751 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 12:49:20 +0200 Subject: [PATCH 53/56] Step names --- .github/workflows/deploy.prod.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy.prod.yml b/.github/workflows/deploy.prod.yml index 55a6eb78..6c919418 100644 --- a/.github/workflows/deploy.prod.yml +++ b/.github/workflows/deploy.prod.yml @@ -54,11 +54,13 @@ jobs: id-token: write steps: - uses: actions/checkout@v4 - - uses: nais/deploy/actions/deploy@v2 + - name: Deploy to prod + uses: nais/deploy/actions/deploy@v2 env: CLUSTER: prod-gcp RESOURCE: .nais/network-policy.yml - - uses: nais/deploy/actions/deploy@v2 + - name: Deploy to dev + uses: nais/deploy/actions/deploy@v2 env: CLUSTER: dev-gcp RESOURCE: .nais/network-policy.yml From 37a6fa95fb150c4357403201e16ac814a01d3122 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 12:55:44 +0200 Subject: [PATCH 54/56] Logger error som error --- packages/server/src/handlers/version-proxy.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/server/src/handlers/version-proxy.ts b/packages/server/src/handlers/version-proxy.ts index 12ea2a5c..4b41999c 100644 --- a/packages/server/src/handlers/version-proxy.ts +++ b/packages/server/src/handlers/version-proxy.ts @@ -58,7 +58,7 @@ const fetchFromOtherVersion = async ( return new Response(response.body, response); } catch (e) { - console.log(`Request failed for ${url}`, e); + console.error(`Request failed for ${url}`, e); return null; } }; From 570d6143751abbac4dd1c27975145a3d3e5a5473 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 12:55:57 +0200 Subject: [PATCH 55/56] Feilmelding --- packages/server/src/handlers/version-proxy.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/server/src/handlers/version-proxy.ts b/packages/server/src/handlers/version-proxy.ts index 4b41999c..66d17fbf 100644 --- a/packages/server/src/handlers/version-proxy.ts +++ b/packages/server/src/handlers/version-proxy.ts @@ -58,7 +58,7 @@ const fetchFromOtherVersion = async ( return new Response(response.body, response); } catch (e) { - console.error(`Request failed for ${url}`, e); + console.error(`Proxy request failed for ${url}`, e); return null; } }; From 8d53b9a8145c1dd51fde891dd4e6acbc6be24f61 Mon Sep 17 00:00:00 2001 From: Anders Nomerstad Date: Mon, 8 Jul 2024 13:04:22 +0200 Subject: [PATCH 56/56] Bedre logging --- packages/server/src/handlers/version-proxy.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/server/src/handlers/version-proxy.ts b/packages/server/src/handlers/version-proxy.ts index 66d17fbf..d0c098a2 100644 --- a/packages/server/src/handlers/version-proxy.ts +++ b/packages/server/src/handlers/version-proxy.ts @@ -58,7 +58,7 @@ const fetchFromOtherVersion = async ( return new Response(response.body, response); } catch (e) { - console.error(`Proxy request failed for ${url}`, e); + console.error(`Proxy request failed for ${url} - ${e}`); return null; } };