pesde/.github/workflows/release.yaml
2024-03-28 13:58:33 +01:00

120 lines
No EOL
3.4 KiB
YAML

name: Release
on:
push:
tags:
- v*
jobs:
# Better to check first, runners other than ubuntu-latest take up more free minutes
check:
name: Check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check
run: cargo check --all-features --locked
build:
needs: [check]
strategy:
matrix:
include:
- os: ubuntu-latest
host: linux
arch: x86_64
target: x86_64-unknown-linux-gnu
- os: windows-latest
host: windows
arch: x86_64
target: x86_64-pc-windows-msvc
- os: macos-latest
host: macos
arch: x86_64
target: x86_64-apple-darwin
# not included in free minutes
# TODO: find a replacement (can't cross compile for aarch64 on x86_64 due to OpenSSL)
# - os: macos-latest-xlarge
# host: macos
# arch: aarch64
# target: aarch64-apple-darwin
runs-on: ${{ matrix.os }}
name: Build for ${{ matrix.host }}-${{ matrix.arch }}
steps:
- uses: actions/checkout@v4
- name: Set env
shell: bash
run: |
BIN_NAME=pesde
ARCHIVE_NAME=$BIN_NAME-$(echo ${{ github.ref_name }} | cut -c 2-)-${{ matrix.host }}-${{ matrix.arch }}.zip
echo "BIN_NAME=$BIN_NAME" >> $GITHUB_ENV
echo "ARCHIVE_NAME=$ARCHIVE_NAME" >> $GITHUB_ENV
- name: Build
run: cargo build --bins --all-features --release --target ${{ matrix.target }} --locked
- name: Archive
shell: bash
run: |
if [ ${{ matrix.host }} = "windows" ]; then
cp target/${{ matrix.target }}/release/${{ env.BIN_NAME }}.exe ${{ env.BIN_NAME }}.exe
7z a ${{ env.ARCHIVE_NAME }} ${{ env.BIN_NAME }}.exe
else
cp target/${{ matrix.target }}/release/${{ env.BIN_NAME }} ${{ env.BIN_NAME }}
zip -r ${{ env.ARCHIVE_NAME }} ${{ env.BIN_NAME }}
fi
- name: Upload assets
uses: actions/upload-artifact@v4
with:
name: ${{ env.ARCHIVE_NAME }}
path: ${{ env.ARCHIVE_NAME }}
publish:
name: Publish to crates.io
runs-on: ubuntu-latest
needs: [build]
steps:
- uses: actions/checkout@v4
- name: Publish
run: cargo publish --token ${{ secrets.CRATES_IO_TOKEN }} --allow-dirty --locked
create_release:
name: Create Release
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: read
needs: [build, publish]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/download-artifact@v4
with:
path: artifacts
merge-multiple: true
- name: Generate a changelog
uses: orhun/git-cliff-action@v3
id: git-cliff
with:
config: cliff.toml
args: --verbose --current --strip header
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_REPO: ${{ github.repository }}
- name: Create Release
id: create_release
uses: softprops/action-gh-release@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag_name: ${{ github.ref_name }}
name: ${{ github.ref_name }}
body: ${{ steps.git-cliff.outputs.content }}
draft: true
prerelease: false
files: artifacts/*