Skip to content

chore(deps): update bitflags requirement from >=2.0, <2.13 to >=2.0, <2.14 #316

chore(deps): update bitflags requirement from >=2.0, <2.13 to >=2.0, <2.14

chore(deps): update bitflags requirement from >=2.0, <2.13 to >=2.0, <2.14 #316

Workflow file for this run

name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:
# Cancel in-progress runs when a new push is made to the same branch
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
# Force colored cargo output in CI logs.
CARGO_TERM_COLOR: always
jobs:
# ==========================================================================
# Lint (runs once, not per-platform). Pinned to macos-26 because
# `cargo clippy --all-features` activates `macos_26_0`, which pulls in
# SDK symbols (MTLSamplerReductionMode, reactiveTextureUsage, …) that
# don't exist on the macos-latest (macOS 14) runner.
# ==========================================================================
lint:
runs-on: macos-26
name: Lint
steps:
- uses: actions/checkout@v5
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt
- name: Cache cargo
uses: actions/cache@v5
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-lint-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-lint-cargo-
- name: Run clippy
run: cargo clippy --all-features --all-targets -- -D warnings
- name: Check formatting
run: cargo fmt --check
# ==========================================================================
# Build & Test (per-platform)
# ==========================================================================
build:
strategy:
fail-fast: false
matrix:
include:
# NOTE: macos-14 + macos-15 dropped from the matrix because the
# current apple-metal-rs (v0.7.x) Swift bridge uses macOS 26+
# APIs (MTLLogState, MTLResidencySet, MTL4*,
# MTLSamplerDescriptor.reductionMode, etc.) without availability
# guards. The bridge only compiles cleanly against the macOS 26
# SDK. screencapturekit's effective minimum-supported macOS for
# CI is therefore 26.0 until apple-metal-rs gates its post-15
# APIs behind `#available(macOS 15, *)` / `(macOS 26, *)`.
- os: macos-26
name: macOS 26 (Tahoe) ARM64
features: "async,macos_26_0"
assert_symbol_absent: ""
assert_symbol_present: "SCScreenshotConfiguration"
# Cross-version: build on macOS 26 SDK with only macOS 15 features
# to verify no macOS 26 symbols leak into the binary (issue #127)
- os: macos-26
name: macOS 26 (Tahoe) cross-version (macos_15_2 only)
features: "async,macos_15_2"
assert_symbol_absent: "SCScreenshotConfiguration"
assert_symbol_present: ""
# Cross-arch: verify x86_64 cross-compilation on the ARM64 runner
- os: macos-26
name: macOS 26 Cross-compile (x86_64 on ARM64)
features: "async,macos_15_2"
cross_target: x86_64-apple-darwin
assert_symbol_absent: ""
assert_symbol_present: ""
runs-on: ${{ matrix.os }}
name: Build - ${{ matrix.name }}
needs: [lint]
env:
TARGET_FLAG: ${{ matrix.cross_target && format('--target {0}', matrix.cross_target) || '' }}
steps:
- uses: actions/checkout@v5
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.cross_target || '' }}
- name: Cache cargo
uses: actions/cache@v5
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-${{ matrix.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-${{ matrix.os }}-cargo-
- name: Build (default features)
run: cargo build --verbose $TARGET_FLAG
- name: Build with version-specific features (${{ matrix.features }})
run: cargo build --verbose --features "${{ matrix.features }}" $TARGET_FLAG
- name: Run tests (default features)
if: ${{ !matrix.cross_target }}
run: cargo test --verbose
- name: Run tests with version-specific features
if: ${{ !matrix.cross_target }}
run: cargo test --verbose --features "${{ matrix.features }}"
- name: Verify macOS 26 symbols are absent (cross-version safety)
if: matrix.assert_symbol_absent != ''
run: ./scripts/check_symbols.sh --assert-absent "${{ matrix.assert_symbol_absent }}"
- name: Verify macOS 26 symbols are present
if: matrix.assert_symbol_present != ''
run: ./scripts/check_symbols.sh --assert-present "${{ matrix.assert_symbol_present }}"
# ==========================================================================
# Memory Leak Check (per-platform, runs parallel to build)
# ==========================================================================
leak-check:
strategy:
fail-fast: false
matrix:
include:
# Only macos-26 — see comment above the build matrix for why
# macos-14 / macos-15 are no longer compatible with apple-metal
# v0.7.x.
- os: macos-26
name: macOS 26 (Tahoe) ARM64
features: "async,macos_26_0"
runs-on: ${{ matrix.os }}
name: Leak Check - ${{ matrix.name }}
needs: [lint]
steps:
- uses: actions/checkout@v5
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo
uses: actions/cache@v5
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-${{ matrix.os }}-leak-check-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-${{ matrix.os }}-leak-check-cargo-
- name: Build leak check example
run: cargo build --example 15_memory_leak_check --features "${{ matrix.features }}"
- name: Run memory leak check
run: cargo run --example 15_memory_leak_check --features "${{ matrix.features }}"
# ==========================================================================
# Release (only on main, after successful build and leak-check).
# Pinned to macos-26 so `cargo publish --verify` builds against the macOS
# 26 SDK that apple-metal 0.6.x already requires (see build matrix note).
# ==========================================================================
release-pr:
runs-on: macos-26
needs: [lint, build, leak-check]
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
environment: release
permissions:
contents: write
pull-requests: write
concurrency:
group: release-plz-${{ github.ref }}
cancel-in-progress: false
steps:
- uses: actions/checkout@v5
with:
fetch-depth: 0
token: ${{ secrets.RELEASE_PLZ_TOKEN }}
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
- name: Run release-plz
uses: release-plz/action@v0.5.129
with:
command: release-pr
env:
GITHUB_TOKEN: ${{ secrets.RELEASE_PLZ_TOKEN }}
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
release:
runs-on: macos-26
needs: [lint, build, leak-check]
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
environment: release
permissions:
contents: write
concurrency:
group: release-plz-publish-${{ github.ref }}
cancel-in-progress: false
steps:
- uses: actions/checkout@v5
with:
fetch-depth: 0
token: ${{ secrets.RELEASE_PLZ_TOKEN }}
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
- name: Run release-plz
uses: release-plz/action@v0.5.129
with:
command: release
env:
GITHUB_TOKEN: ${{ secrets.RELEASE_PLZ_TOKEN }}
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}