From 141cbc36aa3b5eb79a0b2a5d0528a4252184e326 Mon Sep 17 00:00:00 2001 From: Daniel Strebel Date: Thu, 19 Dec 2024 11:06:00 +0000 Subject: [PATCH 01/13] feat: base pipeline builder off alpine --- tools/pipeline-runner/Dockerfile | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tools/pipeline-runner/Dockerfile b/tools/pipeline-runner/Dockerfile index 27c1ed8d..80b33def 100644 --- a/tools/pipeline-runner/Dockerfile +++ b/tools/pipeline-runner/Dockerfile @@ -12,10 +12,14 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM google/cloud-sdk:alpine +FROM alpine:latest + +COPY --from=google/cloud-sdk:alpine /google-cloud-sdk /google-cloud-sdk +ENV PATH="/google-cloud-sdk/bin:${PATH}" # Install additional tools RUN apk add --no-cache \ + bash \ jq \ libxml2-utils \ maven \ From eef26f445eb9e7479035ac5f19bdebd9f5031e26 Mon Sep 17 00:00:00 2001 From: Daniel Strebel Date: Thu, 19 Dec 2024 11:13:59 +0000 Subject: [PATCH 02/13] fix: broken link linter fix --- references/openapi-mock/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/references/openapi-mock/README.md b/references/openapi-mock/README.md index e35e5306..dc80158b 100644 --- a/references/openapi-mock/README.md +++ b/references/openapi-mock/README.md @@ -60,7 +60,7 @@ apigeecli apis create bundle \ If you just need to quickly generate a mock API proxy from your OpenAPI 3 spec, the [apigee-go-gen](https://apigee.github.io/apigee-go-gen/installation/) tool can help. -The tool's [mock oas](https://apigee.github.io/apigee-go-gen/mock/mock-openapi-spec/) command automates the process, saving you time and effort. +The tool's [mock oas](https://apigee.github.io/apigee-go-gen/mock/mock-openapi-description/) command automates the process, saving you time and effort. Here is an example of how to generate a mock API proxy using the `apigee-go-gen` tool. From e1c307e6dc1659cd164a0fdf6ae13b046e31774b Mon Sep 17 00:00:00 2001 From: Daniel Strebel Date: Thu, 19 Dec 2024 11:18:07 +0000 Subject: [PATCH 03/13] feat: add curl to Docker image --- tools/pipeline-runner/Dockerfile | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tools/pipeline-runner/Dockerfile b/tools/pipeline-runner/Dockerfile index 80b33def..1fd85d4c 100644 --- a/tools/pipeline-runner/Dockerfile +++ b/tools/pipeline-runner/Dockerfile @@ -12,14 +12,17 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM alpine:latest +FROM google/cloud-sdk:alpine AS gcloud-sdk -COPY --from=google/cloud-sdk:alpine /google-cloud-sdk /google-cloud-sdk +FROM alpine:3.21 + +COPY --from=gcloud-sdk /google-cloud-sdk /google-cloud-sdk ENV PATH="/google-cloud-sdk/bin:${PATH}" # Install additional tools RUN apk add --no-cache \ bash \ + curl \ jq \ libxml2-utils \ maven \ From a4c4f8df47687661bf786dec8ec507793f56aab0 Mon Sep 17 00:00:00 2001 From: Daniel Strebel Date: Thu, 19 Dec 2024 12:47:00 +0000 Subject: [PATCH 04/13] feat: add docker to image --- tools/pipeline-runner/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/pipeline-runner/Dockerfile b/tools/pipeline-runner/Dockerfile index 1fd85d4c..8242d746 100644 --- a/tools/pipeline-runner/Dockerfile +++ b/tools/pipeline-runner/Dockerfile @@ -22,6 +22,7 @@ ENV PATH="/google-cloud-sdk/bin:${PATH}" # Install additional tools RUN apk add --no-cache \ bash \ + docker \ curl \ jq \ libxml2-utils \ From 3b93916de0a2fbfb81d8f15e3861642d20dfbe24 Mon Sep 17 00:00:00 2001 From: Daniel Strebel Date: Fri, 20 Dec 2024 07:25:28 +0000 Subject: [PATCH 05/13] feat: allow for selective pipeline --- .../import-endpoints.sh | 2 +- tools/pipeline-runner/Dockerfile | 13 +++------- tools/pipeline-runner/cloudbuild.yaml | 26 ++++++++++++++++--- 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/tools/endpoints-oas-importer/import-endpoints.sh b/tools/endpoints-oas-importer/import-endpoints.sh index 52444d0c..61c4256a 100755 --- a/tools/endpoints-oas-importer/import-endpoints.sh +++ b/tools/endpoints-oas-importer/import-endpoints.sh @@ -131,7 +131,7 @@ function client_authentication() { # normalizing yaml and json OAS file types if [[ $oas == *.yaml || $oas == *.yml ]]; then - oas_json_content=$(yq -o json "$oas") + oas_json_content=$(yq e -o json "$oas") elif [[ $oas == *.json ]]; then oas_json_content=$(cat "$oas") else diff --git a/tools/pipeline-runner/Dockerfile b/tools/pipeline-runner/Dockerfile index 8242d746..c8fb6b13 100644 --- a/tools/pipeline-runner/Dockerfile +++ b/tools/pipeline-runner/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2020 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -23,6 +23,7 @@ ENV PATH="/google-cloud-sdk/bin:${PATH}" RUN apk add --no-cache \ bash \ docker \ + git \ curl \ jq \ libxml2-utils \ @@ -46,6 +47,7 @@ RUN apk add --no-cache \ zip \ make \ go \ + yq \ protobuf-dev # Reduce nighly log (note: -ntp requires maven 3.6.1+) @@ -60,18 +62,11 @@ RUN chmod +x /usr/local/bin/claat ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \ PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser -RUN npm install --global puppeteer@5.2.1 +RUN npm install --global puppeteer@5.2.1 apigeelint@2.10.0 # add our tooling scripts COPY *.sh /usr/bin/ -# install apgieelint -RUN npm install --global apigeelint@2.10.0 - -# yq because the apk is too old -RUN wget -q -O /usr/local/bin/yq "https://github.com/mikefarah/yq/releases/download/v4.29.2/yq_linux_amd64" -RUN chmod +x /usr/local/bin/yq - # Run script WORKDIR /home CMD ["run-pipelines.sh"] diff --git a/tools/pipeline-runner/cloudbuild.yaml b/tools/pipeline-runner/cloudbuild.yaml index f67e528f..7a70fb64 100644 --- a/tools/pipeline-runner/cloudbuild.yaml +++ b/tools/pipeline-runner/cloudbuild.yaml @@ -56,19 +56,37 @@ steps: args: - '-c' - |- + set -e max_duration=8760 # cloud build timeout minus 4m if [ -n "$_PR_NUMBER" ]; then - FULL_PIPELINE_REQUIRED=$(curl "https://api.github.com/repos/$_REPO_GH_ISSUE/issues/$_PR_NUMBER" | jq '.body |= ascii_downcase | .body | contains("[x] pr requires full pipeline run")' ) - PROJECTS=$(list-repo-changes.sh) + PR_DATA="$(curl "https://api.github.com/repos/$_REPO_GH_ISSUE/issues/$_PR_NUMBER")" + FULL_PIPELINE_REQUIRED=$(printf '%s' "$$PR_DATA" | jq '.body |= ascii_downcase | .body | contains("[x] pr requires full pipeline run")' ) + SELECTED_PROJECTS_FLAG=$(printf '%s' "$$PR_DATA" | jq '.body |= ascii_downcase | .body | contains("[x] test following projects (comma separated list):")') + + # get a comma-separated list of folders of changed sub-projects + CHANGED_PROJECTS=$(list-repo-changes.sh) + + # test only explicity subset of projects + if [ "$$SELECTED_PROJECTS_FLAG" = "true" ]; then + PROJECTS=$(printf "$$PR_DATA" | grep -o -i -E "test following projects \(comma separated list\): *.*" | cut -d ':' -f 2 | tr -d '[:space:]') + if [ -z "$$PROJECTS" ]; then + echo "SELECTED PROJECTS is empty. Please provide a list" + PROJECTS="$$CHANGED_PROJECTS" + fi + else + PROJECTS=$$CHANGED_PROJECTS + fi + if [ "$$FULL_PIPELINE_REQUIRED" = "true" ]; then echo "Running Full Pipeline as required in the PR" timeout "$$max_duration" run-pipelines.sh || true - elif [ -z "$$PROJECTS"]; then + elif [ -z "$$PROJECTS" ]; then echo "TOTAL PIPELINE (no change);pass;0" > ./pipeline-result.txt else - echo "PR includes changes in $$PROJECTS" + echo "PR testing changes in the following projects: $$PROJECTS" timeout "$$max_duration" run-pipelines.sh "$$PROJECTS" || true fi + elif [ "$_CI_PROJECT" = "all" ]; then timeout "$$max_duration" run-pipelines.sh || true else From 112238f458524cfe95a1278e9d3ad325ba832c05 Mon Sep 17 00:00:00 2001 From: Daniel Strebel Date: Fri, 20 Dec 2024 08:47:33 +0000 Subject: [PATCH 06/13] chore: make github output prettier --- tools/pipeline-runner/github-api.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/pipeline-runner/github-api.sh b/tools/pipeline-runner/github-api.sh index dad2e0dd..80c04dff 100755 --- a/tools/pipeline-runner/github-api.sh +++ b/tools/pipeline-runner/github-api.sh @@ -18,7 +18,7 @@ buildresult=$(cat) -REPORT_ROWS=$(echo "$buildresult" | awk -F";" '$0="|"$1"|"$2"|"$3"|"' OFS="|") +REPORT_ROWS=$(echo "$buildresult" | awk -F";" '$2 = ($2 == "fail" ? "❌" : "✅") ; $0="|"$1"|"$2"|"$3"|"' OFS="|") REPORT=$(cat < Date: Fri, 20 Dec 2024 13:59:46 +0000 Subject: [PATCH 07/13] fix: proper error handling --- .../resources/jsc/PopulateDefaultErrorVariables.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/references/common-shared-flows/error-handling-v1/sharedflowbundle/resources/jsc/PopulateDefaultErrorVariables.js b/references/common-shared-flows/error-handling-v1/sharedflowbundle/resources/jsc/PopulateDefaultErrorVariables.js index aca1b6f9..f0913e46 100644 --- a/references/common-shared-flows/error-handling-v1/sharedflowbundle/resources/jsc/PopulateDefaultErrorVariables.js +++ b/references/common-shared-flows/error-handling-v1/sharedflowbundle/resources/jsc/PopulateDefaultErrorVariables.js @@ -98,6 +98,6 @@ switch (context.getVariable("fault.name")) { // } } -if (context.getVariable("flow.error.code") == null || !context.getVariable("custom.error.code")) { +if (!context.getVariable("custom.error.code")) { setFault(500, "Internal Server Error", "500.99", "Internal Server Error"); } From b2d25685a8d7082ad7d96867d500b003947a6564 Mon Sep 17 00:00:00 2001 From: Daniel Strebel Date: Fri, 20 Dec 2024 14:31:27 +0000 Subject: [PATCH 08/13] fix: proper error handling --- .../oidc-mock/test/integration/features/step_definitions/ui.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/references/oidc-mock/test/integration/features/step_definitions/ui.js b/references/oidc-mock/test/integration/features/step_definitions/ui.js index 95185d40..65b33130 100644 --- a/references/oidc-mock/test/integration/features/step_definitions/ui.js +++ b/references/oidc-mock/test/integration/features/step_definitions/ui.js @@ -34,7 +34,7 @@ Given('I navigate to the authorize page', async function() { args: ["--no-sandbox"] }) this.page = await this.browser.newPage() - return await this.page.goto('https://' + hostname + '/v1/openid-connect/authorize?client_id=' + this.apickli.scenarioVariables.clientId + return await this.page.goto('https://' + hostname + '/v1/openid-connect/c' + this.apickli.scenarioVariables.clientId + '&redirect_uri=https://mocktarget.apigee.net/echo&response_type=code&state=' + state +'&scope=' + scope) }) From 21d08373007e34c7fe840e0e20bba0a536ed9132 Mon Sep 17 00:00:00 2001 From: Daniel Strebel Date: Fri, 20 Dec 2024 14:31:49 +0000 Subject: [PATCH 09/13] chore: github UX --- .github/PULL_REQUEST_TEMPLATE.md | 15 +++++++++++++-- tools/pipeline-runner/github-api.sh | 5 ++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index d26f1736..f50e3b27 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -12,8 +12,19 @@ What's changed, or what was fixed? - [ ] I have run all the tests locally and they all pass. - [ ] I have followed the relevant style guide for my changes. -## Full Repo Validation Required -(please check all that apply [x], do not edit the text) +## ADVANCED Settings + +For most PRs you most likely do not have to edit anything in this section. + +### Test Scope + +By default the PR pipeline tests all projects that were edited in the PR. + +Some PRs might have side-effects on other projects such as changes to the test pipeline or shared tooling and need tests beyond the projects edited in this PR. + +To customize the PR testing scope check [x] either option below and replace the sub-projects as needed. + - [ ] PR requires full pipeline run (Run for changes only by default). +- [ ] Test following projects (comma separated list): references/cicd-pipeline,tools/apigee-sackmesser **CC:** @apigee-devrel-reviewers diff --git a/tools/pipeline-runner/github-api.sh b/tools/pipeline-runner/github-api.sh index 80c04dff..ac10b11c 100755 --- a/tools/pipeline-runner/github-api.sh +++ b/tools/pipeline-runner/github-api.sh @@ -18,7 +18,8 @@ buildresult=$(cat) -REPORT_ROWS=$(echo "$buildresult" | awk -F";" '$2 = ($2 == "fail" ? "❌" : "✅") ; $0="|"$1"|"$2"|"$3"|"' OFS="|") +REPORT_ROWS=$(echo "$buildresult" | awk -F, -v OFS='|' '{gsub(/pass/, "✅"); gsub(/fail/, "❌"); print "|" $1 "|" $2 "|" $3 "|"}') + REPORT=$(cat < Date: Fri, 20 Dec 2024 15:26:26 +0000 Subject: [PATCH 10/13] chore: github UX --- tools/pipeline-runner/github-api.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/pipeline-runner/github-api.sh b/tools/pipeline-runner/github-api.sh index ac10b11c..6a550b16 100755 --- a/tools/pipeline-runner/github-api.sh +++ b/tools/pipeline-runner/github-api.sh @@ -18,7 +18,7 @@ buildresult=$(cat) -REPORT_ROWS=$(echo "$buildresult" | awk -F, -v OFS='|' '{gsub(/pass/, "✅"); gsub(/fail/, "❌"); print "|" $1 "|" $2 "|" $3 "|"}') +REPORT_ROWS=$(echo "$buildresult" | awk -F\; -v OFS='|' '{gsub(/pass/, "✅"); gsub(/fail/, "❌"); print "|" $1 "|" $2 "|" $3 "|"}') REPORT=$(cat < Date: Fri, 20 Dec 2024 16:07:24 +0000 Subject: [PATCH 11/13] fix: add dbus to chromium --- tools/pipeline-runner/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/pipeline-runner/Dockerfile b/tools/pipeline-runner/Dockerfile index c8fb6b13..b8471c5f 100644 --- a/tools/pipeline-runner/Dockerfile +++ b/tools/pipeline-runner/Dockerfile @@ -48,7 +48,8 @@ RUN apk add --no-cache \ make \ go \ yq \ - protobuf-dev + protobuf-dev \ + dbus # Reduce nighly log (note: -ntp requires maven 3.6.1+) RUN mv /usr/bin/mvn /usr/bin/_mvn &&\ From 9a3a12b7d63a1fe92c409aa188b88c85d580b1ef Mon Sep 17 00:00:00 2001 From: Daniel Strebel Date: Fri, 20 Dec 2024 16:17:17 +0000 Subject: [PATCH 12/13] fix: clean up --- .../oidc-mock/test/integration/features/step_definitions/ui.js | 2 +- tools/pipeline-runner/github-api.sh | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/references/oidc-mock/test/integration/features/step_definitions/ui.js b/references/oidc-mock/test/integration/features/step_definitions/ui.js index 65b33130..95185d40 100644 --- a/references/oidc-mock/test/integration/features/step_definitions/ui.js +++ b/references/oidc-mock/test/integration/features/step_definitions/ui.js @@ -34,7 +34,7 @@ Given('I navigate to the authorize page', async function() { args: ["--no-sandbox"] }) this.page = await this.browser.newPage() - return await this.page.goto('https://' + hostname + '/v1/openid-connect/c' + this.apickli.scenarioVariables.clientId + return await this.page.goto('https://' + hostname + '/v1/openid-connect/authorize?client_id=' + this.apickli.scenarioVariables.clientId + '&redirect_uri=https://mocktarget.apigee.net/echo&response_type=code&state=' + state +'&scope=' + scope) }) diff --git a/tools/pipeline-runner/github-api.sh b/tools/pipeline-runner/github-api.sh index 6a550b16..35fdaf31 100755 --- a/tools/pipeline-runner/github-api.sh +++ b/tools/pipeline-runner/github-api.sh @@ -33,8 +33,6 @@ Commit version: $SHORT_SHA EOF ) -echo $REPORT - REPO_API="https://api.github.com/repos/$REPO_GH_ISSUE" createIssueComment() { From 6c3ada5ad94d32109e9dafcd30a1ec5cf5efa03a Mon Sep 17 00:00:00 2001 From: Daniel Strebel Date: Fri, 20 Dec 2024 20:26:37 +0000 Subject: [PATCH 13/13] fix: add --no-gpu to fix puppeteer regression in alpine --- .../integration/features/step_definitions/ui.js | 16 ++++++++-------- .../integration/features/step_definitions/ui.js | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/references/identity-facade/test/integration/features/step_definitions/ui.js b/references/identity-facade/test/integration/features/step_definitions/ui.js index cdf79c59..be2e0dee 100644 --- a/references/identity-facade/test/integration/features/step_definitions/ui.js +++ b/references/identity-facade/test/integration/features/step_definitions/ui.js @@ -36,7 +36,7 @@ Given('I navigate to the authorize page', async function() { this.browser = await puppeteer.launch({ ignoreHTTPSErrors: true, headless: true, - args: ["--no-sandbox"] + args: ["--no-sandbox", "--disable-gpu"] }) this.page = await this.browser.newPage() return await this.page.goto('https://' + hostname + basePath + '/authorize?client_id=' + this.apickli.scenarioVariables.clientId @@ -49,7 +49,7 @@ Given('I navigate to the authorize page with query params that must be sanitized this.browser = await puppeteer.launch({ ignoreHTTPSErrors: true, headless: true, - args: ["--no-sandbox"] + args: ["--no-sandbox", "--disable-gpu"] }) this.page = await this.browser.newPage() return await this.page.goto('https://' + hostname + basePath + '/authorize?client_id=' + ' ' + this.apickli.scenarioVariables.clientId @@ -62,7 +62,7 @@ Given('I navigate to the authorize page with an invalid response type', async fu this.browser = await puppeteer.launch({ ignoreHTTPSErrors: true, headless: true, - args: ["--no-sandbox"] + args: ["--no-sandbox", "--disable-gpu"] }) this.page = await this.browser.newPage() return await this.page.goto('https://' + hostname + basePath + '/authorize?client_id=' + this.apickli.scenarioVariables.clientId @@ -75,7 +75,7 @@ Given('I navigate to the authorize page without a scope parameter', async functi this.browser = await puppeteer.launch({ ignoreHTTPSErrors: true, headless: true, - args: ["--no-sandbox"] + args: ["--no-sandbox", "--disable-gpu"] }) this.page = await this.browser.newPage() return await this.page.goto('https://' + hostname + basePath + '/authorize?client_id=' + this.apickli.scenarioVariables.clientId @@ -88,7 +88,7 @@ Given('I navigate to the authorize page without a state parameter', async functi this.browser = await puppeteer.launch({ ignoreHTTPSErrors: true, headless: true, - args: ["--no-sandbox"] + args: ["--no-sandbox", "--disable-gpu"] }) this.page = await this.browser.newPage() return await this.page.goto('https://' + hostname + basePath + '/authorize?client_id=' + this.apickli.scenarioVariables.clientId @@ -102,7 +102,7 @@ if (isPkceEnabled) { this.browser = await puppeteer.launch({ ignoreHTTPSErrors: true, headless: true, - args: ["--no-sandbox"] + args: ["--no-sandbox", "--disable-gpu"] }) this.page = await this.browser.newPage() return await this.page.goto('https://' + hostname + basePath + '/authorize?client_id=' + this.apickli.scenarioVariables.clientId @@ -114,7 +114,7 @@ if (isPkceEnabled) { this.browser = await puppeteer.launch({ ignoreHTTPSErrors: true, headless: true, - args: ["--no-sandbox"] + args: ["--no-sandbox", "--disable-gpu"] }) this.page = await this.browser.newPage() return await this.page.goto('https://' + hostname + basePath + '/authorize?client_id=' + this.apickli.scenarioVariables.clientId @@ -126,7 +126,7 @@ if (isPkceEnabled) { this.browser = await puppeteer.launch({ ignoreHTTPSErrors: true, headless: true, - args: ["--no-sandbox"] + args: ["--no-sandbox", "--disable-gpu"] }) this.page = await this.browser.newPage() return await this.page.goto('https://' + hostname + basePath + '/authorize?client_id=' + this.apickli.scenarioVariables.clientId diff --git a/references/oidc-mock/test/integration/features/step_definitions/ui.js b/references/oidc-mock/test/integration/features/step_definitions/ui.js index 95185d40..c500b230 100644 --- a/references/oidc-mock/test/integration/features/step_definitions/ui.js +++ b/references/oidc-mock/test/integration/features/step_definitions/ui.js @@ -31,7 +31,7 @@ Given('I navigate to the authorize page', async function() { this.browser = await puppeteer.launch({ ignoreHTTPSErrors: true, headless: true, - args: ["--no-sandbox"] + args: ["--no-sandbox", "--disable-gpu"] }) this.page = await this.browser.newPage() return await this.page.goto('https://' + hostname + '/v1/openid-connect/authorize?client_id=' + this.apickli.scenarioVariables.clientId @@ -42,7 +42,7 @@ Given('I navigate to the authorize page with an invalid response type', async fu this.browser = await puppeteer.launch({ ignoreHTTPSErrors: true, headless: true, - args: ["--no-sandbox"] + args: ["--no-sandbox", "--disable-gpu"] }) this.page = await this.browser.newPage() return await this.page.goto('https://' + hostname + '/v1/openid-connect/authorize?client_id=' + this.apickli.scenarioVariables.clientId @@ -53,7 +53,7 @@ Given('I navigate to the authorize page without a scope parameter', async functi this.browser = await puppeteer.launch({ ignoreHTTPSErrors: true, headless: true, - args: ["--no-sandbox"] + args: ["--no-sandbox", "--disable-gpu"] }) this.page = await this.browser.newPage() return await this.page.goto('https://' + hostname + '/v1/openid-connect/authorize?client_id=' + this.apickli.scenarioVariables.clientId @@ -64,7 +64,7 @@ Given('I navigate to the authorize page without a state parameter', async functi this.browser = await puppeteer.launch({ ignoreHTTPSErrors: true, headless: true, - args: ["--no-sandbox"] + args: ["--no-sandbox", "--disable-gpu"] }) this.page = await this.browser.newPage() return await this.page.goto('https://' + hostname + '/v1/openid-connect/authorize?client_id=' + this.apickli.scenarioVariables.clientId