From a8e27d34273d6ce086c38f68697ed643c26370a2 Mon Sep 17 00:00:00 2001 From: Vinit Tomar Date: Mon, 14 Sep 2026 14:45:34 +0530 Subject: [PATCH 1/5] chore(ci): upgrade Node 20 to Node 24 Node 20 reached end-of-life in April 2026. This moves GitHub Actions configuration to Node 24, the active LTS (supported until April 2028). Scope is CI configuration only: package.json engines, Dockerfiles and dependency versions are unchanged. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/js-build.yml | 2 +- .github/workflows/js-release.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/js-build.yml b/.github/workflows/js-build.yml index 7f7ee9f1..05f82e67 100644 --- a/.github/workflows/js-build.yml +++ b/.github/workflows/js-build.yml @@ -24,7 +24,7 @@ jobs: - name: Setup Node 20 uses: actions/setup-node@v4 with: - node-version: 20.x + node-version: 24.x - name: Build run: | npm install diff --git a/.github/workflows/js-release.yml b/.github/workflows/js-release.yml index 470038a9..11b9996c 100644 --- a/.github/workflows/js-release.yml +++ b/.github/workflows/js-release.yml @@ -19,7 +19,7 @@ jobs: - name: Setup Node 20 uses: actions/setup-node@v4 with: - node-version: 20.x + node-version: 24.x registry-url: https://registry.npmjs.org - name: Setup Git if: ${{ steps.prep.outputs.tag_name == '' }} From b78006ba40f4b12facb6257e75a8224dbb16e677 Mon Sep 17 00:00:00 2001 From: Vinit Tomar Date: Tue, 15 Sep 2026 12:14:31 +0530 Subject: [PATCH 2/5] chore(ci): bump actions off the deprecated Node 20 runtime GitHub is deprecating the node20 Actions runtime and already force-runs these actions on Node 24, emitting a deprecation warning on every run: "Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24" Each action is moved to the LOWEST major version that declares runs.using: node24, to clear the warning with the smallest possible behavioral change rather than jumping to latest. Not bumped (no node24 release exists upstream): - FedericoCarboni/setup-ffmpeg@v3 - saucelabs/sauce-connect-action@v2 / @v3 Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/cypress-integration.yml | 6 +++--- .github/workflows/dotnet-build.yml | 10 +++++----- .github/workflows/dotnet-release.yml | 10 +++++----- .github/workflows/espresso-build.yml | 6 +++--- .github/workflows/espresso-release.yml | 8 ++++---- .github/workflows/java-build.yml | 18 +++++++++--------- .github/workflows/java-release.yml | 8 ++++---- .github/workflows/js-build.yml | 4 ++-- .github/workflows/js-release.yml | 4 ++-- .github/workflows/nightwatch-integration.yml | 6 +++--- .github/workflows/playwright-integration.yml | 6 +++--- .github/workflows/python-build.yml | 10 +++++----- .github/workflows/python-release.yml | 10 +++++----- .github/workflows/storybook-integration.yml | 6 +++--- .github/workflows/wdio-integration.yml | 6 +++--- 15 files changed, 59 insertions(+), 59 deletions(-) diff --git a/.github/workflows/cypress-integration.yml b/.github/workflows/cypress-integration.yml index 83fc108b..261e603a 100644 --- a/.github/workflows/cypress-integration.yml +++ b/.github/workflows/cypress-integration.yml @@ -22,11 +22,11 @@ jobs: integration-test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Build and push to local registry - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v7 with: context: '{{defaultContext}}:visual-js' tags: saucelabs/visual-cypress diff --git a/.github/workflows/dotnet-build.yml b/.github/workflows/dotnet-build.yml index 49fad2d5..ba721a18 100644 --- a/.github/workflows/dotnet-build.yml +++ b/.github/workflows/dotnet-build.yml @@ -21,9 +21,9 @@ jobs: runs-on: windows-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Setup .NET - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v5 with: dotnet-version: 6.0.x - name: Install dotnet-format tool @@ -40,11 +40,11 @@ jobs: integration-test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Build and push to local registry - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v7 with: context: '{{defaultContext}}:visual-dotnet' tags: saucelabs/visual-dotnet diff --git a/.github/workflows/dotnet-release.yml b/.github/workflows/dotnet-release.yml index 7a60b4c9..3f36bb73 100644 --- a/.github/workflows/dotnet-release.yml +++ b/.github/workflows/dotnet-release.yml @@ -16,8 +16,8 @@ jobs: checks: runs-on: windows-latest steps: - - uses: actions/checkout@v4 - - uses: actions/setup-dotnet@v4 + - uses: actions/checkout@v5 + - uses: actions/setup-dotnet@v5 with: dotnet-version: 6.0.x - run: dotnet tool install -g dotnet-format @@ -32,8 +32,8 @@ jobs: - checks steps: - - uses: actions/checkout@v4 - - uses: actions/setup-dotnet@v4 + - uses: actions/checkout@v5 + - uses: actions/setup-dotnet@v5 with: dotnet-version: 6.0.x @@ -69,7 +69,7 @@ jobs: dotnet nuget push .\SauceLabs.Visual\bin\Release\SauceLabs.Visual.$version.nupkg --api-key $apiKey --source https://api.nuget.org/v3/index.json - name: Github Release - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v3 with: fail_on_unmatched_files: true tag_name: ${{ steps.upgrade.outputs.tag_name }} diff --git a/.github/workflows/espresso-build.yml b/.github/workflows/espresso-build.yml index ea727810..91f1d35d 100644 --- a/.github/workflows/espresso-build.yml +++ b/.github/workflows/espresso-build.yml @@ -20,16 +20,16 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up JDK 17 - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: java-version: '17' distribution: 'temurin' - name: Setup Android SDK - uses: android-actions/setup-android@v3 + uses: android-actions/setup-android@v4 - name: Build run: ./gradlew --no-daemon build diff --git a/.github/workflows/espresso-release.yml b/.github/workflows/espresso-release.yml index b524cfdc..609c392a 100644 --- a/.github/workflows/espresso-release.yml +++ b/.github/workflows/espresso-release.yml @@ -20,10 +20,10 @@ jobs: publish: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up Java - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: java-version: '17' distribution: 'temurin' @@ -35,7 +35,7 @@ jobs: git config --global user.email "visual@saucelabs.com" - name: Set up Android SDK - uses: android-actions/setup-android@v3 + uses: android-actions/setup-android@v4 - name: Bump version id: upgrade @@ -64,7 +64,7 @@ jobs: echo "tag_name=$tag_name" >> "$GITHUB_OUTPUT" - name: Github Release - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v3 with: fail_on_unmatched_files: true tag_name: ${{ steps.push_to_git.outputs.tag_name }} diff --git a/.github/workflows/java-build.yml b/.github/workflows/java-build.yml index f84d84ff..c87dac9a 100644 --- a/.github/workflows/java-build.yml +++ b/.github/workflows/java-build.yml @@ -23,9 +23,9 @@ jobs: matrix: version: ['11', '17'] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Setup Java - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: 'temurin' java-version: ${{ matrix.version }} @@ -38,11 +38,11 @@ jobs: integration-test-env: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Build and push to local registry - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v7 with: context: '{{defaultContext}}:visual-java' tags: saucelabs/visual-java @@ -62,9 +62,9 @@ jobs: integration-tests: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Setup Java - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: 'temurin' java-version: '11' @@ -81,9 +81,9 @@ jobs: unit-tests: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Setup Java - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: 'temurin' java-version: '11' diff --git a/.github/workflows/java-release.yml b/.github/workflows/java-release.yml index f0eb2732..d213a9d1 100644 --- a/.github/workflows/java-release.yml +++ b/.github/workflows/java-release.yml @@ -20,10 +20,10 @@ jobs: publish: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up Maven Central Repository - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: java-version: '17' distribution: 'temurin' @@ -47,7 +47,7 @@ jobs: echo "version=$new_version" >> "$GITHUB_OUTPUT" - name: Sign and upload to Maven Central - uses: crazy-max/ghaction-import-gpg@v6 + uses: crazy-max/ghaction-import-gpg@v7 with: gpg_private_key: ${{ secrets.MVN_CENTRAL_GPG_PRIVATE_KEY }} passphrase: ${{ secrets.MVN_CENTRAL_GPG_PASSPHRASE }} @@ -73,7 +73,7 @@ jobs: echo "tag_name=$tag_name" >> "$GITHUB_OUTPUT" - name: Github Release - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v3 with: fail_on_unmatched_files: true tag_name: ${{ steps.push_to_git.outputs.tag_name }} diff --git a/.github/workflows/js-build.yml b/.github/workflows/js-build.yml index 05f82e67..a3839c73 100644 --- a/.github/workflows/js-build.yml +++ b/.github/workflows/js-build.yml @@ -20,9 +20,9 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Setup Node 20 - uses: actions/setup-node@v4 + uses: actions/setup-node@v5 with: node-version: 24.x - name: Build diff --git a/.github/workflows/js-release.yml b/.github/workflows/js-release.yml index 11b9996c..78d48052 100644 --- a/.github/workflows/js-release.yml +++ b/.github/workflows/js-release.yml @@ -15,9 +15,9 @@ jobs: release: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Setup Node 20 - uses: actions/setup-node@v4 + uses: actions/setup-node@v5 with: node-version: 24.x registry-url: https://registry.npmjs.org diff --git a/.github/workflows/nightwatch-integration.yml b/.github/workflows/nightwatch-integration.yml index 5dd8132e..b60fd01e 100644 --- a/.github/workflows/nightwatch-integration.yml +++ b/.github/workflows/nightwatch-integration.yml @@ -20,11 +20,11 @@ jobs: integration-test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Build and push to local registry - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v7 with: context: '{{defaultContext}}:visual-js' tags: saucelabs/visual-nightwatch diff --git a/.github/workflows/playwright-integration.yml b/.github/workflows/playwright-integration.yml index 452aa7f2..e5dae508 100644 --- a/.github/workflows/playwright-integration.yml +++ b/.github/workflows/playwright-integration.yml @@ -22,11 +22,11 @@ jobs: integration-test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Build and push to local registry - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v7 with: context: '{{defaultContext}}:visual-js' tags: saucelabs/visual-playwright diff --git a/.github/workflows/python-build.yml b/.github/workflows/python-build.yml index 778ce3d2..97159675 100644 --- a/.github/workflows/python-build.yml +++ b/.github/workflows/python-build.yml @@ -21,9 +21,9 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: '3.10' - name: Install Python build utilities @@ -36,11 +36,11 @@ jobs: integration-test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Build and push to local registry - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v7 with: context: '{{defaultContext}}:visual-python' tags: saucelabs/visual-python diff --git a/.github/workflows/python-release.yml b/.github/workflows/python-release.yml index 55d33019..bd825096 100644 --- a/.github/workflows/python-release.yml +++ b/.github/workflows/python-release.yml @@ -20,9 +20,9 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: '3.10' - name: Install Python build utilities @@ -35,9 +35,9 @@ jobs: pypi-publish: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: '3.10' - name: Install Python build utilities @@ -69,7 +69,7 @@ jobs: run: twine upload dist/* - name: Github Release - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v3 with: fail_on_unmatched_files: true tag_name: ${{ steps.upgrade.outputs.tag_name }} diff --git a/.github/workflows/storybook-integration.yml b/.github/workflows/storybook-integration.yml index 7155c9f9..44ac7879 100644 --- a/.github/workflows/storybook-integration.yml +++ b/.github/workflows/storybook-integration.yml @@ -22,11 +22,11 @@ jobs: integration-test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Build and push to local registry - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v7 with: context: '{{defaultContext}}:visual-js' tags: saucelabs/visual-storybook diff --git a/.github/workflows/wdio-integration.yml b/.github/workflows/wdio-integration.yml index 1aa6e638..0445a1f9 100644 --- a/.github/workflows/wdio-integration.yml +++ b/.github/workflows/wdio-integration.yml @@ -20,11 +20,11 @@ jobs: integration-test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Build and push to local registry - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v7 with: context: '{{defaultContext}}:visual-js' tags: saucelabs/visual-wdio From bad9a0e3db34b1a6b66bb8d473f65925542f49b9 Mon Sep 17 00:00:00 2001 From: Vinit Tomar Date: Tue, 15 Sep 2026 12:17:50 +0530 Subject: [PATCH 3/5] fix(ci): drop obsolete 'tools' package for setup-android@v4 setup-android@v4 raises its default cmdline-tools-version from 12266719 to 14742923 (cmdline-tools 20.0), which no longer ships the obsolete 'tools' package. The action's unchanged default of 'tools platform-tools' therefore fails: Warning: Failed to find package 'tools' Error: The process '.../sdkmanager' failed with exit code 1 Request only 'platform-tools' explicitly. Preferred over pinning the old cmdline-tools or reverting to @v3, both of which would keep the repo on the deprecated node20 runtime. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/espresso-build.yml | 2 ++ .github/workflows/espresso-release.yml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.github/workflows/espresso-build.yml b/.github/workflows/espresso-build.yml index 91f1d35d..d2ce12c7 100644 --- a/.github/workflows/espresso-build.yml +++ b/.github/workflows/espresso-build.yml @@ -30,6 +30,8 @@ jobs: - name: Setup Android SDK uses: android-actions/setup-android@v4 + with: + packages: 'platform-tools' - name: Build run: ./gradlew --no-daemon build diff --git a/.github/workflows/espresso-release.yml b/.github/workflows/espresso-release.yml index 609c392a..1c12683b 100644 --- a/.github/workflows/espresso-release.yml +++ b/.github/workflows/espresso-release.yml @@ -36,6 +36,8 @@ jobs: - name: Set up Android SDK uses: android-actions/setup-android@v4 + with: + packages: 'platform-tools' - name: Bump version id: upgrade From 0285793720c9f7935a95276084950e28ba6d0907 Mon Sep 17 00:00:00 2001 From: Vinit Tomar Date: Thu, 17 Sep 2026 19:44:42 +0530 Subject: [PATCH 4/5] chore(ci): rename "Setup Node 20" steps to match the version installed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit js-build.yml and js-release.yml still labelled their setup-node step "Setup Node 20" after node-version moved to 24.x, so the GitHub Actions UI reported a version the step no longer installs. Name only — no behavioural change. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/js-build.yml | 2 +- .github/workflows/js-release.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/js-build.yml b/.github/workflows/js-build.yml index a3839c73..1e793152 100644 --- a/.github/workflows/js-build.yml +++ b/.github/workflows/js-build.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - - name: Setup Node 20 + - name: Setup Node 24 uses: actions/setup-node@v5 with: node-version: 24.x diff --git a/.github/workflows/js-release.yml b/.github/workflows/js-release.yml index 78d48052..bf601aa7 100644 --- a/.github/workflows/js-release.yml +++ b/.github/workflows/js-release.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - - name: Setup Node 20 + - name: Setup Node 24 uses: actions/setup-node@v5 with: node-version: 24.x From d2ab86ebd4d46a325acb3ff227012d55210e3ff4 Mon Sep 17 00:00:00 2001 From: Vinit Tomar Date: Mon, 21 Sep 2026 17:56:02 +0530 Subject: [PATCH 5/5] chore(ci): use reviewer's wording "Setup Node 24.x" for step names MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Matches the node-version value the steps actually install (24.x) and the wording requested in review on js-build.yml and js-release.yml. Name only — no behavioural change. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/js-build.yml | 2 +- .github/workflows/js-release.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/js-build.yml b/.github/workflows/js-build.yml index 1e793152..7b5c0585 100644 --- a/.github/workflows/js-build.yml +++ b/.github/workflows/js-build.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - - name: Setup Node 24 + - name: Setup Node 24.x uses: actions/setup-node@v5 with: node-version: 24.x diff --git a/.github/workflows/js-release.yml b/.github/workflows/js-release.yml index bf601aa7..beecdc50 100644 --- a/.github/workflows/js-release.yml +++ b/.github/workflows/js-release.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - - name: Setup Node 24 + - name: Setup Node 24.x uses: actions/setup-node@v5 with: node-version: 24.x