name: Draft New Release with Distributables
on:
workflow_dispatch:
push:
tags:
- 'v*'
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