Skip to content
This repository has been archived by the owner on Jan 29, 2025. It is now read-only.

update workflow file to fix windows symlink executable bug #148

update workflow file to fix windows symlink executable bug

update workflow file to fix windows symlink executable bug #148

Workflow file for this run

name: Build Launcher
on:
pull_request:
branches:
- "master"
push:
branches:
- "starters"
workflow_dispatch:
jobs:
build-extension:
name: Build GDExtension
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- build: macos
os: macos-latest
target: aarch64-apple-darwin
lib_name: libcusf_launcher_crypto.dylib
- build: windows
os: windows-latest
target: x86_64-pc-windows-msvc
lib_name: cusf_launcher_crypto.dll
- build: linux
os: ubuntu-latest
target: x86_64-unknown-linux-gnu
lib_name: libcusf_launcher_crypto.so
outputs:
extension_path: ${{ steps.save-path.outputs.path }}
steps:
- uses: actions/checkout@v3
- name: Setup Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Install Linux dependencies
if: matrix.build == 'linux'
run: |
sudo apt-get update
sudo apt-get install -y build-essential pkg-config libssl-dev
- name: Install Windows build tools
if: matrix.build == 'windows'
uses: ilammy/msvc-dev-cmd@v1
- name: Create extension directory
shell: bash
run: mkdir -p cusf_launcher/addons/cusf_launcher_crypto/bin
- name: Build GDExtension library (Windows)
if: matrix.build == 'windows'
shell: cmd
run: |
cd cusf_launcher_crypto
set PATH=%PATH:C:\Program Files\Git\usr\bin;=%
set PATH=%PATH:C:\Program Files\Git\bin;=%
cargo build --release --target ${{ matrix.target }}
copy "target\${{ matrix.target }}\release\${{ matrix.lib_name }}" "..\cusf_launcher\addons\cusf_launcher_crypto\bin\"
- name: Build GDExtension library (Unix)
if: matrix.build != 'windows'
shell: bash
run: |
cd cusf_launcher_crypto
cargo build --release --target ${{ matrix.target }}
cp target/${{ matrix.target }}/release/${{ matrix.lib_name }} ../cusf_launcher/addons/cusf_launcher_crypto/bin/
- name: Set permissions (Unix)
if: matrix.build != 'windows'
shell: bash
run: chmod +x cusf_launcher/addons/cusf_launcher_crypto/bin/*
- name: Verify extension exists
shell: bash
run: |
ls -la cusf_launcher/addons/cusf_launcher_crypto/bin/
test -f cusf_launcher/addons/cusf_launcher_crypto/bin/${{ matrix.lib_name }}
- name: Cache GDExtension
uses: actions/cache@v3
with:
path: cusf_launcher/addons/cusf_launcher_crypto/bin
key: gdextension-${{ matrix.build }}-${{ github.sha }}
build-godot:
name: Build Godot Project
needs: build-extension
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- build: linux
os: ubuntu-latest
target-bin: 'cusf_launcher.x86_64'
- build: macos
os: macos-latest
target-bin: 'cusf_launcher.dmg'
- build: windows
os: windows-latest
target-bin: 'cusf_launcher.exe'
steps:
- uses: actions/checkout@v3
- uses: chickensoft-games/setup-godot@v1
with:
version: 4.3.0
use-dotnet: false
include-templates: true
- name: Restore GDExtension
uses: actions/cache@v3
with:
path: cusf_launcher/addons/cusf_launcher_crypto/bin
key: gdextension-${{ matrix.build }}-${{ github.sha }}
# --- Separate "Verify Setup" steps ---
- name: Verify Setup (macOS/Linux)
if: matrix.build != 'windows'
run: godot --version
- name: Verify Setup (Windows)
if: matrix.build == 'windows'
shell: pwsh
run: |
& "C:\Users\runneradmin\godot\Godot_v4.3-stable_win64.exe" --version
- name: Import certificate to Keychain
if: ${{ matrix.build == 'macos' }}
run: |
echo "${{ secrets.MACOS_CERTIFICATE }}" | base64 --decode > certificate.p12
KEYCHAIN_PASSWORD=$(uuidgen)
security create-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
security default-keychain -s build.keychain
security unlock-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
security import ./certificate.p12 -k ~/Library/Keychains/build.keychain -P ${{ secrets.MACOS_CERTIFICATE_PASSWORD }} -T /usr/bin/codesign
security set-key-partition-list -S apple-tool:,apple: -s -k "$KEYCHAIN_PASSWORD" ~/Library/Keychains/build.keychain
env:
MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }}
- name: Setup notarization credentials
if: ${{ matrix.build == 'macos' }}
working-directory: cusf_launcher
run: |
echo ${{ secrets.GODOT_MACOS_NOTARIZATION_API_KEY }} | base64 --decode > notarization_api_key.p8
# --- Separate "Initialize godot cache" steps ---
- name: Initialize godot cache (Windows)
if: matrix.build == 'windows'
shell: pwsh
run: |
python3 .github/scripts/godot_ci_cache.py --godot "C:\Users\runneradmin\godot\Godot_v4.3-stable_win64.exe"
- name: Initialize godot cache (Unix)
if: matrix.build != 'windows'
shell: bash
run: |
python3 .github/scripts/godot_ci_cache.py # calls `godot` symlink just fine on Unix
- name: Debug extension location
shell: bash
run: |
echo "Extension directory contents:"
ls -la cusf_launcher/addons/cusf_launcher_crypto/bin/
if [ "${{ matrix.build }}" = "linux" ]; then
echo "Extension file permissions:"
stat cusf_launcher/addons/cusf_launcher_crypto/bin/libcusf_launcher_crypto.so
fi
# --- Separate "Export build" steps ---
- name: Export build (Windows)
if: matrix.build == 'windows'
shell: bash
run: |
# Because we can't call "godot" on Windows (no rename), we use the real .exe
name="${{fromJSON('{"windows": "Windows", "macos": "Mac", "linux": "Linux"}')[matrix.build] }}"
"C:/Users/runneradmin/godot/Godot_v4.3-stable_win64.exe" \
--path "./cusf_launcher/" --headless \
--export-release "$name" "${{ matrix.target-bin }}" \
--verbose 2>&1 | tee build.log
- name: Export build (macOS/Linux)
if: matrix.build != 'windows'
shell: bash
run: |
name="${{fromJSON('{"windows": "Windows", "macos": "Mac", "linux": "Linux"}')[matrix.build] }}"
if [ "${{ matrix.build }}" = "macos" ]; then
# Force release any resources that might be in use
killall Finder || true
killall Dock || true
sleep 5
fi
godot --path "./cusf_launcher/" --headless \
--export-release "$name" "${{ matrix.target-bin }}" \
--verbose 2>&1 | tee build.log
- name: Create DMG (macOS)
if: ${{ matrix.build == 'macos' }}
run: |
echo "Contents of cusf_launcher directory:"
ls -la cusf_launcher/
# If Godot didn't produce a DMG automatically, but there's a .app, create the DMG
if [ ! -f "cusf_launcher/cusf_launcher.dmg" ] && [ -d "cusf_launcher/cusf_launcher.app" ]; then
echo "Godot DMG not found but .app exists, creating DMG manually..."
cd cusf_launcher
hdiutil create -fs HFS+ -volname "CUSF Launcher" -srcfolder cusf_launcher.app cusf_launcher.dmg
else
echo "Using Godot-created DMG or no .app found"
fi
- name: Upload build
uses: actions/upload-artifact@v4
with:
name: cusf_launcher_${{ matrix.build }}
if-no-files-found: error
path: |
cusf_launcher/${{ matrix.target-bin }}
cusf_launcher/*.app
cusf_launcher/*.dmg
- name: Wait for notarization to finish
if: ${{ matrix.build == 'macos' }}
run: |
request_id=$(grep 'Notarization request UUID' build.log | rev | cut -d ' ' -f 1 | rev | tr -d '"')
xcrun notarytool wait $request_id \
--issuer ${{ secrets.GODOT_MACOS_NOTARIZATION_API_UUID }} \
--key-id ${{ secrets.GODOT_MACOS_NOTARIZATION_API_KEY_ID }} \
--key ./notarization_api_key.p8