Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
b511f21
feat(intl): implement ext/intl on the managed ICU bridge
Guikingone Nov 3, 2026
ac17f63
fix(date): parse trailing timezone abbreviations and fixed offsets
Guikingone Nov 3, 2026
972d390
fix(intl): close date, IDN, debug-info, and object-compare gaps
Guikingone Nov 4, 2026
f985d8f
fix(intl): preserve timezone clone defaults and document fixed zones
Guikingone Nov 4, 2026
0b78a1c
fix(intl): lazy parts iteration, deprecated constants, and runtime zo…
Guikingone Nov 4, 2026
fabca12
fix(intl): runtime break-iterator constructor and deprecated class co…
Guikingone Nov 4, 2026
cbdb7f4
fix(intl): message formatter creation failure paths
Guikingone Nov 4, 2026
d1731a0
chore(intl): bump the managed ICU recipe revision for the shim fixes
Guikingone Nov 4, 2026
a570d53
fix(intl): split static and constructor message formatter error text
Guikingone Nov 4, 2026
7e0e618
fix(intl): emit the currency deprecation only at the constant read
Guikingone Nov 4, 2026
f692b05
fix(intl): runtime arity, null, and pattern diagnostics for MessageFo…
Guikingone Nov 4, 2026
b4fa4a9
fix(intl): runtime arity, null, and creation diagnostics for NumberFo…
Guikingone Nov 4, 2026
f684ab9
fix(intl): calendar variant arity and internal null deprecations
Guikingone Nov 4, 2026
e9e3f9c
fix(intl): mixed parse offsets and undefined by-reference arguments
Guikingone Nov 4, 2026
37ed74c
fix(intl): expose IntlCalendar debug info to subclasses
Guikingone Nov 4, 2026
92e9901
fix(intl): ResourceBundle ArrayAccess caller context and null result
Guikingone Nov 4, 2026
3470b97
fix(intl): ResourceBundle dimension semantics and union method signat…
Guikingone Nov 4, 2026
162986e
fix(intl): route intl directives through a helper and report UConvert…
Guikingone Nov 4, 2026
3f3624a
fix(intl): union object arguments and boxed iterator_to_array sources
Guikingone Nov 4, 2026
3633b6b
fix(intl): decode numeric HTML entities in literal html_entity_decode…
Guikingone Nov 4, 2026
b7e3f52
fix(parser): defer auto array keys after non-literal explicit keys
Guikingone Nov 4, 2026
4c95135
fix(intl): accept already-promoted boxed refs and strip UConverter pr…
Guikingone Nov 4, 2026
a3aa45b
docs: regenerate builtin pages for the str_replace union signatures
Guikingone Nov 4, 2026
2a9f43b
fix(intl): report intlgregcal_create_instance overflow through the pr…
Guikingone Nov 4, 2026
2500c1c
fix(intl): restore typed property refs, reference array literals, and…
Guikingone Nov 5, 2026
d57d323
fix(intl): accept mixed by-ref offsets in IntlTimeZone::getOffset
Guikingone Nov 5, 2026
8d2188e
fix(parser): report php's runtime error for &$value[] references
Guikingone Nov 5, 2026
2330d6c
Merge remote-tracking branch 'origin/main' into feat/intl-managed-icu
Guikingone Nov 6, 2026
3a0bacf
test: align error expectations with the merged by-ref and string cont…
Guikingone Nov 6, 2026
d370f27
fix(refs): keep declared array references on the writable-local path
Guikingone Nov 6, 2026
a04da1e
docs: regenerate the Intl builtin pages after the merged signatures
Guikingone Nov 6, 2026
26a035a
ci(intl): provision the managed ICU package for codegen shards
Guikingone Nov 6, 2026
8b214fd
feat(arrays): compare boxed array_intersect elements by string value
Guikingone Nov 6, 2026
f83e198
test(ir): inject the Intl surface in the example corpus lowering
Guikingone Nov 6, 2026
af0b7ee
fix(optimize): leave spread and named array_intersect calls untouched
Guikingone Nov 6, 2026
9a3b579
fix(runtime): read the documented x86_64 mixed-cast box input
Guikingone Nov 6, 2026
e072137
fix(scripts): keep the Docker disk guard usable on Docker Desktop
Guikingone Nov 6, 2026
f225ffc
fix(runtime): publish intersect boxes in the x86_64 string-cast register
Guikingone Nov 6, 2026
50daecd
fix(runtime): keep intersect cast strings borrowed on every target
Guikingone Nov 6, 2026
6f23689
Merge remote-tracking branch 'origin/main' into feat/intl-managed-icu
Guikingone Nov 7, 2026
f3036dc
feat(parser): alias a static property to a local reference
Guikingone Nov 7, 2026
8a4dc6d
fix(var_dump): request the reference prefix for promoted properties
Guikingone Nov 7, 2026
85ab841
fix(intl): preserve original values in Collator sorts
Guikingone Nov 7, 2026
3e28847
feat(optimize): unroll literal reflection foreach loops
Guikingone Nov 7, 2026
24f6ff9
fix(reflection): render contract nullable types for builtin callables
Guikingone Nov 7, 2026
2a5d043
feat(intl): complete the php-src Intl corpus
Guikingone Nov 7, 2026
788d3da
chore(intl): record the remaining corpus fixture statuses
Guikingone Nov 7, 2026
545b0fc
fix(intl): keep introspection and cycle timing compatible
Guikingone Nov 7, 2026
306d6b5
fix(intl): preserve callable errors and unset collection boundaries
Guikingone Nov 7, 2026
05bb01a
Merge remote-tracking branch 'origin/main' into feat/intl-managed-icu
Guikingone Nov 7, 2026
dca3d0e
docs: regenerate the compatibility page after the main merge
Guikingone Nov 7, 2026
46868f4
fix(eir): leave user callable errors and null receivers to PHP runtime
Guikingone Nov 7, 2026
934a5e1
fix(intl): address ext/intl review findings
Guikingone Nov 8, 2026
0c5a64b
Merge remote-tracking branch 'origin/main' into feat/intl-managed-icu
Guikingone Nov 8, 2026
dd77775
docs: regenerate builtin docs for html_entity_decode restrictions
Guikingone Nov 8, 2026
28fe8f2
test(intl): restore the fixture INI locale on ini_restore
Guikingone Nov 8, 2026
dd293b6
Merge remote-tracking branch 'origin/main' into feat/intl-managed-icu
Guikingone Nov 8, 2026
7083aef
docs: regenerate PHP coverage after the main merge
Guikingone Nov 8, 2026
99bb40a
fix(eir): preserve property reference alias sources after the merge
Guikingone Nov 8, 2026
9c92b1f
fix(intl): return a typed bool from normalizer_is_normalized
Guikingone Nov 9, 2026
3af94a7
Merge remote-tracking branch 'origin/main' into feat/intl-managed-icu
Guikingone Nov 9, 2026
9e64d3c
fix(eir): keep inherited private constructors on the direct reflectio…
Guikingone Nov 9, 2026
362de7f
fix(eir): coerce object arguments at builtin string parameters
Guikingone Nov 9, 2026
0a2405e
fix(intl): keep the array-backed iterator cycle management
Guikingone Nov 9, 2026
d91e784
fix(eir): scope object string coercion to native SimpleXML views
Guikingone Nov 9, 2026
945c0d0
fix(builtins): restore str_replace's string parameter contract
Guikingone Nov 9, 2026
2e77995
fix(intl): fold numeric entities under ENT_NOQUOTES and extend heavy-…
Guikingone Nov 9, 2026
e9b8b5b
fix(pdo): update bundled SQLite past RUSTSEC-2026-0459
Guikingone Nov 9, 2026
6792ab6
ci: extend linux codegen shard timeouts to 60 minutes
Guikingone Nov 9, 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
  •  
  •  
  •  
48 changes: 48 additions & 0 deletions .config/nextest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,9 @@ relative-to = "target"
path = "debug/libelephc_image.a"
relative-to = "target"
[[profile.ci.archive.include]]
path = "debug/libelephc_intl.a"
relative-to = "target"
[[profile.ci.archive.include]]
path = "debug/libelephc_pcntl.a"
relative-to = "target"
[[profile.ci.archive.include]]
Expand Down Expand Up @@ -270,6 +273,51 @@ relative-to = "target"
path = "debug/libelephc_magician_curl.a"
relative-to = "target"

# These two existing heavy fixtures crossed 180s/360s on a loaded macOS shard after
# the Intl corpus widened the binary. Reserve the nextest pool and give them the
# all-targets budget so a slow runner does not turn a real test into a timeout.
[[profile.default.overrides]]
filter = 'test(=codegen::oop::nested_default_grok_scope::test_nested_default_grok_fourth_review_free_without_ir_opt)'
threads-required = "num-test-threads"
slow-timeout = { period = "300s", terminate-after = 1 }

[[profile.ci.overrides]]
filter = 'test(=codegen::oop::nested_default_grok_scope::test_nested_default_grok_fourth_review_free_without_ir_opt)'
threads-required = "num-test-threads"
slow-timeout = { period = "300s", terminate-after = 1 }

[[profile.default.overrides]]
filter = 'test(=codegen::simplexml::native_operators::test_simplexml_gmp_mixed_operator_dispatch_bundle)'
threads-required = "num-test-threads"
slow-timeout = { period = "600s", terminate-after = 1 }

[[profile.ci.overrides]]
filter = 'test(=codegen::simplexml::native_operators::test_simplexml_gmp_mixed_operator_dispatch_bundle)'
threads-required = "num-test-threads"
slow-timeout = { period = "600s", terminate-after = 1 }

# The Intl `badargs` fixture enumerates every extension function through
# `get_extension_funcs("intl")`; the literal-foreach unroller lowers the whole 187-function
# surface into one program. It passed at ~150s on a loaded Linux shard and crossed the
# 180s budget in a later run, so reserve the all-targets budget for it.
[[profile.default.overrides]]
filter = 'test(=codegen::intl_php_src::cases::test_php_src_intl_badargs)'
slow-timeout = { period = "300s", terminate-after = 1 }

[[profile.ci.overrides]]
filter = 'test(=codegen::intl_php_src::cases::test_php_src_intl_badargs)'
slow-timeout = { period = "300s", terminate-after = 1 }

# This unit test lowers and eval-checks a computed-property update for every supported
# target; it measured 52s locally and crossed the 180s guard twice on loaded shards.
[[profile.default.overrides]]
filter = 'test(=ir_lower::tests::computed_property_update_owners::computed_property_update_storage_on_every_target)'
slow-timeout = { period = "300s", terminate-after = 1 }

[[profile.ci.overrides]]
filter = 'test(=ir_lower::tests::computed_property_update_owners::computed_property_update_storage_on_every_target)'
slow-timeout = { period = "300s", terminate-after = 1 }

# Native fingerprints include the worker environment. Preserve the verified source
# as well as built outputs so a relocated shard can materialize its exact key offline.
[[profile.ci.archive.include]]
Expand Down
3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
# The parser corpus fixtures are byte-exact PHP output that includes bare CR and CRLF
# character data; they must never be newline-normalized or flagged as whitespace errors.
crates/elephc-xml/src/parser/tests/fixtures/*.out -text -whitespace
# The committed php-src ext/intl PHPT corpus is verbatim upstream data: some fixtures
# intentionally carry trailing spaces and CRLF in --FILE--/--EXPECT-- sections.
tests/php_src/intl/** -text -whitespace
2 changes: 1 addition & 1 deletion .github/actions/build-release-artifacts/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ runs:
- name: Build compiler and bridge outputs
shell: bash
env:
BRIDGE_CRATES: -p elephc-tls -p elephc-pdo -p elephc-crypto -p elephc-openssl -p elephc-bcmath -p elephc-gmp -p elephc-random -p elephc-mbstring -p elephc-iconv -p elephc-phar -p elephc-tz -p elephc-image -p elephc-probe -p elephc-instr -p elephc-web -p elephc-pcntl -p elephc-xml -p elephc-fileinfo -p elephc-tokenizer -p elephc-magician -p elephc-reference -p elephc-curl -p elephc-zend
BRIDGE_CRATES: -p elephc-tls -p elephc-pdo -p elephc-crypto -p elephc-openssl -p elephc-bcmath -p elephc-gmp -p elephc-random -p elephc-mbstring -p elephc-iconv -p elephc-phar -p elephc-tz -p elephc-image -p elephc-probe -p elephc-instr -p elephc-web -p elephc-intl -p elephc-pcntl -p elephc-xml -p elephc-fileinfo -p elephc-tokenizer -p elephc-magician -p elephc-reference -p elephc-curl -p elephc-zend
run: |
cargo build --locked --release --bin elephc
cargo build --locked --release $BRIDGE_CRATES
Expand Down
70 changes: 70 additions & 0 deletions .github/workflows/ci-build-host.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ env:
-p elephc-tokenizer
-p elephc-magician
-p elephc-reference
-p elephc-intl
-p elephc-web
-p elephc-instr
-p elephc-probe
Expand Down Expand Up @@ -344,6 +345,29 @@ jobs:
--target macos-aarch64 \
--manifest-path examples/fileinfo/elephc.toml

- name: Cache managed native ICU
if: inputs.scope == 'tests'
# tests/codegen/intl fixtures link the elephc_intl bridge against the
# managed ICU package (see tests/codegen/support/intl_native.rs). The
# archive job warms this key; the codegen shards restore it.
uses: actions/cache@v6
with:
path: |
~/.cache/elephc/native/artifacts/icu
~/.cache/elephc/native/sources
key: icu-native-macos-aarch64-${{ hashFiles('examples/intl/elephc.lock', 'src/native_deps/catalog.rs', 'src/native_deps/recipes/icu.rs', 'src/native_deps/recipes/elephc_icu_intl_shim.cpp', 'src/native_deps/recipes/elephc_icu_intl_shim.h', 'src/native_deps/recipe.rs', 'src/native_deps/recipes/util.rs') }}
restore-keys: |
icu-native-macos-aarch64-

- name: Materialize managed native ICU
if: inputs.scope == 'tests'
# A no-op on the warm cache restored above; otherwise the pinned
# examples/intl/elephc.lock builds from source.
run: |
./target/debug/elephc native install --locked \
--target macos-aarch64 \
--manifest-path examples/intl/elephc.toml

- name: Test the fileinfo bridge against managed libmagic
if: inputs.scope == 'tests'
run: |
Expand Down Expand Up @@ -637,6 +661,29 @@ jobs:
--target linux-x86_64 \
--manifest-path examples/fileinfo/elephc.toml

- name: Cache managed native ICU
if: inputs.scope == 'tests'
# tests/codegen/intl fixtures link the elephc_intl bridge against the
# managed ICU package (see tests/codegen/support/intl_native.rs). The
# archive job warms this key; the codegen shards restore it.
uses: actions/cache@v6
with:
path: |
~/.cache/elephc/native/artifacts/icu
~/.cache/elephc/native/sources
key: icu-native-linux-x86_64-${{ hashFiles('examples/intl/elephc.lock', 'src/native_deps/catalog.rs', 'src/native_deps/recipes/icu.rs', 'src/native_deps/recipes/elephc_icu_intl_shim.cpp', 'src/native_deps/recipes/elephc_icu_intl_shim.h', 'src/native_deps/recipe.rs', 'src/native_deps/recipes/util.rs') }}
restore-keys: |
icu-native-linux-x86_64-

- name: Materialize managed native ICU
if: inputs.scope == 'tests'
# A no-op on the warm cache restored above; otherwise the pinned
# examples/intl/elephc.lock builds from source.
run: |
./target/debug/elephc native install --locked \
--target linux-x86_64 \
--manifest-path examples/intl/elephc.toml

- name: Test the fileinfo bridge against managed libmagic
if: inputs.scope == 'tests'
run: |
Expand Down Expand Up @@ -925,6 +972,29 @@ jobs:
--target linux-aarch64 \
--manifest-path examples/fileinfo/elephc.toml

- name: Cache managed native ICU
if: inputs.scope == 'tests'
# tests/codegen/intl fixtures link the elephc_intl bridge against the
# managed ICU package (see tests/codegen/support/intl_native.rs). The
# archive job warms this key; the codegen shards restore it.
uses: actions/cache@v6
with:
path: |
~/.cache/elephc/native/artifacts/icu
~/.cache/elephc/native/sources
key: icu-native-linux-aarch64-${{ hashFiles('examples/intl/elephc.lock', 'src/native_deps/catalog.rs', 'src/native_deps/recipes/icu.rs', 'src/native_deps/recipes/elephc_icu_intl_shim.cpp', 'src/native_deps/recipes/elephc_icu_intl_shim.h', 'src/native_deps/recipe.rs', 'src/native_deps/recipes/util.rs') }}
restore-keys: |
icu-native-linux-aarch64-

- name: Materialize managed native ICU
if: inputs.scope == 'tests'
# A no-op on the warm cache restored above; otherwise the pinned
# examples/intl/elephc.lock builds from source.
run: |
./target/debug/elephc native install --locked \
--target linux-aarch64 \
--manifest-path examples/intl/elephc.toml

- name: Test the fileinfo bridge against managed libmagic
if: inputs.scope == 'tests'
run: |
Expand Down
65 changes: 63 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ env:
-p elephc-phar
-p elephc-tz
-p elephc-image
-p elephc-intl
-p elephc-pcntl
-p elephc-xml
-p elephc-fileinfo
Expand Down Expand Up @@ -1070,6 +1071,18 @@ jobs:
~/.cache/elephc/native/sources
key: openssl-crypto-native-macos-aarch64-${{ hashFiles('examples/openssl-cipher/elephc.lock', 'src/native_deps/catalog.rs', 'src/native_deps/recipes/openssl_crypto.rs', 'src/native_deps/recipes/openssl.rs', 'src/native_deps/recipes/zlib.rs', 'src/native_deps/recipes/util.rs', 'src/native_deps/recipes/mod.rs', 'src/native_deps/recipe.rs') }}

- name: Cache managed native ICU
# tests/codegen/intl fixtures link the elephc_intl bridge against the
# managed ICU package (see tests/codegen/support/intl_native.rs). Same
# package/source cache split as the other managed native packages.
uses: actions/cache@v6
with:
path: |
~/.cache/elephc/native/artifacts/icu
~/.cache/elephc/native/sources
key: icu-native-macos-aarch64-${{ hashFiles('examples/intl/elephc.lock', 'src/native_deps/catalog.rs', 'src/native_deps/recipes/icu.rs', 'src/native_deps/recipes/elephc_icu_intl_shim.cpp', 'src/native_deps/recipes/elephc_icu_intl_shim.h', 'src/native_deps/recipe.rs', 'src/native_deps/recipes/util.rs') }}
restore-keys: |
icu-native-macos-aarch64-
- name: Extract test archive
# The same nextest archive that carries the codegen_tests binary also carries
# target/debug/elephc (see the archive notes in .config/nextest.toml); the
Expand Down Expand Up @@ -1119,6 +1132,13 @@ jobs:
--target macos-aarch64 \
--manifest-path examples/fileinfo/elephc.toml

- name: Materialize managed native ICU
# A no-op on the warm cache restored above; otherwise the pinned
# examples/intl/elephc.lock build from source.
run: |
"$RUNNER_TEMP/nextest/target/debug/elephc" native install --locked \
--target macos-aarch64 \
--manifest-path examples/intl/elephc.toml
- name: Run codegen test shard
env:
CARGO_NET_OFFLINE: "true"
Expand Down Expand Up @@ -1151,6 +1171,7 @@ jobs:
# artifact was materialized just above, so a missing one is a bug.
ELEPHC_TEST_REQUIRE_GMP_NATIVE: "1"
ELEPHC_TEST_REQUIRE_FILEINFO_NATIVE: "1"
ELEPHC_TEST_REQUIRE_INTL_NATIVE: "1"
ELEPHC_TEST_REQUIRE_OPENSSL_NATIVE: "1"
run: |
"$RUNNER_TEMP/cargo-nextest" nextest run --profile ci \
Expand Down Expand Up @@ -1193,7 +1214,7 @@ jobs:
needs: [plan, build-archive-linux-x86_64]
if: needs.plan.outputs.run == 'true'
runs-on: ubuntu-24.04
timeout-minutes: 40
timeout-minutes: 60
env:
ELEPHC_CI_IMAGE: ${{ needs.plan.outputs.ci-image }}
container:
Expand Down Expand Up @@ -1251,6 +1272,18 @@ jobs:
~/.cache/elephc/native/sources
key: openssl-crypto-native-linux-x86_64-${{ hashFiles('examples/openssl-cipher/elephc.lock', 'src/native_deps/catalog.rs', 'src/native_deps/recipes/openssl_crypto.rs', 'src/native_deps/recipes/openssl.rs', 'src/native_deps/recipes/zlib.rs', 'src/native_deps/recipes/util.rs', 'src/native_deps/recipes/mod.rs', 'src/native_deps/recipe.rs') }}

- name: Cache managed native ICU
# tests/codegen/intl fixtures link the elephc_intl bridge against the
# managed ICU package (see tests/codegen/support/intl_native.rs). Same
# package/source cache split as the other managed native packages.
uses: actions/cache@v6
with:
path: |
~/.cache/elephc/native/artifacts/icu
~/.cache/elephc/native/sources
key: icu-native-linux-x86_64-${{ hashFiles('examples/intl/elephc.lock', 'src/native_deps/catalog.rs', 'src/native_deps/recipes/icu.rs', 'src/native_deps/recipes/elephc_icu_intl_shim.cpp', 'src/native_deps/recipes/elephc_icu_intl_shim.h', 'src/native_deps/recipe.rs', 'src/native_deps/recipes/util.rs') }}
restore-keys: |
icu-native-linux-x86_64-
- name: Extract test archive
# The same nextest archive that carries the codegen_tests binary also carries
# target/debug/elephc (see the archive notes in .config/nextest.toml); the
Expand Down Expand Up @@ -1308,6 +1341,13 @@ jobs:
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends gdb
fi

- name: Materialize managed native ICU
# A no-op on the warm cache restored above; otherwise the pinned
# examples/intl/elephc.lock build from source.
run: |
"$RUNNER_TEMP/nextest/target/debug/elephc" native install --locked \
--target linux-x86_64 \
--manifest-path examples/intl/elephc.toml
- name: Run codegen test shard
env:
CARGO_NET_OFFLINE: "true"
Expand All @@ -1319,6 +1359,7 @@ jobs:
# artifact was materialized just above, so a missing one is a bug.
ELEPHC_TEST_REQUIRE_GMP_NATIVE: "1"
ELEPHC_TEST_REQUIRE_FILEINFO_NATIVE: "1"
ELEPHC_TEST_REQUIRE_INTL_NATIVE: "1"
ELEPHC_TEST_REQUIRE_OPENSSL_NATIVE: "1"
# Preserve the last phase and assembly size if one of these fixtures times out.
ELEPHC_FIXTURE_PHASE_TIMING: "test_simplexml_generic_property_handoff_bundle,test_simplexml_computed_indexed_incdec_bundle,test_native_dom_exception_accessors_from_eval,test_simplexml_eval_subclass_factories_after_eval_returns,test_simplexml_computed_indexed_incdec_eval_bundle,test_simplexml_reference_arguments_materialize_missing_paths_bundle,test_simplexml_gmp_mixed_operator_dispatch_bundle,test_simplexml_eval_subclass_constructorless_factories,test_simplexml_review_names_and_filter_close_bundle,test_simplexml_native_comparison_and_default_namespace_bundle,test_simplexml_saved_empty_dimension_write_bundle,test_property_dimension_xml_fetch_modes_bundle,test_magic_property_dimension_xml_guards_bundle,test_simplexml_native_debug_projection_bundle,test_simplexml_dimension_write_owners_isolated_bundle,test_simplexml_constructorless_factory_owners_bundle,test_mbstring_eval_reference_parameter_ownership,test_mbstring_regex_capture_callback_reference_array_ownership"
Expand Down Expand Up @@ -1363,7 +1404,7 @@ jobs:
needs: [plan, build-archive-linux-aarch64]
if: needs.plan.outputs.run == 'true'
runs-on: ubuntu-24.04-arm
timeout-minutes: 40
timeout-minutes: 60
env:
ELEPHC_CI_IMAGE: ${{ needs.plan.outputs.ci-image }}
container:
Expand Down Expand Up @@ -1421,6 +1462,18 @@ jobs:
~/.cache/elephc/native/sources
key: openssl-crypto-native-linux-aarch64-${{ hashFiles('examples/openssl-cipher/elephc.lock', 'src/native_deps/catalog.rs', 'src/native_deps/recipes/openssl_crypto.rs', 'src/native_deps/recipes/openssl.rs', 'src/native_deps/recipes/zlib.rs', 'src/native_deps/recipes/util.rs', 'src/native_deps/recipes/mod.rs', 'src/native_deps/recipe.rs') }}

- name: Cache managed native ICU
# tests/codegen/intl fixtures link the elephc_intl bridge against the
# managed ICU package (see tests/codegen/support/intl_native.rs). Same
# package/source cache split as the other managed native packages.
uses: actions/cache@v6
with:
path: |
~/.cache/elephc/native/artifacts/icu
~/.cache/elephc/native/sources
key: icu-native-linux-aarch64-${{ hashFiles('examples/intl/elephc.lock', 'src/native_deps/catalog.rs', 'src/native_deps/recipes/icu.rs', 'src/native_deps/recipes/elephc_icu_intl_shim.cpp', 'src/native_deps/recipes/elephc_icu_intl_shim.h', 'src/native_deps/recipe.rs', 'src/native_deps/recipes/util.rs') }}
restore-keys: |
icu-native-linux-aarch64-
- name: Extract test archive
# The same nextest archive that carries the codegen_tests binary also carries
# target/debug/elephc (see the archive notes in .config/nextest.toml); the
Expand Down Expand Up @@ -1470,6 +1523,13 @@ jobs:
--target linux-aarch64 \
--manifest-path examples/fileinfo/elephc.toml

- name: Materialize managed native ICU
# A no-op on the warm cache restored above; otherwise the pinned
# examples/intl/elephc.lock build from source.
run: |
"$RUNNER_TEMP/nextest/target/debug/elephc" native install --locked \
--target linux-aarch64 \
--manifest-path examples/intl/elephc.toml
- name: Run codegen test shard
env:
CARGO_NET_OFFLINE: "true"
Expand All @@ -1481,6 +1541,7 @@ jobs:
# artifact was materialized just above, so a missing one is a bug.
ELEPHC_TEST_REQUIRE_GMP_NATIVE: "1"
ELEPHC_TEST_REQUIRE_FILEINFO_NATIVE: "1"
ELEPHC_TEST_REQUIRE_INTL_NATIVE: "1"
ELEPHC_TEST_REQUIRE_OPENSSL_NATIVE: "1"
# Preserve the last phase and assembly size if one of these fixtures times out.
ELEPHC_FIXTURE_PHASE_TIMING: "test_simplexml_generic_property_handoff_bundle,test_simplexml_computed_indexed_incdec_bundle,test_native_dom_exception_accessors_from_eval,test_simplexml_eval_subclass_factories_after_eval_returns,test_simplexml_computed_indexed_incdec_eval_bundle,test_simplexml_reference_arguments_materialize_missing_paths_bundle,test_simplexml_gmp_mixed_operator_dispatch_bundle,test_simplexml_eval_subclass_constructorless_factories,test_simplexml_review_names_and_filter_close_bundle,test_simplexml_native_comparison_and_default_namespace_bundle,test_simplexml_saved_empty_dimension_write_bundle,test_property_dimension_xml_fetch_modes_bundle,test_magic_property_dimension_xml_guards_bundle,test_simplexml_native_debug_projection_bundle,test_simplexml_dimension_write_owners_isolated_bundle,test_simplexml_constructorless_factory_owners_bundle,test_mbstring_eval_reference_parameter_ownership,test_mbstring_regex_capture_callback_reference_array_ownership"
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,7 @@ jobs:
libelephc_phar.a \
libelephc_tz.a \
libelephc_image.a \
libelephc_intl.a \
libelephc_probe.a \
libelephc_instr.a \
libelephc_web.a \
Expand Down Expand Up @@ -454,6 +455,7 @@ jobs:
lib.install "libelephc_phar.a"
lib.install "libelephc_tz.a"
lib.install "libelephc_image.a"
lib.install "libelephc_intl.a"
lib.install "libelephc_probe.a"
lib.install "libelephc_instr.a"
lib.install "libelephc_web.a"
Expand Down
Loading
Loading