Windowsでのテスト, CIが通るよう修正 #33
This file contains hidden or 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: Linux Test | |
on: | |
push: | |
branches: [ master, main ] | |
pull_request: | |
branches: [ master, main ] | |
jobs: | |
# ────────────────────────────── | |
# 1. x86_64 と i686 用ジョブ | |
# ────────────────────────────── | |
cross: | |
name: Test on Linux (x86_64 & i686) | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- target_arch: x86_64-unknown-linux-gnu | |
needs_multilib: false | |
pkgconfig_triple: x86_64-linux-gnu | |
- target_arch: i686-unknown-linux-gnu | |
needs_multilib: true | |
pkgconfig_triple: i386-linux-gnu | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Install build tools and cross-compilers | |
run: | | |
sudo apt-get update -qq | |
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y \ | |
cmake clang | |
if [ "${{ matrix.needs_multilib }}" = "true" ]; then | |
sudo apt-get install -y gcc-multilib g++-multilib | |
fi | |
shell: bash | |
- name: Install target libraries and configure pkg-config for cross | |
run: | | |
if [ "${{ matrix.needs_multilib }}" = "true" ]; then | |
sudo dpkg --add-architecture i386 | |
sudo apt-get update -qq | |
sudo apt-get install -y \ | |
gcc:i386 \ | |
g++:i386 \ | |
pkg-config:i386 \ | |
libpcsclite-dev:i386 \ | |
libdvbv5-dev:i386 \ | |
libudev-dev:i386 | |
else | |
sudo apt-get install -y \ | |
build-essential \ | |
pkg-config \ | |
libpcsclite-dev \ | |
libdvbv5-dev \ | |
libudev-dev | |
fi | |
# sysroot をルートに設定、.pc の場所も指定 | |
# SYSROOT="/" | |
# PC_DIR="/usr/lib/${{ matrix.pkgconfig_triple }}/pkgconfig" | |
# echo "PKG_CONFIG_SYSROOT_DIR=$SYSROOT" >> $GITHUB_ENV | |
# echo "PKG_CONFIG_PATH=$PC_DIR" >> $GITHUB_ENV | |
shell: bash | |
- name: Install Rust toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
toolchain: stable | |
target: ${{ matrix.target_arch }} | |
override: true | |
default: true | |
- name: Cargo Check & Test | |
run: | | |
cargo check -F dvb --target ${{ matrix.target_arch }} | |
cargo test -F dvb --target ${{ matrix.target_arch }} | |
shell: bash | |
# ────────────────────────────── | |
# 2. aarch64 用ジョブ(QEMU → docker run) | |
aarch64: | |
name: Test on Linux (ARM64 via Docker+QEMU) | |
runs-on: ubuntu-latest | |
needs: cross | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Set up QEMU emulation | |
uses: docker/setup-qemu-action@v3 | |
with: | |
platforms: linux/arm64 | |
- name: Run build inside ARM64 container | |
run: | | |
docker run --rm --privileged \ | |
--platform linux/arm64 \ | |
-v "${{ github.workspace }}:/work" \ | |
-w /work \ | |
ubuntu:22.04 \ | |
bash -lc ' | |
set -eux | |
apt-get update -qq | |
DEBIAN_FRONTEND=noninteractive apt-get install -y \ | |
build-essential cmake git wget clang pkg-config \ | |
libpcsclite-dev libdvbv5-dev libudev-dev gcc-aarch64-linux-gnu | |
# sysroot と pkgconfig パスを設定 | |
SYSROOT="/" | |
PC_DIR="$(dpkg-architecture -qDEB_HOST_MULTIARCH | xargs -I{} echo /usr/lib/{}/pkgconfig)" | |
export PKG_CONFIG_SYSROOT_DIR="$SYSROOT" | |
export PKG_CONFIG_PATH="$PC_DIR" | |
# Rust 環境セットアップ&ビルド | |
curl https://sh.rustup.rs -sSf | sh -s -- -y | |
source $HOME/.cargo/env | |
rustup target add aarch64-unknown-linux-gnu | |
cargo check -F dvb --target aarch64-unknown-linux-gnu | |
cargo test -F dvb --target aarch64-unknown-linux-gnu | |
' | |
shell: bash |