mirror of
https://github.com/jsgroth/jgenesis.git
synced 2026-01-09 06:01:07 +08:00
223 lines
7.3 KiB
YAML
223 lines
7.3 KiB
YAML
name: Rust
|
|
|
|
on:
|
|
push:
|
|
branches: [ "master" ]
|
|
pull_request:
|
|
branches: [ "master" ]
|
|
|
|
env:
|
|
CARGO_TERM_COLOR: always
|
|
JGENESIS_VERSION: 0.11.0
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install latest stable Rust toolchain
|
|
run: |
|
|
rustup update
|
|
|
|
- name: Install latest nightly Rust toolchain
|
|
run: |
|
|
rustup toolchain add nightly --component rustfmt --component rust-src
|
|
|
|
# https://github.com/libsdl-org/SDL/blob/main/docs/README-linux.md#build-dependencies
|
|
- name: Install SDL3 system dependencies
|
|
run: |
|
|
sudo apt-get update && \
|
|
sudo apt-get -y install build-essential git make \
|
|
pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \
|
|
libaudio-dev libjack-dev libsndio-dev libx11-dev libxext-dev \
|
|
libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libxtst-dev \
|
|
libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \
|
|
libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev \
|
|
libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev
|
|
|
|
- name: Check formatting
|
|
run: |
|
|
cargo +nightly fmt --check
|
|
|
|
- name: Build
|
|
run: |
|
|
cargo build
|
|
|
|
- name: Build with unstable cores enabled
|
|
run: |
|
|
cargo build --features unstable-cores
|
|
|
|
- name: Check Clippy warnings
|
|
run: |
|
|
cargo clippy -- -D warnings
|
|
|
|
- name: Run tests
|
|
run: |
|
|
cargo test
|
|
|
|
- name: Run tests with unstable cores enabled
|
|
run: |
|
|
cargo test --features unstable-cores
|
|
build-web:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install latest stable Rust toolchain
|
|
run: |
|
|
rustup update
|
|
|
|
- name: Install latest nightly Rust toolchain
|
|
run: |
|
|
rustup toolchain add nightly --component rust-src --component clippy
|
|
|
|
- name: Install wasm-pack
|
|
run: |
|
|
cargo install wasm-pack
|
|
|
|
- name: Build web
|
|
run: |
|
|
cd frontend/jgenesis-web && ./build.sh --dev
|
|
|
|
- name: Check Clippy warnings for web
|
|
run: |
|
|
cd frontend/jgenesis-web \
|
|
&& RUSTFLAGS='--cfg getrandom_backend="wasm_js"' cargo +nightly clippy --target wasm32-unknown-unknown
|
|
linux-release-appimage:
|
|
runs-on: ubuntu-22.04
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install latest stable Rust toolchain
|
|
run: |
|
|
rustup update
|
|
|
|
- name: Install latest nightly Rust toolchain
|
|
run: |
|
|
rustup toolchain add nightly --component rustfmt --component rust-src
|
|
|
|
# https://github.com/libsdl-org/SDL/blob/main/docs/README-linux.md#build-dependencies
|
|
- name: Install SDL3 system dependencies
|
|
run: |
|
|
sudo apt-get update && \
|
|
sudo apt-get -y install build-essential git make \
|
|
pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \
|
|
libaudio-dev libjack-dev libsndio-dev libx11-dev libxext-dev \
|
|
libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libxtst-dev \
|
|
libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \
|
|
libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev \
|
|
libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev
|
|
|
|
- name: Get latest cargo-packager version
|
|
id: get-packager-version
|
|
run: |
|
|
cargo search cargo-packager | head -1 | cut -d' ' -f3 | sed -re 's/"(.*)"/version=\1/g' >> $GITHUB_OUTPUT
|
|
|
|
- name: Cache cargo-packager binary
|
|
id: packager-cache
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ~/.cargo/bin/cargo-packager
|
|
key: ${{ runner.os }}-${{ steps.get-packager-version.outputs.version }}
|
|
|
|
- name: Install cargo-packager
|
|
if: steps.packager-cache.outputs.cache-hit != 'true'
|
|
run: |
|
|
cargo install cargo-packager --version ${{ steps.get-packager-version.outputs.version }}
|
|
|
|
- name: Build AppImage packages
|
|
run: |
|
|
RUST_LOG=debug cargo packager --profile release-lto -f appimage
|
|
|
|
- name: Upload CLI AppImage
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: linux-x86_64-cli-appimage
|
|
path: target/release-lto/jgenesis-cli_${{ env.JGENESIS_VERSION }}_x86_64.AppImage
|
|
|
|
- name: Upload GUI AppImage
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: linux-x86_64-gui-appimage
|
|
path: target/release-lto/jgenesis-gui_${{ env.JGENESIS_VERSION }}_x86_64.AppImage
|
|
windows-release:
|
|
runs-on: ubuntu-latest
|
|
|
|
env:
|
|
SDL_VERSION: 3.2.26
|
|
DXC_RELEASE_TAG: v1.8.2407
|
|
DXC_ZIP_FILE: dxc_2024_07_31.zip
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install latest stable Rust toolchain
|
|
run: |
|
|
rustup update
|
|
|
|
- name: Install latest nightly Rust toolchain
|
|
run: |
|
|
rustup toolchain add nightly --component rustfmt --component rust-src
|
|
|
|
- name: Install mingw32
|
|
run: |
|
|
sudo apt-get update && sudo apt-get install -y mingw-w64
|
|
|
|
- name: Install Windows x64 Rust build target (stable)
|
|
run: |
|
|
rustup target add x86_64-pc-windows-gnu
|
|
|
|
- name: Install Windows x64 Rust build target (nightly)
|
|
run: |
|
|
rustup target add --toolchain nightly x86_64-pc-windows-gnu
|
|
|
|
- name: Download & extract Windows SDL3 libraries
|
|
run: |
|
|
wget https://github.com/libsdl-org/SDL/releases/download/release-$SDL_VERSION/SDL3-$SDL_VERSION-win32-x64.zip && \
|
|
unzip SDL3-$SDL_VERSION-win32-x64.zip -d sdl3
|
|
|
|
- name: Download & extract DirectX shader compiler
|
|
run: |
|
|
mkdir dxcompiler && \
|
|
cd dxcompiler && \
|
|
wget https://github.com/microsoft/DirectXShaderCompiler/releases/download/$DXC_RELEASE_TAG/$DXC_ZIP_FILE && \
|
|
unzip $DXC_ZIP_FILE
|
|
|
|
- name: Build CLI release
|
|
run: |
|
|
RUSTFLAGS="-C target-cpu=x86-64-v2 -Z tune-cpu=x86-64-v3" \
|
|
cargo +nightly build --profile release-lto --target x86_64-pc-windows-gnu -p jgenesis-cli
|
|
|
|
- name: Build GUI release
|
|
run: |
|
|
RUSTFLAGS="-C target-cpu=x86-64-v2 -Z tune-cpu=x86-64-v3" \
|
|
cargo +nightly build --profile release-lto --target x86_64-pc-windows-gnu -p jgenesis-gui
|
|
|
|
- name: Compress binaries
|
|
run: |
|
|
mv LICENSE LICENSE-jgenesis.txt && \
|
|
mv target/x86_64-pc-windows-gnu/release-lto/*.exe ./ && \
|
|
mv sdl3/SDL3.dll ./ && \
|
|
mv sdl3/README.md ./README-SDL3.md && \
|
|
mv sdl3/LICENSE.txt ./LICENSE-SDL3.txt && \
|
|
mv dxcompiler/bin/x64/*.dll ./ && \
|
|
mv dxcompiler/LICENSE* ./ && \
|
|
zip -r jgenesis-${JGENESIS_VERSION}-cli-windows-x86_64.zip LICENSE* README-SDL3.md *.dll jgenesis-cli.exe && \
|
|
zip -r jgenesis-${JGENESIS_VERSION}-gui-windows-x86_64.zip LICENSE* README-SDL3.md *.dll jgenesis-gui.exe
|
|
|
|
- name: Upload CLI binaries
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: windows-x86_64-cli-exe
|
|
path: jgenesis-${{ env.JGENESIS_VERSION }}-cli-windows-x86_64.zip
|
|
|
|
- name: Upload GUI binaries
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: windows-x86_64-gui-exe
|
|
path: jgenesis-${{ env.JGENESIS_VERSION }}-gui-windows-x86_64.zip
|