diff --git a/CHANGELOG.md b/CHANGELOG.md index 46d44d7587..a5e9ab3f7f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,13 +3,16 @@ This changelog summarizes major changes between GraalVM versions of the Python language runtime. The main focus is on user-observable behavior of the engine. -## Version 25.3.4 +## Version 25.4 +* Remove BouncyCastle entirely. BouncyCastle was only needed for legacy RSA, DSA, and EC private keys versions 0 and 1. To support these from Python embeddings, BouncyCastle must now be explicitly enabled by adding the `org.graalvm.python:python-bouncycastle-support` Maven _and_ adding `bcprov-jdk18on`, `bcpkix-jdk18on`, and `bcutil-jdk18on` dependencies. + +## Version 25.3 * Update Python standard library to 3.13.14 and implement new Python 3.13 features. -## Version 25.2.4 +## Version 25.2 * Windows standalone builds now use a native OS backend by default, improving compatibility for files, sockets, subprocesses, `mmap`, and Windows-specific modules compared to the Java-based backend. -## Version 25.1.3 +## Version 25.1 * The standalone artifacts now include the Python version name before the Graal version. The new artifacts now start with `graalpy---`. * Standalone JVM artifacts are no longer released as separate distributions. For standalone deployments, use the GraalPy native artifacts. If you require Java interoperability, use our jbang launcher (`jbang graalpy@oracle/graalpython -c "print('hello from GraalPy')"`) or a custom embedding. * Add `-X jit=0|1|2` presets to tune startup-heavy or throughput-oriented workloads, and make the GraalPy launcher default to the `jit=1` preset. @@ -31,7 +34,7 @@ language runtime. The main focus is on user-observable behavior of the engine. * Add an experimental `python.InitializationEntropySource` option to control the entropy source used for initialization-only randomness such as hash secret generation and `random.Random(None)` seeding. This means embeddings and tests can select deterministic or externally provided initialization entropy without affecting cryptographically relevant APIs like `os.urandom()` or `random.SystemRandom()`. * Dispatch `sys.audit` events to hooks registered with `sys.addaudithook`, including audit events raised through the `PySys_Audit` C API. * Foreign temporal objects (dates, times, and timezones) are now given a Python class corresponding to their interop traits, i.e., `date`, `time`, `datetime`, or `tzinfo`. This allows any foreign objects with these traits to be used in place of the native Python types and Python methods available on these types work on the foreign types. -* Make BouncyCastle an optional dependency for embedding use cases. BouncyCastle is only needed for legacy RSA, DSA, and EC privat keys versions 0 and 1. To support these from Python embeddings, BouncyCastle must now be explicitly enabled by adding the `org.graalvm.python:python-bouncycastle-support` Maven artifact. +* Make BouncyCastle an optional dependency for embedding use cases. BouncyCastle is only needed for legacy RSA, DSA, and EC private keys versions 0 and 1. To support these from Python embeddings, BouncyCastle must now be explicitly enabled by adding the `org.graalvm.python:python-bouncycastle-support` Maven artifact. * The GraalPy Native standalone on Linux now uses a lower-footprint Native Image garbage collection configuration. This reduces resident set size (RSS) for many workloads, but may increase startup time and warmup time, and can slow down some workloads. ## Version 25.0.1 diff --git a/ci.jsonnet b/ci.jsonnet index 180da6ee20..de2077d15e 100644 --- a/ci.jsonnet +++ b/ci.jsonnet @@ -167,6 +167,13 @@ "darwin:aarch64:jdk-latest" : tier3 + provide(GPY_JVM_STANDALONE), "windows:amd64:jdk-latest" : tier3 + provide(GPY_JVM_STANDALONE), }), + "python-unittest-bouncycastle": gpgate + task_spec({ + environment +: { + GRAALPY_WITH_BOUNCYCASTLE: "true", + }, + }) + platform_spec(no_jobs) + platform_spec({ + "linux:amd64:jdk-latest" : tier2, + }), "python-unittest-native-debug-build": gpgate + platform_spec(no_jobs) + native_debug_build_gate("python-unittest") + platform_spec({ "linux:amd64:jdk-latest" : tier3, }), diff --git a/graalpython/com.oracle.graal.python.annotations/pom.xml b/graalpython/com.oracle.graal.python.annotations/pom.xml index 61a7878c0f..c8aa8af9e0 100644 --- a/graalpython/com.oracle.graal.python.annotations/pom.xml +++ b/graalpython/com.oracle.graal.python.annotations/pom.xml @@ -69,7 +69,7 @@ SOFTWARE. - ../../mxbuild/jdk25/com.oracle.graal.python.annotations/src_gen + ../../mxbuild/graalpython/com.oracle.graal.python.annotations/src_gen diff --git a/graalpython/com.oracle.graal.python.bouncycastle/pom.xml b/graalpython/com.oracle.graal.python.bouncycastle/pom.xml index 0cbbfabd7b..3ae5fa6978 100644 --- a/graalpython/com.oracle.graal.python.bouncycastle/pom.xml +++ b/graalpython/com.oracle.graal.python.bouncycastle/pom.xml @@ -92,7 +92,7 @@ SOFTWARE. - ../../mxbuild/jdk25/com.oracle.graal.python.bouncycastle/src_gen + ../../mxbuild/graalpython/com.oracle.graal.python.bouncycastle/src_gen diff --git a/graalpython/com.oracle.graal.python.pegparser/pom.xml b/graalpython/com.oracle.graal.python.pegparser/pom.xml index fda67b50dd..018c72982d 100644 --- a/graalpython/com.oracle.graal.python.pegparser/pom.xml +++ b/graalpython/com.oracle.graal.python.pegparser/pom.xml @@ -76,7 +76,7 @@ SOFTWARE. - ../../mxbuild/jdk25/com.oracle.graal.python.pegparser/src_gen + ../../mxbuild/graalpython/com.oracle.graal.python.pegparser/src_gen diff --git a/graalpython/com.oracle.graal.python.processor/pom.xml b/graalpython/com.oracle.graal.python.processor/pom.xml index 0b5beff6a7..9712c166b7 100644 --- a/graalpython/com.oracle.graal.python.processor/pom.xml +++ b/graalpython/com.oracle.graal.python.processor/pom.xml @@ -76,7 +76,7 @@ SOFTWARE. - ../../mxbuild/jdk25/com.oracle.graal.python.processor/src_gen + ../../mxbuild/graalpython/com.oracle.graal.python.processor/src_gen diff --git a/graalpython/com.oracle.graal.python.resources/pom.xml b/graalpython/com.oracle.graal.python.resources/pom.xml index 421355051c..fd91192705 100644 --- a/graalpython/com.oracle.graal.python.resources/pom.xml +++ b/graalpython/com.oracle.graal.python.resources/pom.xml @@ -90,7 +90,7 @@ SOFTWARE. - ../../mxbuild/jdk25/com.oracle.graal.python.resources/src_gen + ../../mxbuild/graalpython/com.oracle.graal.python.resources/src_gen diff --git a/graalpython/com.oracle.graal.python.shell/pom.xml b/graalpython/com.oracle.graal.python.shell/pom.xml index 803ae9a4b6..2482b656a6 100644 --- a/graalpython/com.oracle.graal.python.shell/pom.xml +++ b/graalpython/com.oracle.graal.python.shell/pom.xml @@ -88,7 +88,7 @@ SOFTWARE. - ../../mxbuild/jdk25/com.oracle.graal.python.shell/src_gen + ../../mxbuild/graalpython/com.oracle.graal.python.shell/src_gen diff --git a/graalpython/com.oracle.graal.python.test/src/tests/ssldata/leaf-missing-aki.pkcs8.pem b/graalpython/com.oracle.graal.python.test/src/tests/ssldata/leaf-missing-aki.pkcs8.pem new file mode 100644 index 0000000000..ca5db8c0a4 --- /dev/null +++ b/graalpython/com.oracle.graal.python.test/src/tests/ssldata/leaf-missing-aki.pkcs8.pem @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgXlF778U/euD7tzWh +0oRA9eFv1XrmReeVkhYcMb2AqsuhRANCAATVYBAx0LuKaztP2Wkr27NoK4qodv+g +0xsaOHV/XSk4e/dn6gC+yoVK/eEbOt67r1gvLTVp8DqxQJ/UAD/3l0qS +-----END PRIVATE KEY----- diff --git a/graalpython/com.oracle.graal.python.test/src/tests/test_ssl.py b/graalpython/com.oracle.graal.python.test/src/tests/test_ssl.py index a82feea885..09d72f02ad 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/test_ssl.py +++ b/graalpython/com.oracle.graal.python.test/src/tests/test_ssl.py @@ -126,7 +126,10 @@ def test_verify_x509_partial_chain(self): @unittest.skipUnless(IS_OPENSSL_3_0_0, "test requires RFC 5280 check added in OpenSSL 3.0+") def test_verify_x509_strict(self): server_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) - server_context.load_cert_chain(cpython_cert_data("leaf-missing-aki.keycert.pem")) + server_context.load_cert_chain( + cpython_cert_data("leaf-missing-aki.keycert.pem"), + keyfile=data_file("leaf-missing-aki.pkcs8.pem"), + ) client_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) client_context.check_hostname = False @@ -404,7 +407,11 @@ def test_verify_mode(self): def check_keypair(self, signed_cert, signing_ca, password=None): server_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) - server_context.load_cert_chain(data_file(signed_cert), password=password) + try: + server_context.load_cert_chain(data_file(signed_cert), password=password) + except ssl.SSLError as e: + self.assertIn("require BouncyCastle support", str(e)) + return client_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) client_context.load_verify_locations(data_file(signing_ca)) check_handshake(server_context, client_context) @@ -421,17 +428,26 @@ def test_private_key_pkcs1(self): def test_private_key_pkcs1_password(self): self.check_keypair("signed_cert_pkcs1_password.pem", "signing_ca.pem", password="password") - def test_private_key_ec_legacy(self): + def load_legacy_cert_chain(self, certfile, keyfile): server_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) - server_context.load_cert_chain(data_file("keycertecc.pem"), keyfile=data_file("pk_ecc_legacy.pem")) + try: + server_context.load_cert_chain(data_file(certfile), keyfile=data_file(keyfile)) + except ssl.SSLError as e: + self.assertIn("require BouncyCastle support", str(e)) + return None + return server_context + + def test_private_key_ec_legacy(self): + server_context = self.load_legacy_cert_chain("keycertecc.pem", "pk_ecc_legacy.pem") + if server_context is None: + return client_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) client_context.check_hostname = False client_context.verify_mode = ssl.CERT_NONE check_handshake(server_context, client_context) def test_private_key_dsa_legacy(self): - server_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) - server_context.load_cert_chain(data_file("cert_dsa.pem"), keyfile=data_file("pk_dsa_legacy.pem")) + self.load_legacy_cert_chain("cert_dsa.pem", "pk_dsa_legacy.pem") def test_alpn(self): signed_cert = data_file("signed_cert.pem") diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_hashlib.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_hashlib.txt index 9b4f791298..bdca591c7c 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_hashlib.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_hashlib.txt @@ -1,12 +1,5 @@ -test.test_hashlib.HashLibTestCase.test_algorithms_available @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_hashlib.HashLibTestCase.test_algorithms_guaranteed @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_hashlib.HashLibTestCase.test_blocksize_and_name @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github -test.test_hashlib.HashLibTestCase.test_blocksize_name_blake2 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github -test.test_hashlib.HashLibTestCase.test_blocksize_name_sha3 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github -test.test_hashlib.HashLibTestCase.test_case_blake2b_0 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github -test.test_hashlib.HashLibTestCase.test_case_blake2b_1 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github -test.test_hashlib.HashLibTestCase.test_case_blake2s_0 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github -test.test_hashlib.HashLibTestCase.test_case_blake2s_1 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_hashlib.HashLibTestCase.test_case_md5_0 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_hashlib.HashLibTestCase.test_case_md5_1 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_hashlib.HashLibTestCase.test_case_md5_2 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github @@ -38,17 +31,10 @@ test.test_hashlib.HashLibTestCase.test_case_sha512_0 @ darwin-arm64,linux-aarch6 test.test_hashlib.HashLibTestCase.test_case_sha512_1 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_hashlib.HashLibTestCase.test_case_sha512_2 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_hashlib.HashLibTestCase.test_case_sha512_3 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github -test.test_hashlib.HashLibTestCase.test_clinic_signature @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github -test.test_hashlib.HashLibTestCase.test_digest_length_overflow @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_hashlib.HashLibTestCase.test_extra_sha3 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_hashlib.HashLibTestCase.test_get_builtin_constructor @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_hashlib.HashLibTestCase.test_get_fips_mode @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github -test.test_hashlib.HashLibTestCase.test_gil @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github -test.test_hashlib.HashLibTestCase.test_hash_array @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_hashlib.HashLibTestCase.test_hash_disallow_instantiation @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github -test.test_hashlib.HashLibTestCase.test_hexdigest @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github -test.test_hashlib.HashLibTestCase.test_large_update @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github -test.test_hashlib.HashLibTestCase.test_name_attribute @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_hashlib.HashLibTestCase.test_new_upper_to_lower @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_hashlib.HashLibTestCase.test_no_unicode @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_hashlib.HashLibTestCase.test_no_unicode_blake2 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github @@ -58,8 +44,6 @@ test.test_hashlib.HashLibTestCase.test_sha256_update_over_4gb @ darwin-arm64,lin test.test_hashlib.HashLibTestCase.test_sha3_256_update_over_4gb @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_hashlib.HashLibTestCase.test_threaded_hashing @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_hashlib.HashLibTestCase.test_unknown_hash @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github -test.test_hashlib.HashLibTestCase.test_usedforsecurity_false @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github -test.test_hashlib.HashLibTestCase.test_usedforsecurity_true @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_hashlib.KDFTests.test_file_digest @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_hashlib.KDFTests.test_normalized_name @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_hashlib.KDFTests.test_pbkdf2_hmac_c @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_ssl.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_ssl.txt index 9839115478..7f4e207387 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_ssl.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_ssl.txt @@ -114,7 +114,6 @@ test.test_ssl.ThreadedTests.test_ssl_cert_verify_error @ darwin-arm64,linux-aarc test.test_ssl.ThreadedTests.test_starttls @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github test.test_ssl.ThreadedTests.test_thread_recv_while_main_thread_sends @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github test.test_ssl.ThreadedTests.test_tls1_3 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github -test.test_ssl.ThreadedTests.test_verify_strict @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github test.test_ssl.ThreadedTests.test_version_basic @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github test.test_ssl.ThreadedTests.test_wrong_cert_tls12 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github test.test_ssl.ThreadedTests.test_wrong_cert_tls13 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github diff --git a/graalpython/com.oracle.graal.python/pom.xml b/graalpython/com.oracle.graal.python/pom.xml index 9b849cbe36..4b3598c2b3 100644 --- a/graalpython/com.oracle.graal.python/pom.xml +++ b/graalpython/com.oracle.graal.python/pom.xml @@ -116,7 +116,7 @@ SOFTWARE. - ../../mxbuild/jdk25/com.oracle.graal.python/src_gen + ../../mxbuild/graalpython/com.oracle.graal.python/src_gen diff --git a/mx.graalpython/mx_graalpython.py b/mx.graalpython/mx_graalpython.py index 691cda3aea..ec97c4c01f 100644 --- a/mx.graalpython/mx_graalpython.py +++ b/mx.graalpython/mx_graalpython.py @@ -71,7 +71,6 @@ import mx_graalpython_python_benchmarks # re-export custom mx project classes so they can be used from suite.py -from mx import MavenProject #pylint: disable=unused-import from mx_cmake import CMakeNinjaProject #pylint: disable=unused-import from mx_gate import Task @@ -152,7 +151,7 @@ def get_boolean_env(name, default=False): GITHUB_CI = get_boolean_env("GITHUB_CI") WIN32 = sys.platform == "win32" BUILD_NATIVE_IMAGE_WITH_ASSERTIONS = get_boolean_env('BUILD_WITH_ASSERTIONS', CI) -GRAALPY_WITH_BOUNCYCASTLE = get_boolean_env("GRAALPY_WITH_BOUNCYCASTLE", True) +GRAALPY_WITH_BOUNCYCASTLE = get_boolean_env("GRAALPY_WITH_BOUNCYCASTLE", False) mx_gate.add_jacoco_excludes([ "com.oracle.graal.python.pegparser.sst", @@ -1091,6 +1090,7 @@ class GraalPythonTags(object): junit_maven_isolates = 'python-junit-polyglot-isolates' jvmbuild = 'python-jvm-build' unittest = 'python-unittest' + unittest_bouncycastle = 'python-unittest-bouncycastle' unittest_cpython = 'python-unittest-cpython' unittest_sandboxed = 'python-unittest-sandboxed' unittest_multi = 'python-unittest-multi-context' @@ -1124,7 +1124,7 @@ def python_gate(args): for x in dir(GraalPythonTags): v = getattr(GraalPythonTags, x) if isinstance(v, str) and v.startswith("python-"): - if "sandboxed" not in v: + if "sandboxed" not in v and "bouncycastle" not in v: tags.append(v) args.append(",".join(tags)) mx.log("Running mx python-gate " + " ".join(args)) @@ -1376,7 +1376,7 @@ def repository_xml(repository_id, repository_url, element_name): """) - repositories = [ + repositories: list[tuple[str, str]] = [ ('graalpy-local', pathlib.Path(repo_path).resolve().as_uri()), ('graalpy-central', mx_urlrewrites.rewriteurl('https://repo1.maven.org/maven2/')), ] @@ -1539,7 +1539,7 @@ def abortCallback(msg): return local_repo_path, version, env -def deploy_graalpy_extensions_to_local_maven_repo_wrapper(*args): +def deploy_graalpy_extensions_to_local_maven_repo_wrapper(*_): deploy_graalpy_extensions_to_local_maven_repo() def deploy_local_maven_repo_wrapper(args): @@ -1992,6 +1992,46 @@ def graalpython_gate_runner(_, tasks): parallel=6, ) + with Task('GraalPython BouncyCastle unittests', tasks, tags=[GraalPythonTags.unittest_bouncycastle]) as task: + if task: + bc_unit_tests = [ + f"graalpython/com.oracle.graal.python.test/src/tests/test_ssl.py::tests.test_ssl.CertTests.test_{t}" + for t in ( + "private_key_pkcs1_password", + "private_key_ec_legacy", + "private_key_dsa_legacy", + "verify_x509_strict", + ) + ] + bc_stdlib_tests = [ + f"graalpython/lib-python/3/test/test_hashlib.py::test.test_hashlib.HashLibTestCase.test_{t}" + for t in ( + "algorithms_available", + "blocksize_name_blake2", + "blocksize_name_sha3", + "case_blake2b_0", + "case_blake2b_1", + "case_blake2s_0", + "case_blake2s_1", + "clinic_signature", + "digest_length_overflow", + "gil", + "hash_array", + "hexdigest", + "large_update", + "name_attribute", + "usedforsecurity_false", + "usedforsecurity_true", + ) + ] + [ + "graalpython/lib-python/3/test/test_ssl.py::test.test_ssl.ThreadedTests.test_verify_strict", + ] + assert GRAALPY_WITH_BOUNCYCASTLE, "This gate only makes sense when bouncycastle was enabled using the envvar GRAALPY_WITH_BOUNCYCASTLE" + graalpy = graalpy_standalone_jvm() + run_python_unittests(graalpy, paths=bc_unit_tests, report=report()) + stdlib_test_args = [f'--append-path={os.path.join(_dev_pythonhome(), "lib-python", "3")}', '--all'] + run_python_unittests(graalpy, paths=bc_stdlib_tests, runner_args=stdlib_test_args, report=report()) + with Task('GraalPython Python unittests with CPython', tasks, tags=[GraalPythonTags.unittest_cpython]) as task: if task: env = extend_os_env(PYTHONHASHSEED='0') @@ -2109,8 +2149,8 @@ def graalpython_gate_runner(_, tasks): on_fail = mx.abort else: def on_fail(codeOrMessage, context=None, killsig=signal.SIGTERM): - mx.warn(codeOrMessage) - assert False, "GraalOS build and test failed" + mx.warn(codeOrMessage, context=context) + assert False, f"GraalOS build and test failed, signal {killsig} ignored" try: mx_graalpython_graalos.graalpy_graalos_standalone_build_and_test(report=report(), on_fail=on_fail) except AssertionError: @@ -3591,7 +3631,7 @@ def run_downstream_test(args): def _get_github_unittest_tag_pr_commits(): - import urllib + import urllib.request, urllib.parse params = { 'q': "repo:oracle/graalpython is:pr in:title Weekly Retagger: Update tags", diff --git a/mx.graalpython/suite.py b/mx.graalpython/suite.py index 2754b972f3..898ab59a83 100644 --- a/mx.graalpython/suite.py +++ b/mx.graalpython/suite.py @@ -1123,6 +1123,11 @@ "BOUNCYCASTLE-PKIX", "BOUNCYCASTLE-UTIL", ], + "optionalDependencies": [ + "BOUNCYCASTLE-PROVIDER", + "BOUNCYCASTLE-PKIX", + "BOUNCYCASTLE-UTIL", + ], "description": "Optional GraalPy BouncyCastle integration.", "maven": { "artifactId": "python-bouncycastle-support",