on:
push:
tags:
- 'v*'
name: Release
jobs:
test:
name: Test Suite
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ ubuntu-latest, macos-latest, windows-latest ]
steps:
- uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
- uses: actions-rs/cargo@v1
with:
command: test
release:
name: Create Release
needs: test
runs-on: ubuntu-latest
outputs:
upload_url: ${{ steps.create_release.outputs.upload_url }}
steps:
- name: Checkout code
uses: actions/checkout@v3
- 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 }}
build:
name: Build Binaries
needs: release
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ ubuntu-latest, macos-latest, windows-latest ]
steps:
- uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
- uses: actions-rs/cargo@v1
with:
command: build
args: --release
- name: Set Asset Names
id: vars
run: |
triple=$(rustup show active-toolchain | awk '{print $1}')
echo "::set-output name=windows_asset::git-together-${GITHUB_REF#refs/*/}-${triple}.zip"
echo "::set-output name=non_windows_asset::git-together-${GITHUB_REF#refs/*/}-${triple}.tar.gz"
shell: bash
- name: Create Windows Asset
if: matrix.os == 'windows-latest'
run: |
$SRC_DIR = $pwd.Path
$STAGE = [System.Guid]::NewGuid().ToString()
Set-Location $env:TEMP
New-Item -Type Directory -Name $STAGE
Set-Location $STAGE
$ZIP = "$SRC_DIR\${{ steps.vars.outputs.windows_asset }}"
Copy-Item "$SRC_DIR\target\release\git-together.exe" '.\'
7z a "$ZIP" *
Remove-Item *.* -Force
Set-Location ..
Remove-Item $STAGE
Set-Location $SRC_DIR
- name: Create Non-Windows Asset
if: matrix.os != 'windows-latest'
run: |
tar -zvc git-together > ${{ github.workspace }}/${{ steps.vars.outputs.non_windows_asset }}
working-directory: target/release
- name: Upload Windows Release Asset
if: matrix.os == 'windows-latest'
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.release.outputs.upload_url }}
asset_path: ./${{ steps.vars.outputs.windows_asset }}
asset_name: ${{ steps.vars.outputs.windows_asset }}
asset_content_type: application/zip
- name: Upload Non-Windows Release Asset
if: matrix.os != 'windows-latest'
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.release.outputs.upload_url }}
asset_path: ./${{ steps.vars.outputs.non_windows_asset }}
asset_name: ${{ steps.vars.outputs.non_windows_asset }}
asset_content_type: application/gzip