ddcp 0.2.4

Distributed decentralized database-to-database copy
name: publish

on:
  push:
    tags:
      - "v*"
      - "prebuild-test.*"

jobs:
  prebuild:
    name: Prebuild for ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - os: ubuntu-latest
            artifact_name: crsqlite.so
            asset_name: crsqlite-linux-x86_64.so
          - os: windows-latest
            artifact_name: crsqlite.dll
            asset_name: crsqlite-windows-x86_64.dll
          - os: macos-latest
            artifact_name: crsqlite.dylib
            asset_name: crsqlite-darwin-x86_64.dylib

    steps:
      - uses: actions/checkout@v3
        with:
          submodules: true

      - name: Load .env file
        uses: xom9ikk/dotenv@v2
        with:
          path: ./

      - name: Windows rust toolchain
        if: runner.os == 'Windows'
        run: |
          rm core/rs/bundle/rust-toolchain.toml
          rustup component add rust-src --toolchain nightly-2023-06-17-x86_64-pc-windows-gnu
          rustup default nightly-2023-06-17-x86_64-pc-windows-gnu

      - name: Build
        run: |
          cd core
          make loadable

      - name: Upload binaries to release
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: core/dist/${{ matrix.artifact_name }}
          asset_name: ${{ matrix.asset_name }}
          tag: ${{ github.ref }}

  # we can probably collapse all these into the prebuild job
  prebuild-macos-arm:
    name: Prebuild for macos arm
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        include:
          - os: macos-latest
            artifact_name: crsqlite.dylib
            asset_name: crsqlite-darwin-aarch64.dylib

    steps:
      - uses: actions/checkout@v3
        with:
          submodules: true

      - name: Rust Nightly
        run: |
          rustup toolchain install nightly-2023-06-17
          rustup target add aarch64-apple-darwin --toolchain nightly-2023-06-17

      - name: Build MacOS Arm dylib
        run: |
          cd core
          export CI_MAYBE_TARGET="aarch64-apple-darwin" && make loadable

      - name: Upload macos dylib to release
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: core/dist/${{ matrix.artifact_name }}
          asset_name: ${{ matrix.asset_name }}
          tag: ${{ github.ref }}

      - name: Build all ios dynamic
        run: |
          cd core
          ./all-ios-loadable.sh

      - name: Upload framework to release
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: core/dist/crsqlite-ios-dylib.xcframework.tar.gz
          asset_name: crsqlite-ios-dylib.xcframework.tar.gz
          tag: ${{ github.ref }}

  prebuild-linux-arm:
    name: Prebuild for linux arm
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        include:
          - os: ubuntu-latest
            artifact_name: crsqlite.so
            asset_name: crsqlite-linux-aarch64.so

    steps:
      - name: Install toolchain
        run: |
          sudo apt update && sudo apt install -y gcc make gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu

      - uses: actions/checkout@v3
        with:
          submodules: true

      - name: Rust Nightly
        run: |
          rustup toolchain install nightly-2023-06-17
          rustup target add aarch64-unknown-linux-gnu --toolchain nightly-2023-06-17

      - name: Build
        run: |
          cd core
          export CI_MAYBE_TARGET="aarch64-unknown-linux-gnu" && export CI_GCC="aarch64-linux-gnu-gcc" && make loadable

      - name: Upload binaries to release
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: core/dist/${{ matrix.artifact_name }}
          asset_name: ${{ matrix.asset_name }}
          tag: ${{ github.ref }}

  prebuild-android:
    name: Prebuild for android
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        include:
          - os: ubuntu-latest
            artifact_name: crsqlite.so
            asset_name: crsqlite-aarch64-linux-android.so

    steps:
      - uses: actions/checkout@v3
        with:
          submodules: true

      - name: Rust Nightly
        run: |
          rustup toolchain install nightly-2023-06-17
          rustup target add aarch64-linux-android --toolchain nightly-2023-06-17

      - uses: nttld/setup-ndk@v1
        id: setup-ndk
        with:
          ndk-version: r25c
          local-cache: true
          add-to-path: false

      - name: Cargo NDK
        run: cargo install cargo-ndk

      - name: Build
        env:
          ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
        run: |
          cd core
          export ANDROID_TARGET=aarch64-linux-android; make loadable

      - name: Upload binaries to release
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: core/dist/${{ matrix.artifact_name }}
          asset_name: ${{ matrix.asset_name }}
          tag: ${{ github.ref }}