Support the web
Target of wasm-bindgen
(#852)
#922
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build | |
on: | |
pull_request: | |
push: | |
branches: | |
- 'master' | |
tags: | |
- '*' | |
jobs: | |
build: | |
runs-on: ${{ matrix.os || 'ubuntu-latest' }} | |
strategy: | |
fail-fast: false | |
matrix: | |
label: | |
# Bare Metal | |
- Bare Metal Nvidia PTX 64 | |
# FIXME: fontdb currently can't handle this target. | |
# The `alloc::sync` module does not exist. | |
# - Bare Metal ARM Cortex-M thumbv6m | |
- Bare Metal ARM Cortex-M thumbv7em | |
- Bare Metal ARM Cortex-M thumbv7em Hardware Float | |
- Bare Metal ARM Cortex-M thumbv7m | |
- Bare Metal ARM Cortex-M thumbv8m.base | |
- Bare Metal ARM Cortex-M thumbv8m.main | |
- Bare Metal ARM Cortex-M thumbv8m.main Hardware Float | |
# FIXME: RISC-V without atomics doesn't work with ahash | |
# - Bare Metal RISC-V 32 i | |
# - Bare Metal RISC-V 32 imc | |
- Bare Metal RISC-V 32 imac | |
- Bare Metal RISC-V 64 gc | |
- Bare Metal RISC-V 64 imac | |
# WebAssembly | |
- WebAssembly Unknown | |
- WebAssembly Web | |
- WebAssembly WASI | |
# Windows | |
- Windows aarch64 | |
# FIXME: The `windows` crate doesn't compile on this target. | |
# - Windows i586 | |
- Windows i686 | |
- Windows x86_64 | |
- Windows i686 gnu | |
- Windows x86_64 gnu | |
# Linux | |
- Linux i586 | |
- Linux i586 musl | |
- Linux i686 | |
- Linux i686 musl | |
- Linux x86_64 | |
- Linux x86_64 musl | |
# FIXME: We can't link anything without cross. | |
# - Linux x86_64 gnux32 | |
- Linux arm | |
- Linux arm musl | |
- Linux arm Hardware Float | |
- Linux arm musl Hardware Float | |
- Linux armv5te | |
- Linux armv5te musl | |
- Linux armv7 | |
- Linux armv7 musl | |
- Linux armv7 Hardware Float | |
- Linux armv7 musl Hardware Float | |
- Linux thumbv7neon | |
- Linux aarch64 | |
- Linux aarch64 musl | |
- Linux powerpc | |
- Linux powerpc64 | |
- Linux powerpc64le | |
- Linux riscv64gc | |
- Linux s390x | |
- Linux sparc64 | |
# macOS | |
- macOS aarch64 | |
- macOS x86_64 | |
# iOS | |
- iOS aarch64 | |
- iOS x86_64 | |
# Android | |
- Android i686 | |
- Android x86_64 | |
- Android arm | |
- Android armv7 | |
- Android thumbv7neon | |
- Android aarch64 | |
# Other Unixes | |
- FreeBSD i686 | |
- FreeBSD x86_64 | |
- illumos x86_64 | |
# FIXME: The target currently fails to link due to | |
# "ld: cannot find -lexecinfo" | |
# - NetBSD x86_64 | |
- Solaris sparcv9 | |
# - Solaris x86_64 | |
# Testing other channels | |
- Windows Beta | |
- Windows Nightly | |
- Windows Beta gnu | |
- Windows Nightly gnu | |
- Linux Beta | |
- Linux Nightly | |
- macOS Beta | |
- macOS Nightly | |
include: | |
# Bare Metal | |
- label: Bare Metal Nvidia PTX 64 | |
target: nvptx64-nvidia-cuda | |
tests: skip | |
dylib: skip | |
release: skip | |
no_std: true | |
install_target: true | |
# FIXME: fontdb currently can't handle this target. | |
# The `alloc::sync` module does not exist. | |
# - label: Bare Metal ARM Cortex-M thumbv6m | |
# target: thumbv6m-none-eabi | |
# tests: skip | |
# dylib: skip | |
# release: skip | |
# no_std: true | |
# install_target: true | |
- label: Bare Metal ARM Cortex-M thumbv7em | |
target: thumbv7em-none-eabi | |
tests: skip | |
dylib: skip | |
release: skip | |
no_std: true | |
install_target: true | |
- label: Bare Metal ARM Cortex-M thumbv7em Hardware Float | |
target: thumbv7em-none-eabihf | |
tests: skip | |
dylib: skip | |
release: skip | |
no_std: true | |
install_target: true | |
- label: Bare Metal ARM Cortex-M thumbv7m | |
target: thumbv7m-none-eabi | |
tests: skip | |
dylib: skip | |
release: skip | |
no_std: true | |
install_target: true | |
- label: Bare Metal ARM Cortex-M thumbv8m.base | |
target: thumbv8m.base-none-eabi | |
tests: skip | |
dylib: skip | |
release: skip | |
no_std: true | |
install_target: true | |
- label: Bare Metal ARM Cortex-M thumbv8m.main | |
target: thumbv8m.main-none-eabi | |
tests: skip | |
dylib: skip | |
release: skip | |
no_std: true | |
install_target: true | |
- label: Bare Metal ARM Cortex-M thumbv8m.main Hardware Float | |
target: thumbv8m.main-none-eabihf | |
tests: skip | |
dylib: skip | |
release: skip | |
no_std: true | |
install_target: true | |
# - label: Bare Metal RISC-V 32 i | |
# target: riscv32i-unknown-none-elf | |
# tests: skip | |
# dylib: skip | |
# release: skip | |
# no_std: true | |
# install_target: true | |
# - label: Bare Metal RISC-V 32 imc | |
# target: riscv32imc-unknown-none-elf | |
# tests: skip | |
# dylib: skip | |
# release: skip | |
# no_std: true | |
# install_target: true | |
- label: Bare Metal RISC-V 32 imac | |
target: riscv32imac-unknown-none-elf | |
tests: skip | |
dylib: skip | |
release: skip | |
no_std: true | |
install_target: true | |
- label: Bare Metal RISC-V 64 gc | |
target: riscv64gc-unknown-none-elf | |
tests: skip | |
dylib: skip | |
release: skip | |
no_std: true | |
install_target: true | |
- label: Bare Metal RISC-V 64 imac | |
target: riscv64imac-unknown-none-elf | |
tests: skip | |
dylib: skip | |
release: skip | |
no_std: true | |
install_target: true | |
# WebAssembly | |
- label: WebAssembly Unknown | |
target: wasm32-unknown-unknown | |
cross: skip | |
tests: skip | |
dylib: skip | |
release: skip | |
install_target: true | |
- label: WebAssembly Web | |
target: wasm32-unknown-unknown | |
cross: skip | |
tests: skip | |
dylib: skip | |
install_target: true | |
features: "--features wasm-web" | |
- label: WebAssembly WASI | |
target: wasm32-wasi | |
auto_splitting: skip | |
cross: skip | |
dylib: skip | |
install_target: true | |
# Windows | |
- label: Windows aarch64 | |
target: aarch64-pc-windows-msvc | |
os: windows-latest | |
cross: skip | |
tests: skip | |
install_target: true | |
# - label: Windows i586 | |
# target: i586-pc-windows-msvc | |
# os: windows-latest | |
# cross: skip | |
# auto_splitting: skip | |
# install_target: true | |
- label: Windows i686 | |
target: i686-pc-windows-msvc | |
os: windows-latest | |
cross: skip | |
auto_splitting: skip | |
install_target: true | |
- label: Windows x86_64 | |
target: x86_64-pc-windows-msvc | |
os: windows-latest | |
cross: skip | |
- label: Windows i686 gnu | |
target: i686-pc-windows-gnu | |
toolchain: stable-i686-pc-windows-gnu | |
os: windows-latest | |
cross: skip | |
auto_splitting: skip | |
install_target: true | |
- label: Windows x86_64 gnu | |
target: x86_64-pc-windows-gnu | |
toolchain: stable-x86_64-pc-windows-gnu | |
os: windows-latest | |
cross: skip | |
install_target: true | |
# Linux | |
- label: Linux i586 | |
target: i586-unknown-linux-gnu | |
auto_splitting: skip | |
# FIXME: rustls currently does not support i586. | |
networking: skip | |
- label: Linux i586 musl | |
target: i586-unknown-linux-musl | |
auto_splitting: skip | |
dylib: skip | |
# FIXME: rustls currently does not support i586. | |
networking: skip | |
- label: Linux i686 | |
target: i686-unknown-linux-gnu | |
auto_splitting: skip | |
- label: Linux i686 musl | |
target: i686-unknown-linux-musl | |
auto_splitting: skip | |
dylib: skip | |
- label: Linux x86_64 | |
target: x86_64-unknown-linux-gnu | |
- label: Linux x86_64 musl | |
target: x86_64-unknown-linux-musl | |
dylib: skip | |
# FIXME: We can't link anything without cross. | |
# - label: Linux x86_64 gnux32 | |
# target: x86_64-unknown-linux-gnux32 | |
# cross: skip | |
# install_target: true | |
# dylib: skip | |
- label: Linux arm | |
target: arm-unknown-linux-gnueabi | |
auto_splitting: skip | |
- label: Linux arm musl | |
target: arm-unknown-linux-musleabi | |
auto_splitting: skip | |
dylib: skip | |
- label: Linux arm Hardware Float | |
target: arm-unknown-linux-gnueabihf | |
auto_splitting: skip | |
dylib: skip | |
- label: Linux arm musl Hardware Float | |
target: arm-unknown-linux-musleabihf | |
auto_splitting: skip | |
dylib: skip | |
- label: Linux armv5te | |
target: armv5te-unknown-linux-gnueabi | |
auto_splitting: skip | |
dylib: skip | |
- label: Linux armv5te musl | |
target: armv5te-unknown-linux-musleabi | |
auto_splitting: skip | |
dylib: skip | |
- label: Linux armv7 | |
target: armv7-unknown-linux-gnueabi | |
auto_splitting: skip | |
- label: Linux armv7 musl | |
target: armv7-unknown-linux-musleabi | |
auto_splitting: skip | |
dylib: skip | |
- label: Linux armv7 Hardware Float | |
target: armv7-unknown-linux-gnueabihf | |
auto_splitting: skip | |
- label: Linux armv7 musl Hardware Float | |
target: armv7-unknown-linux-musleabihf | |
auto_splitting: skip | |
dylib: skip | |
- label: Linux thumbv7neon | |
target: thumbv7neon-unknown-linux-gnueabihf | |
auto_splitting: skip | |
- label: Linux aarch64 | |
target: aarch64-unknown-linux-gnu | |
- label: Linux aarch64 musl | |
target: aarch64-unknown-linux-musl | |
dylib: skip | |
- label: Linux powerpc | |
target: powerpc-unknown-linux-gnu | |
auto_splitting: skip | |
- label: Linux powerpc64 | |
target: powerpc64-unknown-linux-gnu | |
auto_splitting: skip | |
- label: Linux powerpc64le | |
target: powerpc64le-unknown-linux-gnu | |
auto_splitting: skip | |
- label: Linux riscv64gc | |
target: riscv64gc-unknown-linux-gnu | |
- label: Linux s390x | |
target: s390x-unknown-linux-gnu | |
software_rendering: skip | |
# FIXME: Somehow the rendering is messed up on s390x. I didn't look | |
# into what the problem is. Might be inaccurate floating point on | |
# this architecture. | |
- label: Linux sparc64 | |
target: sparc64-unknown-linux-gnu | |
auto_splitting: skip | |
# FIXME: rustls currently does not support sparc64. | |
networking: skip | |
# macOS | |
- label: macOS aarch64 | |
target: aarch64-apple-darwin | |
os: macos-latest | |
cross: skip | |
- label: macOS x86_64 | |
target: x86_64-apple-darwin | |
os: macos-latest | |
cross: skip | |
install_target: true | |
# iOS | |
- label: iOS aarch64 | |
target: aarch64-apple-ios | |
os: macOS-latest | |
cross: skip | |
dylib: skip | |
tests: skip | |
install_target: true | |
- label: iOS x86_64 | |
target: x86_64-apple-ios | |
os: macOS-latest | |
cross: skip | |
dylib: skip | |
tests: skip | |
install_target: true | |
# Android | |
- label: Android i686 | |
target: i686-linux-android | |
auto_splitting: skip | |
- label: Android x86_64 | |
target: x86_64-linux-android | |
auto_splitting: skip | |
- label: Android arm | |
target: arm-linux-androideabi | |
auto_splitting: skip | |
- label: Android armv7 | |
target: armv7-linux-androideabi | |
auto_splitting: skip | |
- label: Android thumbv7neon | |
target: thumbv7neon-linux-androideabi | |
auto_splitting: skip | |
- label: Android aarch64 | |
target: aarch64-linux-android | |
auto_splitting: skip | |
# Other Unixes | |
- label: FreeBSD i686 | |
target: i686-unknown-freebsd | |
tests: skip | |
- label: FreeBSD x86_64 | |
target: x86_64-unknown-freebsd | |
tests: skip | |
- label: illumos x86_64 | |
target: x86_64-unknown-illumos | |
tests: skip | |
# FIXME: The target currently fails to link due to | |
# "ld: cannot find -lexecinfo" | |
# - label: NetBSD x86_64 | |
# target: x86_64-unknown-netbsd | |
# tests: skip | |
- label: Solaris sparcv9 | |
target: sparcv9-sun-solaris | |
tests: skip | |
# FIXME: The target got renamed and cross doesn't support it yet. | |
# - label: Solaris x86_64 | |
# target: x86_64-pc-solaris | |
# tests: skip | |
# Testing other channels | |
- label: Windows Beta | |
target: x86_64-pc-windows-msvc | |
os: windows-latest | |
toolchain: beta | |
release: skip | |
cross: skip | |
- label: Windows Nightly | |
target: x86_64-pc-windows-msvc | |
os: windows-latest | |
toolchain: nightly | |
release: skip | |
cross: skip | |
- label: Windows Beta gnu | |
target: x86_64-pc-windows-gnu | |
toolchain: beta-x86_64-pc-windows-gnu | |
release: skip | |
os: windows-latest | |
cross: skip | |
install_target: true | |
- label: Windows Nightly gnu | |
target: x86_64-pc-windows-gnu | |
toolchain: nightly-x86_64-pc-windows-gnu | |
release: skip | |
os: windows-latest | |
cross: skip | |
install_target: true | |
- label: Linux Beta | |
target: x86_64-unknown-linux-gnu | |
toolchain: beta | |
release: skip | |
- label: Linux Nightly | |
target: x86_64-unknown-linux-gnu | |
toolchain: nightly | |
release: skip | |
- label: macOS Beta | |
target: aarch64-apple-darwin | |
os: macOS-latest | |
toolchain: beta | |
release: skip | |
cross: skip | |
- label: macOS Nightly | |
target: aarch64-apple-darwin | |
os: macOS-latest | |
toolchain: nightly | |
release: skip | |
cross: skip | |
steps: | |
- name: Checkout Commit | |
uses: actions/checkout@v4 | |
- name: Install Rust | |
uses: hecrj/setup-rust-action@v2 | |
with: | |
rust-version: ${{ matrix.toolchain || 'stable' }} | |
- name: Install Target | |
if: matrix.install_target != '' | |
run: rustup target add ${{ matrix.target }} | |
- name: Download cross | |
if: matrix.cross == '' && matrix.no_std == '' | |
uses: robinraju/[email protected] | |
with: | |
repository: "cross-rs/cross" | |
latest: true | |
fileName: "cross-x86_64-unknown-linux-gnu.tar.gz" | |
out-file-path: "/home/runner/.cargo/bin" | |
- name: Install cross | |
if: matrix.cross == '' && matrix.no_std == '' | |
run: | | |
cd ~/.cargo/bin | |
tar -xzf cross-x86_64-unknown-linux-gnu.tar.gz | |
- name: Build Static Library | |
run: sh .github/workflows/build_static.sh | |
env: | |
TARGET: ${{ matrix.target }} | |
SKIP_CROSS: ${{ matrix.cross }} | |
IS_DEPLOY: ${{ startsWith(github.ref, 'refs/tags/') && (matrix.release_anyway != '' || !(startsWith(matrix.toolchain, 'nightly') || startsWith(matrix.toolchain, 'beta'))) }} | |
FEATURES: ${{ matrix.features }} | |
NO_STD: ${{ matrix.no_std }} | |
- name: Build Shared Library | |
if: matrix.dylib == '' | |
run: sh .github/workflows/build_shared.sh | |
env: | |
TARGET: ${{ matrix.target }} | |
SKIP_CROSS: ${{ matrix.cross }} | |
IS_DEPLOY: ${{ startsWith(github.ref, 'refs/tags/') && (matrix.release_anyway != '' || !(startsWith(matrix.toolchain, 'nightly') || startsWith(matrix.toolchain, 'beta'))) }} | |
FEATURES: ${{ matrix.features }} | |
- name: Test | |
if: matrix.tests == '' | |
run: sh .github/workflows/test.sh | |
env: | |
TARGET: ${{ matrix.target }} | |
SKIP_CROSS: ${{ matrix.cross }} | |
SKIP_AUTO_SPLITTING: ${{ matrix.auto_splitting }} | |
SKIP_NETWORKING: ${{ matrix.networking }} | |
SKIP_SOFTWARE_RENDERING: ${{ matrix.software_rendering }} | |
- name: Upload screenshots | |
if: matrix.tests == '' && (success() || failure()) | |
uses: actions/upload-artifact@v4 | |
with: | |
name: Screenshots ${{ matrix.label }} | |
path: target/renders | |
- name: Prepare Release | |
if: startsWith(github.ref, 'refs/tags/') && matrix.release == '' | |
shell: bash | |
run: .github/workflows/before_deploy.sh | |
env: | |
OS_NAME: ${{ matrix.os }} | |
TARGET: ${{ matrix.target }} | |
- name: Release | |
if: startsWith(github.ref, 'refs/tags/') && matrix.release == '' | |
uses: softprops/action-gh-release@v1 | |
with: | |
files: livesplit-core-*.* | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
bind_gen: | |
name: Generate bindings | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout Commit | |
uses: actions/checkout@v4 | |
- name: Install Rust | |
uses: hecrj/setup-rust-action@v2 | |
- name: Generate bindings | |
run: | | |
cd capi/bind_gen | |
cargo run | |
cd ../.. | |
clippy: | |
name: Check clippy lints | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout Commit | |
uses: actions/checkout@v4 | |
- name: Install Rust | |
uses: hecrj/setup-rust-action@v2 | |
with: | |
components: clippy | |
- name: Run Clippy | |
run: cargo clippy --all-features | |
format: | |
name: Check formatting | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout Commit | |
uses: actions/checkout@v4 | |
- name: Install Rust | |
uses: hecrj/setup-rust-action@v2 | |
with: | |
components: rustfmt | |
- name: Run cargo fmt | |
run: cargo fmt -- --check || true | |
bench: | |
name: Run benchmarks | |
runs-on: ubuntu-latest | |
env: | |
CRITERION_TOKEN: ${{ secrets.CRITERION_TOKEN }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install Rust | |
uses: hecrj/setup-rust-action@v2 | |
- name: Run benchmarks | |
run: | | |
# run benchmarks and save baseline to "criterion.dev.temp" | |
cargo bench --all-features -- --verbose --noplot --save-baseline criterion.dev.temp | |
# # set the path to the file to upload to criterion.dev | |
# echo "CRITERION_FILE_PATH=$(find ./target/criterion/ -name raw.csv)" >> $GITHUB_ENV | |
# - name: Upload benchmarks | |
# run: | | |
# # upload the file | |
# curl -F 'raw.csv=@${{ env.CRITERION_FILE_PATH }}' \ | |
# 'https://api.criterion.dev/v1/${{ github.repository }}/measurements?token=${{ secrets.CRITERION_TOKEN }}&commit=${{ github.sha }}' | |
docs: | |
name: Generate documentation | |
if: startsWith(github.ref, 'refs/tags/') | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@master | |
- name: Use Node 10 | |
uses: actions/setup-node@v1 | |
with: | |
node-version: '10.x' | |
- name: Build TypeScript documentation | |
run: | | |
cd capi/js | |
make docs | |
cd ../.. | |
- name: Upload documentation files | |
run: | | |
git config --global user.email "[email protected]" | |
git config --global user.name "GitHub Action" | |
git clone -q "https://github.com/LiveSplit/livesplit-core-docs" | |
cd livesplit-core-docs | |
rm -r * | |
mv ../docs/* . | |
git add . | |
git commit --amend -m "Update documentation" | |
git push --force https://action:${{ secrets.LIVESPLIT_CORE_DOCS_UPLOAD }}@github.com/LiveSplit/livesplit-core-docs.git |