diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dc80ecb58..6bc569143 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -76,214 +76,9 @@ env: ~/.cargo/git/db/ jobs: - fmt: - name: Check formatting - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - with: - submodules: true - - - name: Use system Rust - run: rustup override set stable - - - name: cargo fmt - # This runs on the entire repository, including submodules - run: cargo fmt -- --check - - lint: - name: Lint ${{ matrix.name }} - runs-on: ubuntu-latest - - strategy: - # These jobs are "cheap" to run, will likely run in parallel anyhow, and - # it can be useful to know exactly which parts failed. - fail-fast: false - matrix: - include: - # Check three major architectures (x86_64, Aarch64 and any 32bit), and - # test three OS'es (macOS, iOS and a more obscure one, visionOS simulator). - # - # This should give us fairly good coverage for normal PRs. - - name: macOS x86_64 - target: x86_64-apple-darwin - args: $PUBLIC_CRATES $FRAMEWORKS_MACOS_14 $INTERESTING_FEATURES - - name: iOS ARMv7s - target: armv7s-apple-ios - build-std: true - # `cc` works poorly when cross-compiling, so let's ignore `objc2-exception-helper` for now. - args: --package=block2 --package=objc2 --package=objc2-encode --package=objc2-proc-macros $FRAMEWORKS_IOS_17 $INTERESTING_FEATURES -Zbuild-std - - name: visionOS Aarch64 simulator - target: aarch64-apple-visionos-sim - build-std: true - # `cc` works poorly when cross-compiling, so let's ignore `objc2-exception-helper` for now. - args: --package=block2 --package=objc2 --package=objc2-encode --package=objc2-proc-macros $FRAMEWORKS_VISIONOS_1 $INTERESTING_FEATURES -Zbuild-std - - - name: GNUStep + exceptions - target: x86_64-unknown-linux-gnu - args: $PUBLIC_CRATES $FRAMEWORKS_GNUSTEP $INTERESTING_FEATURES --features=gnustep-1-9,catch-all - - - name: header-translator - target: x86_64-unknown-linux-gnu - args: -pheader-translator - - - name: test-assembly - target: x86_64-unknown-linux-gnu - args: -ptest-assembly - - env: - CARGO_BUILD_TARGET: ${{ matrix.target }} - - steps: - - uses: actions/checkout@v4 - with: - submodules: true - - - name: Use nightly toolchain - run: | - rustup toolchain install ${{ env.CURRENT_NIGHTLY }} --profile=minimal --no-self-update - rustup override set ${{ env.CURRENT_NIGHTLY }} - - - name: Add clippy component - run: rustup component add clippy - - - name: Add rust-src component for -Zbuild-std - if: matrix.build-std - run: rustup component add rust-src - - - name: Install target - if: ${{ matrix.target && !matrix.build-std }} - run: rustup target add ${{ matrix.target }} - - - name: Cache Cargo - uses: actions/cache@v4 - with: - path: ${{ env.CARGO_CACHE_PATH }} - key: cargo-${{ github.job }}-${{ matrix.name }}-${{ hashFiles('**/Cargo.lock') }} - - - name: cargo doc - run: cargo doc --no-deps --document-private-items ${{ matrix.args }} - env: - # docsrs runs on nightly, so we can use nightly features when `docsrs` is enabled. - RUSTDOCFLAGS: "--deny=warnings --cfg=docsrs" - - - name: cargo clippy - run: cargo clippy --all-targets ${{ matrix.args }} - - msrv: - name: Check MSRV - runs-on: ubuntu-latest - - env: - CARGO_BUILD_TARGET: x86_64-apple-darwin - - steps: - - uses: actions/checkout@v4 - with: - submodules: true - - - name: Use MSRV toolchain - run: | - rustup toolchain install 1.71 --profile=minimal --no-self-update - rustup override set 1.71 - - - name: Install target - run: rustup target add x86_64-apple-darwin - - - name: Cache Cargo - uses: actions/cache@v4 - with: - path: ${{ env.CARGO_CACHE_PATH }} - key: cargo-${{ github.job }}-${{ matrix.name }}-${{ hashFiles('**/Cargo.lock') }} - - - name: cargo check - run: cargo check --package=block2 --package=objc2 --package=objc2-encode --package=objc2-proc-macros $FRAMEWORKS_MACOS_14 --features=all - env: - RUSTFLAGS: "--codegen=debuginfo=0" # Removed --deny=warnings - - ui: - name: Compiler UI - runs-on: ubuntu-latest - needs: - - fmt - - lint - - env: - TRYBUILD: overwrite - - steps: - - uses: actions/checkout@v4 - with: - submodules: true - - - name: Use nightly toolchain - run: | - rustup toolchain install ${{ env.CURRENT_NIGHTLY }} --profile=minimal --no-self-update - rustup override set ${{ env.CURRENT_NIGHTLY }} - - - name: Add rust-src component to allow compiler UI to display sources - run: rustup component add rust-src - - - name: Cache Cargo - uses: actions/cache@v4 - with: - path: ${{ env.CARGO_CACHE_PATH }} - key: cargo-${{ github.job }}-${{ matrix.name }}-${{ hashFiles('**/Cargo.lock') }} - - - name: Run UI tests - run: cargo run --features=run,gnustep-1-7 --bin=test-ui - - - name: Check diff - if: ${{ always() }} - run: git diff --exit-code - - assembly: - name: Assembly tests - runs-on: ubuntu-latest - needs: - - fmt - - lint - - env: - TEST_OVERWRITE: 1 - - steps: - - uses: actions/checkout@v4 - with: - submodules: true - - - name: Use nightly toolchain - run: | - rustup toolchain install ${{ env.CURRENT_NIGHTLY }} --profile=minimal --no-self-update - rustup override set ${{ env.CURRENT_NIGHTLY }} - - - name: Add rust-src component for -Zbuild-std - run: rustup component add rust-src - - - name: Cache Cargo - uses: actions/cache@v4 - with: - path: ${{ env.CARGO_CACHE_PATH }} - key: cargo-${{ github.job }}-${{ matrix.name }}-${{ hashFiles('**/Cargo.lock') }} - - - name: Run macOS x86_64 assembly tests - run: cargo run --bin=test-assembly -- -Z build-std --target=x86_64-apple-darwin - - - name: Run all assembly tests - if: ${{ github.ref_name == 'ci-full' }} - run: ./helper-scripts/run-assembly-tests.sh - - - name: Check diff - if: ${{ always() }} - run: git diff --exit-code - header-translator: name: Verify header translator output runs-on: macos-15 # Aarch64 - needs: - - fmt - - lint env: DEVELOPER_DIR: /Applications/Xcode_16.1.app/Contents/Developer @@ -319,561 +114,3 @@ jobs: - name: Run auto-generated framework tests on Mac Catalyst if: ${{ github.ref_name == 'ci-full' }} run: cargo test -ptest-frameworks --features=test-frameworks --target=aarch64-apple-ios-macabi - - check-framework-features: - # This will take ~40 minutes - if: ${{ github.ref_name == 'ci-full' }} - name: Check framework features - runs-on: macos-15 # Aarch64 - needs: - - fmt - - lint - - steps: - - uses: actions/checkout@v4 - with: - submodules: true - - - name: Use system Rust - run: rustup override set stable - - - name: Cache Cargo - uses: actions/cache@v4 - with: - path: ${{ env.CARGO_CACHE_PATH }} - key: cargo-${{ github.job }}-${{ matrix.name }}-${{ hashFiles('**/Cargo.lock') }} - - - name: Check frameworks with each feature enabled separately - run: cargo run --bin=check_framework_features - - # We make sure to have at least one check on macOS that actually runs the code, - # but all other tests are only run if absolutely needed (see `test-apple` below). - test-macos: - name: Test macOS 15 Aarch64 - runs-on: macos-15 # Aarch64 - needs: - - fmt - # Currently the slowest check, so let's get it started as soon as possible - # - lint - - steps: - - uses: actions/checkout@v4 - with: - submodules: true - - - name: Use nightly toolchain - run: | - rustup toolchain install ${{ env.CURRENT_NIGHTLY }} --profile=minimal --no-self-update - rustup override set ${{ env.CURRENT_NIGHTLY }} - - - name: Cache Cargo - uses: actions/cache@v4 - with: - path: ${{ env.CARGO_CACHE_PATH }} - key: cargo-${{ github.job }}-${{ matrix.name }}-${{ hashFiles('**/Cargo.lock') }} - - - name: Test without features - run: cargo test $PUBLIC_CRATES -ptests - - - name: Test all frameworks - run: cargo test $PUBLIC_CRATES $FRAMEWORKS_MACOS_10_12 -ptests $INTERESTING_FEATURES - - test-apple: - if: ${{ github.ref_name == 'ci-full' }} - name: ${{ matrix.test && 'Test' || 'Build' }} ${{ matrix.name }} - runs-on: ${{ matrix.os }} - needs: - - fmt - - lint - - strategy: - # MacOS instances are rate-limited, which means that whenever we can - # avoid doing work, we should! - fail-fast: true - matrix: - include: - # Reasonably varied set of macOS targets. - - name: macOS 13 x86_64 - target: x86_64-apple-darwin - os: macos-13 # x86_64 - frameworks: MACOS_13 - test: true - - name: macOS 15 AArch64 - target: aarch64-apple-darwin - os: macos-15 # Aarch64 - frameworks: MACOS_15 - test: true - - name: macOS 14 Aarch64 nightly - target: aarch64-apple-darwin - os: macos-14 # Aarch64 - frameworks: MACOS_14 - nightly: true - test: true - - # Old macOS targets. - - name: macOS 13 x86 with 10.13 SDK - target: i686-apple-darwin - # The SDK itself only supports compiling build scripts for x86_64 - os: macos-13 # x86_64 - frameworks: MACOS_10_13 - nightly: true - build-std: true - # Newest SDK that supports 32-bit - sdk: "10.13" - - name: macOS 13 x86_64 with 10.12 SDK - target: x86_64-apple-darwin - os: macos-13 # x86_64 - frameworks: MACOS_10_12 - # Oldest macOS version we support. - # The SDK itself only supports compiling build scripts for x86_64. - sdk: "10.12" - test: true - - # A reasonably varied set of iOS/tvOS/watchOS/visionOS targets. - - name: iOS x86_64 simulator - target: x86_64-apple-ios - os: macos-14 # Aarch64 - frameworks: IOS_17 - - name: Mac Catalyst Aarch64 - target: aarch64-apple-ios-macabi - os: macos-14 # Aarch64 - frameworks: MAC_CATALYST_17 - test: true - - name: visionOS Aarch64 - target: aarch64-apple-visionos - os: macos-14 # Aarch64 - frameworks: VISIONOS_1 - nightly: true - build-std: true - - name: tvOS Aarch64 - target: aarch64-apple-tvos - os: macos-14 # Aarch64 - frameworks: TVOS_17 - nightly: true - build-std: true - - name: watchOS ARM64_32 - target: arm64_32-apple-watchos - os: macos-14 # Aarch64 - frameworks: WATCHOS_10 - nightly: true - build-std: true - - name: iOS ARMv7s - target: armv7s-apple-ios - os: macos-14 # Aarch64 - frameworks: IOS_10 - nightly: true - build-std: true - - name: iOS x86 - target: i386-apple-ios - os: macos-14 # Aarch64 - frameworks: IOS_10 - nightly: true - build-std: true - - env: - CARGO_BUILD_TARGET: ${{ matrix.target }} - # Modern macOS can only run the target that they're built for. - # So we pass `--no-run` when building for other targets. - ARGS: >- - ${{ matrix.build-std && '-Zbuild-std -Zdoctest-xcompile' }} - ${{ matrix.test && '' || '--no-run' }} - # Mac Catalyst requires a higher version. - IPHONEOS_DEPLOYMENT_TARGET: ${{ contains(matrix.target, 'macabi') && '13.1' || '10.0' }} - - steps: - - uses: actions/checkout@v4 - with: - submodules: true - - - name: Use nightly toolchain - if: ${{ matrix.nightly }} - run: | - rustup toolchain install ${{ env.CURRENT_NIGHTLY }} --profile=minimal --no-self-update - rustup override set ${{ env.CURRENT_NIGHTLY }} - - name: Use stable toolchain - if: ${{ !matrix.nightly }} - run: rustup override set stable - - - name: Add rust-src component for -Zbuild-std - if: matrix.build-std - run: rustup component add rust-src - - - name: Install target - if: ${{ !matrix.build-std }} - run: rustup target add ${{ matrix.target }} - - - name: Cache Cargo - uses: actions/cache@v4 - with: - path: ${{ env.CARGO_CACHE_PATH }} - key: cargo-${{ github.job }}-${{ matrix.name }}-${{ hashFiles('**/Cargo.lock') }} - - - name: Cache SDK - id: sdk-cache - if: matrix.sdk - uses: actions/cache@v4 - with: - path: ~/sdk - key: sdk-test-apple-${{ matrix.name }} - - - name: Download different macOS SDK - if: matrix.sdk && steps.sdk-cache.outputs.cache-hit != 'true' - # macOS SDKs: - # - https://github.com/alexey-lysiuk/macos-sdk - # - https://github.com/phracker/MacOSX-SDKs - # - https://github.com/hexops/sdk-macos-12.0 - # - # iOS SDKs: - # - https://github.com/xybp888/iOS-SDKs - # - https://github.com/theos/sdks - run: | - wget https://github.com/alexey-lysiuk/macos-sdk/releases/download/${{ matrix.sdk }}/MacOSX${{ matrix.sdk }}.tar.bz2 - tar -xyf MacOSX${{ matrix.sdk }}.tar.bz2 - mv MacOSX${{ matrix.sdk }}.sdk $HOME/sdk - - - name: Setup SDK environment - if: matrix.sdk - # This changes a variable, so is only set when a custom SDK is used - run: echo "SDKROOT=$HOME/sdk" >> $GITHUB_ENV - - - name: Test without features - run: cargo test $ARGS $PUBLIC_CRATES -ptests - - - name: Test Foundation - run: cargo test $ARGS $PUBLIC_CRATES -ptests $INTERESTING_FEATURES -pobjc2-foundation - - - name: Test all frameworks - run: cargo test $ARGS $PUBLIC_CRATES -ptests $INTERESTING_FEATURES --features=catch-all $FRAMEWORKS_${{ matrix.frameworks }} - - - name: Test Foundation in release mode - run: cargo test $ARGS $PUBLIC_CRATES -ptests $INTERESTING_FEATURES -pobjc2-foundation --features=catch-all --release - - - name: Test Foundation with unstable features - if: ${{ matrix.nightly }} - run: cargo test $ARGS $PUBLIC_CRATES -ptests $INTERESTING_FEATURES -pobjc2-foundation --features=catch-all,unstable-autoreleasesafe ${{ matrix.sdk != '10.12' && '--features=unstable-simd' || '' }} - - # TODO: Re-enable this on all of Foundation once we do some form of - # availability checking. - - name: Test static class and selectors - if: ${{ matrix.frameworks == 'MACOS_15' }} - run: >- - cargo test $ARGS $PUBLIC_CRATES -ptests -pobjc2-foundation - --features=unstable-static-sel,unstable-static-class,unstable-static-nsstring - --features=NSString - - test-ios: - if: ${{ github.ref_name == 'ci-full' }} - name: Test on iOS simulator w. dinghy - runs-on: macos-13 # x86_64 - needs: - - fmt - - lint - - steps: - - uses: actions/checkout@v4 - with: - submodules: true - - - name: Use stable toolchain - run: rustup override set stable - - - name: Install simulator target - run: rustup target add x86_64-apple-ios - - - name: Cache Cargo - uses: actions/cache@v4 - with: - path: ${{ env.CARGO_CACHE_PATH }} - key: cargo-${{ github.job }}-${{ matrix.name }}-${{ hashFiles('**/Cargo.lock') }} - - - name: Install cargo-dinghy - uses: taiki-e/install-action@v2 - with: - tool: cargo-dinghy@0.6 - - - name: Launch XCode Simulator and prepare Dinghy - # Note that we're not testing all configurations with dinghy, since that - # takes a very long time to run, and hence impedes general development. - run: | - # Get system info - xcrun simctl list runtimes - - # Launch the simulator - RUNTIME_ID=$(xcrun simctl list runtimes | grep iOS | cut -d ' ' -f 7 | tail -1) - SIM_ID=$(xcrun simctl create MyIphone com.apple.CoreSimulator.SimDeviceType.iPhone-14-Pro $RUNTIME_ID) - xcrun simctl boot $SIM_ID - - # Export simulator ID - echo "SIM_ID=$SIM_ID" >> $GITHUB_ENV - - - name: Test - run: cargo-dinghy --device=$SIM_ID test $PUBLIC_CRATES $FRAMEWORKS_IOS_10 -ptests $INTERESTING_FEATURES --features=catch-all - - test-gnustep: - name: ${{ matrix.name }} - runs-on: ${{ matrix.os || 'ubuntu-latest' }} - needs: - - fmt - - lint - - strategy: - # GNUStep tests are currently flaky, this makes it easier to see - fail-fast: false - matrix: - include: - - name: Test GNUStep with libobjc2 v1.9 - target: x86_64-unknown-linux-gnu - runtime: gnustep-1-9 - libobjc2: "1.9" - - name: Test GNUStep with libobjc2 v2.0 - # Fails for some reason on Ubuntu 22 - os: ubuntu-20.04 - target: x86_64-unknown-linux-gnu - runtime: gnustep-2-0 - libobjc2: "2.0" - - name: Test GNUStep with libobjc2 v2.1 on nightly - target: x86_64-unknown-linux-gnu - nightly: true - runtime: gnustep-2-1 - libobjc2: "2.1" - # fuzz: true # Disable fuzzing for now, it fails because it tries to load all symbols in Foundation - - name: Test GNUStep 32bit - # Ubuntu 22 image doesn't have the required C++ libraries - # installed for 32-bit - os: ubuntu-20.04 - target: i686-unknown-linux-gnu - cflags: -m32 - configureflags: --target=x86-pc-linux-gnu - runtime: gnustep-1-9 - libobjc2: "1.9" - - env: - CARGO_BUILD_TARGET: ${{ matrix.target }} - CFLAGS: ${{ matrix.cflags }} - CXXFLAGS: ${{ matrix.cflags }} - ASMFLAGS: ${{ matrix.cflags }} - LDFLAGS: ${{ matrix.cflags }} - # http://wiki.gnustep.org/index.php/Building_GNUstep_under_Debian_FreeBSD#installing_gnustep-make - RUNTIME_VERSION: gnustep-${{ matrix.libobjc2 }} - # Exclude `objc2-exception-helper`, for some reason that can't be tested directly on GNUStep - PUBLIC_CRATES: >- - --package=block2 - --package=objc2 - --package=objc2-encode - --package=objc2-proc-macros - - steps: - - uses: actions/checkout@v4 - with: - submodules: true - - - name: Cache external dependencies - id: extern-cache - uses: actions/cache@v4 - with: - # We could have just cached build-files, and then rerun the build tool - # every time, letting it figure out what's changed. However, this has - # the problem that GNUStep-Base ./configure invalidates the cache, - # which makes it very hard to know when to rebuild and when not to. - # - # So instead we just place the final outputs in ~/extern, and cache - # them there: - # - bin/* - # - lib/libobjc.so - # - lib/libgnustep-base.so - # - include/Foundation/* - # - include/objc/* - path: | - ~/extern/bin - ~/extern/lib - ~/extern/include - # Change this key if we start caching more things - key: extern-${{ github.job }}-${{ matrix.name }}-v1 - - - name: Setup environment - # These add to PATH-like variables, so they can always be set - run: | - mkdir -p $HOME/extern/bin - mkdir -p $HOME/extern/lib - mkdir -p $HOME/extern/include - echo "PATH=$HOME/extern/bin:$PATH" >> $GITHUB_ENV - echo "LIBRARY_PATH=$HOME/extern/lib:$LIBRARY_PATH" >> $GITHUB_ENV - echo "LD_LIBRARY_PATH=$HOME/extern/lib:$LD_LIBRARY_PATH" >> $GITHUB_ENV - echo "CPATH=$HOME/extern/include:$CPATH" >> $GITHUB_ENV - # Debug print these - ls -al $HOME/extern/* - - - name: Install Clang + Valgrind - run: | - sudo apt-get update - sudo apt-get -y install clang valgrind - - - name: Install cross compilation tools - if: matrix.target == 'i686-unknown-linux-gnu' - run: | - sudo dpkg --add-architecture i386 - sudo apt-get update - sudo apt-get -y install gcc-multilib libgcc-10-dev:i386 \ - libc6-dev:i386 libstdc++-10-dev:i386 libffi-dev:i386 \ - libxml2-dev:i386 libicu-dev:i386 - - - name: Install Make and Cmake - if: steps.extern-cache.outputs.cache-hit != 'true' - run: sudo apt-get -y install make cmake - - - name: Install GNUStep libobjc2 - if: steps.extern-cache.outputs.cache-hit != 'true' - run: | - wget https://github.com/gnustep/libobjc2/archive/refs/tags/v${{ matrix.libobjc2 }}.tar.gz - tar -xzf v${{ matrix.libobjc2 }}.tar.gz - - # Install robin-map on v2.1 - if test -d libobjc2-2.1; then - cd libobjc2-2.1/third_party - # Remove possibly existing `robin-map` folder - rm -rf robin-map - wget https://github.com/Tessil/robin-map/archive/757de829927489bee55ab02147484850c687b620.tar.gz - tar -xzf 757de829927489bee55ab02147484850c687b620.tar.gz - mv robin-map-757de829927489bee55ab02147484850c687b620 robin-map - cd ../.. - fi - - mkdir -p libobjc2-${{ matrix.libobjc2 }}/build - cd libobjc2-${{ matrix.libobjc2 }}/build - cmake -Wno-dev -DCMAKE_INSTALL_PREFIX=$HOME/extern -DTESTS=OFF .. - make install - - - name: Install GNUStep make - if: steps.extern-cache.outputs.cache-hit != 'true' - run: | - wget https://github.com/gnustep/tools-make/archive/refs/tags/make-2_9_0.tar.gz - tar -xzf make-2_9_0.tar.gz - mkdir -p tools-make-make-2_9_0/build - cd tools-make-make-2_9_0/build - ../configure --prefix=$HOME/extern --with-library-combo=ng-gnu-gnu - make install - - - name: Install GNUStep base library - if: steps.extern-cache.outputs.cache-hit != 'true' - run: | - wget https://github.com/gnustep/libs-base/archive/refs/tags/base-1_28_0.tar.gz - tar -xzf base-1_28_0.tar.gz - cd libs-base-base-1_28_0 - ./configure --prefix=$HOME/extern --disable-tls --disable-xslt ${{ matrix.configureflags }} - make install - ls -al $HOME/extern/* - - - name: Install GNUStep GUI - if: matrix.target == 'x86_64-unknown-linux-gnu' && steps.extern-cache.outputs.cache-hit != 'true' - run: | - wget https://github.com/gnustep/libs-gui/archive/refs/tags/gui-0_29_0.tar.gz - tar -xzf gui-0_29_0.tar.gz - cd libs-gui-gui-0_29_0 - ./configure --prefix=$HOME/extern --disable-jpeg ${{ matrix.configureflags }} - make install - ls -al $HOME/extern/* - - - name: Use nightly toolchain - if: ${{ matrix.nightly }} - run: | - rustup toolchain install ${{ env.CURRENT_NIGHTLY }} --profile=minimal --no-self-update - rustup override set ${{ env.CURRENT_NIGHTLY }} - - name: Use stable toolchain - if: ${{ !matrix.nightly }} - run: rustup override set stable - - - name: Install target - if: ${{ matrix.target }} - run: rustup target add ${{ matrix.target }} - - - name: Cache Cargo - uses: actions/cache@v4 - with: - path: ${{ env.CARGO_CACHE_PATH }} - key: cargo-${{ github.job }}-${{ matrix.name }}-${{ hashFiles('**/Cargo.lock') }} - - - name: Cache cargo-fuzz - if: ${{ matrix.fuzz }} - id: fuzz-cache - uses: actions/cache@v4 - with: - path: ~/.cargo/bin/cargo-fuzz - # Change this key if we update the required cargo-fuzz version - key: cargo-fuzz-${{ github.job }}-${{ matrix.name }}-v0-11-2 - - - name: Install cargo-fuzz - if: ${{ matrix.fuzz && steps.fuzz-cache.outputs.cache-hit != 'true' }} - run: cargo install cargo-fuzz --version=^0.11.2 - - - name: Test Foundation - run: cargo test --features=${{ matrix.runtime }} $PUBLIC_CRATES $INTERESTING_FEATURES -ptests -pobjc2-foundation --features=catch-all - - - name: Test all frameworks - if: ${{ github.ref_name == 'ci-full' && matrix.target == 'x86_64-unknown-linux-gnu' }} - run: cargo test --features=${{ matrix.runtime }} $PUBLIC_CRATES $INTERESTING_FEATURES -ptests $FRAMEWORKS_GNUSTEP --features=catch-all - - - name: Test in release mode - # Disabled on GNUStep 2.1 for now - if: ${{ github.ref_name == 'ci-full' && matrix.runtime != 'gnustep-2-1' }} - run: cargo test --features=${{ matrix.runtime }} $PUBLIC_CRATES -pobjc2-foundation --release - - - name: Run fuzzing - if: ${{ matrix.fuzz }} - run: | - # Run each fuzz target for 100000 runs (approx. 5 seconds), and - # timeout after 2 seconds. - # - # We specify the number of runs explicitly instead of using - # `max_total_time`, to get more determinism. - for fuzz_target in $(cargo-fuzz list --fuzz-dir=./crates/test-fuzz/) - do - echo "Fuzzing $fuzz_target" - cargo-fuzz run --fuzz-dir=./crates/test-fuzz/ $fuzz_target --features=${{ matrix.runtime }},fuzz-all -- -runs=10000 -timeout=2 -jobs=10 - done - - # Check if the fuzzer encountered something that should be added to - # the corpus. - git diff --exit-code - - - name: Run benchmarks - # Disabled since it started failing for some reason - if: ${{ false }} - # Difficult to install Valgrind on macOS - # See https://github.com/LouisBrunner/valgrind-macos - run: cargo bench --features=${{ matrix.runtime }} - - test-compiler-rt: - name: Test Compiler-RT - runs-on: ubuntu-latest - needs: - - fmt - - lint - - env: - # `compiler-rt` is only relevant for block2 - PUBLIC_CRATES: --package=block2 - - steps: - - uses: actions/checkout@v4 - with: - submodules: true - - - name: Use system Rust - run: rustup override set stable - - - name: Cache Cargo - uses: actions/cache@v4 - with: - path: ${{ env.CARGO_CACHE_PATH }} - key: cargo-${{ github.job }}-${{ matrix.name }}-${{ hashFiles('**/Cargo.lock') }} - - - name: Install clang + libBlocksRuntime - run: | - sudo apt-get update - sudo apt-get -y install clang libblocksruntime-dev - - - name: Test - run: cargo test $PUBLIC_CRATES --features=compiler-rt - - - name: Test in release mode - run: cargo test $PUBLIC_CRATES --features=compiler-rt --release