name: Release
on:
push:
tags:
- "v*"
permissions:
contents: write
jobs:
create-release:
name: Create Release
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Create Release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release create ${{ github.ref_name }} \
--title "${{ github.ref_name }}" \
--generate-notes \
--verify-tag || echo "Release might already exist"
build-release-assets:
name: Build Release Assets
needs: create-release
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
godot_artifact: libpraeda_godot.so
godot_asset: libpraeda_godot.so
core_artifact: libpraeda.so
cpp_asset: praeda-cpp-linux-x86_64.zip
csharp_asset: praeda-csharp-linux-x86_64.zip
- os: windows-latest
target: x86_64-pc-windows-msvc
godot_artifact: praeda_godot.dll
godot_asset: praeda_godot.dll
core_artifact: praeda.dll
cpp_asset: praeda-cpp-windows-x86_64.zip
csharp_asset: praeda-csharp-windows-x86_64.zip
- os: macos-latest
target: aarch64-apple-darwin
godot_artifact: libpraeda_godot.dylib
godot_asset: libpraeda_godot.dylib
core_artifact: libpraeda.dylib
cpp_asset: praeda-cpp-macos-arm64.zip
csharp_asset: praeda-csharp-macos-arm64.zip
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Build Godot Bindings
run: cargo build --release -p praeda-godot --target ${{ matrix.target }}
- name: Build Core Library
run: cargo build --release -p praeda --target ${{ matrix.target }}
- name: Prepare Godot Asset
shell: bash
run: |
cp target/${{ matrix.target }}/release/${{ matrix.godot_artifact }} ${{ matrix.godot_asset }}
- name: Prepare C++ Asset
shell: bash
run: |
mkdir -p cpp_dist/include
mkdir -p cpp_dist/lib
cp include/praeda.hpp cpp_dist/include/
cp target/${{ matrix.target }}/release/${{ matrix.core_artifact }} cpp_dist/lib/
if [ "${{ runner.os }}" == "Windows" ]; then
7z a ${{ matrix.cpp_asset }} ./cpp_dist/*
else
zip -r ${{ matrix.cpp_asset }} cpp_dist
fi
- name: Prepare C# Asset
shell: bash
run: |
mkdir -p csharp_dist/src
mkdir -p csharp_dist/lib
cp examples/csharp/PraedaGenerator.cs csharp_dist/src/
cp target/${{ matrix.target }}/release/${{ matrix.core_artifact }} csharp_dist/lib/
if [ "${{ runner.os }}" == "Windows" ]; then
7z a ${{ matrix.csharp_asset }} ./csharp_dist/*
else
zip -r ${{ matrix.csharp_asset }} csharp_dist
fi
- name: Upload Godot Artifact
uses: actions/upload-artifact@v4
with:
name: godot-lib-${{ matrix.os }}
path: ${{ matrix.godot_asset }}
- name: Upload Release Assets
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
shell: bash
run: |
gh release upload ${{ github.ref_name }} \
${{ matrix.cpp_asset }} \
${{ matrix.csharp_asset }} \
--clobber
package-godot:
name: Package Godot Addon
needs: [create-release, build-release-assets]
runs-on: ubuntu-latest
steps:
- name: Download Linux Lib
uses: actions/download-artifact@v4
with:
name: godot-lib-ubuntu-latest
path: godot_dist/libs
- name: Download Windows Lib
uses: actions/download-artifact@v4
with:
name: godot-lib-windows-latest
path: godot_dist/libs
- name: Download MacOS Lib
uses: actions/download-artifact@v4
with:
name: godot-lib-macos-latest
path: godot_dist/libs
- name: Create gdextension file
run: |
cat <<EOF > godot_dist/praeda.gdextension
[configuration]
entry_symbol = "gdext_rust_init"
compatibility_minimum = "4.2"
[libraries]
linux.debug.x86_64 = "res://libs/libpraeda_godot.so"
linux.release.x86_64 = "res://libs/libpraeda_godot.so"
windows.debug.x86_64 = "res://libs/praeda_godot.dll"
windows.release.x86_64 = "res://libs/praeda_godot.dll"
macos.debug = "res://libs/libpraeda_godot.dylib"
macos.release = "res://libs/libpraeda_godot.dylib"
EOF
- name: Zip Godot Addon
run: |
cd godot_dist
zip -r ../praeda-godot-addon.zip .
- name: Upload Godot Addon
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release upload ${{ github.ref_name }} praeda-godot-addon.zip --clobber -R ${{ github.repository }}