# forked from https://github.com/vacp2p/zerokit
name: Nightly build
on:
  schedule:
    - cron: "0 0 * * *"
  workflow_dispatch:

jobs:
  linux:
    strategy:
      matrix:
        curve:
          - bn254
          - bls12_381
          - bls12_377
          - secp256k1
          - secp256r1
          - pallas
          - vesta
          - bw6_761
          - baby_jub_jub
          - all
        target:
          - x86_64-unknown-linux-gnu
          - aarch64-unknown-linux-gnu
          - i686-unknown-linux-gnu
    name: Linux build
    runs-on: ubuntu-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@v4
      - name: Install stable toolchain
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          override: true
          target: ${{ matrix.target }}
      - uses: Swatinem/rust-cache@v2
      - name: Install dependencies
        run: make deps
      - name: cross build
        working-directory: ./sdk
        run: |
          cross build --release --target ${{ matrix.target }} --features ${{ matrix.curve }}
          mkdir release
          cp ../target/${{ matrix.target }}/release/*.a release/
          tar -czvf ${{ matrix.target }}-${{matrix.curve}}.tar.gz release/

      - name: Upload archive artifact
        uses: actions/upload-artifact@v4
        with:
          name: ${{ matrix.target }}-${{ matrix.curve }}-archive
          path: ./sdk/${{ matrix.target }}-${{matrix.curve}}.tar.gz
          retention-days: 2

  macos:
    name: MacOS build
    runs-on: macos-latest
    strategy:
      matrix:
        curve:
          - bn254
          - bls12_381
          - bls12_377
          - secp256k1
          - secp256r1
          - pallas
          - vesta
          - bw6_761
          - baby_jub_jub
          - all
        target:
          - x86_64-apple-darwin
          - aarch64-apple-darwin
    steps:
      - name: Checkout sources
        uses: actions/checkout@v4
      - name: Install stable toolchain
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          override: true
          target: ${{ matrix.target }}
      - uses: Swatinem/rust-cache@v2
      - name: Install dependencies
        run: make deps
      - name: cross build
        working-directory: ./sdk
        run: |
          cross build --release --target ${{ matrix.target }} --features ${{ matrix.curve }}
          mkdir release
          cp ../target/${{ matrix.target }}/release/*.a release/
          tar -czvf ${{ matrix.target }}-${{ matrix.curve }}.tar.gz release/

      - name: Upload archive artifact
        uses: actions/upload-artifact@v4
        with:
          name: ${{ matrix.target }}-${{ matrix.curve }}-archive
          path: ./sdk/${{ matrix.target }}-${{ matrix.curve }}.tar.gz
          retention-days: 2
 
  prepare-prerelease:
    name: Prepare pre-release
    needs: [linux, macos]
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          ref: master
      - name: Download artifacts
        uses: actions/download-artifact@v4
        with:
          pattern: |
            *-archive
          path: ./libs
          merge-multiple: true

      - name: Delete tag
        run: gh release delete nightly --cleanup-tag
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Create prerelease
        run: |
          ls -Rlah ./libs
          gh release create nightly --prerelease --target master \
            --title 'Nightly build ("master" branch)' \
            --generate-notes \
            --draft=false \
            ./libs/*.tar.gz
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Delete artifacts
        uses: geekyeggo/delete-artifact@v1
        with:
          failOnError: false
          name: |
            *-archive
