name: Unreal Engine Build on: workflow_dispatch: push: branches: [ozgur/build] jobs: windows-build: runs-on: windows steps: - name: Checkout repository uses: actions/checkout@v3 with: lfs: true fetch-depth: 0 - name: Setup environment run: | # Set environment variables for Unreal Engine echo "UE_ROOT=E:/Games/UE_5.5" >> $GITHUB_ENV # Create directories for builds if (!(Test-Path "Builds/Windows")) { New-Item -ItemType Directory -Path "Builds/Windows" -Force } if (!(Test-Path "PackagedReleases")) { New-Item -ItemType Directory -Path "PackagedReleases" -Force } - name: Build for Windows run: | # Chmod command doesn't exist in Windows, use PowerShell to run the bash script & 'C:\Program Files\Git\bin\bash.exe' -c "./scripts/win_build.sh" - name: Package Windows build run: | echo "Packaging Windows build..." if [ -d "Builds/Windows" ]; then cd Builds/Windows zip -r ../../PackagedReleases/LuckyRobots-Windows.zip . cd ../.. fi echo "=== Packaged Windows release ===" ls -la PackagedReleases/ - name: Upload Windows Build Artifact uses: actions/upload-artifact@v3 if: success() && hashFiles('PackagedReleases/LuckyRobots-Windows.zip') != '' with: name: LuckyRobots-Windows path: PackagedReleases/LuckyRobots-Windows.zip retention-days: 365 linux-build: runs-on: windows steps: - name: Checkout repository uses: actions/checkout@v3 with: lfs: true fetch-depth: 0 - name: Setup environment run: | # Set environment variables for Unreal Engine echo "UE_ROOT=E:/Games/UE_5.5" >> $GITHUB_ENV # Set environment variables for Linux toolchain (needed for cross-compilation) $env:LINUX_MULTIARCH_ROOT="C:/UnrealToolchains/v23_clang-18.1.0-rockylinux8" echo "LINUX_MULTIARCH_ROOT=${LINUX_MULTIARCH_ROOT}" >> $GITHUB_ENV # Create directories for builds if (!(Test-Path "Builds/Linux")) { New-Item -ItemType Directory -Path "Builds/Linux" -Force } if (!(Test-Path "PackagedReleases")) { New-Item -ItemType Directory -Path "PackagedReleases" -Force } - name: Build for Linux run: | # Chmod command doesn't exist in Windows, use PowerShell to run the bash script & 'C:\Program Files\Git\bin\bash.exe' -c "./scripts/linux_build.sh" - name: Package Linux build run: | echo "Packaging Linux build..." if [ -d "Builds/Linux" ]; then cd Builds/Linux zip -r ../../PackagedReleases/LuckyRobots-Linux.zip . cd ../.. fi echo "=== Packaged Linux release ===" ls -la PackagedReleases/ - name: Upload Linux Build Artifact uses: actions/upload-artifact@v3 if: success() && hashFiles('PackagedReleases/LuckyRobots-Linux.zip') != '' with: name: LuckyRobots-Linux path: PackagedReleases/LuckyRobots-Linux.zip retention-days: 365 macos-build: runs-on: macos steps: - name: Checkout repository uses: actions/checkout@v3 with: lfs: true fetch-depth: 0 - name: Setup environment run: | # Use the correct path where Unreal Engine is installed UE_PATH="/Users/Shared/Epic Games/UE_5.5" if [ ! -d "$UE_PATH" ]; then echo "Error: Unreal Engine is not installed in the expected location" echo "Please ensure Unreal Engine is installed at $UE_PATH" exit 1 fi # Create directories for builds mkdir -p Builds/Mac mkdir -p PackagedReleases echo "Using Unreal Engine 5.5" - name: Build for macOS run: | chmod +x ./scripts/mac_build.sh ./scripts/mac_build.sh - name: Package macOS build run: | echo "Preparing packaged files for release..." # Find the app bundle in the Builds directory APP_PATH=$(find Builds -type d -name "*.app" | head -1) if [ -n "$APP_PATH" ]; then echo "Found app bundle: $APP_PATH" # Get the app name APP_NAME=$(basename "$APP_PATH") # Create zip file of the app bundle (cd $(dirname "$APP_PATH") && zip -r "../../PackagedReleases/LuckyRobots-macOS.zip" "$APP_NAME") echo "Created packaged release: PackagedReleases/LuckyRobots-macOS.zip" else echo "No .app bundle found in Builds directory" # Look for a directory that might be a bundle but not named .app MAIN_BUILD_DIR=$(find Builds -mindepth 1 -maxdepth 1 -type d | head -1) if [ -n "$MAIN_BUILD_DIR" ]; then echo "Found main build directory: $MAIN_BUILD_DIR" DIR_NAME=$(basename "$MAIN_BUILD_DIR") # Package this directory as if it were the app (cd $(dirname "$MAIN_BUILD_DIR") && zip -r "../../PackagedReleases/LuckyRobots-macOS.zip" "$DIR_NAME") echo "Created packaged release from main directory: PackagedReleases/LuckyRobots-macOS.zip" else # Package the entire Builds directory as a fallback echo "No main directory found, packaging everything" zip -r "PackagedReleases/LuckyRobots-macOS.zip" Builds echo "Created fallback package: PackagedReleases/LuckyRobots-macOS.zip" fi fi echo "Packaged releases:" ls -la PackagedReleases/ - name: Upload macOS Build Artifact uses: actions/upload-artifact@v3 if: success() with: name: LuckyRobots-macOS path: PackagedReleases/LuckyRobots-macOS.zip retention-days: 365 create-release: needs: [windows-build, linux-build, macos-build] runs-on: ubuntu-latest if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' steps: - name: Checkout repository uses: actions/checkout@v3 with: fetch-depth: 0 - name: Create Tag run: | # Fetch all tags git fetch --tags # Get the latest version tag, if any LATEST_TAG=$(git tag -l "v[0-9]*.[0-9]*.[0-9]*" | sort -V | tail -n1) if [ -z "$LATEST_TAG" ]; then # No previous version tag, start with 1.0.0 NEW_VERSION="1.0.0" echo "No previous version tags found, starting with 1.0.0" else # Strip 'v' prefix if it exists VERSION=${LATEST_TAG#v} # Split version into parts MAJOR=$(echo $VERSION | cut -d. -f1) MINOR=$(echo $VERSION | cut -d. -f2) PATCH=$(echo $VERSION | cut -d. -f3) # Auto-increment patch version PATCH=$((PATCH + 1)) NEW_VERSION="${MAJOR}.${MINOR}.${PATCH}" echo "Auto-incremented patch version from ${VERSION} to ${NEW_VERSION}" fi # Final tag with v prefix TAG="v${NEW_VERSION}" echo "Creating git tag: $TAG" # Configure git with token authentication git config --global user.email "actions@gitea.com" git config --global user.name "Gitea Actions" # Direct token approach git remote set-url origin "https://runner:${{ secrets.GITEATOKEN }}@luckyrobots.com/luckyrobots/luckyworld.git" # Check if tag exists if ! git rev-parse "$TAG" >/dev/null 2>&1; then # Create tag git tag -a "$TAG" -m "Release $TAG" # Push tag git push origin "$TAG" echo "Successfully created and pushed tag: $TAG" else echo "Tag $TAG already exists, skipping tag creation" fi echo "RELEASE_TAG=$TAG" >> $GITHUB_ENV - name: Download all artifacts uses: actions/download-artifact@v3 with: path: releases - name: Create Build Info run: | # Create a build info JSON file echo '{ "version": "${{ env.RELEASE_TAG }}", "buildNumber": "${{ github.run_number }}", "commit": "${{ github.sha }}", "branch": "${{ github.ref_name }}", "buildDate": "'$(date -u +"%Y-%m-%dT%H:%M:%SZ")'", "artifacts": { "windows": "https://luckyrobots.com/luckyrobots/luckyworld/actions/runs/${{ github.run_id }}/artifacts/LuckyRobots-Windows", "linux": "https://luckyrobots.com/luckyrobots/luckyworld/actions/runs/${{ github.run_id }}/artifacts/LuckyRobots-Linux", "macos": "https://luckyrobots.com/luckyrobots/luckyworld/actions/runs/${{ github.run_id }}/artifacts/LuckyRobots-macOS" } }' > build-info.json # Create a simple HTML download page echo ' LuckyRobots ${{ env.RELEASE_TAG }} Downloads

LuckyRobots Game - ${{ env.RELEASE_TAG }}

Build #${{ github.run_number }} - Built from commit: ${{ github.sha }}

Windows

Download Windows Build

Linux

Download Linux Build

macOS

Download macOS Build

' > downloads.html - name: Create Release uses: https://gitea.com/actions/gitea-release-action@main with: files: |- build-info.json downloads.html token: '${{ secrets.GITEATOKEN }}' title: 'Release ${{ env.RELEASE_TAG }}' body: | ## LuckyRobots Game Release ${{ env.RELEASE_TAG }} ### Download Links Download builds from our CI artifacts: - [Windows Build](https://luckyrobots.com/luckyrobots/luckyworld/actions/runs/${{ github.run_id }}/artifacts/LuckyRobots-Windows) - [Linux Build](https://luckyrobots.com/luckyrobots/luckyworld/actions/runs/${{ github.run_id }}/artifacts/LuckyRobots-Linux) - [macOS Build](https://luckyrobots.com/luckyrobots/luckyworld/actions/runs/${{ github.run_id }}/artifacts/LuckyRobots-macOS) ### Build Information - Build Number: #${{ github.run_number }} - Commit: ${{ github.sha }} - Branch: ${{ github.ref_name }} - Build Date: $(date -u +"%Y-%m-%d %H:%M:%S UTC") prerelease: ${{ github.ref != 'refs/heads/main' }} tag_name: '${{ env.RELEASE_TAG }}'