refact: ci, bridge (#9899) #220
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: CI | |
env: | |
# MIN_SUPPORTED_RUST_VERSION: "1.46.0" | |
# CICD_INTERMEDIATES_DIR: "_cicd-intermediates" | |
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite" | |
# vcpkg version: 2024.06.15 | |
# for multiarch gcc compatibility | |
VCPKG_COMMIT_ID: "f7423ee180c4b7f40d43402c2feb3859161ef625" | |
on: | |
workflow_dispatch: | |
pull_request: | |
paths-ignore: | |
- "docs/**" | |
- "README.md" | |
push: | |
branches: | |
- master | |
paths-ignore: | |
- ".github/**" | |
- "docs/**" | |
- "README.md" | |
- "res/**" | |
- "appimage/**" | |
- "flatpak/**" | |
jobs: | |
# ensure_cargo_fmt: | |
# name: Ensure 'cargo fmt' has been run | |
# runs-on: ubuntu-20.04 | |
# steps: | |
# - uses: actions-rs/toolchain@v1 | |
# with: | |
# toolchain: stable | |
# default: true | |
# profile: minimal | |
# components: rustfmt | |
# - uses: actions/checkout@v3 | |
# - run: cargo fmt -- --check | |
# min_version: | |
# name: Minimum supported rust version | |
# runs-on: ubuntu-20.04 | |
# steps: | |
# - name: Checkout source code | |
# uses: actions/checkout@v3 | |
# - name: Install rust toolchain (v${{ env.MIN_SUPPORTED_RUST_VERSION }}) | |
# uses: actions-rs/toolchain@v1 | |
# with: | |
# toolchain: ${{ env.MIN_SUPPORTED_RUST_VERSION }} | |
# default: true | |
# profile: minimal # minimal component installation (ie, no documentation) | |
# components: clippy | |
# - name: Run clippy (on minimum supported rust version to prevent warnings we can't fix) | |
# uses: actions-rs/cargo@v1 | |
# with: | |
# command: clippy | |
# args: --locked --all-targets --all-features -- --allow clippy::unknown_clippy_lints | |
# - name: Run tests | |
# uses: actions-rs/cargo@v1 | |
# with: | |
# command: test | |
# args: --locked | |
build: | |
name: ${{ matrix.job.target }} (${{ matrix.job.os }}) | |
runs-on: ${{ matrix.job.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
job: | |
# - { target: aarch64-unknown-linux-gnu , os: ubuntu-20.04, use-cross: true } | |
# - { target: arm-unknown-linux-gnueabihf , os: ubuntu-20.04, use-cross: true } | |
# - { target: arm-unknown-linux-musleabihf, os: ubuntu-20.04, use-cross: true } | |
# - { target: i686-pc-windows-msvc , os: windows-2022 } | |
# - { target: i686-unknown-linux-gnu , os: ubuntu-20.04, use-cross: true } | |
# - { target: i686-unknown-linux-musl , os: ubuntu-20.04, use-cross: true } | |
# - { target: x86_64-apple-darwin , os: macos-10.15 } | |
# - { target: x86_64-pc-windows-gnu , os: windows-2022 } | |
# - { target: x86_64-pc-windows-msvc , os: windows-2022 } | |
- { target: x86_64-unknown-linux-gnu , os: ubuntu-20.04 } | |
# - { target: x86_64-unknown-linux-musl , os: ubuntu-20.04, use-cross: true } | |
steps: | |
- name: Export GitHub Actions cache environment variables | |
uses: actions/github-script@v6 | |
with: | |
script: | | |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); | |
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); | |
- name: Checkout source code | |
uses: actions/checkout@v4 | |
- name: Install prerequisites | |
shell: bash | |
run: | | |
case ${{ matrix.job.target }} in | |
x86_64-unknown-linux-gnu) | |
sudo apt-get -y update | |
sudo apt-get install -y \ | |
clang \ | |
cmake \ | |
curl \ | |
gcc \ | |
git \ | |
g++ \ | |
libpam0g-dev \ | |
libasound2-dev \ | |
libgstreamer1.0-dev \ | |
libgstreamer-plugins-base1.0-dev \ | |
libgtk-3-dev \ | |
libpulse-dev \ | |
libva-dev \ | |
libvdpau-dev \ | |
libxcb-randr0-dev \ | |
libxcb-shape0-dev \ | |
libxcb-xfixes0-dev \ | |
libxdo-dev \ | |
libxfixes-dev \ | |
nasm \ | |
wget | |
;; | |
# arm-unknown-linux-*) sudo apt-get -y update ; sudo apt-get -y install gcc-arm-linux-gnueabihf ;; | |
# aarch64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt-get -y install gcc-aarch64-linux-gnu ;; | |
esac | |
- name: Setup vcpkg with Github Actions binary cache | |
uses: lukka/run-vcpkg@v11 | |
with: | |
vcpkgDirectory: /opt/artifacts/vcpkg | |
vcpkgGitCommitId: ${{ env.VCPKG_COMMIT_ID }} | |
- name: Install vcpkg dependencies | |
run: | | |
$VCPKG_ROOT/vcpkg install --x-install-root="$VCPKG_ROOT/installed" | |
shell: bash | |
- name: Install Rust toolchain | |
uses: dtolnay/rust-toolchain@v1 | |
with: | |
toolchain: stable | |
targets: ${{ matrix.job.target }} | |
components: '' | |
- name: Show version information (Rust, cargo, GCC) | |
shell: bash | |
run: | | |
gcc --version || true | |
rustup -V | |
rustup toolchain list | |
rustup default | |
cargo -V | |
rustc -V | |
- uses: Swatinem/rust-cache@v2 | |
- name: Build | |
uses: actions-rs/cargo@v1 | |
with: | |
use-cross: ${{ matrix.job.use-cross }} | |
command: build | |
args: --locked --target=${{ matrix.job.target }} | |
- name: clean | |
shell: bash | |
run: | | |
cargo clean | |
# - name: Strip debug information from executable | |
# id: strip | |
# shell: bash | |
# run: | | |
# # Figure out suffix of binary | |
# EXE_suffix="" | |
# case ${{ matrix.job.target }} in | |
# *-pc-windows-*) EXE_suffix=".exe" ;; | |
# esac; | |
# # Figure out what strip tool to use if any | |
# STRIP="strip" | |
# case ${{ matrix.job.target }} in | |
# arm-unknown-linux-*) STRIP="arm-linux-gnueabihf-strip" ;; | |
# aarch64-unknown-linux-gnu) STRIP="aarch64-linux-gnu-strip" ;; | |
# *-pc-windows-msvc) STRIP="" ;; | |
# esac; | |
# # Setup paths | |
# BIN_DIR="${{ env.CICD_INTERMEDIATES_DIR }}/stripped-release-bin/" | |
# mkdir -p "${BIN_DIR}" | |
# BIN_NAME="${{ env.PROJECT_NAME }}${EXE_suffix}" | |
# BIN_PATH="${BIN_DIR}/${BIN_NAME}" | |
# # Copy the release build binary to the result location | |
# cp "target/${{ matrix.job.target }}/release/${BIN_NAME}" "${BIN_DIR}" | |
# # Also strip if possible | |
# if [ -n "${STRIP}" ]; then | |
# "${STRIP}" "${BIN_PATH}" | |
# fi | |
# # Let subsequent steps know where to find the (stripped) bin | |
# echo ::set-output name=BIN_PATH::${BIN_PATH} | |
# echo ::set-output name=BIN_NAME::${BIN_NAME} | |
- name: Set testing options | |
id: test-options | |
shell: bash | |
run: | | |
# test only library unit tests and binary for arm-type targets | |
unset CARGO_TEST_OPTIONS | |
case ${{ matrix.job.target }} in | |
arm-* | aarch64-*) | |
CARGO_TEST_OPTIONS="--lib --bin ${PROJECT_NAME}" | |
;; | |
*) | |
CARGO_TEST_OPTIONS="--workspace --no-fail-fast -- --skip test_get_cursor_pos --skip test_get_key_state" | |
;; | |
esac; | |
#deprecated echo ::set-output name=CARGO_TEST_OPTIONS::${CARGO_TEST_OPTIONS} | |
echo "CARGO_TEST_OPTIONS=${CARGO_TEST_OPTIONS}" >> $GITHUB_ENV | |
echo "CARGO_TEST_OPTIONS=${CARGO_TEST_OPTIONS}" >> $GITHUB_OUTPUT | |
- name: Run tests | |
uses: actions-rs/cargo@v1 | |
with: | |
use-cross: ${{ matrix.job.use-cross }} | |
command: test | |
args: --locked --target=${{ matrix.job.target }} ${{ steps.test-options.outputs.CARGO_TEST_OPTIONS}} |