Files
pebrel/.github/workflows/linux-lua.yml
T
kuddev e33465943a ci(macos): run release checks beside the complete native tests
Separate the independent macOS release metadata checks from native test jobs while retaining both architectures and the full release gate. Preserve Git dependency checkouts in the shared Cargo cache and compile tests before checking the product graph.
2026-09-15 09:51:18 +08:00

180 lines
6.3 KiB
YAML

name: Full native tests
on:
workflow_dispatch:
inputs:
windows_diagnostics_run:
description: Diagnose a previous Windows runtime without running a release validation
type: string
default: ""
workflow_call:
push:
# Releases call this entire workflow instead of duplicating branch-push jobs.
branches-ignore: ["release/**"]
paths:
- "**/*.rs"
- "scripts/**/*.py"
- "**/Cargo.toml"
- "Cargo.lock"
- "rust-toolchain.toml"
- ".github/workflows/linux-lua.yml"
- ".github/ci-profile.toml"
- ".github/actions/rust-cache/action.yml"
pull_request:
paths:
- "**/*.rs"
- "scripts/**/*.py"
- "**/Cargo.toml"
- "Cargo.lock"
- "rust-toolchain.toml"
- ".github/workflows/linux-lua.yml"
- ".github/ci-profile.toml"
- ".github/actions/rust-cache/action.yml"
permissions:
contents: read
actions: read
jobs:
windows-diagnostics:
if: ${{ github.event_name == 'workflow_dispatch' && inputs.windows_diagnostics_run != '' }}
uses: ./.github/workflows/windows-conformance.yml
with:
runtime_run: ${{ inputs.windows_diagnostics_run }}
native-tests:
if: ${{ inputs.windows_diagnostics_run == '' }}
name: Tests (${{ matrix.os }})
strategy:
fail-fast: false
matrix:
os: [ubuntu-24.04, windows-2022, macos-26, macos-26-intel]
runs-on: ${{ matrix.os }}
timeout-minutes: 120
env:
PYTHONUTF8: "1"
CARGO_TERM_COLOR: always
RUST_BACKTRACE: "1"
RUST_TOOLCHAIN: "1.97.1"
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-python@v5
with:
python-version: "3.13"
- name: Install native dependencies
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
build-essential cmake pkg-config zsh libasound2-dev libdbus-1-dev libudev-dev \
libfontconfig1-dev libfreetype6-dev \
libegl1-mesa-dev libgl1-mesa-dev \
libwayland-dev libxkbcommon-dev libxkbcommon-x11-dev \
libx11-xcb-dev libxcb1-dev libxcb-render0-dev \
libxcb-shape0-dev libxcb-xfixes0-dev libxcb-xinput-dev libxcb-xkb-dev libxi-dev
- name: Require the AppKit SDK used by this PR
if: runner.os == 'macOS'
run: |
sdk_version="$(xcrun --sdk macosx --show-sdk-version)"
test "${sdk_version%%.*}" -ge 26
- uses: dtolnay/rust-toolchain@stable
with:
toolchain: "1.97.1"
- uses: ./.github/actions/rust-cache
id: rust-cache
with:
key: native
extra-key: ${{ runner.os != 'macOS' && '-release-check-v2' || '' }}
target: |
target/ci
${{ runner.os != 'macOS' && 'target/release' || '' }}
legacy-key: ${{ runner.os == 'Windows' && 'windows' || runner.os == 'Linux' && 'linux' || 'macos' }}
- name: Prepare pinned Windows console runtime
if: runner.os == 'Windows'
shell: pwsh
run: ./scripts/prepare-windows-runtime.ps1 -Destination assets/windows/conhost
- name: Test complete workspace and native harness
run: python scripts/ci_native_tests.py
- name: Check source architecture
if: ${{ !cancelled() && runner.os == 'Linux' }}
run: python scripts/check_architecture.py
- name: Test translation and allocation contracts
if: ${{ !cancelled() && runner.os == 'Linux' }}
run: cargo test --locked --manifest-path tools/i18n-contract/Cargo.toml
- name: Check the release workspace
if: ${{ !cancelled() && runner.os != 'macOS' }}
run: cargo check --locked --workspace --release
- name: Save compiled workload
if: ${{ always() && steps.rust-cache.outcome == 'success' && steps.rust-cache.outputs.cache-hit != 'true' }}
uses: actions/cache/save@v4
with:
path: |
target/ci
${{ runner.os != 'macOS' && 'target/release' || '' }}
key: ${{ steps.rust-cache.outputs.cache-key }}
- name: Upload native compilation timings
if: always()
uses: actions/upload-artifact@v4
with:
name: native-timings-${{ matrix.os }}
path: target/cargo-timings
if-no-files-found: warn
compression-level: 0
retention-days: 14
# The release check has no dependency on the test executable. Keeping it in
# the Intel test job added 11m33s after a 22m29s test/compile step in run
# 34856491552. Both jobs remain part of this reusable workflow's result, so
# the stable release aggregation still requires every check to succeed.
macos-release-check:
if: ${{ inputs.windows_diagnostics_run == '' }}
name: Release workspace (${{ matrix.os }})
strategy:
fail-fast: false
matrix:
os: [macos-26, macos-26-intel]
runs-on: ${{ matrix.os }}
timeout-minutes: 120
env:
PYTHONUTF8: "1"
CARGO_TERM_COLOR: always
RUST_BACKTRACE: "1"
RUST_TOOLCHAIN: "1.97.1"
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.13"
- name: Require the AppKit SDK used by this PR
run: |
sdk_version="$(xcrun --sdk macosx --show-sdk-version)"
test "${sdk_version%%.*}" -ge 26
- uses: dtolnay/rust-toolchain@stable
with:
toolchain: "1.97.1"
- uses: ./.github/actions/rust-cache
id: rust-cache
with:
key: native-release-check
target: target/release
legacy-key: macos
- name: Check the release workspace
run: cargo check --locked --workspace --release --timings
- name: Save compiled workload
if: ${{ always() && steps.rust-cache.outcome == 'success' && steps.rust-cache.outputs.cache-hit != 'true' }}
uses: actions/cache/save@v4
with:
path: target/release
key: ${{ steps.rust-cache.outputs.cache-key }}
- name: Upload release check compilation timings
if: always()
uses: actions/upload-artifact@v4
with:
name: release-check-timings-${{ matrix.os }}
path: target/cargo-timings
if-no-files-found: warn
compression-level: 0
retention-days: 14