Skip to content

chore: add public history hygiene gate #1

chore: add public history hygiene gate

chore: add public history hygiene gate #1

Workflow file for this run

name: CI
on:
workflow_dispatch:
push:
branches: [master]
pull_request:
branches: [master]
env:
CARGO_TERM_COLOR: always
jobs:
hygiene:
name: Hygiene
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Check public tree contains no dev-meta paths
shell: bash
run: ./scripts/check_tree_clean.sh
test:
name: Test
needs: hygiene
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
rust: [stable]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
toolchain: ${{ matrix.rust }}
components: rustfmt, clippy
- name: Install Linux dependencies (GUI + audio)
if: runner.os == 'Linux'
run: |
sudo apt-get update -qq
sudo apt-get install -y --no-install-recommends \
libxkbcommon-dev \
libwayland-dev \
libx11-dev libxcursor-dev libxrandr-dev libxi-dev \
libvulkan-dev mesa-vulkan-drivers \
libfontconfig1-dev libfreetype6-dev \
libegl1-mesa-dev \
libasound2-dev
- name: Cache cargo registry
uses: actions/cache@v4
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo index
uses: actions/cache@v4
with:
path: ~/.cargo/git
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo build
uses: actions/cache@v4
with:
path: target
key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}
- name: Run cargo check
run: cargo check --verbose
- name: Run cargo fmt check
run: cargo fmt --all -- --check
- name: Run cargo clippy
run: cargo clippy --all-targets --all-features -- -D warnings
- name: Run cargo test
run: cargo test --verbose
build:
name: Build Release
needs: hygiene
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
include:
- os: ubuntu-latest
artifact_name: tslime
asset_name: tslime-linux-x86_64
- os: macos-latest
artifact_name: tslime
asset_name: tslime-macos-x86_64
- os: windows-latest
artifact_name: tslime.exe
asset_name: tslime-windows-x86_64.exe
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo registry
uses: actions/cache@v4
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo index
uses: actions/cache@v4
with:
path: ~/.cargo/git
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo build
uses: actions/cache@v4
with:
path: target
key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}
- name: Build release binary
run: cargo build --release --verbose
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.asset_name }}
path: target/release/${{ matrix.artifact_name }}
gui-build:
name: GUI Build
needs: hygiene
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
include:
- os: ubuntu-latest
artifact_name: tslime
asset_name: tslime-gui-linux-x86_64
- os: macos-latest
artifact_name: tslime
asset_name: tslime-gui-macos
- os: windows-latest
artifact_name: tslime.exe
asset_name: tslime-gui-windows.exe
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Install Linux GUI dependencies
if: runner.os == 'Linux'
run: |
sudo apt-get update -qq
sudo apt-get install -y --no-install-recommends \
libxkbcommon-dev \
libwayland-dev \
libx11-dev libxcursor-dev libxrandr-dev libxi-dev \
libvulkan-dev mesa-vulkan-drivers \
libfontconfig1-dev libfreetype6-dev \
libegl1-mesa-dev
- name: Cache cargo registry
uses: actions/cache@v4
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-cargo-registry-gui-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo index
uses: actions/cache@v4
with:
path: ~/.cargo/git
key: ${{ runner.os }}-cargo-index-gui-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo build
uses: actions/cache@v4
with:
path: target
key: ${{ runner.os }}-cargo-build-gui-${{ hashFiles('**/Cargo.lock') }}
- name: Build GUI binary
run: cargo build --release --features gui --verbose
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.asset_name }}
path: target/release/${{ matrix.artifact_name }}
benchmarks:
name: Benchmarks
needs: hygiene
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo registry
uses: actions/cache@v4
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo index
uses: actions/cache@v4
with:
path: ~/.cargo/git
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo build
uses: actions/cache@v4
with:
path: target
key: ${{ runner.os }}-cargo-build-bench-${{ hashFiles('**/Cargo.lock') }}
- name: Run benchmarks
run: cargo bench --verbose
- name: Upload benchmark results
uses: actions/upload-artifact@v4
with:
name: benchmarks
path: target/criterion/
- name: Check binary size
run: |
# cargo bench leaves a bench-profile binary (no strip/LTO) in
# target/release; build the real release binary before measuring.
cargo build --release
size target/release/tslime
SIZE=$(stat -c%s target/release/tslime)
# Headroom over the ~3.1MB Linux release binary; this artifact is a
# smoke check, not the shipped binary, so the bound is intentionally loose.
MAX_SIZE=4000000
if [ $SIZE -gt $MAX_SIZE ]; then
echo "Binary size $SIZE exceeds $MAX_SIZE limit"
exit 1
fi
echo "Binary size $SIZE is under $MAX_SIZE limit"