Skip to content

Unity Engine Integration - Fixes #231 #1

Unity Engine Integration - Fixes #231

Unity Engine Integration - Fixes #231 #1

Workflow file for this run

name: BitMono.Build
on:
create:
tags:
- "*"
push:
branches: [ main ]
paths:
- '.github/workflows/BitMono.Build.yaml'
- 'props/SharedPackages.props'
- 'props/SharedProjectProps.props'
- 'props/SharedTestProps.props'
- 'src/**'
- 'test/**'
pull_request:
paths:
- '.github/workflows/BitMono.Build.yaml'
- 'props/SharedPackages.props'
- 'props/SharedProjectProps.props'
- 'props/SharedTestProps.props'
- 'src/**'
- 'test/**'
jobs:
Build:
runs-on: ubuntu-latest
strategy:
matrix:
target-framework: [net9.0, net8.0, net7.0, net6.0, net462, netstandard2.1, netstandard2.0]
runtime: [linux-x64, win-x64, linux-arm64, win-arm64, osx-x64, osx-arm64, win-x86]
exclude:
# Exclude win-x86 builds for .NET Standard as they're architecture-independent
- runtime: win-x86
target-framework: netstandard2.0
- runtime: win-x86
target-framework: netstandard2.1
outputs:
version: ${{ steps.project-build.outputs.version }}
is_prerelease: ${{ steps.project-build.outputs.is_prerelease }}
steps:
- name: Checkout code
uses: actions/checkout@v5
with:
fetch-depth: 0
- name: Setup .NET
uses: actions/setup-dotnet@v5
env:
# Disable the .NET logo in the console output.
DOTNET_NOLOGO: true
# Disable the .NET first time experience to skip caching NuGet packages and speed up the build.
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
# Disable sending .NET CLI telemetry to Microsoft.
DOTNET_CLI_TELEMETRY_OPTOUT: true
DOTNET_INSTALL_DIR: ${{ github.workspace }}/.dotnet
with:
dotnet-version: 9.x
- name: Build Project
uses: ./.github/actions/project-build
id: project-build
with:
project_path: src/BitMono.CLI/BitMono.CLI.csproj
nuget_push: false
target_framework: ${{ matrix.target-framework }}
runtime_version: ${{ matrix.runtime }}
github_token: ${{ secrets.PAT }}
- name: Install zip (for Linux/macOS)
run: |
if [[ "${{ matrix.runtime }}" =~ ^linux ]]; then
sudo apt-get install -y zip
elif [[ "${{ matrix.runtime }}" =~ ^osx ]]; then
if ! command -v zip &> /dev/null; then
echo "zip is not available on this macOS runner, and it should be pre-installed."
exit 1
fi
fi
- name: Zip artifacts
run: |
cd ./src/BitMono.CLI/bin/Release/${{ matrix.target-framework }}/${{ matrix.runtime }} && \
zip -qq -r ./BitMono-v${{ steps.project-build.outputs.version }}-CLI-${{ matrix.target-framework }}-${{ matrix.runtime }}.zip *
- name: Upload build
uses: actions/upload-artifact@v4
with:
name: BitMono-v${{ steps.project-build.outputs.version }}-CLI-${{ matrix.target-framework }}-${{ matrix.runtime }}
path: "./src/BitMono.CLI/bin/Release/${{ matrix.target-framework }}/${{ matrix.runtime }}/BitMono-v${{ steps.project-build.outputs.version }}-CLI-${{ matrix.target-framework }}-${{ matrix.runtime }}.zip"
if-no-files-found: error
UnityPackage:
if: github.event_name == 'create' && github.event.ref_type == 'tag'
needs: Build
runs-on: windows-latest
strategy:
matrix:
unity-version: [
2019.4.40f1,
2020.3.48f1,
2021.3.45f1,
2022.3.50f1,
6.0.0f1,
6.1.0f1,
6.2.0f1
]
steps:
- name: Checkout code
uses: actions/checkout@v5
with:
fetch-depth: 0
- name: Setup .NET
uses: actions/setup-dotnet@v5
env:
DOTNET_NOLOGO: true
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
DOTNET_CLI_TELEMETRY_OPTOUT: true
with:
dotnet-version: 9.x
- name: Build BitMono.CLI for Unity Package
uses: ./.github/actions/project-build
id: cli-build
with:
project_path: src/BitMono.CLI/BitMono.CLI.csproj
nuget_push: false
target_framework: net462
runtime_version: win-x64
github_token: ${{ secrets.PAT }}
- name: Create Unity Package Directory
run: |
mkdir unity-package-temp
mkdir unity-package-temp\Editor
- name: Copy Unity Package Files
run: |
copy "src\BitMono.Unity\Editor\*.cs" ".\unity-package-temp\Editor\"
copy "src\BitMono.Unity\Editor\*.asmdef" ".\unity-package-temp\Editor\" 2>nul || echo "No .asmdef files found"
copy "src\BitMono.Unity\package.json" ".\unity-package-temp\"
copy "src\BitMono.Unity\BitMonoConfig.asset" ".\unity-package-temp\" 2>nul || echo "No BitMonoConfig.asset found"
copy "src\BitMono.Unity\BitMonoConfig.asset.meta" ".\unity-package-temp\" 2>nul || echo "No BitMonoConfig.asset.meta found"
mkdir ".\unity-package-temp\BitMono.CLI" 2>nul || echo "Directory already exists"
xcopy "src\BitMono.CLI\bin\Release\net462\win-x64\*" ".\unity-package-temp\BitMono.CLI\" /E /I /Y
- name: Update Package Version and Unity Version
run: |
# Extract Unity version from matrix (e.g., 2019.4.40f1 -> 2019.4)
$unityVersion = '${{ matrix.unity-version }}'
$unityShort = $unityVersion -replace '^(\d+\.\d+)\..*', '$1'
# Update package.json using PowerShell (cross-platform compatible)
$packageJson = Get-Content '.\unity-package-temp\package.json' -Raw | ConvertFrom-Json
$packageJson.version = '${{ needs.Build.outputs.version }}'
$packageJson.unity = $unityShort
$packageJson | ConvertTo-Json -Depth 10 | Set-Content '.\unity-package-temp\package.json'
Write-Host "Updated package.json:"
Write-Host " Version: ${{ needs.Build.outputs.version }}"
Write-Host " Unity: $unityShort"
- name: Test Unity Package Compatibility
run: |
# Test package.json syntax and Unity version compatibility
powershell -Command "
$packageJson = Get-Content '.\unity-package-temp\package.json' -Raw | ConvertFrom-Json
Write-Host 'Testing Unity version compatibility...'
Write-Host 'Package Unity version: ' $packageJson.unity
Write-Host 'Package Unity release: ' $packageJson.unityRelease
Write-Host 'Target Unity version: ${{ matrix.unity-version }}'
"
- name: Create Unity Package Archive
run: |
cd unity-package-temp
powershell -Command "
Compress-Archive -Path * -DestinationPath ..\BitMono-Unity-v${{ needs.Build.outputs.version }}-Unity${{ matrix.unity-version }}.unitypackage -Force
"
cd ..
- name: Upload Unity Package
uses: actions/upload-artifact@v4
with:
name: BitMono-Unity-v${{ needs.Build.outputs.version }}-Unity${{ matrix.unity-version }}
path: "BitMono-Unity-v${{ needs.Build.outputs.version }}-Unity${{ matrix.unity-version }}.unitypackage"
if-no-files-found: error
Release:
if: github.event_name == 'create' && github.event.ref_type == 'tag'
needs: [Build, UnityPackage]
runs-on: ubuntu-latest
steps:
- name: Download all artifacts
uses: actions/download-artifact@v5
with:
path: ./artifacts
- name: List downloaded artifacts
run: |
echo "Downloaded artifacts:"
find ./artifacts -type f -name "*.zip" -o -name "*.unitypackage"
echo ""
echo "Unity packages by version:"
find ./artifacts -name "*Unity*.unitypackage" | sort
- name: Create Release
uses: ncipollo/release-action@v1
with:
name: BitMono Release v${{ needs.Build.outputs.version }}
tag: ${{ needs.Build.outputs.version }}
artifacts: "./artifacts/**/*.zip,./artifacts/**/*.unitypackage"
token: ${{ secrets.PAT }}
prerelease: ${{ needs.Build.outputs.is_prerelease }}
allowUpdates: true
draft: true