Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
129 commits
Select commit Hold shift + click to select a range
5554362
Report loop count wherever the count can be derived in O(1) and witho…
steve-s Sep 29, 2026
41154e5
Fix PBaseExceptionGroup copyright year
steve-s Oct 6, 2026
408297c
Implement basic Windows console support
msimacek Oct 1, 2026
d1c9939
Fix async generator aclose
msimacek Oct 7, 2026
5ee2973
Keep native method descriptors unbound
fangerer Sep 10, 2026
0e49dc8
Enable Cython fast calling conventions
fangerer Sep 10, 2026
654fdd4
Use vectorcall for native tp_call slots
fangerer Sep 10, 2026
a350288
Optimize vectorcall method dispatch
fangerer Sep 10, 2026
6cf7dfb
Handle native method descriptors in vectorcall dispatch
fangerer Sep 16, 2026
e04e981
Optimize vectorcall transitions
fangerer Sep 17, 2026
b62331c
Convert GraalPyPrivate_Object_VectorcallMethod to static upcall
fangerer Sep 17, 2026
46aa854
Match CPython password lookup error handling
fangerer Oct 8, 2026
662de3d
Add patches for Cython up to 3.3.0
msimacek Oct 8, 2026
b634e6d
Remove useless TruffleNode.EqualNode param from OSErrorEnum.fromMessa…
fangerer Sep 29, 2026
dc18eb7
Convert PosixSupportLibrary.read to a bare Java method
fangerer Sep 29, 2026
840fc97
Convert PosixSupportLibrary.write to a bare Java method
fangerer Sep 29, 2026
1851a46
Convert PosixSupportLibrary.(getWindowsConsoleType|writeWindowsConsole)
fangerer Oct 7, 2026
2cd95f1
Introduce Path abstraction to PosixSupport
fangerer Sep 29, 2026
dd82c10
Accept Java String in PythonContext.getPublicTruffleFileRelaxed
fangerer Sep 30, 2026
0af9ee3
Use j.l.String as backend path type in EmulatedPosixSupport
fangerer Sep 30, 2026
b470812
Remove InlinedConditionProfile from EmulatedPosixSupport.resolvePath
fangerer Sep 30, 2026
a72938c
Convert PosixSupportLibrary.(fstatat|fstat|statvfs|fstatvfs) to a bar…
fangerer Sep 30, 2026
eea387f
Convert PosixSupportLibrary descriptor inheritance methods
fangerer Sep 30, 2026
b75b30c
Convert PosixSupportLibrary.(getBackend|strerror|getpid|umask)
fangerer Sep 30, 2026
4ed212c
Convert PosixSupportLibrary file descriptor operations
fangerer Sep 30, 2026
e808757
Convert PosixSupportLibrary Windows descriptor operations
fangerer Sep 30, 2026
4869778
Convert PosixSupportLibrary pipes and readiness
fangerer Sep 30, 2026
d5e2dcc
Convert PosixSupportLibrary positioning operations
fangerer Sep 30, 2026
f29abc6
Convert PosixSupportLibrary synchronization and locking operations
fangerer Sep 30, 2026
89bac6d
Convert PosixSupportLibrary descriptor modes and terminal size
fangerer Sep 30, 2026
6391368
Convert PosixSupportLibrary system information operations
fangerer Sep 30, 2026
069c207
Convert PosixSupportLibrary path namespace operations
fangerer Sep 30, 2026
9a11a24
Convert PosixSupportLibrary working directory and TTY operations
fangerer Sep 30, 2026
46cfe7c
Convert PosixSupportLibrary directory stream lifecycle operations
fangerer Sep 30, 2026
6fc054b
Convert PosixSupportLibrary directory entry access operations
fangerer Sep 30, 2026
92eb2af
Convert PosixSupportLibrary file time operations
fangerer Sep 30, 2026
5c0551e
Convert PosixSupportLibrary renaming operations
fangerer Sep 30, 2026
dbd5217
Convert PosixSupportLibrary access and ownership operations
fangerer Sep 30, 2026
a0270fb
Convert PosixSupportLibrary signals and timers
fangerer Sep 30, 2026
1f27018
Convert PosixSupportLibrary process waiting
fangerer Sep 30, 2026
fc80cf4
Convert PosixSupportLibrary wait-status decoding
fangerer Sep 30, 2026
374efaa
Convert PosixSupportLibrary user and group identity
fangerer Sep 30, 2026
03621ec
Convert PosixSupportLibrary process groups and usage
fangerer Sep 30, 2026
2b0d4fc
Convert PosixSupportLibrary terminal identifiers
fangerer Sep 30, 2026
83eee63
Convert PosixSupportLibrary environment operations
fangerer Sep 30, 2026
c4c9b44
Convert PosixSupportLibrary process execution
fangerer Sep 30, 2026
5096a7d
Convert PosixSupportLibrary mapping and byte access
fangerer Sep 30, 2026
38aeb89
Convert PosixSupportLibrary mapping completion
fangerer Sep 30, 2026
ba3264e
Convert PosixSupportLibrary semaphore and shared-memory lifetime oper…
fangerer Sep 30, 2026
1a106f4
Convert PosixSupportLibrary semaphore operations
fangerer Sep 30, 2026
269e42b
Convert PosixSupportLibrary password database operations
fangerer Sep 30, 2026
b35397b
Convert PosixSupportLibrary path conversions
fangerer Sep 30, 2026
a5a6dd1
Convert PosixSupportLibrary narrow and wide strings
fangerer Sep 30, 2026
00609fd
Convert PosixSupportLibrary socket lifecycle and addresses
fangerer Sep 30, 2026
1651064
Convert PosixSupportLibrary socket data and options
fangerer Sep 30, 2026
a13270d
Convert PosixSupportLibrary numeric Internet addresses
fangerer Sep 30, 2026
64f31da
Convert PosixSupportLibrary name resolution and address-info cursor
fangerer Sep 30, 2026
1d929f0
Convert PosixSupportLibrary device control
fangerer Sep 30, 2026
67cdac7
Convert PosixSupport socket-address factories and access
fangerer Sep 30, 2026
0ee9130
Move shared POSIX types and remove generated dispatch
fangerer Sep 30, 2026
ffb839c
Generic cleanups
fangerer Oct 1, 2026
231449e
Move POSIX string conversions into nodes
fangerer Oct 1, 2026
96aeb1f
Fix style
fangerer Oct 2, 2026
20da05a
Disable transiently failing test_os.FwalkTests.test_fd_finalization
fangerer Oct 2, 2026
32b5b7f
Address review comments
fangerer Oct 8, 2026
0063860
Fix swapped failed and unknown states on compatibility page
msimacek Oct 9, 2026
821d66e
Fix threshold value in tooltips
msimacek Oct 9, 2026
6396a5d
Change wording of Incompatible category
msimacek Oct 9, 2026
8495ef6
Don't include metadata entries in aggregate test results
msimacek Oct 9, 2026
3f5ee7f
Set sysconfig TZPATH on POSIX so zoneinfo finds system time zones
graemerocher Oct 9, 2026
6001bb2
Reduce temporary bytearray allocations in PPickler
msimacek Sep 24, 2026
b754b7b
Lazily initialize fastMemo table
msimacek Sep 25, 2026
6c24002
Simplify pickling builtins
msimacek Sep 24, 2026
e343317
Profile version and fast mode when pickling
msimacek Sep 25, 2026
3fc5f9d
Add a recursion limit to PPickler
msimacek Sep 25, 2026
1c908d1
Add more profiling to PPickler
msimacek Sep 25, 2026
09a5e10
Add fast path for pickling sequences of primitives
msimacek Sep 25, 2026
ae1b2b1
Add more pickler optimizations
msimacek Sep 29, 2026
fb6c306
Push down helper nodes into PPickler.SaveNode
msimacek Sep 29, 2026
37a0e47
Make pickler write helpers static
msimacek Sep 29, 2026
9d17c95
Avoid graph size explosion
msimacek Sep 30, 2026
32ef8ad
Get rid of MemoIterator
msimacek Sep 30, 2026
596410e
Profile buffer bypass
msimacek Sep 30, 2026
957cee7
Keep size estimates for buffer and memo table
msimacek Sep 30, 2026
2eda69f
Use more specific nodes when working with collections
msimacek Sep 30, 2026
0b408ae
Fix emitting OPCODE_BYTEARRAY8
msimacek Sep 30, 2026
d589fd6
Reintroduce BasePickleNode again
msimacek Oct 1, 2026
605eb28
Organize SaveNode fields
msimacek Oct 1, 2026
904c28d
Move write helpers to PPickler
msimacek Oct 1, 2026
6ebccfe
Get rid of PPickler.maxOutputLen
msimacek Oct 1, 2026
d343210
Get rid of ByteArrayView
msimacek Oct 1, 2026
f5463a1
Add unpickler fast path for decoding UTF-8
msimacek Oct 1, 2026
c459167
Add profiling for seen unpickler opcodes
msimacek Oct 1, 2026
eabe4be
Pre-size dictionaries when unpickling
msimacek Oct 1, 2026
b27fbaf
Add a few branch probabilities
msimacek Oct 1, 2026
f2e2e40
Avoid copying buffer in pickle.loads
msimacek Oct 1, 2026
22dd113
Profile file reads in unpickle
msimacek Oct 1, 2026
87630e2
Add fast paths for pickling/unpickling large longs
msimacek Oct 1, 2026
3852462
Avoid boundary in getDottedPath
msimacek Oct 1, 2026
50e3cb0
Cache unpickled names
msimacek Oct 1, 2026
1882353
Use ImportName in unpickler
msimacek Oct 1, 2026
889c458
Push members down from BasePickleNode
msimacek Oct 1, 2026
1943631
Use the same import mechanism in pickler and unpickler
msimacek Oct 2, 2026
d24ecaf
Improve pickler graph size
msimacek Oct 2, 2026
1e83918
Use separate recursive SaveNodes
msimacek Oct 2, 2026
b877bb5
Report loop counts in pickle code
msimacek Oct 8, 2026
c097bfd
Avoid out-of-bounds access on list mutation in pickler
msimacek Oct 12, 2026
56e63f2
Downsize oversized output bytes
msimacek Oct 13, 2026
759f836
Cap the max pickle buffer/memo size estimate at 15 MiB
msimacek Oct 13, 2026
4868cbf
Format PosixModuleBuiltins after the upstream sync's conflict resolution
sgammon Oct 13, 2026
27e7c31
ci: run builds and tests on Elide's self-hosted runners
sgammon Oct 13, 2026
11d3a5e
ci: set up Python with uv on self-hosted Linux and macOS runners
sgammon Oct 13, 2026
ec010da
ci: make the build steps work on persistent self-hosted runners
sgammon Oct 13, 2026
0f7cb5a
Update the copyright years of two files the fork changed in 2026
sgammon Oct 13, 2026
4e4626a
ci: keep uv's Python, cache and links inside the job's temp directory
sgammon Oct 13, 2026
c034e12
ci: install uv's Python afresh in every job
sgammon Oct 13, 2026
b75b303
Add megamorphic attribute access benchmark
steve-s Oct 13, 2026
f976561
Add a range specialization to tuple constructor
msimacek Oct 13, 2026
cda0f00
Untag transient test
msimacek Oct 13, 2026
0d91f61
Re-create native compression support when patching a pre-initialized …
sgammon Oct 14, 2026
a706659
ci: skip the GraalOS resources job and make the Windows Maven gate ru…
sgammon Oct 14, 2026
8b2e58e
ci: only apt-get abigail-tools in abi-check when abidiff is missing
sgammon Oct 14, 2026
66f322e
ci: do not run mvn --version right after downloading Maven on Windows
sgammon Oct 14, 2026
fc2e796
Initialize the hash secret for fresh (non-pre-initialized) contexts a…
sgammon Oct 14, 2026
97beb9e
ci: download Maven on Linux when apt-get leaves no mvn on the PATH
sgammon Oct 14, 2026
079e5ff
ci: give the Windows JUnit gate CPython 3.12 as well
sgammon Oct 14, 2026
3eaa759
Untag two hanging asyncio subprocess tests on linux-aarch64-github
sgammon Oct 14, 2026
ac8a660
Untag OS-vs-JDK tzdata dependent system-transition tests for the GitH…
sgammon Oct 14, 2026
ec71709
Untag the hanging asyncio no-pipe subprocess tests on linux-amd64-git…
sgammon Oct 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 25 additions & 11 deletions .github/scripts/extract_matrix.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,26 +68,40 @@
"cpython-gate",

"darwin",

# python-graalos-resources downloads the GraalOS runtime from an Oracle-internal
# location (GRAALPY_GRAALOS_ARTIFACT_BASE_URL, an overlay import that is empty in the
# public ci.jsonnet) and python-resource-variants consumes that artifact. Both fail
# the same way in upstream's own GitHub Actions runs.
"graalos",
)

DOWNLOADS_LINKS = {
"GRADLE_JAVA_HOME": "https://download.oracle.com/java/{major_version}/latest/jdk-{major_version}_{os}-{arch_short}_bin{ext}",
"ECLIPSE": "https://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops4/R-4.26-202211231800/eclipse-SDK-4.26-linux-gtk-x86_64.tar.gz"
}

# Github Runners OSS
# Runner labels by required capabilities. Elide's fork builds and tests on its
# self-hosted runner pool, not on GitHub-hosted runners.
LINUX_AMD64_RUNNER = "linux-amd64-cipool"
LINUX_AARCH64_RUNNER = "linux-arm64-cipool"
WINDOWS_AMD64_RUNNER = "windows-amd64-cipool"
OSS = {
"ubuntu-latest": ["linux", "amd64"],
"ubuntu-24.04-arm": ["linux", "aarch64"],
"windows-latest": ["windows", "amd64"]
LINUX_AMD64_RUNNER: ["linux", "amd64"],
LINUX_AARCH64_RUNNER: ["linux", "aarch64"],
WINDOWS_AMD64_RUNNER: ["windows", "amd64"]
}

# Override unavailable Python versions for some OS/Arch / job name combinations
PYTHON_VERSIONS = {
"ubuntu-24.04-arm": "3.12.8",
"ubuntu-latest": "3.12.8",
LINUX_AARCH64_RUNNER: "3.12.8",
LINUX_AMD64_RUNNER: "3.12.8",
"style-gate": "3.8.12",
"style-ecj-gate": "3.8.12",
# The JUnit gates build a delvewheel venv, which needs CPython >= 3.12 (or an
# Oracle-internal ARTIFACT_DOWNLOAD_SCRIPT); ci.jsonnet's 3.8 fails there upstream as well.
"python-junit-gate-windows": "3.12.8",
"python-junit-maven-gate-windows": "3.12.8",
}

EXCLUDED_SYSTEM_PACKAGES = {
Expand Down Expand Up @@ -119,7 +133,7 @@ def runs_on(self) -> str:
for os, caps in OSS.items():
if all(required in capabilities for required in caps): return os

return "ubuntu-latest"
return LINUX_AMD64_RUNNER

@cached_property
def name(self) -> str:
Expand All @@ -132,7 +146,7 @@ def targets(self) -> list[str]:
@cached_property
def env(self) -> dict[str, str]:
environment = self.job.get("environment", {}) | DEFAULT_ENV
if self.runs_on == "windows-latest":
if self.runs_on == WINDOWS_AMD64_RUNNER:
def _to_windows_env_format(s: str) -> str:
# Replace ${VAR} and $VAR with %VAR%
s = re.sub(r"\$\{([A-Za-z_][A-Za-z0-9_]*)\}", r"%\1%", s)
Expand Down Expand Up @@ -180,7 +194,7 @@ def system_packages(self) -> list[str]:
k = k[3:]
if any(excluded in k for excluded in EXCLUDED_SYSTEM_PACKAGES):
continue
system_packages.append(f"'{k}'" if self.runs_on != "windows-latest" else f"{k}")
system_packages.append(f"'{k}'" if self.runs_on != WINDOWS_AMD64_RUNNER else f"{k}")
return system_packages

@cached_property
Expand All @@ -191,13 +205,13 @@ def python_packages(self) -> list[str]:
key = k[4:]
if key in PYTHON_PACKAGES_VERSIONS: continue
python_packages.append(f"{key}{v}")
return [f"'{pkg}'" if self.runs_on != "windows-latest" else f"{pkg}" for pkg in python_packages]
return [f"'{pkg}'" if self.runs_on != WINDOWS_AMD64_RUNNER else f"{pkg}" for pkg in python_packages]

def get_download_steps(self, key: str, version: str) -> str:
download_link = self.get_download_link(key, version)
filename = download_link.split('/')[-1]

if self.runs_on == "windows-latest":
if self.runs_on == WINDOWS_AMD64_RUNNER:
return (f"""
Invoke-WebRequest -Uri {download_link} -OutFile {filename}
Expand-Archive -Path {filename} -DestinationPath .
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/_downstream-test-common.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,10 @@ jobs:
fail-fast: false
matrix:
os:
- id: ubuntu-latest
- id: linux-amd64-cipool
platform: linux
arch: amd64
- id: macos-latest
- id: macos-arm64-cipool
platform: macos
arch: aarch64

Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/_downstream-test-oracledb.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ permissions:

jobs:
build-numpy-wheels:
runs-on: ubuntu-latest
runs-on: linux-amd64-cipool
env:
PACKAGES_TO_BUILD: numpy==2.2.6
steps:
Expand Down Expand Up @@ -58,7 +58,7 @@ jobs:

build-pandas-wheels:
needs: build-numpy-wheels
runs-on: ubuntu-latest
runs-on: linux-amd64-cipool
env:
PACKAGES_TO_BUILD: pandas==2.2.3
PIP_FIND_LINKS: ${{ github.workspace }}/dependency-wheels
Expand Down Expand Up @@ -99,7 +99,7 @@ jobs:

build-pyarrow-wheels:
needs: build-numpy-wheels
runs-on: ubuntu-latest
runs-on: linux-amd64-cipool
env:
PACKAGES_TO_BUILD: pyarrow==20.0.0
PIP_FIND_LINKS: ${{ github.workspace }}/dependency-wheels
Expand Down Expand Up @@ -163,7 +163,7 @@ jobs:
fail-fast: false
matrix:
os:
- id: ubuntu-latest
- id: linux-amd64-cipool
platform: linux
arch: amd64

Expand Down
13 changes: 5 additions & 8 deletions .github/workflows/build-wheels.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,12 @@ permissions:

jobs:
build_wheels:
# Elide's fork builds on its self-hosted runner pool, not on GitHub-hosted runners.
runs-on: >-
${{ contains(inputs.platform, 'self-hosted-linux-amd64') && fromJson('["self-hosted", "Linux", "X86"]') ||
contains(inputs.platform, 'self-hosted-linux-aarch64') && fromJson('["self-hosted", "Linux", "ARM64"]') ||
contains(inputs.platform, 'self-hosted-macos') && fromJson('["self-hosted", "macOS"]') ||
contains(inputs.platform, 'self-hosted-windows') && fromJson('["self-hosted", "Windows"]') ||
contains(inputs.platform, 'linux-amd64') && fromJson('["ubuntu-latest"]') ||
contains(inputs.platform, 'linux-aarch64') && fromJson('["ubuntu-24.04-arm"]') ||
contains(inputs.platform, 'windows') && fromJson('["windows-latest"]') ||
contains(inputs.platform, 'macos') && fromJson('["macos-latest"]') }}
${{ contains(inputs.platform, 'aarch64') && contains(inputs.platform, 'linux') && 'linux-arm64-cipool' ||
contains(inputs.platform, 'linux') && 'linux-amd64-cipool' ||
contains(inputs.platform, 'windows') && 'windows-amd64-cipool' ||
contains(inputs.platform, 'macos') && 'macos-arm64-cipool' }}
container: >-
${{ contains(inputs.platform, 'linux-amd64') && 'quay.io/pypa/manylinux_2_28_x86_64' ||
contains(inputs.platform, 'linux-aarch64') && 'quay.io/pypa/manylinux_2_28_aarch64' ||
Expand Down
87 changes: 80 additions & 7 deletions .github/workflows/ci-matrix-gen.yml
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,17 @@ jobs:
matrix:
include: ${{ fromJson(needs.generate-tier1.outputs.artifact_matrix) }}
steps: &buildsteps
# The self-hosted runners keep their workspace between jobs, and these steps clone
# mx and other repositories next to the checkout, so start from an empty workspace.
- name: Clean workspace
if: runner.os != 'Windows'
shell: bash
run: find "${GITHUB_WORKSPACE:?}" -mindepth 1 -maxdepth 1 -exec rm -rf {} +
- name: Clean workspace (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: Get-ChildItem -Force -LiteralPath $env:GITHUB_WORKSPACE | Remove-Item -Recurse -Force

- name: Process matrix downloads
if: ${{ matrix.downloads_steps }}
run: |
Expand All @@ -91,8 +102,13 @@ jobs:
shell: bash
if: runner.os != 'Windows'
run: |
# A UTF-8 locale, as on GitHub's runners: the JDK uses it for file names (some CA
# certificates in /etc/ssl/certs have non-ASCII names).
if [ "$RUNNER_OS" = macOS ]; then echo "LANG=en_US.UTF-8" >> $GITHUB_ENV; echo "LC_ALL=en_US.UTF-8" >> $GITHUB_ENV;
else echo "LANG=C.UTF-8" >> $GITHUB_ENV; echo "LC_ALL=C.UTF-8" >> $GITHUB_ENV; fi
matrix_env='${{ toJson(matrix.env) }}'
echo $matrix_env | jq -r 'to_entries[] | "\(.key)=\(.value)"' >> tmp.env
# python3 rather than jq, which the self-hosted runners don't all have.
echo $matrix_env | python3 -c 'import json, sys; [print(f"{k}={v}") for k, v in json.load(sys.stdin).items()]' >> tmp.env
while IFS= read -r line; do
eval "echo \"$line\"" >> $GITHUB_ENV
done < tmp.env
Expand Down Expand Up @@ -126,9 +142,31 @@ jobs:


- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
if: ${{ matrix.python_version }}
if: ${{ runner.os == 'Windows' && matrix.python_version }}
with:
python-version: ${{ matrix.python_version }}
# actions/setup-python only has interpreters for GitHub's own runner images, so on
# the self-hosted Linux and macOS runners the version comes from uv (python-build-standalone),
# in a virtualenv with pip that is put first on the PATH.
- name: Set up Python with uv
if: ${{ runner.os != 'Windows' && matrix.python_version }}
shell: bash
env:
UV_VERSION: 0.12.20
PYTHON_VERSION: ${{ matrix.python_version }}
run: |
# Everything in the job's temp directory, and only uv-managed interpreters: the runners
# can have partial interpreters (and a shared uv cache) left by earlier jobs.
export UV_INSTALL_DIR="$RUNNER_TEMP/uv/bin" UV_PYTHON_INSTALL_DIR="$RUNNER_TEMP/uv/python" UV_NO_MODIFY_PATH=1
export UV_CACHE_DIR="$RUNNER_TEMP/uv/cache" UV_LINK_MODE=copy UV_PYTHON_PREFERENCE=only-managed
# The temp directory survives between jobs on these runners: a partial interpreter from an
# earlier job would be reused ("Python installation is missing a _sysconfigdata_ file").
rm -rf "$RUNNER_TEMP/uv"
curl -LsSf "https://astral.sh/uv/${UV_VERSION}/install.sh" | sh
rm -rf "$RUNNER_TEMP/python-venv"
"$UV_INSTALL_DIR/uv" venv --seed --python "$PYTHON_VERSION" "$RUNNER_TEMP/python-venv"
echo "$RUNNER_TEMP/python-venv/bin" >> "$GITHUB_PATH"
"$RUNNER_TEMP/python-venv/bin/python" --version
- name: Install python packages on Unix
if: ${{ runner.os != 'Windows' && matrix.python_packages }}
run: |
Expand All @@ -150,6 +188,19 @@ jobs:
for pkg in ${{ matrix.system_packages }}; do
sudo apt-get -qq install "$pkg" || true
done
# apt failures are tolerated above, and on a self-hosted runner whose dpkg state is
# broken the maven package can be unpacked but unconfigured (no /usr/bin/mvn), so
# fall back to a direct Maven download when the job needs it and mvn is missing.
case " ${{ matrix.system_packages }} " in *"'maven'"*)
if ! command -v mvn >/dev/null; then
maven_version=3.9.9
maven_dir="$RUNNER_TEMP/maven"
rm -rf "$maven_dir" && mkdir -p "$maven_dir"
curl -fsSL "https://archive.apache.org/dist/maven/maven-3/$maven_version/binaries/apache-maven-$maven_version-bin.tar.gz" | tar -xz -C "$maven_dir"
echo "$maven_dir/apache-maven-$maven_version/bin" >> "$GITHUB_PATH"
echo "Installed Maven $maven_version to $maven_dir (mvn was not on the PATH after apt-get)"
fi
;; esac
- name: Install system packages on macOS
if: ${{ runner.os == 'macOS' && matrix.system_packages }}
run: |
Expand All @@ -162,12 +213,34 @@ jobs:
if: ${{ runner.os == 'Windows' && matrix.system_packages }}
run: |
$packages = '${{ matrix.system_packages }}' -split ' '
# The self-hosted Windows runners have no Chocolatey (and no preinstalled Maven, unlike
# GitHub's images), so Maven is downloaded directly when choco is missing; cmake is
# already on their PATH.
$haveChoco = [bool](Get-Command choco -ErrorAction SilentlyContinue)
foreach ($pkg in $packages) {
try {
choco install $pkg -y
} catch {
Write-Host "Failed to install $pkg, skipping."
Write-Host "Error: $($_.Exception.Message)" -ForegroundColor Yellow
if ($haveChoco) {
try {
choco install $pkg -y
} catch {
Write-Host "Failed to install $pkg, skipping."
Write-Host "Error: $($_.Exception.Message)" -ForegroundColor Yellow
}
} elseif ($pkg -eq 'maven' -and -not (Get-Command mvn -ErrorAction SilentlyContinue)) {
$mavenVersion = '3.9.9'
$mavenDir = Join-Path $env:RUNNER_TEMP 'maven'
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue $mavenDir
New-Item -ItemType Directory -Force $mavenDir | Out-Null
$zip = Join-Path $mavenDir "apache-maven-$mavenVersion-bin.zip"
Invoke-WebRequest -Uri "https://archive.apache.org/dist/maven/maven-3/$mavenVersion/binaries/apache-maven-$mavenVersion-bin.zip" -OutFile $zip
Expand-Archive -Path $zip -DestinationPath $mavenDir
$mavenBin = Join-Path $mavenDir "apache-maven-$mavenVersion\bin"
$mavenBin | Out-File -FilePath $env:GITHUB_PATH -Append
# Not verified with `mvn --version` here: the JDK is only fetched in a later step.
Write-Host "Installed Maven $mavenVersion to $mavenBin"
} elseif (Get-Command $pkg -ErrorAction SilentlyContinue) {
Write-Host "$pkg is already available: $((Get-Command $pkg).Source)"
} else {
Write-Host "No choco on this runner and no fallback for $pkg, skipping." -ForegroundColor Yellow
}
}

Expand Down
11 changes: 8 additions & 3 deletions .github/workflows/ci-unittests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,20 @@ permissions:
jobs:
abi-check:
if: github.event.pull_request.draft == false
runs-on: ubuntu-latest
runs-on: linux-amd64-cipool
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Install libabigail
shell: bash
run: |
sudo apt-get update
sudo apt-get install -y abigail-tools
# The self-hosted runners keep abigail-tools installed; only touch apt when it is
# missing, so a broken dpkg state left by another job's package install does not fail
# the check.
if ! command -v abidiff >/dev/null; then
sudo apt-get update
sudo apt-get install -y abigail-tools
fi

- name: Get mx and labsjdk
shell: bash
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/platforms-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ permissions:

jobs:
centos-ppc64le-test:
runs-on: ubuntu-latest
runs-on: linux-amd64-cipool
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

Expand Down
Loading
Loading