mirror of
https://github.com/Xevion/Pac-Man.git
synced 2025-12-15 10:12:33 -06:00
This is just because managing both 1.86 and 1.88 is really annoying, so it's better to just be unified. There's no real point to using 1.88 besides more clippy warnings, which are already impeding my work right now. So we're downgrading.
159 lines
4.8 KiB
YAML
159 lines
4.8 KiB
YAML
name: Builds
|
|
on: ["push", "pull_request"]
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
jobs:
|
|
build:
|
|
name: Build (${{ matrix.target }})
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- os: ubuntu-latest
|
|
target: x86_64-unknown-linux-gnu
|
|
artifact_name: pacman
|
|
toolchain: 1.86.0
|
|
- os: macos-13
|
|
target: x86_64-apple-darwin
|
|
artifact_name: pacman
|
|
toolchain: 1.86.0
|
|
- os: macos-latest
|
|
target: aarch64-apple-darwin
|
|
artifact_name: pacman
|
|
toolchain: 1.86.0
|
|
- os: windows-latest
|
|
target: x86_64-pc-windows-gnu
|
|
artifact_name: pacman.exe
|
|
toolchain: 1.86.0
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Rust Toolchain
|
|
uses: dtolnay/rust-toolchain@master
|
|
with:
|
|
target: ${{ matrix.target }}
|
|
toolchain: ${{ matrix.toolchain }}
|
|
|
|
- name: Rust Cache
|
|
uses: Swatinem/rust-cache@v2
|
|
|
|
- name: Cache vcpkg
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: target/vcpkg
|
|
key: A-vcpkg-${{ runner.os }}-${{ matrix.target }}-${{ hashFiles('Cargo.toml', 'Cargo.lock') }}
|
|
restore-keys: |
|
|
A-vcpkg-${{ runner.os }}-${{ matrix.target }}-
|
|
|
|
- name: Vcpkg Linux Dependencies
|
|
if: runner.os == 'Linux'
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y libltdl-dev
|
|
|
|
- name: Vcpkg
|
|
run: |
|
|
cargo install cargo-vcpkg
|
|
cargo vcpkg -v build
|
|
|
|
- name: Build
|
|
run: cargo build --release
|
|
|
|
- name: Acquire Package Version
|
|
shell: bash
|
|
run: |
|
|
PACKAGE_VERSION=$(cargo metadata --format-version 1 --no-deps | jq '.packages[0].version' -r)
|
|
echo "PACKAGE_VERSION=${PACKAGE_VERSION}" >> $GITHUB_ENV
|
|
|
|
- name: Upload Artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: "pacman-${{ env.PACKAGE_VERSION }}-${{ matrix.target }}"
|
|
path: ./target/release/${{ matrix.artifact_name }}
|
|
retention-days: 7
|
|
if-no-files-found: error
|
|
|
|
wasm:
|
|
name: Build (wasm32-unknown-emscripten)
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
pages: write
|
|
id-token: write
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Emscripten SDK
|
|
uses: pyodide/setup-emsdk@v15
|
|
with:
|
|
version: 3.1.43
|
|
actions-cache-folder: "emsdk-cache-b"
|
|
|
|
- name: Setup Rust (WASM32 Emscripten)
|
|
uses: dtolnay/rust-toolchain@master
|
|
with:
|
|
target: wasm32-unknown-emscripten
|
|
toolchain: 1.86.0 # we are unfortunately pinned to 1.86.0 for some reason, bulk-memory-opt related issues
|
|
|
|
- name: Rust Cache
|
|
uses: Swatinem/rust-cache@v2
|
|
|
|
- name: Setup Bun
|
|
uses: oven-sh/setup-bun@v2
|
|
with:
|
|
bun-version: latest
|
|
|
|
- name: Build with Emscripten
|
|
shell: bash
|
|
run: |
|
|
# Retry mechanism for Emscripten build - only retry on specific hash errors
|
|
MAX_RETRIES=3
|
|
RETRY_DELAY=30
|
|
|
|
for attempt in $(seq 1 $MAX_RETRIES); do
|
|
echo "Build attempt $attempt of $MAX_RETRIES"
|
|
|
|
# Capture output and check for specific error while preserving real-time output
|
|
if bun run -i web.build.ts 2>&1 | tee /tmp/build_output.log; then
|
|
echo "Build successful on attempt $attempt"
|
|
break
|
|
else
|
|
echo "Build failed on attempt $attempt"
|
|
|
|
# Check if the failure was due to the specific hash error
|
|
if grep -q "emcc: error: Unexpected hash:" /tmp/build_output.log; then
|
|
echo "::warning::Detected 'emcc: error: Unexpected hash:' error - will retry (attempt $attempt of $MAX_RETRIES)"
|
|
|
|
if [ $attempt -eq $MAX_RETRIES ]; then
|
|
echo "::error::All retry attempts failed. Exiting with error."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Waiting $RETRY_DELAY seconds before retry..."
|
|
sleep $RETRY_DELAY
|
|
|
|
# Exponential backoff: double the delay for next attempt
|
|
RETRY_DELAY=$((RETRY_DELAY * 2))
|
|
else
|
|
echo "Build failed but not due to hash error - not retrying"
|
|
exit 1
|
|
fi
|
|
fi
|
|
done
|
|
|
|
- name: Upload Artifact
|
|
uses: actions/upload-pages-artifact@v3
|
|
if: github.ref == 'refs/heads/master' && github.event_name == 'push'
|
|
with:
|
|
path: "./dist/"
|
|
retention-days: 7
|
|
|
|
- name: Deploy
|
|
if: github.ref == 'refs/heads/master' && github.event_name == 'push'
|
|
uses: actions/deploy-pages@v4
|