Skip to content

Revamp README and synchronize cross-platform shell updates #3

Revamp README and synchronize cross-platform shell updates

Revamp README and synchronize cross-platform shell updates #3

Workflow file for this run

name: FFI Drift Check
on:
push:
branches:
- development
- main
- stable
paths:
- 'Shared/ArcadiaCore/src/ffi.rs'
- 'Shared/ArcadiaCore/src/**.rs'
- 'Mobile/iOS/ArcadiaCore/Generated/**'
pull_request:
branches:
- development
- main
- stable
paths:
- 'Shared/ArcadiaCore/src/ffi.rs'
- 'Shared/ArcadiaCore/src/**.rs'
- 'Mobile/iOS/ArcadiaCore/Generated/**'
workflow_dispatch:
jobs:
ffi-drift:
name: Check FFI bindings drift
runs-on: macos-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Install iOS target
run: rustup target add aarch64-apple-ios
- name: Cache Rust dependencies
uses: swatinem/rust-cache@v2
with:
workspaces: Shared -> target
- name: Build arcadia-core for iOS device
run: |
cd Shared
cargo build -p arcadia-core --release --target aarch64-apple-ios
- name: Generate Swift bindings into temp dir
run: |
mkdir -p /tmp/ffi-generated
cd Shared
cargo run -p uniffi-bindgen -- generate \
--library target/aarch64-apple-ios/release/libarcadia_core.a \
--language swift \
--out-dir /tmp/ffi-generated
- name: Diff generated bindings against checked-in
run: |
CHECKED_SWIFT="Mobile/iOS/ArcadiaCore/Generated/arcadia_core.swift"
GENERATED_SWIFT="/tmp/ffi-generated/arcadia_core.swift"
# Detect header filename (uniffi may name it arcadia_coreFFI.h or arcadia_coreCFFI.h)
GENERATED_H=$(ls /tmp/ffi-generated/*.h 2>/dev/null | head -1)
CHECKED_H=""
if [[ -n "$GENERATED_H" ]]; then
HEADER_BASENAME=$(basename "$GENERATED_H")
CHECKED_H="Mobile/iOS/ArcadiaCore/Generated/$HEADER_BASENAME"
fi
DRIFT=0
if ! diff -q "$GENERATED_SWIFT" "$CHECKED_SWIFT" > /dev/null 2>&1; then
echo "::error::Swift bindings drift detected in $CHECKED_SWIFT"
diff "$GENERATED_SWIFT" "$CHECKED_SWIFT" || true
DRIFT=1
fi
if [[ -n "$CHECKED_H" ]] && [[ -f "$CHECKED_H" ]]; then
if ! diff -q "$GENERATED_H" "$CHECKED_H" > /dev/null 2>&1; then
echo "::error::FFI header drift detected in $CHECKED_H"
diff "$GENERATED_H" "$CHECKED_H" || true
DRIFT=1
fi
fi
if [[ "$DRIFT" -eq 1 ]]; then
echo ""
echo "FFI bindings are out of sync. Run:"
echo " bash Shared/Scripts/build-ios-framework.sh"
echo "and commit the updated Generated/ directory."
exit 1
fi
echo "FFI bindings match checked-in version."