emulsion 5.0.0

A fast and minimalistic image viewer
name: Draft New Release with Distributables

on:
  workflow_dispatch:
  push:
    # Sequence of patterns matched against refs/tags
    tags:
    - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10

jobs:
  create_release:
    runs-on: ubuntu-latest
    outputs:
      upload_url: ${{ steps.create_release.outputs.upload_url }}
      version: ${{ steps.get_version.outputs.VERSION }}
    steps:
    - name: Get the version
      id: get_version
      run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
    - name: Create Release
      id: create_release
      uses: actions/create-release@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        tag_name: ${{ github.ref }}
        release_name: Release ${{ github.ref }}
        draft: true
        prerelease: false

  windows:
    needs: create_release
    runs-on: windows-latest
    env:
      INSTALLER_NAME: ${{ format('Emulsion-Windows-{0}.exe', needs.create_release.outputs.version) }}
    steps:
    - name: Print installer name
      run: |

        Write-Host $Env:INSTALLER_NAME
    - name: Install NSIS
      run: |

        Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')
        scoop bucket add extras
        scoop install nsis
    - name: Print NSIS version
      run: makensis -VERSION
    - name: Checkout code
      uses: actions/checkout@v2
    - name: Fetch Prerequisites
      working-directory: ./distribution/windows/prerequisites
      run: (New-Object System.Net.WebClient).DownloadFile('https://aka.ms/vs/16/release/vc_redist.x64.exe', 'vc_redist.x64.exe')
    - name: Install avif build dependencies (Windows)
      run: |

        choco install -y ninja
        pip install meson
        $NASM_VERSION="2.15.02"
        $LINK="https://www.nasm.us/pub/nasm/releasebuilds/$NASM_VERSION/win64"
        curl -LO "$LINK/nasm-$NASM_VERSION-win64.zip"
        7z e -y "nasm-$NASM_VERSION-win64.zip" -o"C:\nasm"
        echo "::add-path::C:\nasm"
    - name: Build executable
      shell: cmd
      run: |

        call "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
        cargo build --release --features=networking,avif
    - name: Copy executable to distributable folder
      working-directory: ./distribution/windows/
      shell: cmd
      run: |

        mkdir program
        copy /y ..\..\target\release\emulsion.exe program\emulsion.exe
    - name: Create installer
      working-directory: ./distribution/windows/
      run: |

        makensis emulsion.nsi
    - name: Upload Release Asset
      id: upload-release-asset 
      uses: actions/upload-release-asset@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        upload_url: ${{ needs.create_release.outputs.upload_url }} 
        asset_path: ./distribution/windows/Emulsion-Installer.exe
        asset_name: ${{ env.INSTALLER_NAME }}
        asset_content_type: application/octet-stream

  osx:
    needs: create_release
    runs-on: macos-latest
    env:
      INSTALLER_NAME: ${{ format('Emulsion-OSX-{0}.dmg', needs.create_release.outputs.version) }}
    steps:
    - name: Checkout code
      uses: actions/checkout@v2
    - name: Install cargo bundle
      run: cargo install cargo-bundle
    - name: Install avif build dependencies (macOS)
      run: |

        brew install ninja nasm meson
    - name: Create osx app
      run: cargo bundle --release --features=avif
    - name: Install create-dmg
      run: npm install --global create-dmg
    - name: Create .dmg file
      run: ./distribution/macos/create_dmg.sh
    - name: Rename .dmg
      run: mv Emulsion*.dmg Emulsion.dmg
    - name: Upload Release Asset
      id: upload-release-asset
      uses: actions/upload-release-asset@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        upload_url: ${{ needs.create_release.outputs.upload_url }}
        asset_path: Emulsion.dmg
        asset_name: ${{ env.INSTALLER_NAME }}
        asset_content_type: application/octet-stream

  linux:
    needs: create_release
    runs-on: ubuntu-20.04
    env:
      INSTALLER_NAME: ${{ format('Emulsion-Linux.deb-{0}.deb', needs.create_release.outputs.version) }}
    steps:
    - name: Checkout code
      uses: actions/checkout@v2
    - name: Install cargo bundle
      run: cargo install cargo-bundle
    - name: Install avif build dependencies (linux)
      run: |

        DEBIAN_FRONTEND=noninteractive sudo apt-get update
        DEBIAN_FRONTEND=noninteractive sudo apt-get install -y ninja-build nasm meson
    - name: Create deb package
      run: cargo bundle --release --features=avif
    - name: Rename .deb
      run: mv target/release/bundle/deb/*.deb Emulsion.deb
    - name: Upload Release Asset
      id: upload-release-asset
      uses: actions/upload-release-asset@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        upload_url: ${{ needs.create_release.outputs.upload_url }}
        asset_path: Emulsion.deb
        asset_name: ${{ env.INSTALLER_NAME }}
        asset_content_type: application/octet-stream