Files
Game_2/.gitea/workflows/nightly-build.yml
T

187 lines
5.6 KiB
YAML

name: Nightly Build
on:
schedule:
- cron: ${{ vars.CRON_SCHEDULE }}
workflow_dispatch:
env:
PROJECT_NAME: ${{ vars.PROJECT_NAME }}
BUILD_CONFIG: ${{ vars.BUILD_CONFIGURATION }}
RETENTION_DAYS: ${{ vars.ARTIFACT_RETENTION_DAYS }}
jobs:
check-changes:
runs-on: ubuntu-latest
outputs:
changed: ${{ steps.check.outputs.changed }}
commit_count: ${{ steps.check.outputs.commit_count }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Check for changes in last 24h
id: check
run: |
CHANGES=$(git log --since="24 hours ago" --oneline | wc -l)
if [ "$CHANGES" -gt 0 ]; then
echo "changed=true" >> $GITHUB_OUTPUT
echo "commit_count=$CHANGES" >> $GITHUB_OUTPUT
else
echo "changed=false" >> $GITHUB_OUTPUT
echo "commit_count=0" >> $GITHUB_OUTPUT
fi
build-linux:
needs: check-changes
if: needs.check-changes.outputs.changed == 'true'
runs-on: ${{ vars.LINUX_RUNNER_LABEL }}
timeout-minutes: 120
env:
ENGINE_DIR: ${{ vars.UE5_ENGINE_PATH_LINUX }}
steps:
- uses: actions/checkout@v4
with:
lfs: true
- name: Pull LFS files
run: git lfs pull
- name: Verify engine path
run: |
if [ ! -d "$ENGINE_DIR" ]; then
echo "::error::Engine not found at $ENGINE_DIR"
exit 1
fi
echo "Engine found: $ENGINE_DIR"
- name: Build Linux ${{ env.BUILD_CONFIG }}
run: |
SHORT_SHA="${{ github.sha }}"
ARCHIVE_NAME="${PROJECT_NAME}-Linux-${SHORT_SHA::7}.tar.gz"
"$ENGINE_DIR/Engine/Build/BatchFiles/Linux/Build.sh" \
"${PROJECT_NAME}" Linux "${BUILD_CONFIG}" \
-Project="$(pwd)/${PROJECT_NAME}.uproject" \
-NoP4 -UTF8Output -Clean
tar -czf "$ARCHIVE_NAME" \
-C Binaries/Linux \
"${PROJECT_NAME}-Linux-${BUILD_CONFIG}" \
../Content/Paks/* 2>/dev/null || true
echo "ARCHIVE_NAME=$ARCHIVE_NAME" >> $GITHUB_ENV
- name: Upload Linux artifact
uses: actions/upload-artifact@v4
with:
name: linux-build
path: ${{ env.ARCHIVE_NAME }}
retention-days: ${{ env.RETENTION_DAYS }}
build-windows:
needs: check-changes
if: needs.check-changes.outputs.changed == 'true'
runs-on: ${{ vars.WINDOWS_RUNNER_LABEL }}
timeout-minutes: 180
env:
ENGINE_DIR: ${{ vars.UE5_ENGINE_PATH_WINDOWS }}
steps:
- uses: actions/checkout@v4
with:
lfs: true
- name: Pull LFS files
run: git lfs pull
- name: Verify engine path
shell: cmd
run: |
if not exist "%ENGINE_DIR%" (
echo ::error::Engine not found at %ENGINE_DIR%
exit /b 1
)
echo Engine found: %ENGINE_DIR%
- name: Build Windows ${{ env.BUILD_CONFIG }}
shell: cmd
run: |
set SHORT_SHA=%GITHUB_SHA:~0,7%
set ARCHIVE_NAME=%PROJECT_NAME%-Win64-%SHORT_SHA%.zip
call "%ENGINE_DIR%\Engine\Build\BatchFiles\Build.bat" ^
%PROJECT_NAME% Win64 %BUILD_CONFIG% ^
-Project="%CD%\%PROJECT_NAME%.uproject" ^
-NoP4 -UTF8Output -Clean
powershell Compress-Archive ^
-Path "Binaries\Win64\*" ^
-DestinationPath "%ARCHIVE_NAME%" ^
-Force
echo ARCHIVE_NAME=%ARCHIVE_NAME%>> %GITHUB_ENV%
- name: Upload Windows artifact
uses: actions/upload-artifact@v4
with:
name: windows-build
path: ${{ env.ARCHIVE_NAME }}
retention-days: ${{ env.RETENTION_DAYS }}
release:
needs: [build-linux, build-windows]
if: >-
always() &&
needs.build-linux.result == 'success' &&
needs.build-windows.result == 'success'
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
merge-multiple: true
- name: Generate version info
id: version
run: |
DATE=$(date +'%Y%m%d')
SHA_SHORT="${{ github.sha }}"
TAG="nightly-${DATE}-${SHA_SHORT::7}"
echo "tag=$TAG" >> $GITHUB_OUTPUT
echo "date=$DATE" >> $GITHUB_OUTPUT
echo "sha_short=${SHA_SHORT::7}" >> $GITHUB_OUTPUT
- name: List artifacts
run: ls -lah *.tar.gz *.zip 2>/dev/null || echo "No artifacts found"
- name: Create Release & Upload Assets
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.version.outputs.tag }}
name: "🌙 Nightly ${{ steps.version.outputs.date }} (${{ steps.version.outputs.sha_short }})"
body: |
## Nightly Build
| Property | Value |
|----------|-------|
| Commit | `${{ github.sha }}` |
| Date | ${{ steps.version.outputs.date }} |
| Config | ${{ vars.BUILD_CONFIGURATION }} |
| Changes | ${{ needs.check-changes.outputs.commit_count }} commits |
### Downloads
- 🐧 **Linux:** `${{ vars.PROJECT_NAME }}-Linux-${{ steps.version.outputs.sha_short }}.tar.gz`
- 🪟 **Windows:** `${{ vars.PROJECT_NAME }}-Win64-${{ steps.version.outputs.sha_short }}.zip`
---
*⚠️ Auto-generated nightly build. May be unstable.*
draft: false
prerelease: true
files: |
*.tar.gz
*.zip
env:
GITHUB_TOKEN: ${{ secrets.UNREAL_TOKEN }}