From 59ddbee2a367adc1573e451723d48112e512be01 Mon Sep 17 00:00:00 2001 From: Ozgur Ersoy Date: Sat, 12 Apr 2025 23:35:16 +0200 Subject: [PATCH] feat(workflows): enhance build workflows for Windows, Linux, and macOS with packaging and release creation steps --- .gitea/workflows/build.yml | 341 ++++++++++++++++++++++++++++++++++--- 1 file changed, 313 insertions(+), 28 deletions(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 52b2714a..3998ea59 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -6,40 +6,325 @@ on: branches: [ozgur/build] jobs: - trigger-builds: + 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: Trigger Windows Build - uses: https://gitea.com/actions/gitea-actions-dispatcher@v0.1.0 - with: - workflow: windows-build.yml - token: ${{ secrets.GITEATOKEN }} - - - name: Trigger Linux Build - uses: https://gitea.com/actions/gitea-actions-dispatcher@v0.1.0 - with: - workflow: linux-build.yml - token: ${{ secrets.GITEATOKEN }} - - - name: Trigger macOS Build - uses: https://gitea.com/actions/gitea-actions-dispatcher@v0.1.0 - with: - workflow: macos-build.yml - token: ${{ secrets.GITEATOKEN }} - - - name: Wait for builds to complete + + - name: Create Tag run: | - echo "Waiting for platform builds to complete..." - sleep 60 # Adding a delay to ensure builds have time to start + # 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: Trigger Release Creation - if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' - uses: https://gitea.com/actions/gitea-actions-dispatcher@v0.1.0 + - name: Download all artifacts + uses: actions/download-artifact@v3 with: - workflow: release.yml - token: ${{ secrets.GITEATOKEN }} \ No newline at end of file + 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 }}' \ No newline at end of file