Skip to content
Merged
Show file tree
Hide file tree
Changes from 12 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions .cargo/mutants.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,23 @@
# набора). Запускается ночным workflow `.github/workflows/mutation.yml`.
#
# СКОУП: параметр-свободное ЯДРО МАТЕМАТИКИ — самый критичный, детерминированный,
# перцептивно-обоснованный код. Гигантские config.rs/solve.rs/semantic.rs НЕ
# включая exact alpha/composite и typed numerical decisions. Гигантские
# config.rs/solve.rs/semantic.rs НЕ
# мутируются по умолчанию (часы прогона, малая маржинальная ценность на orchestration-
# коде). Полный workspace-прогон — отдельный ручной/расширенный запуск (см. workflow).
#
# ЧТО ПРОВЕРЯЕТ: что property/golden/characterization тесты РЕАЛЬНО кусаются —
# выживший мутант = молчаливая дыра в наборе (coverage=пол, mutation=правда).
examine_globs = [
"crates/labcolors-core/src/alpha.rs",
"crates/labcolors-core/src/cleanliness.rs",
"crates/labcolors-core/src/glow.rs",
"crates/labcolors-core/src/material.rs",
"crates/labcolors-core/src/numerics.rs",
"crates/labcolors-core/src/pair.rs",
]

# Запас времени на мутант: закон грязи считается быстро, но набор в целом не
# Запас времени на мутант: legacy proxy coordinate считается быстро, но набор в целом не
# мгновенный; 3× базового прогона + пол в 60с гасит ложные timeout-«убийства».
timeout_multiplier = 3.0
minimum_test_timeout = 60
209 changes: 159 additions & 50 deletions .github/workflows/ci.yml

Large diffs are not rendered by default.

5 changes: 4 additions & 1 deletion .github/workflows/mutation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ jobs:
timeout-minutes: 120
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
- name: toolchain env (runner.temp)
# Изоляция RUSTUP_HOME/CARGO_HOME/TMPDIR per job под runner.temp — тот же
# приём, что во всех джобах ci.yml (класс утечки /tmp закрыт, история #143).
Expand All @@ -54,7 +56,8 @@ jobs:
cargo install cargo-mutants --version 25.0.0 --locked
echo "$CARGO_HOME/bin" >> "$GITHUB_PATH"
- name: cargo mutants (математ-ядро — скоуп из .cargo/mutants.toml)
# Без флагов скоуп берётся из .cargo/mutants.toml (cleanliness.rs + pair.rs).
# Без флагов скоуп берётся из .cargo/mutants.toml (alpha/cleanliness/
# glow/material/numerics/pair).
# workflow_dispatch с full_workspace=true снимает скоуп (--file '**/*.rs').
run: |
if [ "${{ inputs.full_workspace }}" = "true" ]; then
Expand Down
29 changes: 20 additions & 9 deletions .github/workflows/native-conformance.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@ name: Native conformance (Swift)
# ВАЖНО (владелец, 2026-07-08): GitHub-hosted macOS-раннеры платные и ИСКЛЮЧЕНЫ
# навсегда — биллинг чиниться не будет. Поэтому Swift валидируется на
# self-hosted Linux-раннере (de-02) в официальном swift-контейнере — тот же
# UniFFI-биндинг, тот же пак, ядро под x86_64-unknown-linux-gnu. Кросс-платформа
# держится толерантностью DRIFT_TOL=1e-6 (см. conformance/README.md).
# UniFFI-биндинг, тот же пак, ядро под x86_64-unknown-linux-gnu. Числовые
# семейства пака держатся толерантностью DRIFT_TOL=1e-6
# (см. conformance/README.md). Glow stable проверяется как типизированный
# Indeterminate; для legacy CAM16 bit parity не заявляется.
#
# Линтеры/аудит/wasm/основной `cargo test --workspace` (включая толерантный
# раннер-референс пака на Linux) — в ci.yml. Здесь — Swift-слой.
Expand All @@ -22,6 +24,10 @@ on:
permissions:
contents: read

env:
RUST_TOOLCHAIN: 1.96.0
SWIFT_CONTAINER: swift:6.1.3@sha256:e1cdaf7ddc9de37d8561da7a260535236694fca8c1b67d3129d47d8b180a9394

jobs:
# АКТИВНЫЙ ГЕЙТ: Swift-conformance на self-hosted Linux через swift-контейнер.
# Зеркало проверенного локального прогона (bindings/swift/ci/run-conformance.sh).
Expand All @@ -35,16 +41,19 @@ jobs:
github.event.pull_request.head.repo.full_name == github.repository
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false

# Официальный swift:6.1 (Ubuntu). Внутри ставится rustup, ядро собирается
# Официальный Swift 6.1.3 (Ubuntu), pinned по manifest-list digest.
# Внутри ставится pinned Rust, ядро собирается
# под Linux, генерятся Swift-биндинги, swift test прогоняет пак. Скрипт —
# единый источник с локальным прогоном (bindings/swift/ci/run-conformance.sh).
# $GITHUB_WORKSPACE монтируется read-only; сборка идёт в /work в контейнере.
- name: swift conformance in swift:6.1 container
- name: swift conformance in swift:6.1.3 container
run: |
docker run --rm \
-v "$GITHUB_WORKSPACE":/src:ro \
swift:6.1 \
"$SWIFT_CONTAINER" \
bash /src/bindings/swift/ci/run-conformance.sh

# ССЫЛОЧНАЯ джоба (НЕ активный гейт): нативный macOS/arm64. Требует ПЛАТНЫХ
Expand All @@ -58,21 +67,23 @@ jobs:
runs-on: macos-15
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
- uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9 # master @ 2026-03-27
with:
toolchain: 1.96.0
toolchain: ${{ env.RUST_TOOLCHAIN }}
- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
- name: versions
run: |
swift --version
rustc --version
- name: cargo test (reference runner + ffi units)
run: cargo test -p labcolors-conformance -p labcolors-ffi
run: cargo +${{ env.RUST_TOOLCHAIN }} test -p labcolors-conformance -p labcolors-ffi --locked
- name: build labcolors-ffi (+ bindgen bin)
run: cargo build -p labcolors-ffi --features cli
run: cargo +${{ env.RUST_TOOLCHAIN }} build -p labcolors-ffi --features cli --locked
- name: generate Swift bindings
run: |
cargo run -p labcolors-ffi --features cli --bin uniffi-bindgen -- \
cargo +${{ env.RUST_TOOLCHAIN }} run -p labcolors-ffi --features cli --bin uniffi-bindgen --locked -- \
generate --library target/debug/liblabcolors.dylib \
--language swift --out-dir bindings/swift/generated
- name: arrange generated bindings
Expand Down
Loading
Loading