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: Release ${{ github.ref }}
draft: false
prerelease: true
- name: Output 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: [ubuntu-latest, macos-latest, windows-latest]
engine: [wasm3, wasmtime]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v1
- name: Get the version
id: get_version
shell: bash
run: echo ::set-output name=VERSION::${GITHUB_REF#refs/tags/}
- name: Load Release URL File from release job
uses: actions/download-artifact@v1
with:
name: release_url
- name: Install clang on Windows
if: ${{ startsWith(matrix.os, 'windows') }}
run: |
curl -fsSL -o LLVM9.exe https://releases.llvm.org/9.0.0/LLVM-9.0.0-win64.exe
7z x LLVM9.exe -y -o"C:/Program Files/LLVM"
- name: Create release Build
run: cargo build --features "bin manifest lattice ${{ matrix.engine }}" --release
- name: Install 7Zip PowerShell Module (win)
if: ${{ startsWith(matrix.os, 'windows') }}
shell: powershell
run: Install-Module 7Zip4PowerShell -Force -Verbose
- name: Create Release Zip (windows)
if: ${{ startsWith(matrix.os, 'windows') }}
run: powershell Compress-7Zip "target\release\wascc-host.exe" -ArchiveFileName "wascchost-${{matrix.os}}.zip" -Format Zip
- name: Create Release Zip (ubuntu)
if: ${{ startsWith(matrix.os, 'ubuntu') }}
run: zip -j wascchost-${{ matrix.os }}.zip ./target/release/wascc-host
- name: Create Release Zip (mac)
if: ${{ startsWith(matrix.os, 'mac') }}
run: zip -j wascchost-${{ matrix.os }}.zip ./target/release/wascc-host
- name: Get Release File Name & Upload URL
id: get_release_info
shell: bash
run: |
value=`cat release_url/release_url.txt`
echo ::set-output name=upload_url::$value
- name: Set friendly OS label (ubuntu)
if: ${{ startsWith(matrix.os, 'ubuntu') }}
run: echo ::set-env name=OS_LABEL::linux
- name: Set friendly OS label (mac)
if: ${{ startsWith(matrix.os, 'mac') }}
run: echo ::set-env name=OS_LABEL::macos
- name: Set friendly OS label (windows)
shell: bash
if: ${{ startsWith(matrix.os, 'windows') }}
run: echo ::set-env name=OS_LABEL::windows
- name: Upload Release Asset
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.get_release_info.outputs.upload_url }}
asset_path: ./wascchost-${{ matrix.os }}.zip
asset_name: wascchost-${{ steps.get_version.outputs.VERSION }}-${{ env.OS_LABEL }}-${{ matrix.engine }}-x86_64.zip
asset_content_type: application/zip
crates:
needs: publish
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v1
- name: Cargo login
env:
CRATES_TOKEN: ${{ secrets.CRATES_TOKEN }}
run: cargo login ${{ env.CRATES_TOKEN }}
- name: Cargo publish
run: cargo publish --no-verify