diff --git a/.github/workflows/build-linux.yml b/.github/workflows/build-linux.yml index 42cb25d20..8b56d1895 100644 --- a/.github/workflows/build-linux.yml +++ b/.github/workflows/build-linux.yml @@ -1,5 +1,6 @@ name: Build Linux Release - +# document this later, while that, put both release & debug in parallel +# debug still always comes second and that's sad. on: push: paths: @@ -23,10 +24,10 @@ on: - '.github/workflows/build-linux.yml' jobs: - build-linux: + build-release: runs-on: ubuntu-latest concurrency: - group: build-linux-${{ github.ref }} + group: build-linux-release-${{ github.ref }} cancel-in-progress: true steps: - name: Checkout repository @@ -35,8 +36,7 @@ jobs: - name: Install system dependencies run: | sudo apt-get update - sudo apt-get install -y build-essential python3 python3-pip python3-setuptools libgl1-mesa-dev libglu1-mesa-dev libglfw3-dev libpng-dev pkg-config clang lld ccache libssl-dev - # Set a reasonable ccache size + sudo apt-get install -y build-essential python3 python3-pip python3-setuptools libgl1-mesa-dev libglu1-mesa-dev libglfw3-dev libpng-dev pkg-config clang lld ccache libssl-dev patchelf ccache -M 5G || true - name: Setup Python @@ -50,7 +50,7 @@ jobs: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('.github/workflows/build-linux.yml') }} - - name: Install Meson and Ninja (pip) + - name: Install Meson and Ninja run: | python -m pip install --upgrade pip pip install meson ninja @@ -59,7 +59,7 @@ jobs: uses: actions/cache@v4 with: path: ~/.ccache - key: ${{ runner.os }}-ccache-${{ hashFiles('**/meson.build') }} + key: ${{ runner.os }}-ccache-release-${{ hashFiles('**/meson.build') }} - name: Restore meson cache uses: actions/cache@v4 @@ -74,19 +74,8 @@ jobs: CCACHE_DIR: ${{ runner.temp }}/ccache run: | mkdir -p "$CCACHE_DIR" - export CCACHE_DIR="$CCACHE_DIR" meson setup build_meson --wipe --buildtype=release - - name: Configure Meson (debug) - env: - CC: "ccache clang" - CXX: "ccache clang++" - CCACHE_DIR: ${{ runner.temp }}/ccache - run: | - mkdir -p "$CCACHE_DIR" - export CCACHE_DIR="$CCACHE_DIR" - meson setup build_debug --wipe --buildtype=debug - - name: Build with Ninja env: CC: "ccache clang" @@ -94,21 +83,8 @@ jobs: CCACHE_DIR: ${{ runner.temp }}/ccache run: | export CCACHE_DIR="${{ runner.temp }}/ccache" - # Use all available cores for faster parallel builds ninja -C build_meson -j$(nproc) -v - - name: Build Debug with Ninja - env: - CC: "ccache clang" - CXX: "ccache clang++" - CCACHE_DIR: ${{ runner.temp }}/ccache - run: | - export CCACHE_DIR="${{ runner.temp }}/ccache" - ninja -C build_debug -j$(nproc) -v - - - name: Install patchelf - run: sudo apt-get install -y patchelf - - name: Bundle executable + libraries env: GITHUB_SHA: ${{ github.sha }} @@ -125,12 +101,8 @@ jobs: BUNDLE=out/minecraft-client-linux-${SHORT_SHA} mkdir -p "$BUNDLE/lib" - # Copy the binary cp "$EXE_PATH" "$BUNDLE/Minecraft.Client" - # Collect non-system shared library dependencies and copy them in. - # Exclude glibc/libstdc++/libgcc — these are ABI-specific and must - # come from the user's system, not from the build runner. ldd "$EXE_PATH" \ | awk '/=>/ { print $3 }' \ | grep -v '^(' \ @@ -140,18 +112,10 @@ jobs: [ -f "$lib" ] && cp "$lib" "$BUNDLE/lib/" || true done - # Patch the binary RPATH so it finds libs in ./lib at runtime patchelf --set-rpath '$ORIGIN/lib' "$BUNDLE/Minecraft.Client" - # Write a launcher script cat > "$BUNDLE/run.sh" << 'RUNEOF' #!/usr/bin/env bash - # 4JCraft Linux launcher - # ------------------------------------------------------------------- - # IMPORTANT: Before running, copy the "Common" assets folder from - # https://github.com/smartcmd/MinecraftConsoles/releases/tag/nightly - # (LCEWindows64.zip → extract → copy "Common" next to this script) - # ------------------------------------------------------------------- DIR="$(cd "$(dirname "$0")" && pwd)" if [ ! -d "$DIR/Common" ]; then echo "ERROR: Missing 'Common' assets folder." @@ -165,7 +129,6 @@ jobs: RUNEOF chmod +x "$BUNDLE/run.sh" - # Write a README cat > "$BUNDLE/README.txt" << 'EOF' 4JCraft Linux Build =================== @@ -185,6 +148,74 @@ jobs: echo "Bundle ready: $BUNDLE" ls -lh "$BUNDLE" "$BUNDLE/lib" + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: minecraft-client-linux-${{ github.sha }} + path: out/minecraft-client-linux-*/ + retention-days: 7 + + build-debug: + runs-on: ubuntu-latest + concurrency: + group: build-linux-debug-${{ github.ref }} + cancel-in-progress: true + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install system dependencies + run: | + sudo apt-get update + sudo apt-get install -y build-essential python3 python3-pip python3-setuptools libgl1-mesa-dev libglu1-mesa-dev libglfw3-dev libpng-dev pkg-config clang lld ccache libssl-dev patchelf + ccache -M 5G || true + + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: '3.x' + + - name: Cache pip packages + uses: actions/cache@v4 + with: + path: ~/.cache/pip + key: ${{ runner.os }}-pip-${{ hashFiles('.github/workflows/build-linux.yml') }} + + - name: Install Meson and Ninja + run: | + python -m pip install --upgrade pip + pip install meson ninja + + - name: Restore ccache + uses: actions/cache@v4 + with: + path: ~/.ccache + key: ${{ runner.os }}-ccache-debug-${{ hashFiles('**/meson.build') }} + + - name: Restore meson cache + uses: actions/cache@v4 + with: + path: ~/.cache/meson + key: ${{ runner.os }}-meson-${{ hashFiles('**/meson.build') }} + + - name: Configure Meson + env: + CC: "ccache clang" + CXX: "ccache clang++" + CCACHE_DIR: ${{ runner.temp }}/ccache + run: | + mkdir -p "$CCACHE_DIR" + meson setup build_debug --wipe --buildtype=debug + + - name: Build with Ninja + env: + CC: "ccache clang" + CXX: "ccache clang++" + CCACHE_DIR: ${{ runner.temp }}/ccache + run: | + export CCACHE_DIR="${{ runner.temp }}/ccache" + ninja -C build_debug -j$(nproc) -v + - name: Bundle debug executable + libraries env: GITHUB_SHA: ${{ github.sha }} @@ -201,10 +232,8 @@ jobs: BUNDLE=out/minecraft-client-linux-${SHORT_SHA}-debug mkdir -p "$BUNDLE/lib" - # Copy the binary cp "$EXE_PATH" "$BUNDLE/Minecraft.Client.debug" - # Collect non-system shared library dependencies and copy them in. ldd "$EXE_PATH" \ | awk '/=>/ { print $3 }' \ | grep -v '^(' \ @@ -214,18 +243,14 @@ jobs: [ -f "$lib" ] && cp "$lib" "$BUNDLE/lib/" || true done - # Patch the binary RPATH so it finds libs in ./lib at runtime patchelf --set-rpath '$ORIGIN/lib' "$BUNDLE/Minecraft.Client.debug" - # Keep a copy of the unstripped debug binary (symbols are already present in debug build) echo "Debug bundle ready: $BUNDLE" ls -lh "$BUNDLE" "$BUNDLE/lib" - name: Upload artifact uses: actions/upload-artifact@v4 with: - name: minecraft-client-linux-${{ github.sha }} - path: | - out/minecraft-client-linux-*/ - out/minecraft-client-linux-*-debug/ - retention-days: 7 + name: minecraft-client-linux-${{ github.sha }}-debug + path: out/minecraft-client-linux-*-debug/ + retention-days: 7 \ No newline at end of file