Repository navigation
ci: tester aussi sur Python 3.14 et corriger un test qui bloque les threads - #288
Merged
Merged
Conversation
…rt new thread en 3.14) TestMemoryLimiter.test_apply_positive appelait MemoryLimiter.apply(512) pour de bon dans le process pytest : setrlimit(RLIMIT_AS, 512 Mo) est irréversible (la limite dure baisse) et valable pour toute la session. Chaque thread créé ensuite réserve ~72 Mo d'espace d'adressage (pile + arène glibc) : après 8 threads, RuntimeError « can't start new thread » — reproduit en local. Les tests placés plus loin dans la session (TestClient de test_xcore_plugin_routes) échouaient selon l'empreinte mémoire de l'interpréteur : jamais en 3.12/3.13, systématiquement sur le runner en 3.14 (Quick Test : « can't start new thread » puis abort dans pydantic-core sur un thread de portail). - le test vérifie l'appel (resource.setrlimit patché) au lieu de l'exécuter, plus un test du cas d'échec (journalisé, pas levé) - tests/conftest.py : fixture autouse qui échoue si un test modifie RLIMIT_AS / RLIMIT_DATA / RLIMIT_CPU du process pytest
requires-python est >=3.12,<4.0 : 3.14 est dans la plage supportée, et c'est la version utilisée en développement et pour les smoke tests de release, mais la matrice CI ne testait que 3.12 et 3.13. Elle couvre maintenant 3.12, 3.13 et 3.14.
Contributor
There was a problem hiding this comment.
Sorry @traoreera, you've used your own review budget of 250,000 diff characters for the last 7 days.
You can request another review in 1 day and 12 hours by commenting @sourcery-ai review. Upgrade to get a review now.
Contributor
Reviewer's GuideLa PR ajoute Python 3.14 à la matrice CI et sécurise les tests de Flow diagram for safe resource-limit testingflowchart TD
A[TestMemoryLimiter.test_apply_positive] --> B[resource.setrlimit patched]
B --> C[MemoryLimiter.apply 512]
C --> D[Assert resource-limit call]
D --> E[pytest process limits unchanged]
E --> F[Later threaded tests remain runnable]
G[autouse fixture] --> H[Track RLIMIT_AS RLIMIT_DATA RLIMIT_CPU]
H --> I{Test changed a process limit?}
I -->|Yes| J[Fail test]
I -->|No| K[Allow test suite to continue]
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
Contributor
traoreera
added a commit
that referenced
this pull request
Oct 2, 2026
…t corrigé (#289) ## Résumé Release de maintenance **2.7.1, sans changement runtime** : `xcore/` et les bornes de dépendances de `pyproject.toml` sont identiques à la 2.7.0 (vérifié : `git diff v2.7.0 main -- xcore pyproject.toml` est vide). Le wheel publié se comporte exactement comme la 2.7.0 ; cette version embarque le rafraîchissement de sécurité et les correctifs de test/CI déjà fusionnés dans `main`. ## Contenu (déjà dans `main`) - **Lock** (#286) : 11 alertes Dependabot fermées (1 critique, 6 hautes, 4 moyennes) — `anyio` 4.14.1 → 4.15.1, `urllib3` 2.7.0 → 2.8.0, `virtualenv` 21.6.0 → 21.14.3, `mkdocs-material` 9.7.6 → 9.7.7. Concerne le dev, la CI et les builds qui installent depuis le lock ; `pip install XCoreRuntime` résout ses propres versions. - **Alerte CodeQL #29** rejetée comme faux positif (littéral d'énumération `ExecutionMode.TRUSTED = "trusted"` journalisé), sans changement de code. - **Test** (#288) : `test_apply_positive` posait réellement `RLIMIT_AS=512 Mo` sur le process pytest (irréversible) → `can't start new thread` en 3.14. Corrigé + garde-fou dans `tests/conftest.py`. - **CI** (#288) : matrice 3.12 / 3.13 / **3.14**. ## Cette PR Bump `2.7.0 → 2.7.1` (`pyproject.toml`, `xcore/__version__.py` — `__version__` et `__version_info__`), entrée `[2.7.1]` dans `CHANGELOG.md` et `doc/changelog.md`, `CLAUDE.md`. ## Vérification - Wheel 2.7.1 construit et installé dans un **virtualenv vierge** (dépendances de base seulement) : `import xcore`, boot zero-config, un plugin trusted et un plugin sandboxed appelés — OK. - Le tag `v2.7.1` (donc la publication PyPI) ne sera posé qu'après la fusion. ## Summary by Sourcery Release version 2.7.1 with refreshed locked dependencies, safer resource-limit testing, and Python 3.14 CI coverage. Bug Fixes: - Prevent tests from altering process resource limits and causing later test failures, particularly on Python 3.14. Enhancements: - Add Python 3.14 to the CI test matrix. Build: - Refresh the dependency lockfile to address 11 Dependabot security alerts without changing runtime dependency constraints. Documentation: - Document the 2.7.1 maintenance release and update the project version references. Chores: - Bump the project version from 2.7.0 to 2.7.1 without changing runtime behavior.
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.
Résumé
Garde
requires-python = ">=3.12,<4.0"(pas de breaking change, pas de release) et corrige ce qui empêchait de tester sérieusement sur 3.14. Remplace la PR #287 (plancher Python 3.14), abandonnée au profit de « 3.12 et supérieur ».Changements
3.12,3.13,3.14). 3.14 est dans la plage supportée et c'est la version utilisée en développement, mais la matrice ne testait que 3.12 et 3.13.TestMemoryLimiter.test_apply_positiveappelaitMemoryLimiter.apply(512)pour de bon dans le process pytest.setrlimit(RLIMIT_AS, 512 Mo)est irréversible (la limite dure baisse) et valable pour toute la session : chaque thread créé ensuite réserve ~72 Mo d'espace d'adressage (pile + arène glibc) et, après 8 threads,RuntimeError: can't start new thread(reproduit en local). Les tests placés plus loin (lesTestClientdetest_xcore_plugin_routes) échouaient selon l'empreinte mémoire de l'interpréteur : jamais en 3.12/3.13, systématiquement sur le runner en 3.14 (dansQuick Test, avec en plus un abort dans pydantic-core sur un thread de portail). Le test vérifie maintenant l'appel avecresource.setrlimitpatché.tests/conftest.py: fixture autouse qui fait échouer tout test modifiantRLIMIT_AS/RLIMIT_DATA/RLIMIT_CPUdu process pytest.À savoir
Tests & Coveragelancentmake test-cov STRICT=0 || echo "Tests échoués"sur toutes les branches saufmain: ils sont verts même quand un test échoue. SeulQuick Test(strict) bloque sur une PR. Politique inchangée ici ; vérifier les logs (passed/FAILED) plutôt que la coche.Vérification
Suite complète en local sur 3.14 : 1406 passed, 1 skipped (avec un Redis local comme dans
Quick Test).Summary by Sourcery
Test the project on Python 3.14 and isolate process-wide resource-limit tests to keep the suite reliable.
Bug Fixes:
Enhancements:
CI:
Tests: