From 3e62381a27b9adfebe961ec84008d2e882aeeda3 Mon Sep 17 00:00:00 2001 From: IlyStalker Date: Mon, 17 Aug 2026 01:10:28 +0300 Subject: [PATCH] j,yjdktybt fdnjc,jhobrf --- .gitea/workflows/nightly-build.yml | 179 +++++++++++++++++++---------- 1 file changed, 120 insertions(+), 59 deletions(-) diff --git a/.gitea/workflows/nightly-build.yml b/.gitea/workflows/nightly-build.yml index fed811b..ac3adf4 100644 --- a/.gitea/workflows/nightly-build.yml +++ b/.gitea/workflows/nightly-build.yml @@ -1,77 +1,134 @@ -name: Nightly Build +name: Nightly Build (Linux) on: schedule: - - cron: ${{ vars.CRON_SCHEDULE }} + # 01:00 MSK = 22:00 UTC предыдущего дня + - cron: '0 22 * * *' workflow_dispatch: + inputs: + force_build: + description: 'Force build even without recent changes' + type: boolean + default: false env: - PROJECT_NAME: ${{ vars.PROJECT_NAME }} - BUILD_CONFIG: ${{ vars.BUILD_CONFIGURATION }} - RETENTION_DAYS: ${{ vars.ARTIFACT_RETENTION_DAYS }} + PROJECT_NAME: Game_2 + BUILD_CONFIG: Shipping + ENGINE_DIR: /opt/unreal-engine + RETENTION_DAYS: 7 jobs: check-changes: runs-on: ubuntu-latest outputs: - changed: ${{ steps.check.outputs.changed }} + should_build: ${{ steps.check.outputs.should_build }} commit_count: ${{ steps.check.outputs.commit_count }} + last_commit: ${{ steps.check.outputs.last_commit }} steps: - - uses: actions/checkout@v4 + - name: Checkout repository + uses: actions/checkout@v4 with: fetch-depth: 2 - - name: Check for changes in last 24h + - name: Check for changes in last 24 hours id: check run: | - CHANGES=$(git log --since="24 hours ago" --oneline | wc -l) + FORCE="${{ github.event.inputs.force_build }}" + + if [ "$FORCE" = "true" ]; then + echo "should_build=true" >> $GITHUB_OUTPUT + echo "commit_count=forced" >> $GITHUB_OUTPUT + echo "last_commit=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT + echo "🔧 Force build requested" + exit 0 + fi + + CHANGES=$(git log --since="24 hours ago" --oneline 2>/dev/null | wc -l) + LAST_COMMIT=$(git rev-parse --short HEAD) + if [ "$CHANGES" -gt 0 ]; then - echo "changed=true" >> $GITHUB_OUTPUT + echo "should_build=true" >> $GITHUB_OUTPUT echo "commit_count=$CHANGES" >> $GITHUB_OUTPUT + echo "last_commit=$LAST_COMMIT" >> $GITHUB_OUTPUT + echo "✅ Found $CHANGES commits in last 24h" else - echo "changed=false" >> $GITHUB_OUTPUT + echo "should_build=false" >> $GITHUB_OUTPUT echo "commit_count=0" >> $GITHUB_OUTPUT + echo "last_commit=$LAST_COMMIT" >> $GITHUB_OUTPUT + echo "⏭️ No recent changes, skipping build" 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: /opt/unreal-engine + if: needs.check-changes.outputs.should_build == 'true' + runs-on: ubuntu-latest + timeout-minutes: 180 steps: - - uses: actions/checkout@v4 + - name: Checkout repository + 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" + git lfs pull + echo "📦 LFS files pulled" + + - name: Verify UE5 engine mount + run: | + if [ ! -f "$ENGINE_DIR/Engine/Build/BatchFiles/Linux/Build.sh" ]; then + echo "::error::UE5 Build.sh not found at $ENGINE_DIR" + echo "::error::Check docker-compose volume mount for /opt/unreal-engine" exit 1 fi - echo "Engine found: $ENGINE_DIR" + + # Проверка версии движка + VERSION_FILE="$ENGINE_DIR/Engine/Source/Runtime/Launch/Resources/Version.h" + if [ -f "$VERSION_FILE" ]; then + ENGINE_VER=$(grep "ENGINE_MAJOR_VERSION\|ENGINE_MINOR_VERSION\|ENGINE_PATCH_VERSION" "$VERSION_FILE" | head -3 | tr '\n' '.' | sed 's/[^0-9.]//g') + echo "🎮 UE5 Version: $ENGINE_VER" + fi + + echo "✅ UE5 engine verified at $ENGINE_DIR" + + - name: Clean previous build artifacts + run: | + rm -rf Binaries/Linux Intermediate/Build/Linux + echo "🧹 Previous artifacts cleaned" - name: Build Linux ${{ env.BUILD_CONFIG }} run: | SHORT_SHA="${{ github.sha }}" ARCHIVE_NAME="${PROJECT_NAME}-Linux-${SHORT_SHA::7}.tar.gz" - + + echo "🔨 Starting build: $PROJECT_NAME Linux $BUILD_CONFIG" + echo "📁 Project: $(pwd)/${PROJECT_NAME}.uproject" + echo "📦 Output: $ARCHIVE_NAME" + "$ENGINE_DIR/Engine/Build/BatchFiles/Linux/Build.sh" \ - "${PROJECT_NAME}" Linux "${BUILD_CONFIG}" \ + "${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 + -NoP4 \ + -UTF8Output \ + -Clean \ + -SkipVulkanDeviceExtensions=VK_KHR_swapchain_mutable_format + + # Архивация билда + if [ -d "Binaries/Linux" ]; then + tar -czf "$ARCHIVE_NAME" \ + -C Binaries/Linux \ + . \ + ../../Content/Paks/* 2>/dev/null || true + + SIZE=$(du -h "$ARCHIVE_NAME" | cut -f1) + echo "📦 Archive created: $ARCHIVE_NAME ($SIZE)" + echo "ARCHIVE_NAME=$ARCHIVE_NAME" >> $GITHUB_ENV + else + echo "::error::Build output directory not found" + exit 1 + fi - name: Upload Linux artifact uses: actions/upload-artifact@v4 @@ -79,57 +136,61 @@ jobs: name: linux-build path: ${{ env.ARCHIVE_NAME }} retention-days: ${{ env.RETENTION_DAYS }} + compression-level: 6 release: - needs: [build-linux] - if: >- - always() && - needs.build-linux.result == 'success' + needs: [check-changes, build-linux] + if: always() && needs.build-linux.result == 'success' runs-on: ubuntu-latest permissions: contents: write steps: - - name: Download all artifacts + - name: Download build artifact uses: actions/download-artifact@v4 with: - merge-multiple: true + name: linux-build - - name: Generate version info - id: version + - name: Generate release metadata + id: meta 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 + + # Список файлов для загрузки + FILES=$(ls *.tar.gz 2>/dev/null | tr '\n' '\n') + echo "files<> $GITHUB_OUTPUT + echo "$FILES" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT - - name: List artifacts - run: ls -lah *.tar.gz *.zip 2>/dev/null || echo "No artifacts found" - - - name: Create Release & Upload Assets + - name: Create Nightly Release uses: softprops/action-gh-release@v2 with: - tag_name: ${{ steps.version.outputs.tag }} - name: "🌙 Nightly ${{ steps.version.outputs.date }} (${{ steps.version.outputs.sha_short }})" + tag_name: ${{ steps.meta.outputs.tag }} + name: "🌙 Nightly ${{ steps.meta.outputs.date }} (${{ steps.meta.outputs.sha_short }})" body: | - ## Nightly Build + ## 🌙 Nightly Build — Linux | Property | Value | |----------|-------| - | Commit | `${{ github.sha }}` | - | Date | ${{ steps.version.outputs.date }} | - | Config | ${{ vars.BUILD_CONFIGURATION }} | - | Changes | ${{ needs.check-changes.outputs.commit_count }} commits | + | **Platform** | Linux (x64) | + | **Config** | ${{ env.BUILD_CONFIG }} | + | **Commit** | `${{ github.sha }}` | + | **Date** | ${{ steps.meta.outputs.date }} | + | **Changes** | ${{ needs.check-changes.outputs.commit_count }} commits | + + ### 📥 Downloads + - 🐧 **Linux:** `${{ env.PROJECT_NAME }}-Linux-${{ steps.meta.outputs.sha_short }}.tar.gz` - ### Downloads - - 🐧 **Linux:** `${{ vars.PROJECT_NAME }}-Linux-${{ steps.version.outputs.sha_short }}.tar.gz` --- - *⚠️ Auto-generated nightly build. May be unstable.* + > ⚠️ Auto-generated nightly build. May be unstable. + > Built with UE5 from `/opt/unreal-engine` via Docker volume mount. draft: false prerelease: true - files: | - *.tar.gz - *.zip + files: ${{ steps.meta.outputs.files }} env: - GITHUB_TOKEN: ${{ secrets.UNREAL_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file