Skip to content

Release

Release #21

Workflow file for this run

name: "Release"
on:
workflow_dispatch:
push:
tags:
- "v*"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
AWS_LC_SYS_PREBUILT_NASM: "1"
jobs:
release_build_and_publish:
name: Release build and publish
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- rust-target: x86_64-unknown-linux-gnu
os: ubuntu-22.04
flutter-platform: linux
platform-name: linux-x86_64
- rust-target: aarch64-unknown-linux-gnu
os: ubuntu-22.04
cross: true
platform-name: linux-aarch64
- rust-target: universal-apple-darwin
os: macos-latest
flutter-platform: macos
platform-name: macos-universal
- rust-target: x86_64-pc-windows-msvc
os: windows-latest
flutter-platform: windows
platform-name: windows-x86_64
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: '3.32.6'
channel: 'stable'
cache: true
- name: Install Linux dependencies
if: matrix.os == 'ubuntu-22.04'
run: |
sudo apt-get update
sudo apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev
- name: Install Windows dependencies (NASM)
if: matrix.os == 'windows-latest'
run: |
choco install nasm
echo "C:\Program Files\NASM" >> $GITHUB_PATH
shell: powershell
- name: Install Rust
shell: bash
run: |
rustup update stable --no-self-update && rustup default stable
if [ "${{ matrix.rust-target }}" = "universal-apple-darwin" ]; then
rustup target add x86_64-apple-darwin aarch64-apple-darwin
elif [ "${{ matrix.rust-target }}" != "universal-apple-darwin" ]; then
rustup target add ${{ matrix.rust-target }}
fi
- name: Build Rust CLI (macOS Universal)
if: matrix.rust-target == 'universal-apple-darwin'
run: |
cargo build --release --target x86_64-apple-darwin
cargo build --release --target aarch64-apple-darwin
lipo -create -output target/fungi target/x86_64-apple-darwin/release/fungi target/aarch64-apple-darwin/release/fungi
mkdir -p target/universal-apple-darwin/release
mv target/fungi target/universal-apple-darwin/release/
- name: Build Rust CLI (Other platforms)
run: cargo build --release --target ${{ matrix.rust-target }}
if: ${{ ! matrix.cross && matrix.rust-target != 'universal-apple-darwin' }}
- name: Copy DLL to release directory for flutter_app\rust_builder\windows\CMakeLists.txt
if: matrix.os == 'windows-latest'
shell: bash
run: |
mkdir -p target/release
cp -f target/x86_64-pc-windows-msvc/release/rust_lib_fungi_app.dll target/release/ || true
- name: Install cross for ARM64
run: cargo install cross
if: ${{ matrix.cross }}
- name: Build Rust CLI (ARM64 cross compile)
run: cross build --release --target ${{ matrix.rust-target }}
if: ${{ matrix.cross }}
- name: Archive Rust CLI (.exe)
if: matrix.os == 'windows-latest'
shell: bash
run: |
ls -la target/${{ matrix.rust-target }}/release/
tar -czf fungi-cli-${{ matrix.platform-name }}.tar.gz -C target/${{ matrix.rust-target }}/release fungi.exe
- name: Archive Rust CLI
if: matrix.os != 'windows-latest'
shell: bash
run: |
ls -la target/${{ matrix.rust-target }}/release/
tar -czf fungi-cli-${{ matrix.platform-name }}.tar.gz -C target/${{ matrix.rust-target }}/release fungi
- name: Flutter dependencies
if: matrix.flutter-platform
run: flutter pub get
working-directory: ./flutter_app
- name: Build Flutter Linux
if: matrix.flutter-platform == 'linux' && !matrix.cross
working-directory: ./flutter_app
run: |
flutter config --enable-linux-desktop
flutter build linux --release
ls -la build/linux/x64/release/bundle/
tar -czf ../fungi-app-${{ matrix.platform-name }}.tar.gz -C build/linux/x64/release/bundle .
- name: Build Flutter macOS
if: matrix.flutter-platform == 'macos'
working-directory: ./flutter_app
run: |
flutter config --enable-macos-desktop
flutter build macos --release
ls -la build/macos/Build/Products/Release/
tar -czf ../fungi-app-${{ matrix.platform-name }}.tar.gz -C build/macos/Build/Products/Release "Fungi App.app"
- name: Build Flutter Windows
if: matrix.flutter-platform == 'windows'
working-directory: ./flutter_app
shell: bash
run: |
flutter config --enable-windows-desktop
flutter build windows --release
ls -la build/windows/x64/runner/Release/
cd build/windows/x64/runner/Release
tar -czf ../../../../../../fungi-app-${{ matrix.platform-name }}.tar.gz .
- name: Update nightly release
if: github.event_name == 'workflow_dispatch' && matrix.platform-name == 'linux-x86_64'
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release edit nightly --title "Nightly Build" --notes "Latest development build from commit ${{ github.sha }} ($(date))"
- name: GH publish
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
RELEASE_TAG="nightly"
else
RELEASE_TAG="${{ github.ref_name }}"
fi
gh release upload -R ${{ github.repository }} --clobber $RELEASE_TAG fungi-cli-${{ matrix.platform-name }}.tar.gz
if [ -f fungi-app-${{ matrix.platform-name }}.tar.gz ]; then
gh release upload -R ${{ github.repository }} --clobber $RELEASE_TAG fungi-app-${{ matrix.platform-name }}.tar.gz
fi