From 045795938c0c9017e46f333e5033e87fbbff0ab4 Mon Sep 17 00:00:00 2001 From: Taylor Addison Date: Sat, 24 Oct 2026 15:55:50 -0400 Subject: [PATCH 1/7] ci: Node.js 24 majors for the actions this repo's own workflows call (#112) Version bumps only, plus inputs that keep today's behaviour. Co-authored-by: Claude Opus 5.5 --- .github/workflows/ci.yml | 8 ++++---- .github/workflows/collector.yml | 4 ++-- .github/workflows/desktop.yml | 12 +++++++----- .github/workflows/docs.yml | 9 +++++---- .github/workflows/fleet.yml | 20 ++++++++++---------- .github/workflows/release.yml | 22 +++++++++++----------- .github/workflows/runner-android.yml | 6 +++--- .github/workflows/runner-ios.yml | 2 +- .github/workflows/runner-machine.yml | 4 ++-- .github/workflows/runner-roku.yml | 5 +++-- 10 files changed, 48 insertions(+), 44 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 98a62f5..f230f66 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,7 +41,7 @@ jobs: roku: ${{ steps.filter.outputs.roku }} desktop: ${{ steps.filter.outputs.desktop }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 with: # The diff below needs both ends of the range in this checkout, and # the default shallow clone has neither. @@ -102,7 +102,7 @@ jobs: name: one version runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - run: node scripts/version.mjs check # Also unconditional, and for the same reason as `version`: the numbers it @@ -112,7 +112,7 @@ jobs: name: repo scripts runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Unit tests for scripts/ run: node --test scripts/*.test.mjs - name: Documented counts match the code @@ -132,7 +132,7 @@ jobs: contents: read pull-requests: read steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 with: # The tags and the whole of develop's history since the last one. fetch-depth: 0 diff --git a/.github/workflows/collector.yml b/.github/workflows/collector.yml index c813a3a..70e5b5a 100644 --- a/.github/workflows/collector.yml +++ b/.github/workflows/collector.yml @@ -49,9 +49,9 @@ jobs: node: "24" steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v7 with: node-version: ${{ matrix.node }} cache: npm diff --git a/.github/workflows/desktop.yml b/.github/workflows/desktop.yml index 2945167..7070eb4 100644 --- a/.github/workflows/desktop.yml +++ b/.github/workflows/desktop.yml @@ -12,10 +12,11 @@ jobs: name: cargo check runs-on: macos-latest steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 with: node-version: "22.13" + package-manager-cache: false - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 with: @@ -40,10 +41,11 @@ jobs: name: launch smoke runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 with: node-version: "22.13" + package-manager-cache: false - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 with: @@ -85,7 +87,7 @@ jobs: echo "== $f"; tail -80 "$f" done - if: always() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: desktop-launch-smoke path: ${{ runner.temp }}/desktop-smoke diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 59aa5a3..abed7f1 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -29,9 +29,9 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - - uses: actions/setup-python@v5 + - uses: actions/setup-python@v7 with: python-version: "3.12" cache: pip @@ -83,9 +83,10 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - uses: actions/upload-pages-artifact@v3 + - uses: actions/upload-pages-artifact@v5 with: path: site + include-hidden-files: true deploy: # Only main publishes; a pull request builds and link-checks without @@ -101,4 +102,4 @@ jobs: url: ${{ steps.deploy.outputs.page_url }} steps: - id: deploy - uses: actions/deploy-pages@v4 + uses: actions/deploy-pages@v5 diff --git a/.github/workflows/fleet.yml b/.github/workflows/fleet.yml index ef55942..70e6091 100644 --- a/.github/workflows/fleet.yml +++ b/.github/workflows/fleet.yml @@ -25,9 +25,9 @@ jobs: os: [ubuntu-latest, macos-latest, windows-latest] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v7 with: node-version: "22.13" cache: npm @@ -105,8 +105,8 @@ jobs: - runner: ubuntu-24.04-arm suffix: " (arm64)" steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 with: node-version: "22.13" cache: npm @@ -151,8 +151,8 @@ jobs: name: systemd smoke runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 with: node-version: "22.13" cache: npm @@ -197,8 +197,8 @@ jobs: name: launchd smoke runs-on: macos-latest steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 with: node-version: "22.13" cache: npm @@ -272,8 +272,8 @@ jobs: name: windows task smoke runs-on: windows-latest steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 with: node-version: "22.13" cache: npm diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 607557a..2055212 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -59,7 +59,7 @@ jobs: version: ${{ steps.check.outputs.version }} prerelease: ${{ steps.check.outputs.prerelease }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - id: check name: The tag, VERSION and every component agree @@ -101,9 +101,9 @@ jobs: needs: gate runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v7 with: # The floor the collector needs, not the newest available: building on # the oldest supported runtime is what stops a release quietly @@ -205,7 +205,7 @@ jobs: (cd out && sha256sum fleet-* > SHASUMS256.txt) cat out/SHASUMS256.txt - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v7 with: name: release-archives path: out/ @@ -221,7 +221,7 @@ jobs: contents: read packages: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 # QEMU so one x86 runner can produce the arm64 image as well. It is slow # in general and cheap here: the Dockerfile compiles nothing, so the only @@ -232,12 +232,12 @@ jobs: # faster and is what to reach for if this ever becomes slow enough to # notice. It is not done, because it is three more jobs to get right for a # build that has never run once. - - uses: docker/setup-qemu-action@v3 - - uses: docker/setup-buildx-action@v3 + - uses: docker/setup-qemu-action@v4 + - uses: docker/setup-buildx-action@v4 # GITHUB_TOKEN, with the `packages: write` granted above. No invented # secret: this token exists in every workflow run. - - uses: docker/login-action@v3 + - uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.actor }} @@ -277,7 +277,7 @@ jobs: } >> "$GITHUB_OUTPUT" - name: Build and push - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: # The repository root, because the build stage copies collector/, # runner-machine/ and fleet/ -- the bundle is all three. @@ -301,9 +301,9 @@ jobs: permissions: contents: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v8 with: name: release-archives path: out diff --git a/.github/workflows/runner-android.yml b/.github/workflows/runner-android.yml index c110ba1..ba0ea6e 100644 --- a/.github/workflows/runner-android.yml +++ b/.github/workflows/runner-android.yml @@ -17,14 +17,14 @@ jobs: # Deliberately without submodules. -Pfleet.skipNative drops the native # build, so llama.cpp is never compiled here and cloning it would cost # more than the tests do. - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - - uses: actions/setup-java@v4 + - uses: actions/setup-java@v6 with: distribution: temurin java-version: "17" - - uses: gradle/actions/setup-gradle@v4 + - uses: gradle/actions/setup-gradle@v5 with: build-root-directory: runner-android diff --git a/.github/workflows/runner-ios.yml b/.github/workflows/runner-ios.yml index e7cf5f3..031d71b 100644 --- a/.github/workflows/runner-ios.yml +++ b/.github/workflows/runner-ios.yml @@ -14,7 +14,7 @@ jobs: runs-on: macos-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - run: brew install xcodegen diff --git a/.github/workflows/runner-machine.yml b/.github/workflows/runner-machine.yml index 77c8bdf..a3bfb0f 100644 --- a/.github/workflows/runner-machine.yml +++ b/.github/workflows/runner-machine.yml @@ -47,9 +47,9 @@ jobs: node: "24" steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v7 with: node-version: ${{ matrix.node }} cache: npm diff --git a/.github/workflows/runner-roku.yml b/.github/workflows/runner-roku.yml index 434e017..b99d67d 100644 --- a/.github/workflows/runner-roku.yml +++ b/.github/workflows/runner-roku.yml @@ -15,10 +15,11 @@ jobs: run: working-directory: runner-roku steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 with: node-version: "22.13" + package-manager-cache: false # Pinned, so a new compiler release that adds a diagnostic is a change # somebody makes on purpose rather than a red build on an unrelated PR. - run: > From 6c3d88a33bc70c067a7d98e20cf8d01cedd6e2e7 Mon Sep 17 00:00:00 2001 From: Taylor Addison Date: Sun, 25 Oct 2026 09:29:26 -0400 Subject: [PATCH 2/7] ci: ci-ok runs unless the run was cancelled (port #111 to main) (#114) always() also ran ci-ok on a run that concurrency cancel-in-progress had cancelled, and it failed on the cancelled jobs: 18 of the 25 ci-ok failures 10-11..10-21 were that. Cherry-pick of 56cb295 (#111) from develop. A cancelled run's ci-ok now concludes cancelled (checked on this PR), which still does not satisfy the required check. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_019jHjgRysB6GajV3oDppruf --- .github/workflows/ci.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f230f66..d8c6b7f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -182,7 +182,10 @@ jobs: # Without this the gate inherits the default "only if every dependency # succeeded", which makes a skipped suite skip the gate -- and a skipped # required check never reports, which is the exact bug being fixed. - if: always() + # !cancelled(), not always(): a run that cancel-in-progress superseded has no + # verdict to give, and always() failed the gate on its cancelled jobs (kit v1.40.4). + # It still runs when a job fails or times out. + if: ${{ !cancelled() }} runs-on: ubuntu-latest steps: - name: Every suite green or skipped From 728679f45c0b541952cfec9e67e83fc326f2dd9f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 25 Oct 2026 09:29:51 -0400 Subject: [PATCH 3/7] build(deps-dev): bump vite from 7.3.6 to 7.3.7 in /collector/dash (#110) Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 7.3.6 to 7.3.7. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v7.3.7/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v7.3.7/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-version: 7.3.7 dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- collector/dash/package-lock.json | 12 ++++++------ collector/dash/package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/collector/dash/package-lock.json b/collector/dash/package-lock.json index 6c9e795..8b94a8a 100644 --- a/collector/dash/package-lock.json +++ b/collector/dash/package-lock.json @@ -1,12 +1,12 @@ { "name": "fleet-dash", - "version": "0.7.2", + "version": "0.9.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "fleet-dash", - "version": "0.7.2", + "version": "0.9.2", "dependencies": { "preact": "^10.29.0", "qrcode-generator": "^2.0.4" @@ -14,7 +14,7 @@ "devDependencies": { "@types/node": "^24.2.0", "typescript": "^5.9.0", - "vite": "^7.1.0" + "vite": "^7.3.7" } }, "node_modules/@esbuild/aix-ppc64": { @@ -1147,9 +1147,9 @@ "license": "MIT" }, "node_modules/vite": { - "version": "7.3.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.6.tgz", - "integrity": "sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.7.tgz", + "integrity": "sha512-AHEzTORMbi7/7aXp7w7KZ5+DCUdSeLsJz0grY8xHpc9DHdYb0vQu6DqJfm2tOw3gDExNgPgnJTXxM6syYFHaCA==", "dev": true, "license": "MIT", "dependencies": { diff --git a/collector/dash/package.json b/collector/dash/package.json index 4f03b5d..40cfdb0 100644 --- a/collector/dash/package.json +++ b/collector/dash/package.json @@ -16,7 +16,7 @@ "devDependencies": { "@types/node": "^24.2.0", "typescript": "^5.9.0", - "vite": "^7.1.0" + "vite": "^7.3.7" }, "allowScripts": { "esbuild@0.28.2": true From 72b887840339f799bdf71f611b687f568dfff117 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 25 Oct 2026 09:33:55 -0400 Subject: [PATCH 4/7] build(deps): bump fastify from 5.12.5 to 5.12.6 in /collector (#109) Bumps [fastify](https://github.com/fastify/fastify) from 5.12.5 to 5.12.6. - [Release notes](https://github.com/fastify/fastify/releases) - [Commits](https://github.com/fastify/fastify/compare/v5.12.5...v5.12.6) --- updated-dependencies: - dependency-name: fastify dependency-version: 5.12.6 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- collector/package-lock.json | 12 ++++++------ collector/package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/collector/package-lock.json b/collector/package-lock.json index 22c09b2..eab1807 100644 --- a/collector/package-lock.json +++ b/collector/package-lock.json @@ -1,15 +1,15 @@ { "name": "fleet-collector", - "version": "0.7.2", + "version": "0.9.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "fleet-collector", - "version": "0.7.2", + "version": "0.9.2", "dependencies": { "bonjour-service": "^1.4.4", - "fastify": "^5.12.5", + "fastify": "^5.12.6", "pixelmatch": "^7.2.0", "playwright": "^1.62.1", "pngjs": "^7.0.0" @@ -859,9 +859,9 @@ "license": "BSD-3-Clause" }, "node_modules/fastify": { - "version": "5.12.5", - "resolved": "https://registry.npmjs.org/fastify/-/fastify-5.12.5.tgz", - "integrity": "sha512-OB2k1dlxs5/NAABqeKV2FUHkSD2BbENsCak8yULVcymn3fHIPDVa9TI3SDnJSWYSllZmSYuZXy2gTnsT+Sut1A==", + "version": "5.12.6", + "resolved": "https://registry.npmjs.org/fastify/-/fastify-5.12.6.tgz", + "integrity": "sha512-XeErl1DDsxdbhE9RPRJ05iNnfMhHRHHewVNNAJXaGTOaCY4wHb6rEizphhgzBq5YQe4JyqQWPpGd+hLh2PXXJA==", "funding": [ { "type": "github", diff --git a/collector/package.json b/collector/package.json index 465180f..4658df6 100644 --- a/collector/package.json +++ b/collector/package.json @@ -31,7 +31,7 @@ }, "dependencies": { "bonjour-service": "^1.4.4", - "fastify": "^5.12.5", + "fastify": "^5.12.6", "pixelmatch": "^7.2.0", "playwright": "^1.62.1", "pngjs": "^7.0.0" From 7ef380f368d0e278c9c5fe4a39e033161230aefa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 25 Oct 2026 09:40:58 -0400 Subject: [PATCH 5/7] build(deps): bump fast-uri in /collector (#113) Bumps and [fast-uri](https://github.com/fastify/fast-uri). These dependencies needed to be updated together. Updates `fast-uri` from 3.1.8 to 3.1.9 - [Release notes](https://github.com/fastify/fast-uri/releases) - [Commits](https://github.com/fastify/fast-uri/compare/v3.1.8...v3.1.9) Updates `fast-uri` from 4.2.1 to 4.2.3 - [Release notes](https://github.com/fastify/fast-uri/releases) - [Commits](https://github.com/fastify/fast-uri/compare/v3.1.8...v3.1.9) --- updated-dependencies: - dependency-name: fast-uri dependency-version: 3.1.9 dependency-type: indirect - dependency-name: fast-uri dependency-version: 4.2.3 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- collector/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/collector/package-lock.json b/collector/package-lock.json index eab1807..c1d97bf 100644 --- a/collector/package-lock.json +++ b/collector/package-lock.json @@ -667,9 +667,9 @@ } }, "node_modules/ajv/node_modules/fast-uri": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.8.tgz", - "integrity": "sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.9.tgz", + "integrity": "sha512-hS/0Wt3Ya043oKXs0sIxrMpKQITXhMLIrVAKKXi4gozGC9v7YRWVnXIZzjNPTO02M9BdxLCWqK1yRXgNziVyJQ==", "funding": [ { "type": "github", @@ -843,9 +843,9 @@ } }, "node_modules/fast-uri": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-4.2.1.tgz", - "integrity": "sha512-TmHQgewjHtMq1E5QKA0tOE0yeYGQs25KZC/ziJpubRtWI15W92e6vPFydWOeZBVROSHBYw/QhD9d5OefdD6LDg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-4.2.3.tgz", + "integrity": "sha512-I1PXwP5eAhlNlcdpjt9CgB59op2ZvZfxw+BkqGFVIUOgNpCVTcTqp3HhTX7brxj5vsip+nSY4nTvff+eIA76hg==", "funding": [ { "type": "github", From bfbd0da9c8e6e6b9f8caa61fecf947990a29cdc2 Mon Sep 17 00:00:00 2001 From: Taylor Addison Date: Mon, 26 Oct 2026 09:30:57 -0400 Subject: [PATCH 6/7] Store gradlew.bat and the IBM Plex licence with LF, as .gitattributes says (#116) * runner-android: store gradlew.bat with LF, as .gitattributes says .gitattributes marks *.bat as `text eol=crlf`: LF in the repository, CRLF in the working tree. gradlew.bat was committed with CRLF inside the repository, so git reported it as modified on every fresh checkout, with nobody having touched it. Renormalized with `git add --renormalize`. The content is unchanged apart from line endings, and a checkout still writes CRLF, which is what cmd.exe needs. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_019jHjgRysB6GajV3oDppruf * docs: store the IBM Plex OFL licence with LF, as .gitattributes says `* text=auto eol=lf` wants LF both in the repository and on checkout. OFL-IBMPlex.txt was committed with CRLF, the one text file under docs/figures/fonts/ that was (OFL-Bricolage.txt is LF). Renormalized with `git add --renormalize`; the licence text is unchanged apart from line endings. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_019jHjgRysB6GajV3oDppruf --------- Co-authored-by: Claude --- docs/figures/fonts/OFL-IBMPlex.txt | 186 ++++++++++++++--------------- runner-android/gradlew.bat | 164 ++++++++++++------------- 2 files changed, 175 insertions(+), 175 deletions(-) diff --git a/docs/figures/fonts/OFL-IBMPlex.txt b/docs/figures/fonts/OFL-IBMPlex.txt index c35c4c6..01497cc 100644 --- a/docs/figures/fonts/OFL-IBMPlex.txt +++ b/docs/figures/fonts/OFL-IBMPlex.txt @@ -1,93 +1,93 @@ -Copyright © 2017 IBM Corp. with Reserved Font Name "Plex" - -This Font Software is licensed under the SIL Open Font License, Version 1.1. - -This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. +Copyright © 2017 IBM Corp. with Reserved Font Name "Plex" + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/runner-android/gradlew.bat b/runner-android/gradlew.bat index 8508ef6..a51ec4f 100644 --- a/runner-android/gradlew.bat +++ b/runner-android/gradlew.bat @@ -1,82 +1,82 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem -@rem SPDX-License-Identifier: Apache-2.0 -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem gradlew startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables, and ensure extensions are enabled -setlocal EnableExtensions - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -"%COMSPEC%" /c exit 1 - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -"%COMSPEC%" /c exit 1 - -:execute -@rem Setup the command line - - - -@rem Execute gradlew -@rem endlocal doesn't take effect until after the line is parsed and variables are expanded -@rem which allows us to clear the local environment before executing the java command -endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel - -:exitWithErrorLevel -@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts -"%COMSPEC%" /c exit %ERRORLEVEL% +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem gradlew startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables, and ensure extensions are enabled +setlocal EnableExtensions + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +"%COMSPEC%" /c exit 1 + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +"%COMSPEC%" /c exit 1 + +:execute +@rem Setup the command line + + + +@rem Execute gradlew +@rem endlocal doesn't take effect until after the line is parsed and variables are expanded +@rem which allows us to clear the local environment before executing the java command +endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel + +:exitWithErrorLevel +@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts +"%COMSPEC%" /c exit %ERRORLEVEL% From 68c0a5ea468259bcdedc2d29d33b748984a82837 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 26 Oct 2026 13:41:52 +0000 Subject: [PATCH 7/7] ci: install WebKitWebDriver from webkitgtk-webdriver on Ubuntu 26.04 ubuntu-latest has started handing out ubuntu-26.04 images, where webkit2gtk-driver is gone ("no installation candidate"; replaced by webkitgtk-webdriver, which still ships /usr/bin/WebKitWebDriver). The desktop launch smoke failed at apt-get on PR #117's first run; #114's green run the day before was on ubuntu-24.04. Pick the package by whether apt has a candidate for the new name: `apt-cache show` succeeds on 24.04 too, which knows the name and has nothing to install under it. Checked against both releases' indexes: 24.04 picks webkit2gtk-driver 2.52.6, 26.04 picks webkitgtk-webdriver 2.52.0, and every other package in the step has a 26.04 candidate. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_019jHjgRysB6GajV3oDppruf --- .github/workflows/desktop.yml | 12 +++++++++++- desktop/ci/launch-smoke.sh | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/.github/workflows/desktop.yml b/.github/workflows/desktop.yml index 7070eb4..3c3ec37 100644 --- a/.github/workflows/desktop.yml +++ b/.github/workflows/desktop.yml @@ -55,13 +55,23 @@ jobs: # tray), plus what the smoke itself uses: Xvfb for a display, dbus for a # session bus, WebKitWebDriver for tauri-driver, ImageMagick to capture # the screen. + # + # WebKitWebDriver's package is webkitgtk-webdriver from Ubuntu 26.04 and + # webkit2gtk-driver before it, and ubuntu-latest moves between the two a + # runner at a time. Install whichever this image has a candidate for: + # `apt-cache show` is no test, since 24.04 knows the new name and has + # nothing to install under it. - name: Linux dependencies run: | sudo apt-get update + driver=webkit2gtk-driver + if apt-cache policy webkitgtk-webdriver | grep 'Candidate: [0-9]' >/dev/null; then + driver=webkitgtk-webdriver + fi sudo apt-get install -y --no-install-recommends \ libwebkit2gtk-4.1-dev build-essential curl wget file libxdo-dev \ libssl-dev libayatana-appindicator3-dev librsvg2-dev \ - xvfb x11-utils dbus-x11 webkit2gtk-driver imagemagick jq + xvfb x11-utils dbus-x11 "$driver" imagemagick jq - name: Stage the fleet sidecar run: | npm --prefix collector ci diff --git a/desktop/ci/launch-smoke.sh b/desktop/ci/launch-smoke.sh index 6c4f385..09960f2 100755 --- a/desktop/ci/launch-smoke.sh +++ b/desktop/ci/launch-smoke.sh @@ -154,7 +154,7 @@ fi echo "== half 2: drive the settings window through tauri-driver" command -v tauri-driver >/dev/null || fail "tauri-driver is not on PATH" -command -v WebKitWebDriver >/dev/null || fail "WebKitWebDriver is not on PATH (apt: webkit2gtk-driver)" +command -v WebKitWebDriver >/dev/null || fail "WebKitWebDriver is not on PATH (apt: webkitgtk-webdriver, or webkit2gtk-driver before Ubuntu 26.04)" tauri-driver --port 4444 >"$out/tauri-driver.log" 2>&1 & driver=$! for _ in $(seq 1 50); do curl -fsS http://127.0.0.1:4444/status >/dev/null 2>&1 && break; sleep 0.2; done