mirror of
https://github.com/Xevion/Pac-Man.git
synced 2025-12-06 15:15:48 -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]
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
wasm:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
permissions:
|
||||
pages: write
|
||||
id-token: write
|
||||
|
||||
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:
|
||||
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:
|
||||
toolchain: stable
|
||||
target: wasm32-unknown-emscripten
|
||||
override: true
|
||||
|
||||
# TODO: Update to v2
|
||||
- name: Rust Cache # cache the rust build artefacts
|
||||
uses: Swatinem/rust-cache@v1
|
||||
- name: Rust Cache
|
||||
uses: Swatinem/rust-cache@v2
|
||||
|
||||
- name: Build # build
|
||||
run: ./scripts/build-wasm.sh
|
||||
- name: Install pnpm
|
||||
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
|
||||
uses: actions/upload-pages-artifact@v2
|
||||
uses: actions/upload-pages-artifact@v3
|
||||
with:
|
||||
path: './dist/'
|
||||
path: "./dist/"
|
||||
retention-days: 7
|
||||
|
||||
- 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