Files
LiveSplitOne/.github/workflows/ci.yml
T
Christopher Serr 349d95ebb0 Context Menu, CSS Modules and React 19 (#1015)
This replaces the context menu with our own. By doing that we no longer
need to force install our npm packages, as there are no longer any
conflicts. In fact, as part of this change, I updated us to the latest
React 19 and even enabled the React compiler.

I also explored CSS modules for the first time, which are going to allow
us to reduce conflicts between CSS rules and possibly even allow us to
fully remove SASS, as the need for it is going to be reduced.

I also found out that the latest Rust nightly is broken due to their
update to LLVM 20. So I pinned the version to the last working nightly
version.
2025-02-20 21:40:55 +00:00

209 lines
6.7 KiB
YAML

name: CI
on:
pull_request:
push:
branches:
- "master"
jobs:
build:
runs-on: ${{ matrix.os }}
permissions:
contents: write
strategy:
fail-fast: false
matrix:
label:
- Web
- Tauri on Windows
- Tauri on Linux
- Tauri on macOS ARM
include:
- label: Web
platform: web
dist_path: dist
os: ubuntu-latest
target: x86_64-unknown-linux-musl
binaryen: x86_64-linux
cargo_bin: /home/runner/.cargo/bin
- label: Tauri on Windows
platform: tauri
dist_path: src-tauri/target/dist
os: windows-latest
target: x86_64-pc-windows-msvc
binaryen: x86_64-windows
cargo_bin: C:/Users/runneradmin/.cargo/bin
- label: Tauri on Linux
platform: tauri
dist_path: src-tauri/target/dist
os: ubuntu-22.04
target: x86_64-unknown-linux-musl
binaryen: x86_64-linux
cargo_bin: /home/runner/.cargo/bin
- label: Tauri on macOS ARM
platform: tauri
dist_path: src-tauri/target/dist
os: macos-latest
target: aarch64-apple-darwin
binaryen: arm64-macos
cargo_bin: /Users/runner/.cargo/bin
steps:
- name: Checkout commit
uses: actions/checkout@v4
with:
submodules: recursive
# This forces the entire history to be cloned, which is necessary for
# the changelog generation to work correctly.
fetch-depth: 0
- name: Install Node
uses: actions/setup-node@v4
with:
node-version: "lts/*"
- name: Install Rust
uses: hecrj/setup-rust-action@v2
with:
rust-version: nightly-2025-02-17
components: rust-src
targets: wasm32-unknown-unknown
- name: Download binaryen
if: github.repository == 'LiveSplit/LiveSplitOne' && github.ref == 'refs/heads/master'
uses: robinraju/[email protected]
with:
repository: "WebAssembly/binaryen"
latest: true
fileName: "binaryen-*-${{ matrix.binaryen }}.tar.gz"
out-file-path: ${{ matrix.cargo_bin }}
- name: Install binaryen
if: github.repository == 'LiveSplit/LiveSplitOne' && github.ref == 'refs/heads/master'
shell: bash
run: |
cd ${{ matrix.cargo_bin }}/..
tar -xzf bin/binaryen-*-${{ matrix.binaryen }}.tar.gz
mkdir -p lib
cp -R binaryen-*/bin/* bin
cp -R binaryen-*/lib/* lib
- name: Choose wasm-bindgen-cli version
shell: bash
run: echo "version=$(cd livesplit-core && cargo tree -i wasm-bindgen --features wasm-web --target wasm32-unknown-unknown --depth 0 | sed 's/.* v//g')" >> $GITHUB_OUTPUT
id: wasm-bindgen
- name: Download wasm-bindgen-cli
uses: robinraju/[email protected]
with:
repository: "rustwasm/wasm-bindgen"
tag: ${{ steps.wasm-bindgen.outputs.version }}
fileName: "wasm-bindgen-${{ steps.wasm-bindgen.outputs.version }}-${{ matrix.target }}.tar.gz"
out-file-path: ${{ matrix.cargo_bin }}
- name: Install wasm-bindgen-cli
shell: bash
run: |
cd ${{ matrix.cargo_bin }}
tar -xzf wasm-bindgen-${{ steps.wasm-bindgen.outputs.version }}-${{ matrix.target }}.tar.gz
mv wasm-bindgen-${{ steps.wasm-bindgen.outputs.version }}-${{ matrix.target }}/wasm* .
- name: Install npm packages
run: npm ci
env:
DETECT_CHROMEDRIVER_VERSION: true
- name: Install native dependencies (Tauri)
if: matrix.platform == 'tauri' && startsWith(matrix.os, 'ubuntu')
run: |
sudo apt update
sudo apt install libwebkit2gtk-4.0-dev \
build-essential \
curl \
wget \
file \
libssl-dev \
libgtk-3-dev \
libayatana-appindicator3-dev \
librsvg2-dev
- name: Build Core
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: npm run build:core:deploy
- name: Run eslint (Web)
if: matrix.platform == 'web'
run: npm run lint
- name: Build Frontend (Web)
if: matrix.platform == 'web'
run: npm run publish
- name: Build Frontend (Tauri)
if: matrix.platform == 'tauri'
run: npm run tauri:build-html
- name: Generate Icons (Tauri)
if: matrix.platform == 'tauri'
run: npm run tauri:icons
- name: Optimize
if: github.repository == 'LiveSplit/LiveSplitOne' && github.ref == 'refs/heads/master'
shell: bash
run: |
WASM_FILE=$(ls ${{ matrix.dist_path }}/*.wasm)
wasm-opt \
--enable-bulk-memory \
--enable-mutable-globals \
--enable-nontrapping-float-to-int \
--enable-sign-ext \
--enable-simd \
--enable-extended-const \
--enable-multivalue \
--enable-reference-types \
--enable-tail-call \
--strip-dwarf \
--strip-producers \
--strip-target-features \
-O4 "$WASM_FILE" -o "$WASM_FILE"
- name: Build (Tauri)
if: matrix.platform == 'tauri'
run: npm run tauri:publish
- name: Add CNAME file (Web)
if: matrix.platform == 'web' && github.repository == 'LiveSplit/LiveSplitOne' && github.ref == 'refs/heads/master'
run: cp ./.github/workflows/CNAME ./${{ matrix.dist_path }}/CNAME
- name: Deploy (Web)
if: matrix.platform == 'web' && github.repository == 'LiveSplit/LiveSplitOne' && github.ref == 'refs/heads/master'
uses: peaceiris/actions-gh-pages@v4
with:
deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
publish_branch: gh-pages
publish_dir: ./${{ matrix.dist_path }}
force_orphan: true
- name: Prepare Release (Tauri)
if: matrix.platform == 'tauri' && github.repository == 'LiveSplit/LiveSplitOne' && github.ref == 'refs/heads/master'
shell: bash
run: .github/workflows/build_zip.sh
env:
OS_NAME: ${{ matrix.os }}
TARGET: ${{ matrix.binaryen }}
- name: Release (Tauri)
if: matrix.platform == 'tauri' && github.repository == 'LiveSplit/LiveSplitOne' && github.ref == 'refs/heads/master'
uses: softprops/action-gh-release@v2
with:
files: LiveSplitOne-*.*
name: Latest
tag_name: latest
body: The latest desktop version of LiveSplit One, which has support for global hotkeys.