From eb110a198509d99827446cc0d90fabeb170b5208 Mon Sep 17 00:00:00 2001 From: Shai Almog <67850168+shai-almog@users.noreply.github.com> Date: Fri, 25 Sep 2026 20:17:06 +0300 Subject: [PATCH 1/2] Pin Linux CI runners to ubuntu-24.04 GitHub is moving the ubuntu-latest label to the Ubuntu 26 image between 2026-10-19 and 2026-11-19. Several jobs depend on the exact image (apt package names, the desktop session, and the font metrics behind the fidelity screenshot baselines), so pin to 24.04 until 26 is validated. Matrix values and the starter-canary artifact name that is derived from matrix.os are renamed together so the report lookup keeps matching. Co-Authored-By: Claude Opus 5.5 (1M context) --- .github/workflows/admob-android-runtime-check.yml | 2 +- .github/workflows/ai-cn1lib-android-check.yml | 2 +- .github/workflows/ant.yml | 2 +- .github/workflows/archetype-smoke.yml | 2 +- .github/workflows/blog-prose.yml | 4 ++-- .github/workflows/blog-syndication.yml | 2 +- .github/workflows/build-container.yml | 2 +- .github/workflows/car-android.yml | 2 +- .github/workflows/check-16k-page-alignment.yml | 2 +- .github/workflows/check-control-characters.yml | 2 +- .github/workflows/check-copyright-headers.yml | 2 +- .github/workflows/check-since-tags.yml | 2 +- .github/workflows/check-workflows.yml | 2 +- .github/workflows/cn1playground-language.yml | 2 +- .github/workflows/codeql.yml | 2 +- .github/workflows/designer.yml | 2 +- .github/workflows/developer-guide-docs.yml | 2 +- .github/workflows/errorprone.yml | 2 +- .github/workflows/fidelity-desktop-native-ref.yml | 2 +- .github/workflows/guibuilder.yml | 2 +- .github/workflows/health-android.yml | 2 +- .github/workflows/identity-stack.yml | 4 ++-- .github/workflows/initializr-cn1-version-pr.yml | 2 +- .github/workflows/java-snippet-validation.yml | 2 +- .github/workflows/javadocs.yml | 2 +- .github/workflows/javase-cef-ffmpeg-smoke.yml | 2 +- .github/workflows/jsport-barrier-lint.yml | 2 +- .github/workflows/linux-browser-link.yml | 2 +- .github/workflows/linux-build-run.yml | 10 +++++----- .github/workflows/material-icons-update.yml | 2 +- .github/workflows/native-themes-sync.yml | 2 +- .github/workflows/oss-traction.yml | 2 +- .github/workflows/parparvm-parallel-mark.yml | 2 +- .github/workflows/parparvm-selfhost.yml | 2 +- .github/workflows/parparvm-tests-windows.yml | 4 ++-- .github/workflows/parparvm-tests.yml | 6 +++--- .github/workflows/port-status-contract.yml | 2 +- .github/workflows/port-status-nightly.yml | 8 ++++---- .github/workflows/port-status-publish.yml | 2 +- .github/workflows/pr.yml | 4 ++-- .github/workflows/protocol-e2e.yml | 2 +- .github/workflows/publish-master-snapshot.yml | 2 +- .github/workflows/purchase-e2e.yml | 4 ++-- .github/workflows/release.yml | 2 +- .github/workflows/scaffolding-parity.yml | 2 +- .github/workflows/scripts-android.yml | 2 +- .github/workflows/scripts-fidelity-desktop.yml | 4 ++-- .github/workflows/scripts-fidelity.yml | 2 +- .github/workflows/scripts-javascript.yml | 2 +- .github/workflows/scripts-javase.yml | 2 +- .github/workflows/seed-frozen-artifacts.yml | 2 +- .github/workflows/skin-designer-devices-update.yml | 2 +- .github/workflows/starter-canary.yml | 8 ++++---- .github/workflows/starter-launchers.yml | 2 +- .github/workflows/syndication-health.yml | 2 +- .github/workflows/website-docs.yml | 2 +- .github/workflows/windows-cross-build-run.yml | 4 ++-- .github/workflows/windows-cross-compile.yml | 2 +- 58 files changed, 77 insertions(+), 77 deletions(-) diff --git a/.github/workflows/admob-android-runtime-check.yml b/.github/workflows/admob-android-runtime-check.yml index e5f7533bab3..8d331069f4e 100644 --- a/.github/workflows/admob-android-runtime-check.yml +++ b/.github/workflows/admob-android-runtime-check.yml @@ -21,7 +21,7 @@ concurrency: jobs: banner-measurement: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 20 steps: - uses: actions/checkout@v6 diff --git a/.github/workflows/ai-cn1lib-android-check.yml b/.github/workflows/ai-cn1lib-android-check.yml index c15f538e424..00de5550a59 100644 --- a/.github/workflows/ai-cn1lib-android-check.yml +++ b/.github/workflows/ai-cn1lib-android-check.yml @@ -22,7 +22,7 @@ on: jobs: android-native-check: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v6 - name: Set up JDK 17 diff --git a/.github/workflows/ant.yml b/.github/workflows/ant.yml index 62dc6fe3e19..b0a47f22cbd 100644 --- a/.github/workflows/ant.yml +++ b/.github/workflows/ant.yml @@ -23,7 +23,7 @@ concurrency: jobs: build-linux-jdk8: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 45 steps: diff --git a/.github/workflows/archetype-smoke.yml b/.github/workflows/archetype-smoke.yml index 778b9579798..a93db1ded41 100644 --- a/.github/workflows/archetype-smoke.yml +++ b/.github/workflows/archetype-smoke.yml @@ -48,7 +48,7 @@ concurrency: jobs: archetype-smoke: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 30 steps: - uses: actions/checkout@v6 diff --git a/.github/workflows/blog-prose.yml b/.github/workflows/blog-prose.yml index a0da186cfa7..f298874d209 100644 --- a/.github/workflows/blog-prose.yml +++ b/.github/workflows/blog-prose.yml @@ -34,7 +34,7 @@ jobs: gate: name: Blog prose gate if: github.event_name == 'pull_request' - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - name: Check out repository uses: actions/checkout@v6 @@ -202,7 +202,7 @@ jobs: # --------------------------------------------------------------------------- # report: if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - name: Check out repository uses: actions/checkout@v6 diff --git a/.github/workflows/blog-syndication.yml b/.github/workflows/blog-syndication.yml index 17319db5290..2afbd3102a8 100644 --- a/.github/workflows/blog-syndication.yml +++ b/.github/workflows/blog-syndication.yml @@ -22,7 +22,7 @@ concurrency: jobs: syndicate: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - name: Check out repository uses: actions/checkout@v6 diff --git a/.github/workflows/build-container.yml b/.github/workflows/build-container.yml index f75a5ca1d04..f51a124a752 100644 --- a/.github/workflows/build-container.yml +++ b/.github/workflows/build-container.yml @@ -9,7 +9,7 @@ on: jobs: build-and-push: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 permissions: contents: read packages: write diff --git a/.github/workflows/car-android.yml b/.github/workflows/car-android.yml index 1a2c9747518..063470f6381 100644 --- a/.github/workflows/car-android.yml +++ b/.github/workflows/car-android.yml @@ -56,7 +56,7 @@ jobs: name: Car Android Auto permissions: contents: read - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 60 env: GITHUB_TOKEN: ${{ secrets.CN1SS_GH_TOKEN }} diff --git a/.github/workflows/check-16k-page-alignment.yml b/.github/workflows/check-16k-page-alignment.yml index c54742dd6a3..a1b41211745 100644 --- a/.github/workflows/check-16k-page-alignment.yml +++ b/.github/workflows/check-16k-page-alignment.yml @@ -29,7 +29,7 @@ on: jobs: check-16k-page-alignment: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v6 diff --git a/.github/workflows/check-control-characters.yml b/.github/workflows/check-control-characters.yml index 81a0a94db6a..9bca866660f 100644 --- a/.github/workflows/check-control-characters.yml +++ b/.github/workflows/check-control-characters.yml @@ -24,7 +24,7 @@ on: jobs: check-control-characters: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v6 diff --git a/.github/workflows/check-copyright-headers.yml b/.github/workflows/check-copyright-headers.yml index 734ae27f5c6..e3e1bf1dc79 100644 --- a/.github/workflows/check-copyright-headers.yml +++ b/.github/workflows/check-copyright-headers.yml @@ -17,7 +17,7 @@ on: jobs: check-copyright-headers: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v6 with: diff --git a/.github/workflows/check-since-tags.yml b/.github/workflows/check-since-tags.yml index fc3e7dab4db..15409751a02 100644 --- a/.github/workflows/check-since-tags.yml +++ b/.github/workflows/check-since-tags.yml @@ -26,7 +26,7 @@ on: jobs: check-since-tags: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v6 diff --git a/.github/workflows/check-workflows.yml b/.github/workflows/check-workflows.yml index f13c551aa79..41cf1593dd4 100644 --- a/.github/workflows/check-workflows.yml +++ b/.github/workflows/check-workflows.yml @@ -28,7 +28,7 @@ on: jobs: check-workflows: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v6 diff --git a/.github/workflows/cn1playground-language.yml b/.github/workflows/cn1playground-language.yml index c9b2cdf5150..f2175618009 100644 --- a/.github/workflows/cn1playground-language.yml +++ b/.github/workflows/cn1playground-language.yml @@ -19,7 +19,7 @@ permissions: jobs: language-smoke: name: Playground language smoke - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - name: Check out repository diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 192b07b1401..42030836d31 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -19,7 +19,7 @@ concurrency: jobs: analyze: name: Analyze (${{ matrix.language }}) - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 60 permissions: security-events: write diff --git a/.github/workflows/designer.yml b/.github/workflows/designer.yml index e784ae7ab7c..585271a2431 100644 --- a/.github/workflows/designer.yml +++ b/.github/workflows/designer.yml @@ -34,7 +34,7 @@ concurrency: jobs: build-designer: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 45 steps: diff --git a/.github/workflows/developer-guide-docs.yml b/.github/workflows/developer-guide-docs.yml index 924aa8c08fb..68a2c55794a 100644 --- a/.github/workflows/developer-guide-docs.yml +++ b/.github/workflows/developer-guide-docs.yml @@ -59,7 +59,7 @@ on: jobs: build: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 permissions: contents: write issues: write diff --git a/.github/workflows/errorprone.yml b/.github/workflows/errorprone.yml index 4639235c4ec..657fa1ce752 100644 --- a/.github/workflows/errorprone.yml +++ b/.github/workflows/errorprone.yml @@ -34,7 +34,7 @@ on: jobs: errorprone: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v6 diff --git a/.github/workflows/fidelity-desktop-native-ref.yml b/.github/workflows/fidelity-desktop-native-ref.yml index 542398ed7f5..5e2981da4f2 100644 --- a/.github/workflows/fidelity-desktop-native-ref.yml +++ b/.github/workflows/fidelity-desktop-native-ref.yml @@ -63,7 +63,7 @@ jobs: gnome-ref: if: ${{ inputs.targets == 'all' || inputs.targets == 'gnome' }} name: GNOME (GTK4 + libadwaita) - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 30 env: CN1SS_FIDELITY_GOLDEN_SET: gnome-adwaita diff --git a/.github/workflows/guibuilder.yml b/.github/workflows/guibuilder.yml index d6813b54e5f..91b15ef81e3 100644 --- a/.github/workflows/guibuilder.yml +++ b/.github/workflows/guibuilder.yml @@ -47,7 +47,7 @@ concurrency: jobs: guibuilder: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 60 container: ghcr.io/codenameone/codenameone/pr-ci-container:latest defaults: diff --git a/.github/workflows/health-android.yml b/.github/workflows/health-android.yml index 1e567df9661..2822f74d772 100644 --- a/.github/workflows/health-android.yml +++ b/.github/workflows/health-android.yml @@ -47,7 +47,7 @@ jobs: name: Health Connect Android permissions: contents: read - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 60 steps: - uses: actions/checkout@v6 diff --git a/.github/workflows/identity-stack.yml b/.github/workflows/identity-stack.yml index 8211206afee..fa624f41b91 100644 --- a/.github/workflows/identity-stack.yml +++ b/.github/workflows/identity-stack.yml @@ -88,7 +88,7 @@ concurrency: jobs: linux-tests: name: Core tests, plugin & Android compile, sample javac - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 # Same container the main PR workflow uses; it ships JDK 8/17/21 and # cn1-binaries pre-staged at /opt/cn1-binaries. container: ghcr.io/codenameone/codenameone/pr-ci-container:latest @@ -212,7 +212,7 @@ jobs: sample-secrets: name: Scan demo sample for accidental credentials - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 # 10 rather than 3. The scan itself is one grep over ten paths and takes # under a second; the three minutes went entirely to checking out a # repository this size, and the job was cancelled mid-checkout having done diff --git a/.github/workflows/initializr-cn1-version-pr.yml b/.github/workflows/initializr-cn1-version-pr.yml index 0cc9dbd5b03..f8227c1d97b 100644 --- a/.github/workflows/initializr-cn1-version-pr.yml +++ b/.github/workflows/initializr-cn1-version-pr.yml @@ -17,7 +17,7 @@ permissions: jobs: update-website-cn1-versions: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - name: Checkout uses: actions/checkout@v6 diff --git a/.github/workflows/java-snippet-validation.yml b/.github/workflows/java-snippet-validation.yml index b0d34b12cdd..65b36029cae 100644 --- a/.github/workflows/java-snippet-validation.yml +++ b/.github/workflows/java-snippet-validation.yml @@ -14,7 +14,7 @@ on: jobs: validate-snippets: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v6 with: diff --git a/.github/workflows/javadocs.yml b/.github/workflows/javadocs.yml index 608bda9841d..cfb27bb2d79 100644 --- a/.github/workflows/javadocs.yml +++ b/.github/workflows/javadocs.yml @@ -20,7 +20,7 @@ on: jobs: build-javadocs: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 permissions: contents: write steps: diff --git a/.github/workflows/javase-cef-ffmpeg-smoke.yml b/.github/workflows/javase-cef-ffmpeg-smoke.yml index 2e606807d89..3aa47845723 100644 --- a/.github/workflows/javase-cef-ffmpeg-smoke.yml +++ b/.github/workflows/javase-cef-ffmpeg-smoke.yml @@ -48,7 +48,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, macos-latest, windows-latest] + os: [ubuntu-24.04, macos-latest, windows-latest] runs-on: ${{ matrix.os }} steps: diff --git a/.github/workflows/jsport-barrier-lint.yml b/.github/workflows/jsport-barrier-lint.yml index 37265d228b2..c545593ae42 100644 --- a/.github/workflows/jsport-barrier-lint.yml +++ b/.github/workflows/jsport-barrier-lint.yml @@ -25,7 +25,7 @@ name: JS port barrier-read lint jobs: barrier-lint: name: JS port canvas barrier-read lint - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v6 - name: Run barrier-read linter diff --git a/.github/workflows/linux-browser-link.yml b/.github/workflows/linux-browser-link.yml index 70f0696926c..0d6e7635153 100644 --- a/.github/workflows/linux-browser-link.yml +++ b/.github/workflows/linux-browser-link.yml @@ -9,7 +9,7 @@ jobs: browser-link: strategy: matrix: - runner: [ubuntu-latest, ubuntu-24.04-arm] + runner: [ubuntu-24.04, ubuntu-24.04-arm] runs-on: ${{ matrix.runner }} timeout-minutes: 10 steps: diff --git a/.github/workflows/linux-build-run.yml b/.github/workflows/linux-build-run.yml index ff633bfdbf4..f4b426227f1 100644 --- a/.github/workflows/linux-build-run.yml +++ b/.github/workflows/linux-build-run.yml @@ -1,7 +1,7 @@ # Native Linux (GTK3) build + run pipeline. The Linux port builds natively on the # runner -- no cross-compile -- so each architecture both builds and runs the # binary. It runs on BOTH architectures GitHub hosts natively: x86_64 -# (ubuntu-latest) and arm64 (ubuntu-24.04-arm), giving the port the same two-arch +# (ubuntu-24.04) and arm64 (ubuntu-24.04-arm), giving the port the same two-arch # screenshot coverage the native Windows port has. # # The hellocodenameone screenshot suite is compiled by the codenameone maven @@ -92,7 +92,7 @@ jobs: # so both arch legs translate from these same classes. prepare-suite: name: build suite classes (x64) - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 60 steps: - name: Check out repository @@ -163,7 +163,7 @@ jobs: matrix: include: - arch: x64 - runner: ubuntu-latest + runner: ubuntu-24.04 - arch: arm64 runner: ubuntu-24.04-arm steps: @@ -471,7 +471,7 @@ jobs: build-run-musl: name: build + run suite (musl, Alpine x64) needs: prepare-suite - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - name: Download suite classes @@ -554,7 +554,7 @@ jobs: !cancelled() && (github.event_name == 'pull_request' || github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 permissions: # write, because this job publishes the normalized report to the # port-status-data branch itself (see the publish step below). diff --git a/.github/workflows/material-icons-update.yml b/.github/workflows/material-icons-update.yml index ce25a65be1a..ed74d12b329 100644 --- a/.github/workflows/material-icons-update.yml +++ b/.github/workflows/material-icons-update.yml @@ -17,7 +17,7 @@ permissions: jobs: update-material-icons: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - name: Check out repository diff --git a/.github/workflows/native-themes-sync.yml b/.github/workflows/native-themes-sync.yml index e5666d6395a..29ea0786b5e 100644 --- a/.github/workflows/native-themes-sync.yml +++ b/.github/workflows/native-themes-sync.yml @@ -36,7 +36,7 @@ concurrency: jobs: rebuild-and-commit: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 container: ghcr.io/codenameone/codenameone/pr-ci-container:latest defaults: run: diff --git a/.github/workflows/oss-traction.yml b/.github/workflows/oss-traction.yml index 41785cbe8c1..87f60b360e7 100644 --- a/.github/workflows/oss-traction.yml +++ b/.github/workflows/oss-traction.yml @@ -20,7 +20,7 @@ concurrency: jobs: snapshot: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - name: Check out default branch uses: actions/checkout@v6 diff --git a/.github/workflows/parparvm-parallel-mark.yml b/.github/workflows/parparvm-parallel-mark.yml index 119f1c3b63f..38970bc3614 100644 --- a/.github/workflows/parparvm-parallel-mark.yml +++ b/.github/workflows/parparvm-parallel-mark.yml @@ -111,7 +111,7 @@ jobs: # x64 as well, so a failure can be attributed to the architecture rather # than to the pool itself. - arch: x64 - runner: ubuntu-latest + runner: ubuntu-24.04 markers: 4 cflags: '-DCN1_GC_MARK_THREADS=4' steps: diff --git a/.github/workflows/parparvm-selfhost.yml b/.github/workflows/parparvm-selfhost.yml index 7ba516ab3c5..92f9607bfd7 100644 --- a/.github/workflows/parparvm-selfhost.yml +++ b/.github/workflows/parparvm-selfhost.yml @@ -50,7 +50,7 @@ jobs: if: >- github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'selfhost') - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 120 steps: - name: Check out repository diff --git a/.github/workflows/parparvm-tests-windows.yml b/.github/workflows/parparvm-tests-windows.yml index 62b427fd1bd..afce7517095 100644 --- a/.github/workflows/parparvm-tests-windows.yml +++ b/.github/workflows/parparvm-tests-windows.yml @@ -746,7 +746,7 @@ jobs: needs.windows-port-screenshot.result != 'cancelled' && needs.windows-port-screenshot.result != 'skipped' && (github.event_name == 'pull_request' || github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 permissions: contents: read pull-requests: write @@ -847,7 +847,7 @@ jobs: needs.windows-port-screenshot-arm64.result != 'cancelled' && needs.windows-port-screenshot-arm64.result != 'skipped' && (github.event_name == 'pull_request' || github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 permissions: contents: read pull-requests: write diff --git a/.github/workflows/parparvm-tests.yml b/.github/workflows/parparvm-tests.yml index 081cc04d2cd..21b51762e05 100644 --- a/.github/workflows/parparvm-tests.yml +++ b/.github/workflows/parparvm-tests.yml @@ -93,7 +93,7 @@ env: jobs: vm-tests: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 90 # The two database engines the backend speaks a wire protocol to. # @@ -442,7 +442,7 @@ jobs: # cases it happens to pass. backend-websocket-conformance: name: WebSocket conformance (Autobahn) - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 45 steps: - uses: actions/checkout@v6 @@ -487,7 +487,7 @@ jobs: release-jars: if: ${{ github.event_name == 'release' && github.event.action == 'published' }} - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 45 permissions: contents: write diff --git a/.github/workflows/port-status-contract.yml b/.github/workflows/port-status-contract.yml index 5eeb164f614..1601cf301fc 100644 --- a/.github/workflows/port-status-contract.yml +++ b/.github/workflows/port-status-contract.yml @@ -71,7 +71,7 @@ permissions: jobs: validate: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v6 - uses: actions/setup-python@v6 diff --git a/.github/workflows/port-status-nightly.yml b/.github/workflows/port-status-nightly.yml index 7cd0bdc75e3..240920c5e90 100644 --- a/.github/workflows/port-status-nightly.yml +++ b/.github/workflows/port-status-nightly.yml @@ -20,7 +20,7 @@ jobs: # contract's staleness window. publish-latest-port-reports: if: github.ref == 'refs/heads/master' - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 20 steps: - uses: actions/checkout@v6 @@ -30,7 +30,7 @@ jobs: run: scripts/hellocodenameone/conformance/backfill_port_status.sh build-javascript-app: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 60 steps: - uses: actions/checkout@v6 @@ -63,7 +63,7 @@ jobs: browser-lifecycle: needs: build-javascript-app - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 20 strategy: fail-fast: false @@ -114,7 +114,7 @@ jobs: # some later deployment. The two concerns are now separated. if: always() needs: [build-javascript-app, browser-lifecycle, publish-latest-port-reports] - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v6 - uses: actions/download-artifact@v4 diff --git a/.github/workflows/port-status-publish.yml b/.github/workflows/port-status-publish.yml index 69586ceef18..d58f1d38537 100644 --- a/.github/workflows/port-status-publish.yml +++ b/.github/workflows/port-status-publish.yml @@ -39,7 +39,7 @@ jobs: github.event.workflow_run.conclusion != 'skipped' && (github.event.workflow_run.event == 'push' || github.event.workflow_run.event == 'schedule') && github.event.workflow_run.head_branch == 'master' - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v6 with: diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 637c8032c14..76f7bca60a0 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -153,7 +153,7 @@ concurrency: jobs: build-test: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 60 container: ghcr.io/codenameone/codenameone/pr-ci-container:latest env: @@ -935,7 +935,7 @@ jobs: # pull request the image is never fetched. if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} needs: build-test - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - name: Download the distribution bundle uses: actions/download-artifact@v7 diff --git a/.github/workflows/protocol-e2e.yml b/.github/workflows/protocol-e2e.yml index 7ed725f0dca..22a89c38613 100644 --- a/.github/workflows/protocol-e2e.yml +++ b/.github/workflows/protocol-e2e.yml @@ -28,7 +28,7 @@ on: jobs: protocol-e2e: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 container: ghcr.io/codenameone/codenameone/pr-ci-container:latest timeout-minutes: 40 steps: diff --git a/.github/workflows/publish-master-snapshot.yml b/.github/workflows/publish-master-snapshot.yml index e6c0a0a442b..d0afa7894ac 100644 --- a/.github/workflows/publish-master-snapshot.yml +++ b/.github/workflows/publish-master-snapshot.yml @@ -20,7 +20,7 @@ permissions: jobs: publish: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v6 - name: Set up JDK 8 diff --git a/.github/workflows/purchase-e2e.yml b/.github/workflows/purchase-e2e.yml index 524808d96c0..1e1caec21f6 100644 --- a/.github/workflows/purchase-e2e.yml +++ b/.github/workflows/purchase-e2e.yml @@ -75,7 +75,7 @@ concurrency: jobs: core-tests: name: Core receipt-sync unit tests (JavaSE) - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 container: ghcr.io/codenameone/codenameone/pr-ci-container:latest timeout-minutes: 20 defaults: @@ -235,7 +235,7 @@ jobs: native-android: name: Android billing-bridge purchase (emulator) - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 60 env: GITHUB_TOKEN: ${{ secrets.CN1SS_GH_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e03906dac1c..896118dd33e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -23,7 +23,7 @@ concurrency: jobs: build: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 # Was 240 to cover five 30-minute Maven Central propagation polls. Those are gone # with Central, and what remains is the core reactor plus four editors against a # repository that either accepts an upload or does not. Still bounded explicitly diff --git a/.github/workflows/scaffolding-parity.yml b/.github/workflows/scaffolding-parity.yml index 0c060dc3c88..9803519eb0c 100644 --- a/.github/workflows/scaffolding-parity.yml +++ b/.github/workflows/scaffolding-parity.yml @@ -48,7 +48,7 @@ concurrency: jobs: scaffolding-integrity: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 # 10 rather than 5, for the reason identity-stack's sample-secrets job # carries: checking out a repository this size can take three minutes on its # own, and a budget sized for the work rather than for the checkout fails diff --git a/.github/workflows/scripts-android.yml b/.github/workflows/scripts-android.yml index 83cbb636c54..87eefecd4d0 100644 --- a/.github/workflows/scripts-android.yml +++ b/.github/workflows/scripts-android.yml @@ -141,7 +141,7 @@ jobs: contents: read pull-requests: write issues: write - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 60 env: GITHUB_TOKEN: ${{ secrets.CN1SS_GH_TOKEN }} diff --git a/.github/workflows/scripts-fidelity-desktop.yml b/.github/workflows/scripts-fidelity-desktop.yml index 8e51046ead6..27bfbda5690 100644 --- a/.github/workflows/scripts-fidelity-desktop.yml +++ b/.github/workflows/scripts-fidelity-desktop.yml @@ -95,7 +95,7 @@ jobs: # and costs one ubuntu minute. select: name: select legs - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 outputs: matrix: ${{ steps.pick.outputs.matrix }} any: ${{ steps.pick.outputs.any }} @@ -120,7 +120,7 @@ jobs: entries='' for leg in $legs; do case "$leg" in - gnome) runner=ubuntu-latest ;; + gnome) runner=ubuntu-24.04 ;; windows) runner=windows-11-arm ;; macos) runner=macos-15 ;; esac diff --git a/.github/workflows/scripts-fidelity.yml b/.github/workflows/scripts-fidelity.yml index fe5ad3c9a0d..dba14c8a020 100644 --- a/.github/workflows/scripts-fidelity.yml +++ b/.github/workflows/scripts-fidelity.yml @@ -112,7 +112,7 @@ jobs: contents: read pull-requests: write issues: write - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 60 env: GITHUB_TOKEN: ${{ secrets.CN1SS_GH_TOKEN }} diff --git a/.github/workflows/scripts-javascript.yml b/.github/workflows/scripts-javascript.yml index 9ee59d81a55..38f36acc62a 100644 --- a/.github/workflows/scripts-javascript.yml +++ b/.github/workflows/scripts-javascript.yml @@ -106,7 +106,7 @@ jobs: contents: read pull-requests: write issues: write - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 env: GITHUB_TOKEN: ${{ secrets.CN1SS_GH_TOKEN }} # The device runner reports logical test failures through CN1SS log diff --git a/.github/workflows/scripts-javase.yml b/.github/workflows/scripts-javase.yml index 1058d34a600..84633599d0c 100644 --- a/.github/workflows/scripts-javase.yml +++ b/.github/workflows/scripts-javase.yml @@ -33,7 +33,7 @@ jobs: contents: read pull-requests: write issues: write - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 env: GITHUB_TOKEN: ${{ secrets.CN1SS_GH_TOKEN }} GH_TOKEN: ${{ secrets.CN1SS_GH_TOKEN }} diff --git a/.github/workflows/seed-frozen-artifacts.yml b/.github/workflows/seed-frozen-artifacts.yml index 1edf22cd1db..221a11a208c 100644 --- a/.github/workflows/seed-frozen-artifacts.yml +++ b/.github/workflows/seed-frozen-artifacts.yml @@ -26,7 +26,7 @@ concurrency: jobs: seed: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 30 env: R2_ACCOUNT_ID: ${{ secrets.R2_ACCOUNT_ID }} diff --git a/.github/workflows/skin-designer-devices-update.yml b/.github/workflows/skin-designer-devices-update.yml index 44b95b4ae43..a0365948cd2 100644 --- a/.github/workflows/skin-designer-devices-update.yml +++ b/.github/workflows/skin-designer-devices-update.yml @@ -18,7 +18,7 @@ jobs: update-device-db: # Only run on the canonical repo's master, never on forks or feature branches. if: github.repository == 'codenameone/CodenameOne' && github.ref == 'refs/heads/master' - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 # Cold runs (empty cache) can take 30–60 min to walk the curated brands; # warm runs are typically a few minutes. timeout-minutes: 75 diff --git a/.github/workflows/starter-canary.yml b/.github/workflows/starter-canary.yml index 93ba7a57e60..efc75e3fa83 100644 --- a/.github/workflows/starter-canary.yml +++ b/.github/workflows/starter-canary.yml @@ -45,7 +45,7 @@ concurrency: jobs: self-test: name: Canary assertions still fire - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 5 steps: - uses: actions/checkout@v6 @@ -70,7 +70,7 @@ jobs: # masking a platform-specific launcher failure. max-parallel: 1 matrix: - os: [ubuntu-latest, windows-latest] + os: [ubuntu-24.04, windows-latest] runs-on: ${{ matrix.os }} # Must exceed everything starter_canary.py can spend: HTTP_ALLOWANCE 10m + # SEED_TIMEOUT 10m + LAUNCH_TIMEOUT 30m + POLL_TIMEOUT 20m = 70m, plus @@ -159,7 +159,7 @@ jobs: alert: needs: canary if: always() && github.event_name != 'pull_request' - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 permissions: contents: read issues: write @@ -205,7 +205,7 @@ jobs: }; const results = [ - read('ubuntu-latest', 'Linux'), + read('ubuntu-24.04', 'Linux'), read('windows-latest', 'Windows'), ]; const problems = results.map(r => r.problem).filter(Boolean); diff --git a/.github/workflows/starter-launchers.yml b/.github/workflows/starter-launchers.yml index da5a8d9989d..8a414a9ef7a 100644 --- a/.github/workflows/starter-launchers.yml +++ b/.github/workflows/starter-launchers.yml @@ -9,7 +9,7 @@ jobs: launchers: strategy: matrix: - os: [ubuntu-latest, windows-latest] + os: [ubuntu-24.04, windows-latest] runs-on: ${{ matrix.os }} timeout-minutes: 10 steps: diff --git a/.github/workflows/syndication-health.yml b/.github/workflows/syndication-health.yml index 14751738d7c..3b6e5a7ed6e 100644 --- a/.github/workflows/syndication-health.yml +++ b/.github/workflows/syndication-health.yml @@ -22,7 +22,7 @@ concurrency: jobs: check: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - name: Check out default branch uses: actions/checkout@v6 diff --git a/.github/workflows/website-docs.yml b/.github/workflows/website-docs.yml index 9823bf71b85..02f3244cb1c 100644 --- a/.github/workflows/website-docs.yml +++ b/.github/workflows/website-docs.yml @@ -91,7 +91,7 @@ permissions: jobs: build: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 # A ceiling, because there was not one: this job hung in apt and ran for six # hours before GitHub's own limit stopped it. timeout-minutes: 90 diff --git a/.github/workflows/windows-cross-build-run.yml b/.github/workflows/windows-cross-build-run.yml index 7d62d978b05..f908beacb0d 100644 --- a/.github/workflows/windows-cross-build-run.yml +++ b/.github/workflows/windows-cross-build-run.yml @@ -59,7 +59,7 @@ concurrency: jobs: cross-build: name: cross-build suite exe (Linux, x64 + WebView2) - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 60 steps: - name: Check out repository @@ -323,7 +323,7 @@ jobs: !cancelled() && (github.event_name == 'pull_request' || github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 permissions: # write, because this job publishes the normalized report to the # port-status-data branch itself (see the publish step below). diff --git a/.github/workflows/windows-cross-compile.yml b/.github/workflows/windows-cross-compile.yml index 0e79d54ee9c..f84fa8328ce 100644 --- a/.github/workflows/windows-cross-compile.yml +++ b/.github/workflows/windows-cross-compile.yml @@ -33,7 +33,7 @@ concurrency: jobs: cross-compile: name: cross-compile (x64 PE on Linux) - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 # A ceiling, because there was not one: this job hung in apt and ran for six # hours before GitHub's own limit stopped it. The work takes well under an # hour, so anything past that is stuck rather than slow. From fa727ebf232b09422f024129e39c7407318c9275 Mon Sep 17 00:00:00 2001 From: Shai Almog <67850168+shai-almog@users.noreply.github.com> Date: Fri, 25 Sep 2026 21:48:27 +0300 Subject: [PATCH 2/2] Skip the legacy Android tools package in the AI cn1lib check android-actions/setup-android@v3 installs `tools` by default, which cmdline-tools 16.0 on the current ubuntu-24.04 image no longer offers, so the setup step fails before the job starts. Install platform-tools only; the following step installs the platform and build-tools explicitly. Co-Authored-By: Claude Opus 5.5 (1M context) --- .github/workflows/ai-cn1lib-android-check.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/ai-cn1lib-android-check.yml b/.github/workflows/ai-cn1lib-android-check.yml index 00de5550a59..cb4718ac50d 100644 --- a/.github/workflows/ai-cn1lib-android-check.yml +++ b/.github/workflows/ai-cn1lib-android-check.yml @@ -32,6 +32,11 @@ jobs: java-version: '17' - name: Set up Android SDK uses: android-actions/setup-android@v3 + # The action's default list includes the legacy `tools` package, which + # cmdline-tools 16.0 (runner image ubuntu24/20260920) no longer offers, + # so `sdkmanager tools` exits 1. The next step installs what we need. + with: + packages: platform-tools - name: Install Android platform & ML Kit deps # sdkmanager + `yes |` would SIGPIPE under `set -o pipefail`, so feed # licence approvals via printf instead.