From 7358ab696e1db703a48057a6d54b01c31a3d38ea Mon Sep 17 00:00:00 2001 From: Olof Pettersson Date: Tue, 2 Dec 2025 13:35:07 +0100 Subject: [PATCH] Run in buildah --- .gitea/workflows/build-engine.yaml | 90 ++++--------------- .../workflows/scripts/build-with-buildah.sh | 49 ++++++++++ 2 files changed, 64 insertions(+), 75 deletions(-) create mode 100644 .gitea/workflows/scripts/build-with-buildah.sh diff --git a/.gitea/workflows/build-engine.yaml b/.gitea/workflows/build-engine.yaml index 14af4bbaa7b..8427488c302 100644 --- a/.gitea/workflows/build-engine.yaml +++ b/.gitea/workflows/build-engine.yaml @@ -1,42 +1,26 @@ name: Build Godot Engine on: push: - branches: ["customized-moa"] - create: - tags: - - "v*" + branches: [ "customized-moa" ] jobs: - build-engine: - name: Build Engine + build-windows: + name: Build Windows ${{ matrix.name }} runs-on: ubuntu-latest - - # Run the entire job inside your new builder container - container: - image: gitea.212.63.210.91.nip.io/${{ gitea.repository_owner }}/godot-builder-windows:513d6efc259bb974ee2078adfa5f0994d0796a57 - # Credentials are required to pull from your private registry - credentials: - username: ${{ gitea.actor }} - password: ${{ secrets.USER_PACKAGE_PASSWORD }} - # Note: If this fails to pull due to SSL, we may need to use a 'docker run' step approach instead. + # Run on Host (so Checkout works) strategy: fail-fast: false matrix: include: - # Windows Editor - name: Editor target: editor production: yes artifact_name: godot-windows-editor - - # Windows Debug Template (For testing game logic) - name: Debug Template target: template_debug production: no artifact_name: godot-windows-debug - - # Windows Release Template (For final export) - name: Release Template target: template_release production: yes @@ -48,64 +32,20 @@ jobs: with: submodules: recursive - # NEW STEP: Patch the build file to force linking HID - - name: Patch SCons for Fedora - run: | - # Find the line defining LIBS and inject 'hid' and 'setupapi' - # This ensures they come AFTER the object files - sed -i "s/env.Append(LIBS=\['mingw32'/env.Append(LIBS=\['mingw32', 'hid', 'setupapi'/" platform/windows/detect.py - - # Optional: Verify the change - grep "env.Append(LIBS=" platform/windows/detect.py - - name: Compile with SCons - run: | - # --- SMART CORE DETECTION --- - # Default to hardware limit if no quota is found - REAL_CORES=$(nproc) - - # Check Cgroup V2 (Fedora / Modern K8s) - if [ -f /sys/fs/cgroup/cpu.max ]; then - # Read quota and period (e.g., "700000 100000") - read QUOTA PERIOD < /sys/fs/cgroup/cpu.max - if [ "$QUOTA" != "max" ]; then - # Calculate limit: Quota / Period (e.g., 700000 / 100000 = 7) - REAL_CORES=$(( QUOTA / PERIOD )) - fi - - # Check Cgroup V1 (Older K8s / Docker) - elif [ -f /sys/fs/cgroup/cpu/cpu.cfs_quota_us ]; then - QUOTA=$(cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us) - PERIOD=$(cat /sys/fs/cgroup/cpu/cpu.cfs_period_us) - if [ "$QUOTA" -gt 0 ]; then - REAL_CORES=$(( QUOTA / PERIOD )) - fi - fi - - # Safety: Ensure we use at least 1 core - if [ "$REAL_CORES" -lt 1 ]; then REAL_CORES=1; fi - - echo "Hardware has $(nproc) cores. Container limit is ${REAL_CORES} cores." - # ----------------------------- - - echo "Compiling ${{ matrix.name }}..." - - # Godot 4 SCons Command - nice -n 10 scons platform=windows \ - target=${{ matrix.target }} \ - d3d12=no \ - arch=x86_64 \ - precision=double \ - production=${{ matrix.production }} \ - LINKFLAGS="-lhid -lsetupapi" \ - -j$REAL_CORES - - - name: Verify Output - run: ls -l bin/ + uses: docker://quay.io/buildah/stable + env: + REGISTRY: gitea.212.63.210.91.nip.io + IMAGE_TAG: godot-builder-windows:513d6efc259bb974ee2078adfa5f0994d0796a57 + USERNAME: ${{ gitea.actor }} + PASSWORD: ${{ secrets.USER_PACKAGE_PASSWORD }} + with: + entrypoint: /bin/sh + # Just run the file! No messy YAML strings. + args: .gitea/workflows/scripts/build-with-buildah.sh - name: Upload Artifacts uses: actions/upload-artifact@v3 with: name: ${{ matrix.artifact_name }} - # Corrected from *.dll to *.exe (Godot templates are executables) - path: bin/*.exe + path: bin/*.exe \ No newline at end of file diff --git a/.gitea/workflows/scripts/build-with-buildah.sh b/.gitea/workflows/scripts/build-with-buildah.sh new file mode 100644 index 00000000000..9d94da62d8d --- /dev/null +++ b/.gitea/workflows/scripts/build-with-buildah.sh @@ -0,0 +1,49 @@ +#!/bin/sh +set -e # Exit on error + +# --- 1. CONFIGURATION --- +# We read these from Environment Variables passed by the workflow +# This makes the script reusable for Windows, Linux, etc. +FULL_IMAGE_URL="$REGISTRY/$OWNER/$IMAGE_NAME:$IMAGE_TAG" + +echo "------------------------------------------------" +echo "Task Runner: Starting Buildah Orchestration" +echo "Target: $PLATFORM / $TARGET" +echo "Image: $FULL_IMAGE_URL" +echo "------------------------------------------------" + +# --- 2. LOGIN --- +echo "Logging into registry..." +# Note: We use --password-stdin for security so the secret isn't in process list +echo "$PASSWORD" | buildah login -u "$USERNAME" --password-stdin --tls-verify=false --storage-driver=vfs "$REGISTRY" + +# --- 3. CREATE CONTAINER --- +echo "Pulling image and creating working container..." +# We capture the Container ID (CTR) +CTR=$(buildah from --tls-verify=false --storage-driver=vfs "$FULL_IMAGE_URL") + +# --- 4. EXECUTE BUILD --- +echo "Running SCons inside container..." + +# Explaining the flags: +# -v "$PWD":/src -> Mounts the host workspace (your code) into the container at /src +# -w /src -> Sets working directory to /src +# --env ... -> Passes variables needed strictly for the build (optional) +# scons ... -> The actual compile command + +buildah run \ + --volume "$PWD":/src \ + --working-dir /src \ + "$CTR" \ + scons platform="$PLATFORM" \ + target="$TARGET" \ + arch=x86_64 \ + precision=double \ + production="$PRODUCTION" \ + use_llvm=yes \ + use_mingw=yes \ + -j$(nproc) + +# --- 5. CLEANUP --- +echo "Build successful. Removing container..." +buildah rm "$CTR" \ No newline at end of file