Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1368 commits
Select commit Hold shift + click to select a range
f6394fe
Add LIR matcher for indirect outputs
martindemello Jul 24, 2026
ba06d5b
Add LIR guard matcher
martindemello Jul 24, 2026
90fe21c
Bump dompurify from 3.4.11 to 3.4.12 in /cinderx/website (#132)
dependabot[bot] Jul 24, 2026
607a4ca
Make global cache accesses atomic in FT builds
yoney Jul 27, 2026
4d749c6
Speed up linear-scan register allocation
alexmalyshev Jul 27, 2026
81b45df
Suppress type errors for Pyre upgrade - cinderx
Jul 27, 2026
ca0c5a2
Remove padding bits from CodePatcher Flags
yoney Jul 27, 2026
fda2660
Refactor boxing and unboxing in LIR
alexmalyshev Jul 28, 2026
5db5129
Bump fast-uri from 3.1.2 to 3.1.4 in /cinderx/website (#133)
dependabot[bot] Jul 28, 2026
2205bb3
Bump postcss from 8.5.15 to 8.5.23 in /cinderx/website (#134)
dependabot[bot] Jul 28, 2026
14808c1
Add wrapper over _PyLong_SMALL_INTS
alexmalyshev Jul 28, 2026
9b944a9
Bump shell-quote from 1.8.4 to 1.10.0 in /cinderx/website (#135)
dependabot[bot] Jul 28, 2026
368ef26
Bump body-parser from 1.20.5 to 1.20.6 in /cinderx/website (#136)
dependabot[bot] Jul 28, 2026
82cdce4
Force `brace-expansion` 5.0.8 for the CinderX website
yoney Jul 28, 2026
1a235d0
Fix free-threaded list lowering LIR test
yoney Jul 28, 2026
8a0b5c1
Move HIR Instr list mutations onto BasicBlock
alexmalyshev Jul 28, 2026
055496d
Add missing #include <mutex> in Common/log.cpp
alrobichaud Jul 28, 2026
c1353f4
Bump webpack-dev-server from 5.2.5 to 5.2.6 in /cinderx/website (#137)
dependabot[bot] Jul 28, 2026
e1d7171
Add Python 3.14t HIR expectations to RuntimeTests
yoney Jul 28, 2026
2d318b1
Bump svgo from 3.3.3 to 3.3.4 in /cinderx/website (#131)
dependabot[bot] Jul 28, 2026
752c941
Track IntrusiveList size in O(1), enforce container-only mutation
alexmalyshev Jul 28, 2026
f65eaac
Avoid Windows small macro collision
yoney Jul 28, 2026
9043efc
Add Python 3.14t HIR inliner expectations
yoney Jul 28, 2026
dd9a57a
Avoid allocating empty copy graphs during LIR rewriting
alexmalyshev Jul 28, 2026
559d7b1
Add Python 3.14t HIR all-passes expectations
yoney Jul 28, 2026
aeb4fed
Add Python 3.14t HIR simplify expectations
yoney Jul 28, 2026
edd2e55
Add a configurable spill-everything register allocator
alexmalyshev Jul 29, 2026
bb2ff91
Add Python 3.14t HIR dead-code simplify expectations
yoney Jul 29, 2026
692e095
Move AnnotationIndex implementation to .cpp
alexmalyshev Jul 29, 2026
897fb28
Consolidate dataflow analysis onto a single engine
alexmalyshev Jul 29, 2026
bfd602b
Add Python 3.14t HIR clean CFG expectations
yoney Jul 29, 2026
f9191af
Add 3.14t expectations for GuardTypeRemovalTest
yoney Jul 29, 2026
2438f6a
Undef after windows.h
yoney Jul 29, 2026
437c88e
Add 3.14t expectations for FrameStateCreationTest
yoney Jul 29, 2026
db1dafc
Support transparent lookup in `SortedVecMap`
alexmalyshev Jul 29, 2026
cf427d3
Preloader should keep global values alive
DinoV Jul 29, 2026
5d61df4
Add 3.14t expectations for RefcountInsertionTest
yoney Jul 29, 2026
9e282a0
F401 in __init__.py
Jul 30, 2026
db11f21
Fix HIRBuildTest expectations for free-threaded builds
yoney Jul 30, 2026
369dd1a
Make CompiledFunction picklable via __reduce__
alexmalyshev Jul 30, 2026
edd12b8
Make multi-threaded compile use the GIL
DinoV Jul 30, 2026
cfafb5c
Add 3.14t HIR expectations for BuiltinLoadMethodEliminationTest
yoney Jul 30, 2026
53e590e
Fix documentation link
yoney Jul 30, 2026
f0bbf1b
Don't do PyType_Lookup if we don't have any free entries
DinoV Jul 30, 2026
325781e
Skip heap-borrow invalidation across leaf-scalar decrefs in the JIT
alexmalyshev Jul 30, 2026
d5b554b
Add 3.14t HIR expectations for SimplifyStaticTest
yoney Jul 30, 2026
00feab1
Handle generic type annotations for guards
alexmalyshev Jul 30, 2026
27dfbee
Enable cpp tests for 3.14-feature-free
yoney Jul 30, 2026
0c894a5
Add 3.14t HIR expectations for additional RuntimeTests
yoney Jul 30, 2026
d133bfa
Add support for background compilation
DinoV Jul 30, 2026
2c6ce2b
Add Python 3.14t HIR expectations
yoney Jul 30, 2026
17de3b6
Make all LiveInterval fields private
alexmalyshev Jul 31, 2026
c57544f
Enable optimizations by taking the GIL in multi-threaded compile
DinoV Jul 31, 2026
8beceb4
Assorted cleanup to LinearScanAllocator
alexmalyshev Jul 31, 2026
b78f291
Fix incorrect usages of kPyDebug
alexmalyshev Jul 31, 2026
a688f1f
Fix OSS build errors
DinoV Jul 31, 2026
7a5ab4d
Remove name field from hir::Register
alexmalyshev Jul 31, 2026
fa19130
Reject overflow in `roundUp`
kddnewton Jul 31, 2026
1ca2172
Add `AlignedMemory`
kddnewton Jul 31, 2026
317e6b6
Add `BumpArena`
kddnewton Jul 31, 2026
c073f8e
Route inline cache allocation through selectable storage
kddnewton Jul 31, 2026
e529f05
Isolate context-owned inline cache storage
kddnewton Jul 31, 2026
0d50229
Fix static class attribute interning on free-threaded Python
yoney Jul 31, 2026
feff350
Run removeTrampolineBlocks on Function instead of CFG
alexmalyshev Jul 31, 2026
2dc04ed
Optimize GeneratorContextManager.__exit__ to not deopt
DinoV Jul 31, 2026
b8fc9ff
Fix FT LIST_APPEND for lists and checked lists
yoney Jul 31, 2026
ca4c41a
Simplify simplifyRedundantCondBranch
alexmalyshev Jul 31, 2026
bad955d
Add Python 3.14t HIR expectations
yoney Jul 31, 2026
e4caf9e
Move most of BasicBlock methods to .cpp
alexmalyshev Jul 31, 2026
fc119bb
Rewrite cmdline_test.cpp in Python
alexmalyshev Aug 3, 2026
3a4c7e9
Cheaper phi predecessor replacement
alexmalyshev Aug 3, 2026
56b7586
Stop crashing when parsing bad code size limits (#138)
alexmalyshev Aug 3, 2026
e100ef4
Have a cheaper Phi::create() that takes an ordered list
alexmalyshev Aug 3, 2026
56e519f
Fix static type leak checks in free-threaded builds
yoney Aug 3, 2026
58e8651
Add missing 3.14t HIR expectations for static JIT tests
yoney Aug 3, 2026
8bdd22a
Fix CodePatcher test backing storage
yoney Aug 3, 2026
4453b19
Fix JIT list and tuple index bounds checks
yoney Aug 4, 2026
785aada
Make JIT command-line logging tests portable to Windows
yoney Aug 4, 2026
2575cb1
Sync pre-release CPython 3.15 branch from GitHub (2026-08-03)
Aug 4, 2026
3598a28
Remove unused type error suppressions
Aug 4, 2026
1922df2
Support free-threaded versions in HIR fixture updater
yoney Aug 4, 2026
c836d75
Optimize tuple subscripts in free-threaded builds
yoney Aug 4, 2026
8803001
Avoid redundant AArch64 `load_addr` instructions
kddnewton Aug 4, 2026
5faa3c3
Add an attribute inline-cache benchmark to cinderx/benchmarks
alexmalyshev Aug 4, 2026
6819992
Add free-threaded expectation for postgen cast test
yoney Aug 4, 2026
d6de382
Wire the _cinderx native extension into python_binary for 3.15
alexmalyshev Aug 4, 2026
c3ea5e7
Enable RuntimeTests for 3.14-interp-loop-only
yoney Aug 5, 2026
a8be80d
Sync pre-release CPython 3.15 branch from GitHub (2026-08-04)
Aug 5, 2026
cbd18ff
Enable RuntimeTests for Python 3.14t
yoney Aug 5, 2026
9a21cff
use store pair in deopt exit
DinoV Aug 5, 2026
0dd4d32
F401 in test_jit_background_compile.py
Aug 5, 2026
68b191c
Make regalloc edge truth table constexpr
yoney Aug 5, 2026
4c678ed
Don't load current frame from thread state
DinoV Aug 5, 2026
02e7444
Avoid allocation in free-register selection
yoney Aug 5, 2026
79a72c2
clang-diagnostic-unused-parameter in frame.cpp
Aug 5, 2026
d6c7bb3
clang-diagnostic-unused-parameter in autogen.cpp
Aug 5, 2026
6b877db
Jump directly to the deopt trampoline
DinoV Aug 5, 2026
c047204
Flow thread state in and frame out
DinoV Aug 5, 2026
99376b6
Bump fast-uri from 3.1.4 to 3.1.5 in /cinderx/website (#139)
dependabot[bot] Aug 6, 2026
1759adf
Fix finalization issue with _GeneratorContextManager patch
DinoV Aug 6, 2026
7c1d72b
Replace removeTrampolineBlocks() with mergeLinearBlocks()
alexmalyshev Aug 6, 2026
92c76f0
Relax debug assertion that HIR never has unreachable blocks
alexmalyshev Aug 6, 2026
f9561fa
Introduce free-threading test package
yoney Aug 6, 2026
dcced3e
arvr/tools/build_defs/config/toolchain/python/constraints/BUCK
Aug 6, 2026
18b7331
Emit INTRINSIC_ADD_CONDITIONAL_ANNOTATION for 3.16 conditional annota…
itamaro Aug 6, 2026
2c0e800
Minor inliner refactoring
yoney Aug 6, 2026
9424178
Skip fork-based free-threading tests on Windows
yoney Aug 6, 2026
ebb31df
Remove unstable frame support
DinoV Aug 6, 2026
e3b710f
Add free-threaded JIT closure cell regression tests
yoney Aug 6, 2026
027e8ed
Fix remaining ref counting issues w/ background compile
DinoV Aug 6, 2026
a11a113
Eliminate ThreadedRef
DinoV Aug 6, 2026
9519b46
Use movz, movk when it beats ldr
DinoV Aug 6, 2026
f611695
Relax constant pool loads to eliminate nops
DinoV Aug 6, 2026
cf954ec
Always RefineType on the success branch of a CondBranchCheckType
alexmalyshev Aug 6, 2026
d51466a
Import CPython 3.14.7+ stable branch (2026-08-06)
Aug 7, 2026
b67c1ce
Add free-threaded JIT tuple subscript tests
yoney Aug 7, 2026
3cb7c53
Add Python 3.14 free-threaded benchmark targets
yoney Aug 7, 2026
21bd3be
Safer background compile shutdown
DinoV Aug 7, 2026
dec2678
Make background compile the default
DinoV Aug 7, 2026
4a4f09c
Use sp for addressing locals when we can
DinoV Aug 10, 2026
182114e
Add a LoadPair LIR instruction
DinoV Aug 10, 2026
5557217
Optimize load pairs
DinoV Aug 10, 2026
181cf59
Import CPython 3.14.7+ stable branch (2026-08-09)
Aug 10, 2026
d409899
Regen borrowed-3.14.free-threading.gen_cached.c after 3.14.7+ import
itamaro Aug 10, 2026
df5bcd6
Put cinderx/Common/define.h in the cinderx namespace
alexmalyshev Aug 10, 2026
24b042e
Delete unreachable blocks immediately
alexmalyshev Aug 10, 2026
40f5480
Bump dompurify from 3.4.12 to 3.4.13 in /cinderx/website (#143)
dependabot[bot] Aug 10, 2026
358b016
Move Arch to define.h
alexmalyshev Aug 10, 2026
fed64f1
Add free-threaded JIT list subscript tests
yoney Aug 10, 2026
42151a7
Use architecture defines from cinderx namespace
alexmalyshev Aug 10, 2026
07df602
Skip FT-only list HIR assertion in GIL builds
yoney Aug 10, 2026
657adba
Swap cinderx/Jit/codegen/arch/detection.h with cinderx/Common/define.h
alexmalyshev Aug 10, 2026
6fbc6de
Bump nanoid from 3.3.16 to 3.3.18 in /cinderx/website (#144)
dependabot[bot] Aug 10, 2026
e18e071
Revert D114958913: Optimize load pairs
DinoV Aug 11, 2026
56b1dcc
Revert D114969843: Add a LoadPair LIR instruction
DinoV Aug 11, 2026
e45fd27
Revert D114808854: Use sp for addressing locals when we can
DinoV Aug 11, 2026
edeb0aa
Delete cinderx/Jit/codegen/arch/detection.h
alexmalyshev Aug 11, 2026
0c70909
Add per-compilation inline cache storage
kddnewton Aug 11, 2026
7ee49d7
Tie inline caches to compiled code lifetime
kddnewton Aug 11, 2026
e365a79
Make static function vectorcall access thread-safe
yoney Aug 11, 2026
4240c24
Refactor and separate out LIR opcodes
alexmalyshev Aug 11, 2026
d99c621
Don't run PhiElimination as part of CleanCFG
alexmalyshev Aug 11, 2026
b40b9cc
Remove interp-loop-only build
alexmalyshev Aug 11, 2026
18cd69d
Add unit tests for FrozenList
yoney Aug 11, 2026
3f4f99f
Make frame evaluator identity thread-safe
yoney Aug 11, 2026
0a1dfdb
Bump mermaid from 11.15.0 to 11.16.1 in /cinderx/website (#142)
dependabot[bot] Aug 11, 2026
f3d34a5
Revert D115476023: Make frame evaluator identity thread-safe
Aug 11, 2026
a68b395
Construct FrozenList elements directly
yoney Aug 12, 2026
6e8728e
clang-diagnostic-unused-parameter in pyjit.cpp
Aug 12, 2026
4241fbf
clang-diagnostic-unused-parameter in _cinderx-lib.cpp
Aug 12, 2026
95c25e4
Disable background compile as the default
DinoV Aug 12, 2026
706ad2b
Test concurrent JIT force compilation
yoney Aug 12, 2026
d55df5e
Make frame evaluator identity thread-safe
yoney Aug 12, 2026
538f1cd
Add layout-safe islands for far AArch64 relocations
kddnewton Aug 12, 2026
4bec442
Suppress cinderx_func_watcher data race
yoney Aug 12, 2026
f16881b
Keep deopt live values out of vector registers
alexmalyshev Aug 12, 2026
f3ec9ae
clang-diagnostic-unused-parameter in builder.cpp
Aug 12, 2026
ab2021a
Remove stale JIT TSAN suppressions
yoney Aug 13, 2026
e88614f
Box each primitive deopt value only once per deopt
alexmalyshev Aug 13, 2026
32d3bc7
Make MemoryView fields private
alexmalyshev Aug 13, 2026
3b99248
Remove resolved tsan suppression
yoney Aug 13, 2026
fb9c8c5
Move LIR opcode predicates out of Instruction and into ops.{cpp,h}
alexmalyshev Aug 13, 2026
9f3bce1
Make qualname watcher thread-safe
yoney Aug 13, 2026
b0121bd
Sync pre-release CPython main branch from GitHub (2026-08-13)
itamaro Aug 13, 2026
2d49743
Replace uses of Instruction::kOP with Opcode::kOP
alexmalyshev Aug 13, 2026
bff28be
Add collectDataUses() to separate real uses from deopt-only ones
alexmalyshev Aug 13, 2026
9b0fa72
Delete Opcode::kOP alias in Instruction
alexmalyshev Aug 13, 2026
aa0f634
Test concurrent function qualname updates
yoney Aug 13, 2026
d3e4109
Remove usage of deprecated Py_SetProgramName
DinoV Aug 13, 2026
32daaa2
Handle missing fork in run_in_subprocess
yoney Aug 13, 2026
1643ad0
Sync pre-release CPython main branch from GitHub (2026-08-14)
Aug 14, 2026
b32690b
Add TSAN reproducer for JIT compilation tracking race
yoney Aug 14, 2026
6bb60bf
Fix cinder test runner for 3.16
DinoV Aug 14, 2026
bf49ef0
Drop the LIR MovSXD opcode in favour of MovSX
alexmalyshev Aug 14, 2026
8bea292
Keep 32 -> 64 bit zero-extends as MovZX in LIR
alexmalyshev Aug 14, 2026
34f1319
Mark ownership-transferring functions `[[nodiscard]]`
yoney Aug 14, 2026
51a4794
Backport gh-143469 to 3.14: LOAD_ATTR_MODULE past __getattr__
alexmalyshev Aug 14, 2026
252f688
Fix `test_strict_compile` depending on a warm `__strict__` pyc
alexmalyshev Aug 14, 2026
f10742a
Stop widening moves from blocking move optimization
alexmalyshev Aug 14, 2026
7ff52db
Remove redundant operator!= implementations
yoney Aug 15, 2026
14b5442
Collapse MovSX into Sext and MovZX into Zext in LIR
alexmalyshev Aug 15, 2026
b5567ae
Backport gh-132657 to 3.14: defer refcount on module values
alexmalyshev Aug 17, 2026
cd69203
Enable free-threading tests for 3.14
yoney Aug 17, 2026
580da4c
Make JIT mutexes safe for fork
DinoV Aug 17, 2026
01ab7ac
Support tail-call interpreter dispatch
yoney Aug 17, 2026
0793a8d
Sink non-escaping PrimitiveBox onto deopt paths (take #2)
alexmalyshev Aug 17, 2026
13efe1b
Replace recursion with a fold expression
yoney Aug 17, 2026
18b0804
Remove unused type error suppressions - cinderx
maggiemoss Aug 18, 2026
6dd67b6
Disable background compile test
DinoV Aug 18, 2026
78eaffd
Use an indirect for the generator deopt-index address
alexmalyshev Aug 18, 2026
e862f71
Use a fold expression for LIR call arguments
yoney Aug 18, 2026
c88d049
Add a dedicated option for dataflow debug logging
alexmalyshev Aug 18, 2026
65ea182
Support tail-call interpreter dispatch
alexmalyshev Aug 18, 2026
4b56028
Replace unittest skip decorators with pass decorators
yoney Aug 18, 2026
fa3a17e
Use sp for addressing locals when we can
DinoV Aug 18, 2026
d08d4d1
Add a LoadPair LIR instruction
DinoV Aug 18, 2026
e9dbe30
Pair adjacent memory ops into ldp/stp
DinoV Aug 18, 2026
b93cb6a
Fix potential issue with scratch register on stack load
DinoV Aug 18, 2026
604523d
Zero-initialize undefined primitive locals with correct types
alexmalyshev Aug 18, 2026
13092f4
Fix crash on deopt from module load chain
DinoV Aug 18, 2026
729372b
Port more benchmarks from 3.10.cinder to CinderX
Aug 19, 2026
13021de
Make background compile test more adaptive
DinoV Aug 19, 2026
a6be575
PYRE_FIXME in types.py
Aug 19, 2026
6107150
Refactor LIR condition codes as a Condition on the instruction
alexmalyshev Aug 19, 2026
235176b
Create JIT worker thread states on their owning threads
yoney Aug 19, 2026
5ffa367
Fix crash on Mac OS/X
DinoV Aug 19, 2026
4454fac
Use addOperands() in ManyArguments test
yoney Aug 19, 2026
b70f82e
Define JIT_DABORT, JIT_DCHECK, JIT_DCHECK_ONCE only once
alexmalyshev Aug 20, 2026
8ddb145
Simplify LIR operand addition
yoney Aug 20, 2026
5e7c015
Fix macOS LIR inliner test expectations
yoney Aug 20, 2026
8b4c0ef
Add new flow graph optimization to fold to constants
DinoV Aug 20, 2026
7c20e19
Make CompiledFunction and CompiledFunctionData into heap-allocated types
alexmalyshev Aug 20, 2026
0601978
Fix ref count insertion bug that causes failure on 3.16
DinoV Aug 20, 2026
8390c68
Reset TSAN mutex state after fork
yoney Aug 20, 2026
985adb3
Type check augmented assignments to primitives (#148)
robertmorelli Aug 21, 2026
20eafd5
Skip SBS stdlib compiler tests in aggregated refleak runs
yoney Aug 21, 2026
566c1fd
Add signal based stack walk library
DinoV Aug 21, 2026
a78e01c
Use stack walking to recover IP
DinoV Aug 21, 2026
f0e6be7
Protect against deadlocks in stack walk API
DinoV Aug 21, 2026
5f1996a
Speed up failedDeferredCompileShim via lazy arg alloc and fast return…
Aug 21, 2026
25c3f6c
Ignore warnings about fork used in multi-threaded test environment
alexmalyshev Aug 21, 2026
4288569
Move the active BitVector union member
yoney Aug 21, 2026
7de3591
Add free-threaded JIT dict lookup tests
yoney Aug 21, 2026
f9cf751
Don't destroy Python objects under the JIT compilation lock
Aug 21, 2026
29cb7b1
Fix stack walking builds on macOS and Windows
yoney Aug 21, 2026
4794388
Turn the Static Python awaitable wrapper into a heap type
alexmalyshev Aug 22, 2026
47f254f
Fix stack-walk tests in OSS builds
yoney Aug 22, 2026
1a9f98c
Generate attribute cache Kind dispatch from an X-macro
DinoV Aug 24, 2026
6331ea3
Make AttributeMutator get/setAttr static
DinoV Aug 24, 2026
8e63729
Add target function pointer for inline caches
DinoV Aug 24, 2026
4181046
Move attr cache Kind tag to the high bits of the type pointer
DinoV Aug 24, 2026
42d4fbf
Cache module attribute reads discovered at runtime
DinoV Aug 24, 2026
bf87728
Cache type attribute reads discovered at runtime
DinoV Aug 24, 2026
1cc0abf
Improve inline-ability
DinoV Aug 24, 2026
1e7d273
Split out get attr variants on target promotion builds
DinoV Aug 24, 2026
6423afe
Decouple self stack-walk tests from GoogleTest frame pointers
yoney Aug 24, 2026
c7a3406
Construct slab objects before advancing allocation
yoney Aug 24, 2026
11eb2da
Reset TSAN metadata for SlabArena mutexes after fork
yoney Aug 24, 2026
21d9b86
Centralize post-fork mutex resetting
yoney Aug 24, 2026
8153ab5
Reset CodeAllocator mutex TSAN metadata after fork
yoney Aug 24, 2026
d33a6a1
Add agent advice on dealing with multiple hardware architectures
alexmalyshev Aug 24, 2026
9a11c1c
Remove LoadAttrCached and StoreAttrCached opcodes
DinoV Aug 25, 2026
bd1a1ea
Add helper for casts and asserting we get them right
DinoV Aug 25, 2026
b7f10dc
Drop the dead spill-word count from GenDataFooter
alexmalyshev Aug 25, 2026
6700680
Add explicit Load and Store opcodes to LIR
alexmalyshev Aug 25, 2026
b506f0e
Use Mac OS/X thread suspension for stack walk
DinoV Aug 25, 2026
99128b4
Reset runtime mutex TSAN metadata after fork
yoney Aug 25, 2026
02101fa
Wire in dead code elimination flag
alexmalyshev Aug 25, 2026
3b07910
Migrate memory Move usages to Load/Store
alexmalyshev Aug 25, 2026
ae487d3
Add agent guidance on handling JIT errors
alexmalyshev Aug 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
33 changes: 0 additions & 33 deletions .github/workflows/buildwheels.yml

This file was deleted.

130 changes: 115 additions & 15 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,40 +1,140 @@
name: CinderX
name: CI

on: [push]
on: [push, pull_request]

jobs:
test:
runs-on: ubuntu-latest
run_tests:
name: Run Tests
runs-on: ${{ matrix.os }}
strategy:
# Don't let test failures on one platform block other platforms.
fail-fast: false
matrix:
os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest, windows-latest]
# Test against multiple patch versions as CinderX references internal
# CPython functions and structures which can lead to ABI problems. See
# cinderx/UpstreamBorrow for more details.
python-version: ['3.14.3', '3.14.4', '3.14.5', '3.14.6']
include:
- os: ubuntu-latest
python-version: '3.14t'
- os: ubuntu-latest
python-version: '3.15.0-beta.3'

steps:
- name: Checkout CinderX
uses: actions/checkout@v5
uses: actions/checkout@v6

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: 3.14.3
python-version: ${{ matrix.python-version }}
allow-prereleases: true

- name: Set up uv
uses: astral-sh/setup-uv@v7

# Ubuntu's default GCC 13.3 hits an internal compiler error on
# SwapLockGuard's std::atomic_ref::compare_exchange_weak in
# cinderx/Jit/code_patcher.cpp, which is only compiled under
# Py_GIL_DISABLED. GCC 14 (which is also what manylinux_2_28
# ships via gcc-toolset-14) compiles it cleanly.
- name: Install GCC 14
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y gcc-14 g++-14
echo "CC=gcc-14" >> "$GITHUB_ENV"
echo "CXX=g++-14" >> "$GITHUB_ENV"

- name: Create venv
run: uv venv --python 3.14.3
run: uv venv --python ${{ matrix.python-version }}

- name: Build CinderX
run: uv build --wheel --python 3.14.3
# RuntimeTests do not support Windows or free-threaded builds yet.
env:
CINDERX_BUILD_RUNTIME_TESTS: ${{ runner.os != 'Windows' && matrix.python-version != '3.14t' && '1' || '' }}
CINDERX_RUNTIME_TESTS_OUTPUT_DIR: ${{ github.workspace }}/build/runtime-tests
run: uv build --wheel --python ${{ matrix.python-version }}

- name: Install CinderX
run: uv pip install dist/*.whl
run: uv pip install cinderx --find-links dist --no-index

- name: Check CinderX Imports
- name: Check CinderX loads successfully
run: |
uv run python -c 'import cinderx ; print(cinderx.get_import_error()) ; assert cinderx.is_initialized()'

- name: Install Pytest
run: |
uv pip install pytest
- name: Install pytest
run: uv pip install pytest

- name: Run Tests
# Free-threaded builds aren't stable yet, so don't run the test suite
# against them.
if: matrix.python-version != '3.14t'
run: uv run pytest cinderx/PythonLib/test_cinderx/

- name: Run Basic JIT Tests
- name: Run native tests
if: runner.os != 'Windows' && matrix.python-version != '3.14t'
# Skip known OSS-only failures. Keep these narrow so RuntimeTests still
# provide useful signal.
# TODO(T275133043): burn these down as the underlying issues are fixed.
# Particularly the segfaults.
run: |
uv run pytest cinderx/PythonLib/test_cinderx/test_jit_{async_generators,count_calls,disable,exception,frame,generators,global_cache,perf_map,specialization,type_annotations}.py
set -euo pipefail
common='AllPassesTest.*:AllPassesStaticTest.*:CmdLineTest.ExplicitJITDisable:UtilTest.SymbolizerResolvesDynamicSymbol'
arm64='LIRGeneratorTest.ParserTest:BackendTest.MoveSequenceOpt2Test:CodePatcherTest.DeoptPatch:BranchRelaxationTest.*'
macos='BackendTest.CastTest:BackendTest.InlineJITRTCastTest:SimplifyTest.BinaryOpWithObjSpecLeftAndRightFloatExactTurnsIntoLoadConst:NativeCallsTest.NativeInvokeBasic:SimplifyStaticTest.UnboxOfRandMaxIsEliminated:DeadCodeEliminationAndSimplifyTest.UnboxOfStaticGlobalIsOptimized:HIRBuilderStaticTest.CIntTypeEmitsConvertPrimitive:CodePatcherTest.DeoptPatch'
filter="-${common}"
if [[ "$RUNNER_ARCH" == "ARM64" ]]; then
filter="${filter}:${arm64}"
fi
if [[ "$RUNNER_OS" == "macOS" ]]; then
filter="${filter}:${macos}"
fi
package_parent="$(uv run python -c 'import pathlib, cinderx; print(pathlib.Path(cinderx.__file__).resolve().parent.parent)')"
export PYTHONPATH="$package_parent"
export GTEST_FILTER="$filter"
(cd cinderx && ../build/runtime-tests/RuntimeTests)

build_wheels:
name: Build wheels on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
# Don't let build failures on one platform block other platforms.
fail-fast: false
matrix:
os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest, windows-latest]

steps:
- name: Checkout CinderX
uses: actions/checkout@v6

# cibuildwheel uses Python from a docker container. The Python version is
# controlled by selecting the docker image version in pyproject.toml.
- name: Set up Python
uses: actions/setup-python@v6

- name: Install cibuildwheel
run: python -m pip install cibuildwheel

- name: Build wheels
run: python -m cibuildwheel --output-dir wheelhouse

build_sdist:
name: Build source distribution
runs-on: ubuntu-latest

steps:
- name: Checkout CinderX
uses: actions/checkout@v6

# An sdist is just source code and doesn't contain compiled artifacts, it
# doesn't need to be built per patch version.
- name: Set up Python
uses: actions/setup-python@v6

- name: Install build tools
run: python -m pip install build

- name: Build sdist
run: python -m build --sdist
69 changes: 69 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: Documentation

on:
# Deploy when docs or the website change on main.
push:
branches: [main]
paths:
- 'cinderx/website/**'
# Build-only check on PRs that touch docs.
pull_request:
paths:
- 'cinderx/website/**'
# Allow manual runs.
workflow_dispatch:

# Allow the deploy job to publish to GitHub Pages via OIDC.
permissions:
contents: read
pages: write
id-token: write

# Only one concurrent deploy; don't cancel an in-progress production deploy.
concurrency:
group: pages
cancel-in-progress: false

jobs:
build:
if: github.repository == 'facebookincubator/cinderx'
name: Build site
runs-on: ubuntu-latest
defaults:
run:
working-directory: cinderx/website
steps:
- name: Checkout CinderX
uses: actions/checkout@v6

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: yarn
cache-dependency-path: cinderx/website/yarn.lock

- name: Install dependencies
run: yarn install

- name: Build (fails on broken links)
run: yarn build

- name: Upload Pages artifact
uses: actions/upload-pages-artifact@v3
with:
path: cinderx/website/build

deploy:
# Only deploy from main; PRs run the build job above as a check.
if: github.repository == 'facebookincubator/cinderx' && github.event_name != 'pull_request'
name: Deploy to GitHub Pages
needs: build
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy
id: deployment
uses: actions/deploy-pages@v4
Loading