From 73c2d3d11696bfee3239f3da7c1aa88d18810f71 Mon Sep 17 00:00:00 2001 From: moonpower Date: Tue, 7 Apr 2026 19:21:34 +0200 Subject: [PATCH] Run host-mode Gitea CI jobs --- .gitea/workflows/build.yml | 102 ++++++++++++++++++++++++++----------- README.md | 3 ++ 2 files changed, 74 insertions(+), 31 deletions(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index e7e6c88..1882ed1 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -11,12 +11,14 @@ on: env: BUILD_JOBS: 4 +# These jobs are intended for host-mode Gitea runners. +# Running them in docker-mode creates per-job bridge networks and can exhaust +# the daemon's address pools on busy runners. + jobs: linux: name: Linux ${{ matrix.target }} - runs-on: ubuntu-latest - container: - image: catthehacker/ubuntu:act-24.04 + runs-on: linux_amd64 strategy: fail-fast: false matrix: @@ -64,14 +66,22 @@ jobs: shell: bash run: | set -euo pipefail + if [ "$(id -u)" -eq 0 ]; then + apt_cmd() { "$@"; } + elif command -v sudo >/dev/null 2>&1; then + apt_cmd() { sudo "$@"; } + else + echo "Host-mode Linux runner needs root or passwordless sudo for apt-get." >&2 + exit 1 + fi if [ -n "${{ matrix.extra_arch }}" ]; then - dpkg --add-architecture "${{ matrix.extra_arch }}" + apt_cmd dpkg --add-architecture "${{ matrix.extra_arch }}" fi if [ -n "${{ matrix.apt_source_arch }}" ]; then ./scripts/ci/configure-linux-apt-sources.sh "${{ matrix.apt_source_arch }}" fi - apt-get update - DEBIAN_FRONTEND=noninteractive apt-get install -y ${{ matrix.packages }} + apt_cmd apt-get update + DEBIAN_FRONTEND=noninteractive apt_cmd apt-get install -y ${{ matrix.packages }} - name: Build Linux package shell: bash @@ -163,9 +173,7 @@ jobs: psvita: name: PSVita VPK - runs-on: ubuntu-latest - container: - image: catthehacker/ubuntu:act-24.04 + runs-on: linux_amd64 steps: - uses: actions/checkout@v4 with: @@ -193,8 +201,16 @@ jobs: shell: bash run: | set -euo pipefail - apt-get update - DEBIAN_FRONTEND=noninteractive apt-get install -y \ + if [ "$(id -u)" -eq 0 ]; then + apt_cmd() { "$@"; } + elif command -v sudo >/dev/null 2>&1; then + apt_cmd() { sudo "$@"; } + else + echo "Host-mode Linux runner needs root or passwordless sudo for apt-get." >&2 + exit 1 + fi + apt_cmd apt-get update + DEBIAN_FRONTEND=noninteractive apt_cmd apt-get install -y \ build-essential \ bzip2 \ ca-certificates \ @@ -248,9 +264,7 @@ jobs: linux-musl: name: Linux musl ${{ matrix.target }} - runs-on: ubuntu-latest - container: - image: catthehacker/ubuntu:act-24.04 + runs-on: linux_amd64 strategy: fail-fast: false matrix: @@ -286,8 +300,16 @@ jobs: shell: bash run: | set -euo pipefail - apt-get update - DEBIAN_FRONTEND=noninteractive apt-get install -y \ + if [ "$(id -u)" -eq 0 ]; then + apt_cmd() { "$@"; } + elif command -v sudo >/dev/null 2>&1; then + apt_cmd() { sudo "$@"; } + else + echo "Host-mode Linux runner needs root or passwordless sudo for apt-get." >&2 + exit 1 + fi + apt_cmd apt-get update + DEBIAN_FRONTEND=noninteractive apt_cmd apt-get install -y \ ca-certificates \ cmake \ curl \ @@ -313,9 +335,7 @@ jobs: windows: name: Windows ${{ matrix.target }} - runs-on: ubuntu-latest - container: - image: catthehacker/ubuntu:act-24.04 + runs-on: linux_amd64 strategy: fail-fast: false matrix: @@ -347,8 +367,16 @@ jobs: shell: bash run: | set -euo pipefail - apt-get update - DEBIAN_FRONTEND=noninteractive apt-get install -y \ + if [ "$(id -u)" -eq 0 ]; then + apt_cmd() { "$@"; } + elif command -v sudo >/dev/null 2>&1; then + apt_cmd() { sudo "$@"; } + else + echo "Host-mode Linux runner needs root or passwordless sudo for apt-get." >&2 + exit 1 + fi + apt_cmd apt-get update + DEBIAN_FRONTEND=noninteractive apt_cmd apt-get install -y \ binutils-mingw-w64 \ cmake \ git \ @@ -370,9 +398,7 @@ jobs: android: name: Android Debug APK - runs-on: ubuntu-latest - container: - image: catthehacker/ubuntu:act-24.04 + runs-on: linux_amd64 steps: - uses: actions/checkout@v4 with: @@ -400,8 +426,16 @@ jobs: shell: bash run: | set -euo pipefail - apt-get update - DEBIAN_FRONTEND=noninteractive apt-get install -y \ + if [ "$(id -u)" -eq 0 ]; then + apt_cmd() { "$@"; } + elif command -v sudo >/dev/null 2>&1; then + apt_cmd() { sudo "$@"; } + else + echo "Host-mode Linux runner needs root or passwordless sudo for apt-get." >&2 + exit 1 + fi + apt_cmd apt-get update + DEBIAN_FRONTEND=noninteractive apt_cmd apt-get install -y \ cmake \ curl \ git \ @@ -457,9 +491,7 @@ jobs: wasm: name: WASM - runs-on: ubuntu-latest - container: - image: emscripten/emsdk:3.1.72 + runs-on: linux_amd64 steps: - uses: actions/checkout@v4 with: @@ -487,8 +519,16 @@ jobs: shell: bash run: | set -euo pipefail - apt-get update - DEBIAN_FRONTEND=noninteractive apt-get install -y python3 python3-jinja2 zip + if [ "$(id -u)" -eq 0 ]; then + apt_cmd() { "$@"; } + elif command -v sudo >/dev/null 2>&1; then + apt_cmd() { sudo "$@"; } + else + echo "Host-mode Linux runner needs root or passwordless sudo for apt-get." >&2 + exit 1 + fi + apt_cmd apt-get update + DEBIAN_FRONTEND=noninteractive apt_cmd apt-get install -y python3 python3-jinja2 zip - name: Build WebAssembly package shell: bash diff --git a/README.md b/README.md index ac8d5c5..66efb29 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,9 @@ Not implemented yet: Desktop and Android are the main day-to-day targets. The other ports are present and buildable, but they are more platform-specific and may lag behind the desktop path. +## CI Runners +The Gitea workflow expects host-mode Linux runner labels for the Linux-based jobs, currently `linux_amd64`. Docker-mode runners create per-job bridge networks and can exhaust the daemon's address pools on long CI runs. + ## Running On desktop, launch the emulator directly: