name: release

on:
  push:
    tags:
    - 'v*'

jobs:
  release:
    runs-on: ubuntu-latest

    steps:

    - name: Create release
      id: create_release
      uses: actions/create-release@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        tag_name: ${{ github.ref }}
        release_name: ${{ github.ref }}
        draft: false
        prerelease: false

    - name: Create release url file
      run: echo "${{ steps.create_release.outputs.upload_url }}" > release_url.txt

    - name: Save release url file for publish
      uses: actions/upload-artifact@v1
      with:
        name: release_url
        path: release_url.txt

  publish:
    needs: [release]

    strategy:
      matrix:
        os: [macos-latest, ubuntu-latest, windows-latest]

    runs-on: ${{ matrix.os }}

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

    - uses: conda-incubator/setup-miniconda@v2
      with:
        auto-update-conda: true
        python-version: '3.7'

    - name: Install main
      shell: bash -l {0}
      run: |
        pip install .

    - name: Run pyinstaller
      shell: bash -l {0}
      run: |
        pip install pyinstaller
        pyinstaller labelme.spec

    - name: Load release url file from release job
      uses: actions/download-artifact@v1
      with:
        name: release_url

    - name: Get release file name & upload url
      id: get_release_info
      run: |
        echo "::set-output name=upload_url::$(cat release_url/release_url.txt)"

    - name: Upload release executable on macOS & Linux
      id: upload_release_executable_macos_linux
      uses: actions/upload-release-asset@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        upload_url: ${{ steps.get_release_info.outputs.upload_url }}
        asset_path: ./dist/labelme
        asset_name: labelme-${{ runner.os }}
        asset_content_type: application/octet-stream
      if: runner.os != 'Windows'

    - name: Upload release executable on Windows
      id: upload_release_executable_windows
      uses: actions/upload-release-asset@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        upload_url: ${{ steps.get_release_info.outputs.upload_url }}
        asset_path: ./dist/labelme.exe
        asset_name: Labelme.exe
        asset_content_type: application/octet-stream
      if: runner.os == 'Windows'

    - name: Create dmg for macOS
      run: |
        npm install -g create-dmg
        cd dist
        create-dmg Labelme.app || test -f Labelme\ 0.0.0.dmg
        mv Labelme\ 0.0.0.dmg Labelme.dmg
      if: runner.os == 'macOS'

    - name: Upload release app on macOS
      id: upload_release_app_macos
      uses: actions/upload-release-asset@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        upload_url: ${{ steps.get_release_info.outputs.upload_url }}
        asset_path: ./dist/Labelme.dmg
        asset_name: Labelme.dmg
        asset_content_type: application/octet-stream
      if: runner.os == 'macOS'
