name: client_targets

on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master
    paths:
      - "client/**"
      - ".github/workflows/client-targets.yml"
      - "ci/rust-version.sh"
      - "**/Cargo.toml"
      - "**/Cargo.lock"

env:
  CARGO_TERM_COLOR: always

jobs:
  android:
    if: github.repository == 'anza-xyz/agave'
    strategy:
      matrix:
        os:
          - ubuntu-22.04
        target:
          - x86_64-linux-android
          - aarch64-linux-android
          - i686-linux-android
          - armv7-linux-androideabi
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v6

      # This can be removed once cargo-ndk >= 3.5.4 is used.
      - name: Setup environment for Android NDK
        run: |
          echo "RANLIB=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib" >> $GITHUB_ENV

      - run: cargo install cargo-ndk@2.12.2

      - name: Setup Rust
        run: |
          source ci/rust-version.sh stable
          rustup target add --toolchain "$rust_stable" ${{ matrix.target }}

      - name: Stable build
        run: ./cargo stable ndk --target ${{ matrix.target }} build -p solana-client

  ios:
    if: github.repository == 'anza-xyz/agave'
    strategy:
      matrix:
        os:
          - macos-15
        target:
          - aarch64-apple-ios
          - x86_64-apple-ios
          - aarch64-apple-darwin
          - x86_64-apple-darwin
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v6

      - name: Setup Rust
        run: |
          source ci/rust-version.sh stable
          rustup target add --toolchain "$rust_stable" ${{ matrix.target }}

      - name: Stable build
        run: ./cargo stable build --target ${{ matrix.target }} -p solana-client

  error_reporting:
    needs:
      - android
      - ios
    if: failure() && github.event_name == 'push'
    uses: ./.github/workflows/error-reporting.yml
    secrets:
      WEBHOOK: ${{ secrets.SLACK_ERROR_REPORTING_WEBHOOK }}
