dev version #451
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
on: | |
workflow_dispatch: | |
push: | |
branches: | |
- master | |
pull_request: | |
branches: | |
- master | |
name: Continuous Integration | |
env: | |
PYTHON_DEBUG_VERSION: 3.11.4 | |
PYTHON_INSTALL_DIR: ~\AppData\Local\Programs\Python\Python311 | |
jobs: | |
test: | |
name: Test Suite ${{ matrix.job.target }} (${{ matrix.job.libcec }} pkg-config=${{ matrix.job.pkg-config || false }}) | |
runs-on: ${{ matrix.job.os }} | |
strategy: | |
matrix: | |
job: | |
- os: windows-latest | |
target: x86_64-pc-windows-msvc | |
use-cross: false | |
libcec: vendored-libcec | |
expected_libcec_abi: 6 | |
- os: windows-latest | |
target: x86_64-pc-windows-msvc | |
use-cross: false | |
libcec: static-libcec | |
expected_libcec_abi: 6 | |
additional_env: | |
LIBCEC_STATIC: "1" | |
- os: ubuntu-latest | |
target: arm-unknown-linux-gnueabi | |
use-cross: true | |
libcec: vendored-libcec | |
expected_libcec_abi: 6 | |
additional_env: | |
LIBCEC_VENDORED: "1" | |
- os: ubuntu-latest | |
target: armv7-unknown-linux-gnueabihf | |
use-cross: true | |
libcec: vendored-libcec | |
expected_libcec_abi: 6 | |
additional_env: | |
LIBCEC_VENDORED: "1" | |
- os: ubuntu-latest | |
target: x86_64-unknown-linux-gnu | |
use-cross: false # Not run in cross so that EXPECTED_LIBCEC_VERSION_MAJOR shows inside the test | |
libcec: vendored-libcec | |
expected_libcec_abi: 6 | |
additional_env: | |
LIBCEC_VENDORED: "1" | |
- os: ubuntu-latest | |
target: aarch64-unknown-linux-gnu | |
use-cross: true | |
libcec: static-libcec | |
expected_libcec_abi: 6 | |
additional_env: | |
LIBCEC_STATIC: "1" | |
# | |
# libcec discovery with pkg config | |
# | |
- os: ubuntu-latest | |
target: x86_64-unknown-linux-gnu | |
use-cross: false # Important that we do not run cross so package install shows up | |
libcec: "libcec4" | |
libcec-dev: "libcec-dev=4*" | |
pkg-config: true | |
expected_libcec_abi: 4 | |
- os: ubuntu-latest | |
target: x86_64-unknown-linux-gnu | |
use-cross: false # Important that we do not run cross so package install shows up | |
libcec: "libcec6" | |
libcec-dev: "libcec-dev=6*" | |
pkg-config: true | |
expected_libcec_abi: 6 | |
# | |
# libcec discovery without pkg config | |
# We set LD_LIBRARY_PATH and C_INCLUDE_PATH for compiler to find the preinstalled libcec | |
# | |
- os: ubuntu-latest | |
target: x86_64-unknown-linux-gnu | |
use-cross: false # Important that we do not run cross so package install shows up | |
libcec: "libcec4" | |
libcec-dev: "libcec-dev=4*" | |
pkg-config: false | |
expected_libcec_abi: 4 | |
additional_env: | |
LD_LIBRARY_PATH: "/usr/lib/x86_64-linux-gnu/" | |
C_INCLUDE_PATH: "/usr/include/libcec/" | |
- os: ubuntu-latest | |
target: x86_64-unknown-linux-gnu | |
use-cross: false # Important that we do not run cross so package install shows up | |
libcec: "libcec6" | |
libcec-dev: "libcec-dev=6*" | |
pkg-config: false | |
expected_libcec_abi: 6 | |
additional_env: | |
LD_LIBRARY_PATH: "/usr/lib/x86_64-linux-gnu/" | |
C_INCLUDE_PATH: "/usr/include/libcec/" | |
- os: ubuntu-latest | |
target: x86_64-unknown-linux-gnu | |
use-cross: false | |
libcec: "static-libcec" | |
pkg-config: false | |
expected_libcec_abi: 6 | |
additional_env: | |
LIBCEC_STATIC: "1" | |
- os: macos-latest | |
target: aarch64-apple-darwin | |
use-cross: false | |
libcec: "static-libcec" | |
pkg-config: false | |
expected_libcec_abi: 6 | |
additional_env: | |
LIBCEC_STATIC: "1" | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Installing Rust toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: stable | |
profile: minimal | |
target: ${{ matrix.job.target }} | |
override: true | |
- name: Run sccache-cache | |
uses: mozilla-actions/sccache-action@v0.0.3 | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
# use additional cache key, | |
# ensure cache separation | |
key: ${{ matrix.job.target }}-${{ matrix.job.libcec }}-${{ matrix.job.pkg-config }}-${{ matrix.job.additional_env.LIBCEC_STATIC }}-${{ matrix.job.additional_env.LD_LIBRARY_PATH }}-${{ matrix.job.additional_env.C_INCLUDE_PATH }} | |
# libcec and p8-platform from apt repo | |
- if: ${{ startsWith(matrix.job.libcec, 'libcec') && runner.os == 'Linux' }} | |
name: Install libcec(-dev) and build dependencies | |
run: | | |
set -ex | |
# introduce Ubuntu 20.04 (Focal Fossa) repos as well for easy libcec4 installation | |
sudo sh -c 'echo "deb http://archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse" >> /etc/apt/sources.list' | |
sudo apt-get update # re-loads apt sources | |
apt show '${{ matrix.job.libcec }}' | |
apt show '${{ matrix.job.libcec-dev }}' | |
sudo apt install -yq libudev-dev libp8-platform2 libp8-platform-dev '${{ matrix.job.libcec }}' '${{ matrix.job.libcec-dev }}' | |
# additional build dependencies for non-cross builds with vendored libcec sources | |
# Also needed by static in linking | |
- if: ${{ (startsWith(matrix.job.libcec, 'vendored') || startsWith(matrix.job.libcec, 'static')) && !matrix.job.use-cross && runner.os == 'Linux' }} | |
name: Install libudev-dev for non-cross vendored builds as libcec build dependency | |
run: | | |
set -ex | |
sudo apt-get update -yq | |
sudo apt-get install -yq libudev-dev | |
# setup developer command prompt for Windows | |
- if: ${{ startsWith(matrix.job.libcec, 'vendored') && !matrix.job.use-cross && runner.os == 'Windows' }} | |
name: Setup developer command prompt | |
uses: ilammy/msvc-dev-cmd@v1 | |
# pkg-config install | |
- if: ${{ startsWith(matrix.job.libcec, 'libcec') && matrix.job.pkg-config && runner.os == 'Linux' }} | |
name: Install pkg-config for utilizing libcec from apt build dependency | |
run: sudo apt-get install -yq pkg-config | |
# pkg-config remove | |
- if: ${{ startsWith(matrix.job.libcec, 'libcec') && !matrix.job.pkg-config && runner.os == 'Linux' }} | |
name: Remove pkg-config | |
run: sudo apt-get remove -yq pkg-config | |
# Windows: Patch build files such that they are compatible with sccache | |
- if: ${{ startsWith(matrix.job.libcec, 'vendored') && !matrix.job.use-cross && runner.os == 'Windows' }} | |
name: Make libcec build compatible with sccache for faster CI | |
shell: pwsh | |
run: | | |
.\scripts\ci\win_patch_sccache.ps1 | |
- if: runner.os == 'Linux' | |
name: cmake version | |
run: cmake --version | |
- if: ${{ startsWith(matrix.job.libcec, 'vendored') && runner.os == 'Windows' }} | |
name: Sets additional sccache env vars for windows | |
# See https://github.com/orgs/community/discussions/26641 | |
# for discussion on the syntax | |
run: | | |
echo "CMAKE_C_COMPILER_LAUNCHER=sccache.exe" >> $Env:GITHUB_ENV | |
echo "CMAKE_CXX_COMPILER_LAUNCHER=sccache.exe" >> $Env:GITHUB_ENV | |
echo "RUSTC_WRAPPER=sccache.exe" >> $Env:GITHUB_ENV | |
- if: ${{ startsWith(matrix.job.libcec, 'vendored') && runner.os != 'Windows' }} | |
name: Sets additional sccache env vars for non-windows | |
run: | | |
echo "CMAKE_C_COMPILER_LAUNCHER=sccache" >> "$GITHUB_ENV" | |
echo "CMAKE_CXX_COMPILER_LAUNCHER=sccache" >> "$GITHUB_ENV" | |
echo "RUSTC_WRAPPER=sccache" >> "$GITHUB_ENV" | |
- name: Cargo test | |
env: | |
EXPECTED_LIBCEC_VERSION_MAJOR: ${{ matrix.job.expected_libcec_abi }} | |
LD_LIBRARY_PATH: ${{ matrix.job.additional_env.LD_LIBRARY_PATH }} | |
C_INCLUDE_PATH: ${{ matrix.job.additional_env.C_INCLUDE_PATH }} | |
LIBCEC_STATIC: ${{ matrix.job.additional_env.LIBCEC_STATIC }} | |
LIBCEC_VENDORED: ${{ matrix.job.additional_env.LIBCEC_VENDORED }} | |
SCCACHE_GHA_ENABLED: "true" | |
uses: actions-rs/cargo@v1 | |
with: | |
command: test | |
use-cross: ${{ matrix.job.use-cross }} | |
args: --target ${{ matrix.job.target }} -vv | |
lint: | |
name: Lint | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Rustfmt check | |
uses: actions-rs/cargo@v1 | |
with: | |
command: fmt | |
args: --all -- --check | |
- name: Install libcec(-dev) and build dependencies | |
run: | | |
set -ex | |
# introduce Ubuntu 20.04 (Focal Fossa) repos as well for easy libcec4 installation | |
sudo sh -c 'echo "deb http://archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse" >> /etc/apt/sources.list' | |
sudo apt-get update # re-loads apt sources | |
apt show 'libcec6' | |
apt show 'libcec-dev=6*' | |
sudo apt install -yq libudev-dev libp8-platform2 libp8-platform-dev 'libcec6' 'libcec-dev=6*' | |
- name: Clippy Check | |
uses: actions-rs/cargo@v1 | |
with: | |
use-cross: false | |
command: clippy | |
args: -- --target x86_64-unknown-linux-gnu -D warnings |