Decouple derive
dependencies
#587
Workflow file for this run
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 | |
- 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 mips musl | |
- Linux mips64 musl | |
- Linux mipsel 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 | |
- 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 | |
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 | |
networking: skip | |
# Networking fails due to some linking error regarding -lntdll | |
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 | |
- label: Linux i586 musl | |
target: i586-unknown-linux-musl | |
auto_splitting: skip | |
dylib: 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 | |
- label: Linux x86_64 gnux32 | |
target: x86_64-unknown-linux-gnux32 | |
cross: skip | |
install_target: true | |
# FIXME: The tests don't run because without cross we can't | |
# successfully link anything. | |
tests: skip | |
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 mips musl | |
target: mips-unknown-linux-musl | |
auto_splitting: skip | |
networking: skip | |
# FIXME: Networking Tests fail due to missing OpenSSL | |
# https://github.com/LiveSplit/livesplit-core/issues/308 | |
dylib: skip | |
- label: Linux mips64 musl | |
target: mips64-unknown-linux-muslabi64 | |
auto_splitting: skip | |
networking: skip | |
# FIXME: Networking Tests fail due to missing OpenSSL | |
# https://github.com/LiveSplit/livesplit-core/issues/308 | |
dylib: skip | |
- label: Linux mipsel musl | |
target: mipsel-unknown-linux-musl | |
auto_splitting: skip | |
networking: skip | |
# FIXME: Networking Tests fail due to missing OpenSSL | |
# https://github.com/LiveSplit/livesplit-core/issues/308 | |
dylib: skip | |
- label: Linux powerpc | |
target: powerpc-unknown-linux-gnu | |
auto_splitting: skip | |
networking: skip | |
# FIXME: Networking Tests fail due to missing OpenSSL | |
# https://github.com/LiveSplit/livesplit-core/issues/308 | |
- label: Linux powerpc64 | |
target: powerpc64-unknown-linux-gnu | |
auto_splitting: skip | |
networking: skip | |
# FIXME: Networking Tests fail due to missing OpenSSL | |
# https://github.com/LiveSplit/livesplit-core/issues/308 | |
- label: Linux powerpc64le | |
target: powerpc64le-unknown-linux-gnu | |
auto_splitting: skip | |
networking: skip | |
# FIXME: Networking Tests fail due to missing OpenSSL | |
# https://github.com/LiveSplit/livesplit-core/issues/308 | |
- label: Linux riscv64gc | |
target: riscv64gc-unknown-linux-gnu | |
networking: skip | |
# FIXME: Networking Tests fail due to missing OpenSSL | |
# https://github.com/LiveSplit/livesplit-core/issues/308 | |
- label: Linux s390x | |
target: s390x-unknown-linux-gnu | |
networking: skip | |
# FIXME: Networking Tests fail due to missing OpenSSL | |
# https://github.com/LiveSplit/livesplit-core/issues/308 | |
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 | |
networking: skip | |
# FIXME: Networking Tests fail due to missing OpenSSL | |
# https://github.com/LiveSplit/livesplit-core/issues/308 | |
# macOS | |
- label: macOS aarch64 | |
target: aarch64-apple-darwin | |
os: macOS-latest | |
cross: skip | |
tests: skip | |
install_target: true | |
# FIXME: Switch OS to ARM macOS once GitHub Actions provides that, | |
# use the toolchain instead of the target and run the tests. | |
- label: macOS x86_64 | |
target: x86_64-apple-darwin | |
os: macOS-latest | |
cross: skip | |
# 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 | |
networking: skip | |
# FIXME: The splits-io-api could probably use rustls instead of OpenSSL here | |
# https://github.com/LiveSplit/livesplit-core/issues/308 | |
- label: Android x86_64 | |
target: x86_64-linux-android | |
auto_splitting: skip | |
networking: skip | |
# FIXME: The splits-io-api could probably use rustls instead of OpenSSL here | |
# https://github.com/LiveSplit/livesplit-core/issues/308 | |
- label: Android arm | |
target: arm-linux-androideabi | |
auto_splitting: skip | |
networking: skip | |
# FIXME: The splits-io-api could probably use rustls instead of OpenSSL here | |
# https://github.com/LiveSplit/livesplit-core/issues/308 | |
- label: Android armv7 | |
target: armv7-linux-androideabi | |
auto_splitting: skip | |
networking: skip | |
# FIXME: The splits-io-api could probably use rustls instead of OpenSSL here | |
# https://github.com/LiveSplit/livesplit-core/issues/308 | |
- label: Android thumbv7neon | |
target: thumbv7neon-linux-androideabi | |
auto_splitting: skip | |
networking: skip | |
# FIXME: The splits-io-api could probably use rustls instead of OpenSSL here | |
# https://github.com/LiveSplit/livesplit-core/issues/308 | |
- label: Android aarch64 | |
target: aarch64-linux-android | |
auto_splitting: skip | |
networking: skip | |
# FIXME: The splits-io-api could probably use rustls instead of OpenSSL here | |
# https://github.com/LiveSplit/livesplit-core/issues/308 | |
# 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 | |
- label: NetBSD x86_64 | |
target: x86_64-unknown-netbsd | |
tests: skip | |
- label: Solaris sparcv9 | |
target: sparcv9-sun-solaris | |
tests: skip | |
- label: Solaris x86_64 | |
target: x86_64-sun-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: x86_64-apple-darwin | |
os: macOS-latest | |
toolchain: beta | |
release: skip | |
cross: skip | |
- label: macOS Nightly | |
target: x86_64-apple-darwin | |
os: macOS-latest | |
toolchain: nightly | |
release: skip | |
cross: skip | |
steps: | |
- name: Checkout Commit | |
uses: actions/checkout@v3 | |
- name: Install Rust | |
uses: hecrj/setup-rust-action@v1 | |
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: 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@v3 | |
- name: Install Rust | |
uses: hecrj/setup-rust-action@v1 | |
- 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@v3 | |
- name: Install Rust | |
uses: hecrj/setup-rust-action@v1 | |
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@v3 | |
- name: Install Rust | |
uses: hecrj/setup-rust-action@v1 | |
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@v3 | |
- name: Install Rust | |
uses: hecrj/setup-rust-action@v1 | |
- 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 |