mirror of
https://github.com/Xevion/Pac-Man.git
synced 2025-12-06 23:15:42 -06:00
feat: pull latest rust-sdl2-emscripten build workflow
This commit is contained in:
219
.github/workflows/deploy.yaml
vendored
219
.github/workflows/deploy.yaml
vendored
@@ -1,38 +1,225 @@
|
|||||||
name: Github Pages
|
name: Build
|
||||||
|
|
||||||
on: [push]
|
on: [push]
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
deploy:
|
wasm:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
pages: write
|
pages: write
|
||||||
id-token: write
|
id-token: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2 # repo checkout
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- uses: mymindstorm/setup-emsdk@v11 # setup emscripten toolchain
|
- name: Setup Emscripten SDK
|
||||||
|
uses: mymindstorm/setup-emsdk@v14
|
||||||
with:
|
with:
|
||||||
version: 1.39.20
|
version: 3.1.43
|
||||||
|
|
||||||
- uses: actions-rs/toolchain@v1 # get rust toolchain for wasm
|
- name: Setup Rust (WASM32 Emscripten)
|
||||||
|
uses: dtolnay/rust-toolchain@stable
|
||||||
with:
|
with:
|
||||||
toolchain: stable
|
|
||||||
target: wasm32-unknown-emscripten
|
target: wasm32-unknown-emscripten
|
||||||
override: true
|
|
||||||
|
|
||||||
# TODO: Update to v2
|
- name: Rust Cache
|
||||||
- name: Rust Cache # cache the rust build artefacts
|
uses: Swatinem/rust-cache@v2
|
||||||
uses: Swatinem/rust-cache@v1
|
|
||||||
|
|
||||||
- name: Build # build
|
- name: Install pnpm
|
||||||
run: ./scripts/build-wasm.sh
|
uses: pnpm/action-setup@v3
|
||||||
|
with:
|
||||||
|
version: 8
|
||||||
|
run_install: true
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: ./scripts/build.sh -er # release mode, skip emsdk
|
||||||
|
|
||||||
- name: Upload Artifact
|
- name: Upload Artifact
|
||||||
uses: actions/upload-pages-artifact@v2
|
uses: actions/upload-pages-artifact@v3
|
||||||
with:
|
with:
|
||||||
path: './dist/'
|
path: "./dist/"
|
||||||
retention-days: 7
|
retention-days: 7
|
||||||
|
|
||||||
- name: Deploy
|
- name: Deploy
|
||||||
uses: actions/deploy-pages@v2
|
uses: actions/deploy-pages@v4
|
||||||
|
|
||||||
|
linux:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
TARGET: x86_64-unknown-linux-gnu
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install SDL2 Packages
|
||||||
|
run: sudo apt-get install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev libsdl2-gfx-dev
|
||||||
|
|
||||||
|
- name: Setup Rust Toolchain (Linux)
|
||||||
|
uses: dtolnay/rust-toolchain@stable
|
||||||
|
with:
|
||||||
|
target: ${{ env.TARGET }}
|
||||||
|
|
||||||
|
- name: Rust Cache
|
||||||
|
uses: Swatinem/rust-cache@v2
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: cargo build --release
|
||||||
|
|
||||||
|
- name: Assemble Archive
|
||||||
|
run: |
|
||||||
|
mkdir /tmp/example/
|
||||||
|
cp ./target/release/pacman /tmp/example/
|
||||||
|
chmod a+x /tmp/example/pacman
|
||||||
|
mkdir /tmp/example/assets
|
||||||
|
cp ./assets/TerminalVector.ttf ./assets/fruit.png /tmp/example/assets
|
||||||
|
|
||||||
|
- name: Install Cargo Binstall
|
||||||
|
uses: cargo-bins/cargo-binstall@main
|
||||||
|
|
||||||
|
- name: Acquire Package Version
|
||||||
|
run: |
|
||||||
|
cargo binstall toml-cli -y
|
||||||
|
PACKAGE_VERSION=$(toml get ./Cargo.toml package.version --raw)
|
||||||
|
echo "PACKAGE_VERSION=${PACKAGE_VERSION}" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Upload Artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: "pacman-${{ env.PACKAGE_VERSION }}-${{ env.TARGET }}"
|
||||||
|
path: /tmp/example/
|
||||||
|
retention-days: 7
|
||||||
|
if-no-files-found: error
|
||||||
|
|
||||||
|
macos:
|
||||||
|
runs-on: macos-13
|
||||||
|
env:
|
||||||
|
TARGET: x86_64-apple-darwin
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install SDL2 Packages
|
||||||
|
run: brew install sdl2 sdl2_image sdl2_mixer sdl2_ttf sdl2_gfx
|
||||||
|
|
||||||
|
- name: Setup Rust Toolchain (MacOS)
|
||||||
|
uses: dtolnay/rust-toolchain@stable
|
||||||
|
with:
|
||||||
|
target: ${{ env.TARGET }}
|
||||||
|
|
||||||
|
- name: Rust Cache
|
||||||
|
uses: Swatinem/rust-cache@v2
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: cargo build --release
|
||||||
|
|
||||||
|
- name: Assemble Archive
|
||||||
|
run: |
|
||||||
|
mkdir /tmp/example/
|
||||||
|
cp ./target/release/pacman /tmp/example/
|
||||||
|
mkdir /tmp/example/assets
|
||||||
|
cp ./assets/TerminalVector.ttf ./assets/fruit.png /tmp/example/assets
|
||||||
|
|
||||||
|
- name: Install Cargo Binstall
|
||||||
|
uses: cargo-bins/cargo-binstall@main
|
||||||
|
|
||||||
|
- name: Acquire Package Version
|
||||||
|
run: |
|
||||||
|
cargo binstall toml-cli -y
|
||||||
|
PACKAGE_VERSION=$(toml get ./Cargo.toml package.version --raw)
|
||||||
|
echo "PACKAGE_VERSION=${PACKAGE_VERSION}" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Upload Artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: "pacman-${{ env.PACKAGE_VERSION }}-${{ env.TARGET }}"
|
||||||
|
path: /tmp/example/
|
||||||
|
retention-days: 7
|
||||||
|
if-no-files-found: error
|
||||||
|
|
||||||
|
windows:
|
||||||
|
env:
|
||||||
|
TARGET: x86_64-pc-windows-gnu
|
||||||
|
SDL2: 2.30.2
|
||||||
|
SDL2_TTF: 2.22.0
|
||||||
|
SDL2_MIXER: 2.8.0
|
||||||
|
SDL2_IMAGE: 2.8.2
|
||||||
|
# SDL2_GFX: 1.0.4
|
||||||
|
runs-on: windows-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Download SDL2 Libraries
|
||||||
|
run: |
|
||||||
|
curl -L "https://github.com/libsdl-org/SDL/releases/download/release-${{ env.SDL2 }}/SDL2-devel-${{ env.SDL2 }}-VC.zip" -o "sdl2_devel.zip"
|
||||||
|
curl -L "https://github.com/libsdl-org/SDL_mixer/releases/download/release-${{ env.SDL2_MIXER }}/SDL2_mixer-devel-${{ env.SDL2_MIXER }}-VC.zip" -o "sdl2_mixer_devel.zip"
|
||||||
|
curl -L "https://github.com/libsdl-org/SDL_ttf/releases/download/release-${{ env.SDL2_TTF }}/SDL2_ttf-devel-${{ env.SDL2_TTF }}-VC.zip" -o "sdl2_ttf_devel.zip"
|
||||||
|
curl -L "https://github.com/libsdl-org/SDL_image/releases/download/release-${{ env.SDL2_IMAGE }}/SDL2_image-devel-${{ env.SDL2_IMAGE }}-VC.zip" -o "sdl2_image_devel.zip"
|
||||||
|
|
||||||
|
- name: Extract SDL2 DLLs
|
||||||
|
run: |
|
||||||
|
7z x ./sdl2_devel.zip -o"./tmp/"
|
||||||
|
mv ./tmp/SDL2-${{ env.SDL2 }}/lib/x64/SDL2.dll ./
|
||||||
|
mv ./tmp/SDL2-${{ env.SDL2 }}/lib/x64/SDL2.lib ./
|
||||||
|
|
||||||
|
7z x ./sdl2_mixer_devel.zip -o"./tmp/"
|
||||||
|
mv ./tmp/SDL2_mixer-${{ env.SDL2_MIXER }}/lib/x64/SDL2_mixer.dll ./
|
||||||
|
mv ./tmp/SDL2_mixer-${{ env.SDL2_MIXER }}/lib/x64/SDL2_mixer.lib ./
|
||||||
|
|
||||||
|
7z x ./sdl2_ttf_devel.zip -o"./tmp/"
|
||||||
|
mv ./tmp/SDL2_ttf-${{ env.SDL2_TTF }}/lib/x64/SDL2_ttf.dll ./
|
||||||
|
mv ./tmp/SDL2_ttf-${{ env.SDL2_TTF }}/lib/x64/SDL2_ttf.lib ./
|
||||||
|
|
||||||
|
7z x ./sdl2_image_devel.zip -o"./tmp/"
|
||||||
|
mv ./tmp/SDL2_image-${{ env.SDL2_IMAGE }}/lib/x64/SDL2_image.dll ./
|
||||||
|
mv ./tmp/SDL2_image-${{ env.SDL2_IMAGE }}/lib/x64/SDL2_image.lib ./
|
||||||
|
|
||||||
|
- name: Install SDL2_gfx
|
||||||
|
run: |
|
||||||
|
C:\vcpkg\vcpkg.exe install sdl2-gfx:x64-windows-release
|
||||||
|
cp C:\vcpkg\packages\sdl2-gfx_x64-windows-release\bin\SDL2_gfx.dll ./
|
||||||
|
cp C:\vcpkg\packages\sdl2-gfx_x64-windows-release\lib\SDL2_gfx.lib ./
|
||||||
|
|
||||||
|
- name: Setup Rust (Windows)
|
||||||
|
uses: dtolnay/rust-toolchain@stable
|
||||||
|
with:
|
||||||
|
targets: ${{ env.TARGET }}
|
||||||
|
|
||||||
|
- name: Rust Cache
|
||||||
|
uses: Swatinem/rust-cache@v2
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: cargo build --release
|
||||||
|
|
||||||
|
- name: Prepare Archive
|
||||||
|
run: |
|
||||||
|
New-Item -Type Directory ./release/
|
||||||
|
Move-Item -Path ./target/release/pacman.exe -Destination ./release/
|
||||||
|
Move-Item -Path ./SDL2.dll, ./SDL2_image.dll, ./SDL2_ttf.dll, ./SDL2_mixer.dll, ./SDL2_gfx.dll -Destination ./release/
|
||||||
|
New-Item -Type Directory ./release/assets/
|
||||||
|
Move-Item -Path ./assets/TerminalVector.ttf, ./assets/fruit.png -Destination ./release/assets/
|
||||||
|
|
||||||
|
- name: Install Cargo Binstall
|
||||||
|
uses: cargo-bins/cargo-binstall@main
|
||||||
|
|
||||||
|
- name: Acquire Package Version
|
||||||
|
run: |
|
||||||
|
cargo binstall toml-cli -y
|
||||||
|
PACKAGE_VERSION=$(toml get ./Cargo.toml package.version --raw)
|
||||||
|
echo "PACKAGE_VERSION=${PACKAGE_VERSION}" >> $env:GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Upload Artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: "pacman-${{ env.PACKAGE_VERSION }}-${{ env.TARGET }}"
|
||||||
|
path: ./release/
|
||||||
|
retention-days: 7
|
||||||
|
if-no-files-found: error
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# set -eu
|
|
||||||
|
|
||||||
echo "Building WASM with Emscripten"
|
|
||||||
cargo build --target=wasm32-unknown-emscripten --release
|
|
||||||
|
|
||||||
echo "Copying release files to dist/"
|
|
||||||
mkdir -p dist
|
|
||||||
output_folder="target/wasm32-unknown-emscripten/release"
|
|
||||||
cp $output_folder/pacman.wasm dist
|
|
||||||
cp $output_folder/pacman.js dist
|
|
||||||
cp $output_folder/deps/pacman.data dist
|
|
||||||
cp assets/index.html dist
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
SDL_VERSION="2.28.3"
|
|
||||||
SDL_IMAGE_VERSION="2.6.3"
|
|
||||||
SDL_MIXER_VERSION="2.6.3"
|
|
||||||
SDL_TTF_VERSION="2.20.2"
|
|
||||||
|
|
||||||
SDL="https://github.com/libsdl-org/SDL/releases/download/release-${SDL_VERSION}/SDL2-devel-${SDL_VERSION}-mingw.tar.gz"
|
|
||||||
SLD_IMAGE="https://github.com/libsdl-org/SDL_image/releases/download/release-${SDL_IMAGE_VERSION}/SDL2_image-devel-${SDL_IMAGE_VERSION}-mingw.tar.gz"
|
|
||||||
SDL_MIXER="https://github.com/libsdl-org/SDL_mixer/releases/download/release-${SDL_MIXER_VERSION}/SDL2_mixer-devel-${SDL_MIXER_VERSION}-mingw.tar.gz"
|
|
||||||
SDL_TTF="https://github.com/libsdl-org/SDL_ttf/releases/download/release-${SDL_TTF_VERSION}/SDL2_ttf-devel-${SDL_TTF_VERSION}-mingw.tar.gz"
|
|
||||||
|
|
||||||
EXTRACT_DIR="./target/x86_64-pc-windows-gnu/release/deps"
|
|
||||||
|
|
||||||
if [ ! -f $EXTRACT_DIR/libSDL2.a ]; then
|
|
||||||
if [ ! -f ./sdl2.tar.gz ]; then
|
|
||||||
echo "Downloading SDL2@$SDL_VERSION..."
|
|
||||||
curl -L -o ./sdl2.tar.gz $SDL
|
|
||||||
fi
|
|
||||||
echo "Extracting SDL2..."
|
|
||||||
tar -xzf ./sdl2.tar.gz -C $EXTRACT_DIR --strip-components=3 "SDL2-$SDL_VERSION/x86_64-w64-mingw32/lib/libSDL2.a"
|
|
||||||
rm -f ./sdl2.tar.gz
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f $EXTRACT_DIR/libSDL2_image.a ]; then
|
|
||||||
if [ ! -f ./sdl2_image.tar.gz ]; then
|
|
||||||
echo "Downloading SDL2_image@$SDL_IMAGE_VERSION..."
|
|
||||||
curl -L -o ./sdl2_image.tar.gz $SLD_IMAGE
|
|
||||||
fi
|
|
||||||
echo "Extracting SDL2_image..."
|
|
||||||
tar -xzf ./sdl2_image.tar.gz -C $EXTRACT_DIR --strip-components=3 "SDL2_image-$SDL_IMAGE_VERSION/x86_64-w64-mingw32/lib/libSDL2_image.a"
|
|
||||||
fi
|
|
||||||
rm -f ./sdl2_image.tar.gz
|
|
||||||
|
|
||||||
if [ ! -f $EXTRACT_DIR/libSDL2_mixer.a ]; then
|
|
||||||
if [ ! -f ./sdl2_mixer.tar.gz ]; then
|
|
||||||
echo "Downloading SDL2_mixer@$SDL_MIXER_VERSION..."
|
|
||||||
curl -L -o ./sdl2_mixer.tar.gz $SDL_MIXER
|
|
||||||
fi
|
|
||||||
echo "Extracting SDL2_mixer..."
|
|
||||||
tar -xzf ./sdl2_mixer.tar.gz -C $EXTRACT_DIR --strip-components=3 "SDL2_mixer-$SDL_MIXER_VERSION/x86_64-w64-mingw32/lib/libSDL2_mixer.a"
|
|
||||||
rm -f ./sdl2_mixer.tar.gz
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f $EXTRACT_DIR/libSDL2_ttf.a ]; then
|
|
||||||
|
|
||||||
if [ ! -f ./sdl2_ttf.tar.gz ]; then
|
|
||||||
echo "Downloading SDL2_ttf@$SDL_TTF_VERSION..."
|
|
||||||
curl -L -o ./sdl2_ttf.tar.gz $SDL_TTF
|
|
||||||
fi
|
|
||||||
echo "Extracting SDL2_ttf..."
|
|
||||||
tar -xzf ./sdl2_ttf.tar.gz -C $EXTRACT_DIR --strip-components=3 "SDL2_ttf-$SDL_TTF_VERSION/x86_64-w64-mingw32/lib/libSDL2_ttf.a"
|
|
||||||
rm -f ./sdl2_ttf.tar.gz
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Building..."
|
|
||||||
cargo zigbuild --release --target x86_64-pc-windows-gnu
|
|
||||||
76
scripts/build.sh
Normal file
76
scripts/build.sh
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
release='false'
|
||||||
|
serve='false'
|
||||||
|
skip_emsdk='false'
|
||||||
|
clean='false'
|
||||||
|
|
||||||
|
print_usage() {
|
||||||
|
printf "Usage: -erdsc\n"
|
||||||
|
printf " -e: Skip EMSDK setup (GitHub workflow only)\n"
|
||||||
|
printf " -r: Build in release mode\n"
|
||||||
|
printf " -d: Build in debug mode\n"
|
||||||
|
printf " -s: Serve the WASM files once built\n"
|
||||||
|
printf " -c: Clean the target/dist directory\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
while getopts 'erdsc' flag; do
|
||||||
|
case "${flag}" in
|
||||||
|
e) skip_emsdk='true' ;;
|
||||||
|
r) release='true' ;;
|
||||||
|
d) release='false' ;; # doesn't actually do anything, but last flag wins
|
||||||
|
s) serve='true' ;;
|
||||||
|
c) clean='true' ;;
|
||||||
|
*)
|
||||||
|
print_usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$clean" = 'true' ]; then
|
||||||
|
echo "Cleaning target directory"
|
||||||
|
cargo clean
|
||||||
|
rm -rf ./dist/
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$skip_emsdk" = 'false' ]; then
|
||||||
|
echo "Activating Emscripten"
|
||||||
|
# SDL2-TTF requires 3.1.43, fails to build on latest
|
||||||
|
./../emsdk/emsdk activate 3.1.43
|
||||||
|
source ../emsdk/emsdk_env.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Building WASM with Emscripten"
|
||||||
|
build_type='debug'
|
||||||
|
if [ "$release" = 'true' ]; then
|
||||||
|
cargo build --target=wasm32-unknown-emscripten --release
|
||||||
|
build_type='release'
|
||||||
|
else
|
||||||
|
cargo build --target=wasm32-unknown-emscripten
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Generating CSS"
|
||||||
|
pnpx postcss-cli ./assets/styles.scss -o ./assets/build.css
|
||||||
|
|
||||||
|
echo "Copying WASM files"
|
||||||
|
mkdir -p dist
|
||||||
|
output_folder="target/wasm32-unknown-emscripten/$build_type"
|
||||||
|
cp assets/index.html dist
|
||||||
|
|
||||||
|
cp assets/*.woff* dist
|
||||||
|
cp assets/build.css dist
|
||||||
|
cp assets/favicon.ico dist
|
||||||
|
cp $output_folder/spiritus.wasm dist
|
||||||
|
cp $output_folder/spiritus.js dist
|
||||||
|
# only if .data file exists
|
||||||
|
cp $output_folder/deps/spiritus.data dist
|
||||||
|
if [ -f $output_folder/spiritus.wasm.map ]; then
|
||||||
|
cp $output_folder/spiritus.wasm.map dist
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$serve" = 'true' ]; then
|
||||||
|
echo "Serving WASM with Emscripten"
|
||||||
|
python3 -m http.server -d ./dist/ 8080
|
||||||
|
fi
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
set -eux
|
|
||||||
|
|
||||||
echo "Cleaning library files from ./target/x86_64-pc-windows-gnu/release/deps"
|
|
||||||
rm -f ./target/x86_64-pc-windows-gnu/release/deps/libSDL2.a
|
|
||||||
rm -f ./target/x86_64-pc-windows-gnu/release/deps/libSDL2_image.a
|
|
||||||
rm -f ./target/x86_64-pc-windows-gnu/release/deps/libSDL2_mixer.a
|
|
||||||
rm -f ./target/x86_64-pc-windows-gnu/release/deps/libSDL2_ttf.a
|
|
||||||
echo "Done."
|
|
||||||
Reference in New Issue
Block a user