From e00e4a35347fa0103ed122e4586b17c1e27cce5a Mon Sep 17 00:00:00 2001 From: Max Burri Date: Fri, 10 Apr 2026 15:27:20 +0200 Subject: [PATCH 1/6] =?UTF-8?q?fix:=20sorting=20spec=20-=20grisons=20has?= =?UTF-8?q?=20changed=20to=20=20graub=C3=BCnden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- e2e/sorting.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/sorting.spec.ts b/e2e/sorting.spec.ts index 5d2a37f4b..86f72abfd 100644 --- a/e2e/sorting.spec.ts +++ b/e2e/sorting.spec.ts @@ -158,7 +158,7 @@ test("Segment sorting with hierarchy", async ({ "Appenzell Ausserrhoden", "Appenzell Innerrhoden", "St Gallen", - "Grisons", + "Graubünden", "Aargau", "Thurgau", "Ticino", From 720cb7586700db3e7a9dfea10335bea95bb7e53c Mon Sep 17 00:00:00 2001 From: Max Burri Date: Fri, 10 Apr 2026 15:28:38 +0200 Subject: [PATCH 2/6] fix: use correct dataset url for red list, adjust test to changes in the dataset --- e2e/filter-position.spec.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/e2e/filter-position.spec.ts b/e2e/filter-position.spec.ts index 2c5036e5e..bc7fe549c 100644 --- a/e2e/filter-position.spec.ts +++ b/e2e/filter-position.spec.ts @@ -4,8 +4,8 @@ const { test, expect } = setup(); test("Filters should be sorted by position", async ({ selectors, actions }) => { await actions.chart.createFrom({ - iri: "https://environment.ld.admin.ch/foen/UBD003002/6", - dataSource: "Int", + iri: "https://environment.ld.admin.ch/foen/ubd003001/10", // "Red List" of species + dataSource: "Prod", }); await selectors.edition.drawerLoaded(); @@ -18,7 +18,7 @@ test("Filters should be sorted by position", async ({ selectors, actions }) => { .getByLabelText("None"); await selectorLocator.click(); - await actions.mui.selectOption("Status"); + await actions.mui.selectOption("Status IUCN"); const panelLeft = await selectors.panels.drawer().within(); await panelLeft.findByText("Selected filters", undefined, { @@ -45,6 +45,5 @@ test("Filters should be sorted by position", async ({ selectors, actions }) => { "Endangered", "Critically endangered", "Regionally extinct", - "Extinct in the world", ]); }); From 77b2bf8ed49865a14da0a1767c01b8fd2c89628d Mon Sep 17 00:00:00 2001 From: Max Burri Date: Fri, 10 Apr 2026 15:56:14 +0200 Subject: [PATCH 3/6] fix: remove misleading icon for last step --- .github/workflows/performance-tests-pr.yaml | 137 +++++++++++++++++--- 1 file changed, 121 insertions(+), 16 deletions(-) diff --git a/.github/workflows/performance-tests-pr.yaml b/.github/workflows/performance-tests-pr.yaml index 009607eed..958f46eed 100644 --- a/.github/workflows/performance-tests-pr.yaml +++ b/.github/workflows/performance-tests-pr.yaml @@ -26,36 +26,141 @@ jobs: sudo cp k6-v0.49.0-linux-amd64/k6 /usr/local/bin/k6 export PATH=$PATH:/usr/local/bin - name: Run k6 test (iteration 1) - run: echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=DataCubeComponents --env ENV=PR --env ENDPOINT=${{ github.event.deployment_status.target_url }}/api/graphql --env CUBE_IRI=https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/9 --env CUBE_LABEL=Photovoltaikanlagen/9 --env CHECK_TIMING=true --env WORKSPACE=${{ github.workspace }} --quiet - > $GITHUB_ENV + run: + echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag + testid=DataCubeComponents --env ENV=PR --env ENDPOINT=${{ + github.event.deployment_status.target_url }}/api/graphql --env + CUBE_IRI=https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/9 + --env CUBE_LABEL=Photovoltaikanlagen/9 --env CHECK_TIMING=true --env + WORKSPACE=${{ github.workspace }} --quiet - + > $GITHUB_ENV - name: Run k6 test (iteration 2) - run: echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=DataCubeComponents --env ENV=PR --env ENDPOINT=${{ github.event.deployment_status.target_url }}/api/graphql --env CUBE_IRI=https://environment.ld.admin.ch/foen/nfi/nfi_C-20/cube/2023-3 --env CUBE_LABEL=NFI/2023-3 --env CHECK_TIMING=true --env WORKSPACE=${{ github.workspace }} --quiet - > $GITHUB_ENV + run: + echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag + testid=DataCubeComponents --env ENV=PR --env ENDPOINT=${{ + github.event.deployment_status.target_url }}/api/graphql --env + CUBE_IRI=https://environment.ld.admin.ch/foen/nfi/nfi_C-20/cube/2023-3 + --env CUBE_LABEL=NFI/2023-3 --env CHECK_TIMING=true --env + WORKSPACE=${{ github.workspace }} --quiet - + > $GITHUB_ENV - name: Run k6 test (iteration 3) - run: echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=DataCubeComponents --env ENV=PR --env ENDPOINT=${{ github.event.deployment_status.target_url }}/api/graphql --env CUBE_IRI=https://energy.ld.admin.ch/elcom/electricityprice --env CUBE_LABEL=Elcom --env CHECK_TIMING=true --env WORKSPACE=${{ github.workspace }} --quiet - > $GITHUB_ENV + run: + echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag + testid=DataCubeComponents --env ENV=PR --env ENDPOINT=${{ + github.event.deployment_status.target_url }}/api/graphql --env + CUBE_IRI=https://energy.ld.admin.ch/elcom/electricityprice --env + CUBE_LABEL=Elcom --env CHECK_TIMING=true --env WORKSPACE=${{ + github.workspace }} --quiet - + > $GITHUB_ENV - name: Run k6 test (iteration 4) - run: echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=DataCubeMetadata --env ENV=PR --env ENDPOINT=${{ github.event.deployment_status.target_url }}/api/graphql --env CUBE_IRI=https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/9 --env CUBE_LABEL=Photovoltaikanlagen/9 --env CHECK_TIMING=true --env WORKSPACE=${{ github.workspace }} --quiet - > $GITHUB_ENV + run: + echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=DataCubeMetadata + --env ENV=PR --env ENDPOINT=${{ + github.event.deployment_status.target_url }}/api/graphql --env + CUBE_IRI=https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/9 + --env CUBE_LABEL=Photovoltaikanlagen/9 --env CHECK_TIMING=true --env + WORKSPACE=${{ github.workspace }} --quiet - + > $GITHUB_ENV - name: Run k6 test (iteration 5) - run: echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=DataCubeMetadata --env ENV=PR --env ENDPOINT=${{ github.event.deployment_status.target_url }}/api/graphql --env CUBE_IRI=https://environment.ld.admin.ch/foen/nfi/nfi_C-20/cube/2023-3 --env CUBE_LABEL=NFI/2023-3 --env CHECK_TIMING=true --env WORKSPACE=${{ github.workspace }} --quiet - > $GITHUB_ENV + run: + echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=DataCubeMetadata + --env ENV=PR --env ENDPOINT=${{ + github.event.deployment_status.target_url }}/api/graphql --env + CUBE_IRI=https://environment.ld.admin.ch/foen/nfi/nfi_C-20/cube/2023-3 + --env CUBE_LABEL=NFI/2023-3 --env CHECK_TIMING=true --env + WORKSPACE=${{ github.workspace }} --quiet - + > $GITHUB_ENV - name: Run k6 test (iteration 6) - run: echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=DataCubeMetadata --env ENV=PR --env ENDPOINT=${{ github.event.deployment_status.target_url }}/api/graphql --env CUBE_IRI=https://energy.ld.admin.ch/elcom/electricityprice --env CUBE_LABEL=Elcom --env CHECK_TIMING=true --env WORKSPACE=${{ github.workspace }} --quiet - > $GITHUB_ENV + run: + echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=DataCubeMetadata + --env ENV=PR --env ENDPOINT=${{ + github.event.deployment_status.target_url }}/api/graphql --env + CUBE_IRI=https://energy.ld.admin.ch/elcom/electricityprice --env + CUBE_LABEL=Elcom --env CHECK_TIMING=true --env WORKSPACE=${{ + github.workspace }} --quiet - + > $GITHUB_ENV - name: Run k6 test (iteration 7) - run: echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=DataCubeObservations --env ENV=PR --env ENDPOINT=${{ github.event.deployment_status.target_url }}/api/graphql --env CUBE_IRI=https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/9 --env CUBE_LABEL=Photovoltaikanlagen/9 --env CHECK_TIMING=true --env WORKSPACE=${{ github.workspace }} --quiet - > $GITHUB_ENV + run: + echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag + testid=DataCubeObservations --env ENV=PR --env ENDPOINT=${{ + github.event.deployment_status.target_url }}/api/graphql --env + CUBE_IRI=https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/9 + --env CUBE_LABEL=Photovoltaikanlagen/9 --env CHECK_TIMING=true --env + WORKSPACE=${{ github.workspace }} --quiet - + > $GITHUB_ENV - name: Run k6 test (iteration 8) - run: echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=DataCubeObservations --env ENV=PR --env ENDPOINT=${{ github.event.deployment_status.target_url }}/api/graphql --env CUBE_IRI=https://environment.ld.admin.ch/foen/nfi/nfi_C-20/cube/2023-3 --env CUBE_LABEL=NFI/2023-3 --env CHECK_TIMING=true --env WORKSPACE=${{ github.workspace }} --quiet - > $GITHUB_ENV + run: + echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag + testid=DataCubeObservations --env ENV=PR --env ENDPOINT=${{ + github.event.deployment_status.target_url }}/api/graphql --env + CUBE_IRI=https://environment.ld.admin.ch/foen/nfi/nfi_C-20/cube/2023-3 + --env CUBE_LABEL=NFI/2023-3 --env CHECK_TIMING=true --env + WORKSPACE=${{ github.workspace }} --quiet - + > $GITHUB_ENV - name: Run k6 test (iteration 9) - run: echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=DataCubeObservations --env ENV=PR --env ENDPOINT=${{ github.event.deployment_status.target_url }}/api/graphql --env CUBE_IRI=https://energy.ld.admin.ch/elcom/electricityprice --env CUBE_LABEL=Elcom --env CHECK_TIMING=true --env WORKSPACE=${{ github.workspace }} --quiet - > $GITHUB_ENV + run: + echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag + testid=DataCubeObservations --env ENV=PR --env ENDPOINT=${{ + github.event.deployment_status.target_url }}/api/graphql --env + CUBE_IRI=https://energy.ld.admin.ch/elcom/electricityprice --env + CUBE_LABEL=Elcom --env CHECK_TIMING=true --env WORKSPACE=${{ + github.workspace }} --quiet - + > $GITHUB_ENV - name: Run k6 test (iteration 10) - run: echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=DataCubePreview --env ENV=PR --env ENDPOINT=${{ github.event.deployment_status.target_url }}/api/graphql --env CUBE_IRI=https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/9 --env CUBE_LABEL=Photovoltaikanlagen/9 --env CHECK_TIMING=true --env WORKSPACE=${{ github.workspace }} --quiet - > $GITHUB_ENV + run: + echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=DataCubePreview + --env ENV=PR --env ENDPOINT=${{ + github.event.deployment_status.target_url }}/api/graphql --env + CUBE_IRI=https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/9 + --env CUBE_LABEL=Photovoltaikanlagen/9 --env CHECK_TIMING=true --env + WORKSPACE=${{ github.workspace }} --quiet - + > $GITHUB_ENV - name: Run k6 test (iteration 11) - run: echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=DataCubePreview --env ENV=PR --env ENDPOINT=${{ github.event.deployment_status.target_url }}/api/graphql --env CUBE_IRI=https://environment.ld.admin.ch/foen/nfi/nfi_C-20/cube/2023-3 --env CUBE_LABEL=NFI/2023-3 --env CHECK_TIMING=true --env WORKSPACE=${{ github.workspace }} --quiet - > $GITHUB_ENV + run: + echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=DataCubePreview + --env ENV=PR --env ENDPOINT=${{ + github.event.deployment_status.target_url }}/api/graphql --env + CUBE_IRI=https://environment.ld.admin.ch/foen/nfi/nfi_C-20/cube/2023-3 + --env CUBE_LABEL=NFI/2023-3 --env CHECK_TIMING=true --env + WORKSPACE=${{ github.workspace }} --quiet - + > $GITHUB_ENV - name: Run k6 test (iteration 12) - run: echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=DataCubePreview --env ENV=PR --env ENDPOINT=${{ github.event.deployment_status.target_url }}/api/graphql --env CUBE_IRI=https://energy.ld.admin.ch/elcom/electricityprice --env CUBE_LABEL=Elcom --env CHECK_TIMING=true --env WORKSPACE=${{ github.workspace }} --quiet - > $GITHUB_ENV + run: + echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=DataCubePreview + --env ENV=PR --env ENDPOINT=${{ + github.event.deployment_status.target_url }}/api/graphql --env + CUBE_IRI=https://energy.ld.admin.ch/elcom/electricityprice --env + CUBE_LABEL=Elcom --env CHECK_TIMING=true --env WORKSPACE=${{ + github.workspace }} --quiet - + > $GITHUB_ENV - name: Run k6 test (iteration 13) - run: echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=PossibleFilters --env ENV=PR --env ENDPOINT=${{ github.event.deployment_status.target_url }}/api/graphql --env CUBE_IRI=https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/9 --env CUBE_LABEL=Photovoltaikanlagen/9 --env CHECK_TIMING=true --env WORKSPACE=${{ github.workspace }} --quiet - > $GITHUB_ENV + run: + echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=PossibleFilters + --env ENV=PR --env ENDPOINT=${{ + github.event.deployment_status.target_url }}/api/graphql --env + CUBE_IRI=https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/9 + --env CUBE_LABEL=Photovoltaikanlagen/9 --env CHECK_TIMING=true --env + WORKSPACE=${{ github.workspace }} --quiet - + > $GITHUB_ENV - name: Run k6 test (iteration 14) - run: echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=PossibleFilters --env ENV=PR --env ENDPOINT=${{ github.event.deployment_status.target_url }}/api/graphql --env CUBE_IRI=https://environment.ld.admin.ch/foen/nfi/nfi_C-20/cube/2023-3 --env CUBE_LABEL=NFI/2023-3 --env CHECK_TIMING=true --env WORKSPACE=${{ github.workspace }} --quiet - > $GITHUB_ENV + run: + echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=PossibleFilters + --env ENV=PR --env ENDPOINT=${{ + github.event.deployment_status.target_url }}/api/graphql --env + CUBE_IRI=https://environment.ld.admin.ch/foen/nfi/nfi_C-20/cube/2023-3 + --env CUBE_LABEL=NFI/2023-3 --env CHECK_TIMING=true --env + WORKSPACE=${{ github.workspace }} --quiet - + > $GITHUB_ENV - name: Run k6 test (iteration 15) - run: echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=PossibleFilters --env ENV=PR --env ENDPOINT=${{ github.event.deployment_status.target_url }}/api/graphql --env CUBE_IRI=https://energy.ld.admin.ch/elcom/electricityprice --env CUBE_LABEL=Elcom --env CHECK_TIMING=true --env WORKSPACE=${{ github.workspace }} --quiet - > $GITHUB_ENV - - name: GQL performance tests ❌ + run: + echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=PossibleFilters + --env ENV=PR --env ENDPOINT=${{ + github.event.deployment_status.target_url }}/api/graphql --env + CUBE_IRI=https://energy.ld.admin.ch/elcom/electricityprice --env + CUBE_LABEL=Elcom --env CHECK_TIMING=true --env WORKSPACE=${{ + github.workspace }} --quiet - + > $GITHUB_ENV + - name: GQL performance tests if: ${{ env.SUMMARY != '' }} run: | curl --request POST --url https://api.github.com/repos/${{ github.repository }}/statuses/${{ github.sha }} --header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' --header 'content-type: application/json' --data '{ From 95e6ddbf8417ccd3dc27b7c005cea15146959d01 Mon Sep 17 00:00:00 2001 From: Max Burri Date: Fri, 10 Apr 2026 16:51:58 +0200 Subject: [PATCH 4/6] fix: add warmups to handle cold start issues on vercel deployments --- k6/performance-tests/graphql/DataCubeComponents.js | 13 ++++++++++--- k6/performance-tests/graphql/DataCubeMetadata.js | 14 ++++++++++---- .../graphql/DataCubeObservations.js | 13 ++++++++++--- k6/performance-tests/graphql/DataCubePreview.js | 14 ++++++++++---- k6/performance-tests/graphql/PossibleFilters.js | 14 ++++++++++---- 5 files changed, 50 insertions(+), 18 deletions(-) diff --git a/k6/performance-tests/graphql/DataCubeComponents.js b/k6/performance-tests/graphql/DataCubeComponents.js index 2f85c072c..fa9fb9ec8 100644 --- a/k6/performance-tests/graphql/DataCubeComponents.js +++ b/k6/performance-tests/graphql/DataCubeComponents.js @@ -37,7 +37,7 @@ const variables = { /** @type {import("k6/options").Options} */ export const options = { - iterations: 2, + iterations: 3, }; const headers = { @@ -51,6 +51,7 @@ export default function Components() { const res = http.post(endpoint, JSON.stringify({ query, variables }), { headers, + tags: { warmup: exec.scenario.iterationInTest === 0 ? "true" : "false" }, }); check(res, { @@ -77,10 +78,16 @@ export default function Components() { } export function handleSummary(data) { - if (durationExceedsThreshold(data.metrics.http_req_duration.values.avg)) { + const warmupMetrics = data.metrics["http_req_duration{warmup:true}"]; + const actualMetrics = data.metrics["http_req_duration{warmup:false}"]; + const avgDuration = actualMetrics + ? actualMetrics.values.avg + : data.metrics.http_req_duration.values.avg; + + if (durationExceedsThreshold(avgDuration)) { return { stdout: `${Math.round( - (100 * data.metrics.http_req_duration.values.avg) / + (100 * avgDuration) / metadata.queries.DataCubeComponents.expectedDuration )}% – DataCubeComponents – ${cubeLabel}. `, }; diff --git a/k6/performance-tests/graphql/DataCubeMetadata.js b/k6/performance-tests/graphql/DataCubeMetadata.js index 6c7662d83..efd30e28b 100644 --- a/k6/performance-tests/graphql/DataCubeMetadata.js +++ b/k6/performance-tests/graphql/DataCubeMetadata.js @@ -37,7 +37,7 @@ const variables = { /** @type {import("k6/options").Options} */ export const options = { - iterations: 2, + iterations: 3, }; const headers = { @@ -51,6 +51,7 @@ export default function Components() { const res = http.post(endpoint, JSON.stringify({ query, variables }), { headers, + tags: { warmup: exec.scenario.iterationInTest === 0 ? "true" : "false" }, }); check(res, { @@ -74,11 +75,16 @@ export default function Components() { } export function handleSummary(data) { - if (durationExceedsThreshold(data.metrics.http_req_duration.values.avg)) { + const warmupMetrics = data.metrics["http_req_duration{warmup:true}"]; + const actualMetrics = data.metrics["http_req_duration{warmup:false}"]; + const avgDuration = actualMetrics + ? actualMetrics.values.avg + : data.metrics.http_req_duration.values.avg; + + if (durationExceedsThreshold(avgDuration)) { return { stdout: `${Math.round( - (100 * data.metrics.http_req_duration.values.avg) / - metadata.queries.DataCubeMetadata.expectedDuration + (100 * avgDuration) / metadata.queries.DataCubeMetadata.expectedDuration )}% – DataCubeMetadata – ${cubeLabel}. `, }; } diff --git a/k6/performance-tests/graphql/DataCubeObservations.js b/k6/performance-tests/graphql/DataCubeObservations.js index 9cef80a5f..06cb7712c 100644 --- a/k6/performance-tests/graphql/DataCubeObservations.js +++ b/k6/performance-tests/graphql/DataCubeObservations.js @@ -38,7 +38,7 @@ const variables = { /** @type {import("k6/options").Options} */ export const options = { - iterations: 2, + iterations: 3, }; const headers = { @@ -52,6 +52,7 @@ export default function Observations() { const res = http.post(endpoint, JSON.stringify({ query, variables }), { headers, + tags: { warmup: exec.scenario.iterationInTest === 0 ? "true" : "false" }, }); check(res, { @@ -77,10 +78,16 @@ export default function Observations() { } export function handleSummary(data) { - if (durationExceedsThreshold(data.metrics.http_req_duration.values.avg)) { + const warmupMetrics = data.metrics["http_req_duration{warmup:true}"]; + const actualMetrics = data.metrics["http_req_duration{warmup:false}"]; + const avgDuration = actualMetrics + ? actualMetrics.values.avg + : data.metrics.http_req_duration.values.avg; + + if (durationExceedsThreshold(avgDuration)) { return { stdout: `${Math.round( - (100 * data.metrics.http_req_duration.values.avg) / + (100 * avgDuration) / metadata.queries.DataCubeObservations.expectedDuration )}% – DataCubeObservations – ${cubeLabel}. `, }; diff --git a/k6/performance-tests/graphql/DataCubePreview.js b/k6/performance-tests/graphql/DataCubePreview.js index ed89d125b..1d6de5905 100644 --- a/k6/performance-tests/graphql/DataCubePreview.js +++ b/k6/performance-tests/graphql/DataCubePreview.js @@ -37,7 +37,7 @@ const variables = { /** @type {import("k6/options").Options} */ export const options = { - iterations: 2, + iterations: 3, }; const headers = { @@ -51,6 +51,7 @@ export default function Components() { const res = http.post(endpoint, JSON.stringify({ query, variables }), { headers, + tags: { warmup: exec.scenario.iterationInTest === 0 ? "true" : "false" }, }); check(res, { @@ -79,11 +80,16 @@ export default function Components() { } export function handleSummary(data) { - if (durationExceedsThreshold(data.metrics.http_req_duration.values.avg)) { + const warmupMetrics = data.metrics["http_req_duration{warmup:true}"]; + const actualMetrics = data.metrics["http_req_duration{warmup:false}"]; + const avgDuration = actualMetrics + ? actualMetrics.values.avg + : data.metrics.http_req_duration.values.avg; + + if (durationExceedsThreshold(avgDuration)) { return { stdout: `${Math.round( - (100 * data.metrics.http_req_duration.values.avg) / - metadata.queries.DataCubePreview.expectedDuration + (100 * avgDuration) / metadata.queries.DataCubePreview.expectedDuration )}% – DataCubePreview – ${cubeLabel}. `, }; } diff --git a/k6/performance-tests/graphql/PossibleFilters.js b/k6/performance-tests/graphql/PossibleFilters.js index 81e7e62c1..e07606db2 100644 --- a/k6/performance-tests/graphql/PossibleFilters.js +++ b/k6/performance-tests/graphql/PossibleFilters.js @@ -40,7 +40,7 @@ const variables = { /** @type {import("k6/options").Options} */ export const options = { - iterations: 2, + iterations: 3, }; const headers = { @@ -54,6 +54,7 @@ export default function Observations() { const res = http.post(endpoint, JSON.stringify({ query, variables }), { headers, + tags: { warmup: exec.scenario.iterationInTest === 0 ? "true" : "false" }, }); check(res, { @@ -77,11 +78,16 @@ export default function Observations() { } export function handleSummary(data) { - if (durationExceedsThreshold(data.metrics.http_req_duration.values.avg)) { + const warmupMetrics = data.metrics["http_req_duration{warmup:true}"]; + const actualMetrics = data.metrics["http_req_duration{warmup:false}"]; + const avgDuration = actualMetrics + ? actualMetrics.values.avg + : data.metrics.http_req_duration.values.avg; + + if (durationExceedsThreshold(avgDuration)) { return { stdout: `${Math.round( - (100 * data.metrics.http_req_duration.values.avg) / - metadata.queries.PossibleFilters.expectedDuration + (100 * avgDuration) / metadata.queries.PossibleFilters.expectedDuration )}% – PossibleFilters – ${cubeLabel}. `, }; } From 31781d0fe8d5e402bc6c8615314f5e91a2194d44 Mon Sep 17 00:00:00 2001 From: Max Burri Date: Fri, 10 Apr 2026 17:02:44 +0200 Subject: [PATCH 5/6] fix: try with photovoltaikanlagen/10 --- .github/workflows/performance-tests-pr.yaml | 6 +++--- k6/performance-tests/data.json | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/performance-tests-pr.yaml b/.github/workflows/performance-tests-pr.yaml index 958f46eed..5afc25ec0 100644 --- a/.github/workflows/performance-tests-pr.yaml +++ b/.github/workflows/performance-tests-pr.yaml @@ -30,8 +30,8 @@ jobs: echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=DataCubeComponents --env ENV=PR --env ENDPOINT=${{ github.event.deployment_status.target_url }}/api/graphql --env - CUBE_IRI=https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/9 - --env CUBE_LABEL=Photovoltaikanlagen/9 --env CHECK_TIMING=true --env + CUBE_IRI=https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/10 + --env CUBE_LABEL=Photovoltaikanlagen/10 --env CHECK_TIMING=true --env WORKSPACE=${{ github.workspace }} --quiet - > $GITHUB_ENV - name: Run k6 test (iteration 2) @@ -160,7 +160,7 @@ jobs: CUBE_LABEL=Elcom --env CHECK_TIMING=true --env WORKSPACE=${{ github.workspace }} --quiet - > $GITHUB_ENV - - name: GQL performance tests + - name: GQL performance tests ❌ if: ${{ env.SUMMARY != '' }} run: | curl --request POST --url https://api.github.com/repos/${{ github.repository }}/statuses/${{ github.sha }} --header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' --header 'content-type: application/json' --data '{ diff --git a/k6/performance-tests/data.json b/k6/performance-tests/data.json index 1d90e8b16..ce3bde45c 100644 --- a/k6/performance-tests/data.json +++ b/k6/performance-tests/data.json @@ -1,7 +1,7 @@ [ { - "iri": "https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/9", - "label": "Photovoltaikanlagen/9", + "iri": "https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/10", + "label": "Photovoltaikanlagen/10", "filters": { "https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/Kanton": { "type": "single", From e80d75aaab91cb93d8c5ca3bbd1357e968d002d6 Mon Sep 17 00:00:00 2001 From: Max Burri Date: Fri, 10 Apr 2026 17:11:45 +0200 Subject: [PATCH 6/6] fix: attempt #1 --- .github/workflows/performance-tests-pr.yaml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/performance-tests-pr.yaml b/.github/workflows/performance-tests-pr.yaml index 5afc25ec0..ae7254827 100644 --- a/.github/workflows/performance-tests-pr.yaml +++ b/.github/workflows/performance-tests-pr.yaml @@ -18,7 +18,7 @@ jobs: uses: actions/checkout@v6 - name: Send an HTTP request to start up the server run: | - curl -s '${{ github.event.deployment_status.target_url }}/api/graphql' -X 'POST' -H 'Content-Type: application/json' -d '{"operationName":"DataCubeObservations","variables":{"locale":"en","sourceType":"sparql","sourceUrl":"https://lindas.admin.ch/query","cubeFilter":{"iri":"https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/9","filters":{"https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/Kanton":{"type":"single","value":"https://ld.admin.ch/canton/1"}}}},"query":"query DataCubeObservations($sourceType: String!, $sourceUrl: DataSourceUrl!, $locale: String!, $cubeFilter: DataCubeObservationFilter!) { dataCubeObservations(sourceType: $sourceType, sourceUrl: $sourceUrl, locale: $locale, cubeFilter: $cubeFilter) }"}' > /dev/null + curl -s '${{ github.event.deployment_status.target_url }}/api/graphql' -X 'POST' -H 'Content-Type: application/json' -d '{"operationName":"DataCubeObservations","variables":{"locale":"en","sourceType":"sparql","sourceUrl":"https://lindas.admin.ch/query","cubeFilter":{"iri":"https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/10","filters":{"https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/Kanton":{"type":"single","value":"https://ld.admin.ch/canton/1"}}}},"query":"query DataCubeObservations($sourceType: String!, $sourceUrl: DataSourceUrl!, $locale: String!, $cubeFilter: DataCubeObservationFilter!) { dataCubeObservations(sourceType: $sourceType, sourceUrl: $sourceUrl, locale: $locale, cubeFilter: $cubeFilter) }"}' > /dev/null - name: Download, unzip and install k6 binary run: | wget https://github.com/grafana/k6/releases/download/v0.49.0/k6-v0.49.0-linux-amd64.tar.gz @@ -57,8 +57,8 @@ jobs: echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=DataCubeMetadata --env ENV=PR --env ENDPOINT=${{ github.event.deployment_status.target_url }}/api/graphql --env - CUBE_IRI=https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/9 - --env CUBE_LABEL=Photovoltaikanlagen/9 --env CHECK_TIMING=true --env + CUBE_IRI=https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/10 + --env CUBE_LABEL=Photovoltaikanlagen/10 --env CHECK_TIMING=true --env WORKSPACE=${{ github.workspace }} --quiet - > $GITHUB_ENV - name: Run k6 test (iteration 5) @@ -84,8 +84,8 @@ jobs: echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=DataCubeObservations --env ENV=PR --env ENDPOINT=${{ github.event.deployment_status.target_url }}/api/graphql --env - CUBE_IRI=https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/9 - --env CUBE_LABEL=Photovoltaikanlagen/9 --env CHECK_TIMING=true --env + CUBE_IRI=https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/10 + --env CUBE_LABEL=Photovoltaikanlagen/10 --env CHECK_TIMING=true --env WORKSPACE=${{ github.workspace }} --quiet - > $GITHUB_ENV - name: Run k6 test (iteration 8) @@ -111,8 +111,8 @@ jobs: echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=DataCubePreview --env ENV=PR --env ENDPOINT=${{ github.event.deployment_status.target_url }}/api/graphql --env - CUBE_IRI=https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/9 - --env CUBE_LABEL=Photovoltaikanlagen/9 --env CHECK_TIMING=true --env + CUBE_IRI=https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/10 + --env CUBE_LABEL=Photovoltaikanlagen/10 --env CHECK_TIMING=true --env WORKSPACE=${{ github.workspace }} --quiet - > $GITHUB_ENV - name: Run k6 test (iteration 11) @@ -138,8 +138,8 @@ jobs: echo "SUMMARY=${{ env.SUMMARY }}$(k6 run --tag testid=PossibleFilters --env ENV=PR --env ENDPOINT=${{ github.event.deployment_status.target_url }}/api/graphql --env - CUBE_IRI=https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/9 - --env CUBE_LABEL=Photovoltaikanlagen/9 --env CHECK_TIMING=true --env + CUBE_IRI=https://energy.ld.admin.ch/sfoe/bfe_ogd84_einmalverguetung_fuer_photovoltaikanlagen/10 + --env CUBE_LABEL=Photovoltaikanlagen/10 --env CHECK_TIMING=true --env WORKSPACE=${{ github.workspace }} --quiet - > $GITHUB_ENV - name: Run k6 test (iteration 14)