Repository navigation
Upstream sync: 112 commits through upstream a099d00643, and CI on self-hosted runners - #6
Open
Sam Gammon (sgammon) wants to merge 129 commits into
Open
Sam Gammon (sgammon) wants to merge 129 commits into
Sam Gammon (sgammon) wants to merge 129 commits into
Conversation
…ut any virtual or boundary call and without additional code in the loop body (cherry picked from commit dae499f)
(cherry picked from commit 5022a3a)
(cherry picked from commit ff9eddd)
Fixes oracle#1196 (cherry picked from commit 2bedaad)
(cherry picked from commit bfa12ea)
(cherry picked from commit 7436733)
(cherry picked from commit 92ce61b)
(cherry picked from commit e36ab50)
(cherry picked from commit c9d96fe)
(cherry picked from commit b529092)
(cherry picked from commit 3eed965)
(cherry picked from commit aa9fb34)
(cherry picked from commit f2e2546)
…ge and callers (cherry picked from commit b04f5a9)
(cherry picked from commit 145916f)
(cherry picked from commit 2d49eda)
(cherry picked from commit 68b4fa2)
(cherry picked from commit 827aad9)
(cherry picked from commit 58bfbc6)
(cherry picked from commit 5f8b5f6)
(cherry picked from commit 94bcbbd)
…e Java methods (cherry picked from commit 4be2a16)
(cherry picked from commit 4182cb8)
(cherry picked from commit bdac2d9)
(cherry picked from commit 638dadd)
(cherry picked from commit c4de063)
(cherry picked from commit c2fae6c)
(cherry picked from commit f76c88d)
(cherry picked from commit 09d8a12)
(cherry picked from commit a4dd588)
(cherry picked from commit 427c4fb)
(cherry picked from commit a75550e)
(cherry picked from commit 29988e9)
(cherry picked from commit 90dc553)
(cherry picked from commit dff33e7)
(cherry picked from commit c99ab1c)
(cherry picked from commit 50ce7ee)
(cherry picked from commit a1b186e)
GitHub-hosted runners are only used for small jobs now: generating the job matrices, merging test reports, post-merge notifications and the website. Everything that builds or tests GraalPy runs on the self-hosted pool: - the jobs generated from ci.jsonnet (extract_matrix.py maps linux-amd64, linux-aarch64 and windows-amd64 to linux-amd64-cipool, linux-arm64-cipool and windows-amd64-cipool), - abi-check, the wheel builds, the weekly downstream tests and the exotic platform tests.
actions/setup-python only has interpreters for GitHub's runner images, so it
failed on the self-hosted Ubuntu 26.04 runners ("The version '3.12.8' with
architecture 'x64' was not found for Ubuntu 26.04"). Install the requested
version with uv (python-build-standalone) into a virtualenv with pip and put it
first on the PATH; Windows keeps setup-python.
Start every build job from an empty workspace (self-hosted runners keep it, so cloning mx next to the checkout failed with "destination path 'mx' already exists"), set a UTF-8 locale as GitHub's runners have (the JDK otherwise can't open the CA certificates with non-ASCII file names), and read the matrix environment with python3 instead of jq, which not every runner has.
On some self-hosted runners uv picked up a broken interpreter ("Python
installation is missing a _sysconfigdata_ file"). Use only uv-managed
interpreters, a per-job cache and copied (not hard-linked) files.
The runner temp directory is not emptied between jobs on the self-hosted
runners, so a partial interpreter left by an earlier job was reused without
downloading ("Python installation is missing a _sysconfigdata_ file").
(cherry picked from commit 706d733)
(cherry picked from commit d742f86)
(cherry picked from commit 71c7d34)
…context patchRuntimeInformation() only re-seeded the hash secret and patched the package paths. The native zlib, bz2 and lzma supports are created during image build without native access, so their native functions are null, and in native standalones (which patch a pre-initialized context) BZ2Compressor and BZ2Decompressor failed with a NullPointerException in NativeBz2Support.createStream. This broke the tagged test_tarfile CommandLineTest tests, which run `python -m tarfile` on .tar.bz2 files in the native standalone. Re-create the native supports, the locale, the time zone and the int max str digits from the run-time environment, as upstream's setupRuntimeInformation does when patching.
…nnable python-graalos-resources needs GRAALPY_GRAALOS_ARTIFACT_BASE_URL, an Oracle-internal overlay import that is empty in the public ci.jsonnet, so it fails identically in upstream's GitHub Actions; python-resource-variants consumes its artifact. Exclude both from the generated matrix. python-junit-maven-gate-windows failed because the self-hosted Windows runner has no Chocolatey and no preinstalled Maven; download Maven directly when choco is missing. The gate then builds a delvewheel venv, which needs CPython >= 3.12, so give that job Python 3.12.8 instead of ci.jsonnet's 3.8 (upstream's run fails at that point).
The self-hosted runners already have it, and an apt-get install there fails whenever dpkg has a half-configured package left by another job (the Maven install pulled openjdk-25-jre-headless, whose postinst fails on a runner without /usr/share/man/man1).
The JDK is only fetched in a later step, so the check failed with 'No external JVM found in PATH' and took the step with it.
…gain Fork commit 4b503ff moved the patching of pre-initialized contexts into patchRuntimeInformation() and, in doing so, dropped upstream's initializeHashSecret() call from the fresh-context path of setupRuntimeInformation(). Contexts that are not patched from a pre-initialized image, such as the JVM standalone, therefore kept an all-zero hash secret: hash randomization was effectively disabled there and the InitializationEntropySource was never consulted for it, which is what tests/test_entropy_subprocess.py detects (the child never opens the entropy device, or consumes 24 bytes fewer than expected). Restore upstream's call, guarded by !env.isPreInitialization() as before; the patching path keeps its existing call.
python-junit-maven-gate-linux-amd64 failed with "No such file or directory: 'mvn'" on a self-hosted runner whose dpkg state is broken: the maven package is unpacked but unconfigured there, and the apt-get failure is tolerated by the install loop. Fall back to a direct download of Maven for jobs that list it, as the Windows step already does.
python-junit-gate-windows runs punittest, which also goes through get_path_with_patchelf and so needs CPython >= 3.12 for the delvewheel venv, like the Maven JUnit gate.
PollEventLoopTests.test_subprocess_close_after_finish and test_subprocess_wait_no_same_group time out after 600s in python-tagged-unittest-gate-batch1-linux-aarch64 on the self-hosted runners. test_subprocess_close_after_finish fails the same way in upstream's own GitHub Actions runs (oracle/graalpython run 38434376885, batch1 on x86_64), so these are known-flaky under the GitHub tag set; the linux-x86_64-github tag is kept where the test passes.
…ub tag sets ZoneInfoTest[...].test_system_transitions reads the transitions from the OS tzdata in /usr/share/zoneinfo (the path is hard-coded in datetimetester) and compares them with datetime.fromtimestamp(), which GraalPy backs with the JDK's tz rules. The self-hosted linux-aarch64 runners carry Ubuntu 26.04's tzdata 2026c, which changed Africa/Casablanca, Africa/El_Aaiun and America/Edmonton for 2026 relative to the labsjdk's bundled tzdata, so those six cases fail there (python-tagged-unittest-gate-batch6); the amd64 runners will follow once their tzdata is updated. Drop the *-github tags for exactly those cases; the darwin and non-GitHub linux tags are kept.
…hub too PollEventLoopTests.test_subprocess_close_after_finish also timed out in python-tagged-unittest-gate-batch1-linux-amd64 (run 38513924640), so the hang is not specific to aarch64. It reproduces locally on a JVM standalone (8 of 48 runs under parallel load): the test waits for a subprocess with no pipes, so only asyncio's SIGCHLD handler can wake the event loop, but signal.set_wakeup_fd is a no-op stub in GraalPy and the Python handler only runs as an async action once the main thread leaves its native poll(), which only happens when the kernel delivers the signal to that very thread. A real set_wakeup_fd implementation is being prepared separately on fix/signal-set-wakeup-fd.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Brings
elide-25.5.xup to graalvm/graalpython masterfa6ebf6beb(2026-10-13): all 109 upstream non-merge commits after the current base154205b7511. They are cherry-picked with-xin topological order, on top of the 8 fork patches. Please rebase-merge so the(cherry picked from commit …)trailers are kept.Skipped
None. No upstream commit in the range was already on the branch (checked the
cherry picked from committrailers andgit cherry).Conflicts (2, both in
PosixModuleBuiltins.postInitialize)Fork patch
4b503ff03b(pre-init and sys modules) splitpostInitializeinto a pre-init-safe part pluspopulateEnviron().populateEnviron()runs at post-init or, for a pre-initialized context, atpatchPostInitialize. Upstream's POSIX refactor edited the old, unsplit method body.bdac2d9d13Convert PosixSupportLibrary.(getBackend|strerror|getpid|umask): kept the fork's split. Applied upstream's change inside it:Object posixSupportbecamePosixSupport posixSupport, andposixLib.getBackend(posixSupport)becameposixSupport.getBackend(). The java-backendgeteuid/getegid/WNOHANGblock stays inpostInitialize, where the fork had moved it. Dropped theposixLiblocal frompostInitialize, which was now unused.c84c43dbd8Move shared POSIX types and remove generated dispatch: this commit deletesPosixSupportLibrary. Kept the fork's split and removed the lastPosixSupportLibrary posixLiblocal frompopulateEnviron(). The rest ofpopulateEnviron()(posixSupport.createWideStringFromString/createPathFromString/setenv) auto-merged to upstream's directPosixSupportcalls.After the sync,
git diff origin/master HEADtouches the same 9 files as the fork's original delta, so the fork's behavior is preserved.Graal compatibility
mx.graalpython/suite.pyimportstools/regex(andtruffle/sdkviaversionFrom) at oracle/graal5727d2bee28(2026-10-05). None of the 109 commits changes it, so the pin is the same as on the current base.5727d2bee28is an ancestor of upstream graal0a530a3d066. Its non-merge commits are in both graalelide-25.5.xandupstream/wave-10(Upstream wave 10: 17 commits through upstream c38b86ec5c6 graal#132).Testing
Sibling layout: graal =
elide/upstream/wave-10(14403bb2cda), graalpython = this branch, labsjdk-ce-latest-jvmci-25.4-b23.mx build --build-logs=silent: OK.mx python -c "import sys, json, re, os; …"prints3.13.14 … [Graal, Interpreted, Java 25.0.4.1.1]. json/re work, andos.getpid(),os.strerror(),os.umask()andos.environwork. These go through the conflict-resolved code.mx graalpytestwithtests/test_json.py,test_re.py,test_list.py,test_posix.py,test_sys.pyandtest_builtin.py: 292 run, 282 passed, 10 skipped, 0 failed.mx graalpytest --tagged lib-python/3/test/test_os.py lib-python/3/test/test_posix.py: 259 run, all passed.Picked (109)
dae499f897Report loop count wherever the count can be derived in O(1) and without any virtual or boundary call and without additional code in the loop body5022a3ab9bFix PBaseExceptionGroup copyright yearff9eddd706Implement basic Windows console support2bedaad9a8Fix async generator aclosebfa12ea861Keep native method descriptors unbound7436733b09Enable Cython fast calling conventions92ce61b2a5Use vectorcall for native tp_call slotse36ab50103Optimize vectorcall method dispatchc9d96fef07Handle native method descriptors in vectorcall dispatchb529092951Optimize vectorcall transitions3eed965d7dConvert GraalPyPrivate_Object_VectorcallMethod to static upcallaa9fb342c0Match CPython password lookup error handlingf2e2546a77Add patches for Cython up to 3.3.0b04f5a9ce6Remove useless TruffleNode.EqualNode param from OSErrorEnum.fromMessage and callers145916fd44Convert PosixSupportLibrary.read to a bare Java method2d49eda893Convert PosixSupportLibrary.write to a bare Java method68b4fa22deConvert PosixSupportLibrary.(getWindowsConsoleType|writeWindowsConsole)827aad9836Introduce Path abstraction to PosixSupport58bfbc6054Accept Java String in PythonContext.getPublicTruffleFileRelaxed5f8b5f6c05Use j.l.String as backend path type in EmulatedPosixSupport94bcbbd997Remove InlinedConditionProfile from EmulatedPosixSupport.resolvePath4be2a16189Convert PosixSupportLibrary.(fstatat|fstat|statvfs|fstatvfs) to a bare Java methods4182cb848fConvert PosixSupportLibrary descriptor inheritance methodsbdac2d9d13Convert PosixSupportLibrary.(getBackend|strerror|getpid|umask)638dadd511Convert PosixSupportLibrary file descriptor operationsc4de063fefConvert PosixSupportLibrary Windows descriptor operationsc2fae6cb2bConvert PosixSupportLibrary pipes and readinessf76c88df79Convert PosixSupportLibrary positioning operations09d8a12067Convert PosixSupportLibrary synchronization and locking operationsa4dd588cd0Convert PosixSupportLibrary descriptor modes and terminal sizeff0c9aededConvert PosixSupportLibrary system information operationsae199352a3Convert PosixSupportLibrary path namespace operations54aadbd21bConvert PosixSupportLibrary working directory and TTY operationsab66a9d7ceConvert PosixSupportLibrary directory stream lifecycle operations51857683dbConvert PosixSupportLibrary directory entry access operations26147a9bebConvert PosixSupportLibrary file time operations36b4d0d210Convert PosixSupportLibrary renaming operationsd6a29bb5e1Convert PosixSupportLibrary access and ownership operations222d20974aConvert PosixSupportLibrary signals and timers6a74bf7b7eConvert PosixSupportLibrary process waiting46f5ca3334Convert PosixSupportLibrary wait-status decoding0b2121879aConvert PosixSupportLibrary user and group identity896e0a3de7Convert PosixSupportLibrary process groups and usage5d09ed0833Convert PosixSupportLibrary terminal identifiersb6a6b01560Convert PosixSupportLibrary environment operations5361def3afConvert PosixSupportLibrary process execution6c899bffe5Convert PosixSupportLibrary mapping and byte access8a4a22087fConvert PosixSupportLibrary mapping completion478331c272Convert PosixSupportLibrary semaphore and shared-memory lifetime operations5f98d0798aConvert PosixSupportLibrary semaphore operations4497d512a9Convert PosixSupportLibrary password database operations3926ec2860Convert PosixSupportLibrary path conversions98210d8f30Convert PosixSupportLibrary narrow and wide strings8bd2dcbcb3Convert PosixSupportLibrary socket lifecycle and addresses2af6d4f454Convert PosixSupportLibrary socket data and optionsa93890c8b7Convert PosixSupportLibrary numeric Internet addresses969f7dde22Convert PosixSupportLibrary name resolution and address-info cursorad2c4308bfConvert PosixSupportLibrary device control9670d74e7eConvert PosixSupport socket-address factories and accessc84c43dbd8Move shared POSIX types and remove generated dispatchcc4a2096adGeneric cleanupsb8ff82eb99Move POSIX string conversions into nodes570be18ba6Fix styleed267f9fe6Disable transiently failing test_os.FwalkTests.test_fd_finalization66b223a1a7Address review comments213c26e78aFix swapped failed and unknown states on compatibility page4eb4ef478cFix threshold value in tooltipscedf51156dChange wording of Incompatible categoryc9121ec536Don't include metadata entries in aggregate test resultsecdd07c611Set sysconfig TZPATH on POSIX so zoneinfo finds system time zones5edd93e7e8Reduce temporary bytearray allocations in PPickler34df922e10Lazily initialize fastMemo table58067cbc9fSimplify pickling builtinsce1f410d4dProfile version and fast mode when pickling964bd5ed2eAdd a recursion limit to PPickler1011631ac9Add more profiling to PPicklerf1044d3cafAdd fast path for pickling sequences of primitivesba662f23aeAdd more pickler optimizationsb60b36c563Push down helper nodes into PPickler.SaveNodeafc6dd2e34Make pickler write helpers statica9f6108fd1Avoid graph size explosionad3897172fGet rid of MemoIteratord867056e40Profile buffer bypassc31f65db54Keep size estimates for buffer and memo tablebc0e552e5dUse more specific nodes when working with collections2d7de94d69Fix emitting OPCODE_BYTEARRAY82600c46f2bReintroduce BasePickleNode againc275c1d692Organize SaveNode fields7848db81fbMove write helpers to PPickler7bfa0b69dcGet rid of PPickler.maxOutputLen5f78bd2280Get rid of ByteArrayVieweb14674fa6Add unpickler fast path for decoding UTF-89e2d6e5c63Add profiling for seen unpickler opcodes2102b34e2fPre-size dictionaries when unpickling2212a831a8Add a few branch probabilities16e83bf34bAvoid copying buffer in pickle.loads1a5c6500cdProfile file reads in unpickle3047bf5450Add fast paths for pickling/unpickling large longs538816c84fAvoid boundary in getDottedPathd0c6a40826Cache unpickled names2934d6d06fUse ImportName in unpickler427c4fb120Push members down from BasePickleNodea75550eaaeUse the same import mechanism in pickler and unpickler29988e99e9Improve pickler graph size90dc553c5aUse separate recursive SaveNodesdff33e71d9Report loop counts in pickle codec99ab1c55fAvoid out-of-bounds access on list mutation in pickler50ce7eebbeDownsize oversized output bytesa1b186e482Cap the max pickle buffer/memo size estimate at 15 MiB