struct_db 0.4.6

Drop-in embedded database
Documentation
name: Linux/Windows/macOS/Android/iOS (Build/Test/Release)

on:
  push:
    branches: [ main, next ]
  pull_request:
    branches: [ main, next ]

env:
  RUST_BACKTRACE: full

jobs:
  build_test_common_os:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: true
      matrix:
        os: [ubuntu-latest, windows-latest, macOS-latest]
        toolchain: [stable]
        feature: [ no_feature , "async_tokio" ]
    steps:
      - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4
      - name: Setup Rust
        uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.toolchain }}
          override: true
      - name: Setup Feature Args
        shell: bash
        run: |
          if [[ "${{ matrix.feature }}" == "no_feature" ]]; then
            echo "FEATURE_ARGS=" >> $GITHUB_ENV
          else
            echo "FEATURE_ARGS=-F ${{ matrix.feature }}" >> $GITHUB_ENV
          fi
      - name: Build
        uses: actions-rs/cargo@v1
        with:
          command: build
          args: ${{ env.FEATURE_ARGS }}
      - name: Run tests
        if: matrix.feature != 'async_tokio'
        uses: actions-rs/cargo@v1
        with:
          command: test
          args: ${{ env.FEATURE_ARGS }}
      - name: Run tests
        if: matrix.feature == 'async_tokio'
        uses: actions-rs/cargo@v1
        with:
          command: test
          # Ignore rust doc tests for async_tokio
          args: ${{ env.FEATURE_ARGS }} --test '*'
  build_test_android:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: true
      matrix:
        target: [i686-linux-android, aarch64-linux-android, armv7-linux-androideabi, thumbv7neon-linux-androideabi, x86_64-linux-android]
        toolchain: [stable]
    steps:
      - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4
      - name: Setup Rust
        uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.toolchain }}
          override: true
      - name: Build
        uses: actions-rs/cargo@v1
        with:
          use-cross: true
          command: build
          args: --release --target ${{ matrix.target }}
      - name: Run tests
        uses: actions-rs/cargo@v1
        with:
          use-cross: true
          command: test
          args: --release --target ${{ matrix.target }}
  build_test_ios:
    runs-on: macos-latest
    strategy:
      fail-fast: true
      matrix:
        toolchain: [stable]
    steps:
      - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4
      - name: Setup Rust
        uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.toolchain }}
          override: true
      - name: Add target
        run: rustup target add x86_64-apple-ios
      - name: Cache cargo install
        uses: actions/cache@v3
        with:
          path: ~/.cargo/bin/
          key: ${{ runner.os }}-${{ matrix.toolchain }}-${{ github.ref }}-cargo-install-${{ hashFiles('**/Cargo.lock') }}
      - name: Install cargo-dinghy
        run: |
          if ! command -v cargo-dinghy &> /dev/null
          then
            cargo install cargo-dinghy
          fi
      - name: Start iPhone simulator
        run: xcrun simctl boot "iPhone 14"
      - name: List simulators
        run: xcrun simctl list
      - name: Build and run tests
        run: cargo dinghy -d iphone test
  release:
    name: Release
    runs-on: ubuntu-latest
    needs: [build_test_common_os, build_test_android, build_test_ios]
    if: github.ref == 'refs/heads/main'
    permissions:
      contents: write
      packages: write
    steps:
      - name: Checkout code
        uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4
        with:
          ref: main

      - name: install npm
        uses: actions/setup-node@v4
        with:
          node-version: '16'

      - name: install @semantic-release/exec
        run: npm install @semantic-release/exec

      - name: Semantic Release
        uses: cycjimmy/semantic-release-action@v3
        with:
          branch: main
        env:
          GITHUB_TOKEN: ${{ secrets.PAT_GLOBAL }}
          CARGO_TOKEN: ${{ secrets.CARGO_TOKEN }}