---
on:
  push:
    branches:
      - release-v*
      - trying
      - staging
    tags:
      - 'v[0-9]+.[0-9]+.[0-9]+' # this only concerns tags on stable

name: Test binaries with cargo test

jobs:
  check:
    name: Test on ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest]
    steps:
    - uses: actions/checkout@v1
    - uses: actions-rs/toolchain@v1
      with:
        profile: minimal
        toolchain: stable
        override: true
        components: clippy
    - name: Run cargo test
      uses: actions-rs/cargo@v1
      with:
        command: test
        args: --locked --release
    - name: Run cargo test dump
      uses: actions-rs/cargo@v1
      with:
        command: test
        args: dump --locked --release -- --ignored --test-threads 1
    - name: Run cargo clippy
      uses: actions-rs/cargo@v1
      with:
        command: clippy

  build-image:
    name: Test the build of Docker image
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1
    - run: docker build . --file Dockerfile -t meilisearch
      name: Docker build

  ## A push occurred on a release branch, a prerelease is created and assets are generated
  prerelease:
    name: create prerelease
    needs: [check, build-image]
    if: ${{ contains(github.ref, 'release-') && github.event_name == 'push' }}
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - name: Get version number
        id: version-number
        run: echo "##[set-output name=number;]$(echo ${{ github.ref }} | sed 's/.*\(v.*\)/\1/')"
      - name: Get commit count
        id: commit-count
        run: echo "##[set-output name=count;]$(git rev-list remotes/origin/master..remotes/origin/release-${{ steps.version-number.outputs.number }} --count)"
      - name: Create Release
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.PUBLISH_TOKEN }} # Personal Access Token
        with:
          tag_name: ${{ steps.version-number.outputs.number }}rc${{ steps.commit-count.outputs.count }}
          release_name: Pre-release ${{ steps.version-number.outputs.number }}-rc${{ steps.commit-count.outputs.count }}
          prerelease: true

  ## If a tag is pushed, a release is created for this tag, and assets will be generated
  release:
    name: create release
    needs: [check, build-image]
    if:  ${{ contains(github.ref, 'tags/v') }}
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Get version number
        id: version-number
        run: echo "##[set-output name=number;]$(echo ${{ github.ref }} | sed 's/.*\(v.*\)/\1/')" 
      - name: Create Release
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.PUBLISH_TOKEN }} # PAT
        with:
          tag_name: ${{ steps.version-number.outputs.number }}
          release_name: Meilisearch ${{ steps.version-number.outputs.number }}
          prerelease: false