mirror of
https://github.com/momo5502/emulator.git
synced 2026-01-19 03:33:56 +00:00
This will always use the windows release test sample artifacts. It doesn't really make sense to test the debug artifacts. They're just slower and do the same. This will still run debug artifacts on windows. The change only applies to non-windows platforms
423 lines
14 KiB
YAML
423 lines
14 KiB
YAML
name: Build
|
|
|
|
on:
|
|
schedule:
|
|
- cron: '0 0 * * *'
|
|
push:
|
|
branches:
|
|
- "**"
|
|
pull_request:
|
|
branches:
|
|
- "**"
|
|
types: [opened, synchronize, reopened]
|
|
workflow_dispatch:
|
|
inputs:
|
|
verbose:
|
|
description: "Enable verbose logging during tests"
|
|
type: choice
|
|
required: false
|
|
default: "false"
|
|
options:
|
|
- "true"
|
|
- "false"
|
|
|
|
#concurrency:
|
|
# group: ${{ github.ref }}
|
|
# cancel-in-progress: true
|
|
|
|
jobs:
|
|
clang-tidy:
|
|
name: Run Clang Tidy
|
|
runs-on: ubuntu-24.04
|
|
env:
|
|
LLVM_VERSION: 20
|
|
steps:
|
|
- name: Checkout Source
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: recursive
|
|
|
|
- name: Install Ninja
|
|
uses: seanmiddleditch/gha-setup-ninja@v6
|
|
|
|
- name: Install Clang
|
|
run: |
|
|
wget https://apt.llvm.org/llvm.sh
|
|
chmod +x llvm.sh
|
|
sudo ./llvm.sh ${{ env.LLVM_VERSION }}
|
|
sudo apt install -y clang-tidy-${{ env.LLVM_VERSION }}
|
|
sudo apt install -y clang-${{ env.LLVM_VERSION }} lld-${{ env.LLVM_VERSION }}
|
|
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/clang-${{ env.LLVM_VERSION }} 100
|
|
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++-${{ env.LLVM_VERSION }} 100
|
|
sudo update-alternatives --set cc /usr/bin/clang-${{ env.LLVM_VERSION }}
|
|
sudo update-alternatives --set c++ /usr/bin/clang++-${{ env.LLVM_VERSION }}
|
|
|
|
- name: CMake Build
|
|
run: cmake --preset=release -DMOMO_ENABLE_CLANG_TIDY=On && cmake --build --preset=release
|
|
|
|
verify-formatting:
|
|
name: Verify Formatting
|
|
runs-on: ubuntu-24.04
|
|
steps:
|
|
- name: Checkout Source
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Verify Formatting
|
|
uses: jidicula/clang-format-action@v4.15.0
|
|
with:
|
|
clang-format-version: '20'
|
|
check-path: 'src'
|
|
|
|
build-apiset-dumper:
|
|
name: Build API Set Dumper
|
|
runs-on: windows-latest
|
|
steps:
|
|
- name: Checkout Source
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: recursive
|
|
|
|
- name: Install Ninja
|
|
uses: seanmiddleditch/gha-setup-ninja@v6
|
|
|
|
- name: Enable Developer Command Prompt
|
|
uses: ilammy/msvc-dev-cmd@v1.13.0
|
|
|
|
- name: CMake Build
|
|
run: cmake --preset=release && cmake --build --preset=release -t dump-apiset
|
|
|
|
- name: Upload Artifacts
|
|
uses: pyTooling/upload-artifact@v4
|
|
with:
|
|
name: Temp API Set Dumper
|
|
working-directory: build/release/artifacts/
|
|
path: "*"
|
|
|
|
create-emulation-root:
|
|
name: Create Emulation Root
|
|
runs-on: ${{ matrix.runner }}
|
|
needs: [build-apiset-dumper]
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
platform:
|
|
- Windows 2025
|
|
- Windows 2022
|
|
- Windows 2019
|
|
include:
|
|
- platform: Windows 2025
|
|
runner: windows-2025
|
|
- platform: Windows 2022
|
|
runner: windows-2022
|
|
- platform: Windows 2019
|
|
runner: windows-2019
|
|
steps:
|
|
- name: Checkout Source
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Download DirectX Runtime
|
|
run: curl --connect-timeout 20 --max-time 200 --retry 5 --retry-delay 2 --retry-max-time 200 -L -o directx_Jun2010_redist.exe https://download.microsoft.com/download/8/4/A/84A35BF1-DAFE-4AE8-82AF-AD2AE20B6B14/directx_Jun2010_redist.exe
|
|
|
|
- name: Extract DirectX Runtime
|
|
run: "cmd /c \"start /wait directx_Jun2010_redist.exe /Q /T:${{github.workspace}}/dxrt\""
|
|
|
|
- name: Install DirectX Runtime
|
|
run: "cmd /c \"start /wait .\\dxrt\\dxsetup.exe /silent\""
|
|
|
|
- name: Download API Set Dumper
|
|
uses: pyTooling/download-artifact@v4
|
|
with:
|
|
name: Temp API Set Dumper
|
|
path: build/release/artifacts
|
|
|
|
- name: Create Emulation Root
|
|
run: src/tools/create-root.bat
|
|
|
|
- name: Dump API Set
|
|
run: cd root && ../build/release/artifacts/dump-apiset.exe
|
|
|
|
- name: Upload Artifacts
|
|
uses: pyTooling/upload-artifact@v4
|
|
with:
|
|
name: ${{ matrix.platform }} Emulation Root
|
|
path: "*"
|
|
working-directory: root
|
|
retention-days: 1
|
|
|
|
build:
|
|
name: Build
|
|
runs-on: ${{ matrix.runner }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
platform:
|
|
- Windows x86_64
|
|
- Linux x86_64 GCC
|
|
- Linux x86_64 GCC Sanitizer
|
|
- Linux x86_64 Clang
|
|
- macOS arm64
|
|
- macOS x86_64
|
|
- iOS arm64
|
|
- Android x86_64
|
|
- Android arm64-v8a
|
|
configuration:
|
|
- Debug
|
|
- Release
|
|
include:
|
|
- configuration: Debug
|
|
preset: debug
|
|
- configuration: Release
|
|
preset: release
|
|
- platform: Windows x86_64
|
|
runner: windows-latest
|
|
- platform: Linux x86_64 GCC Sanitizer
|
|
runner: ubuntu-24.04
|
|
cmake-options: "-DMOMO_ENABLE_SANITIZER=On"
|
|
- platform: Linux x86_64 GCC
|
|
runner: ubuntu-24.04
|
|
- platform: Linux x86_64 Clang
|
|
runner: ubuntu-24.04
|
|
clang-version: 20
|
|
- platform: iOS arm64
|
|
runner: macos-latest
|
|
rust-target: aarch64-apple-ios
|
|
cmake-options: "-DCMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/cmake/toolchain/ios.cmake"
|
|
- platform: macOS arm64
|
|
runner: macos-latest
|
|
- platform: macOS x86_64
|
|
runner: macos-13
|
|
- platform: Android x86_64
|
|
runner: ubuntu-24.04
|
|
abi: x86_64
|
|
rust-target: x86_64-linux-android
|
|
cmake-options: "-DCMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/cmake/toolchain/android-ndk.cmake"
|
|
- platform: Android arm64-v8a
|
|
runner: ubuntu-24.04
|
|
abi: arm64-v8a
|
|
rust-target: aarch64-linux-android
|
|
cmake-options: "-DCMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/cmake/toolchain/android-ndk.cmake"
|
|
steps:
|
|
- name: Checkout Source
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: recursive
|
|
|
|
- name: Install Ninja
|
|
uses: seanmiddleditch/gha-setup-ninja@v6
|
|
|
|
- name: Install Rust Target
|
|
if: "${{ matrix.rust-target }}"
|
|
run: rustup target add ${{ matrix.rust-target }}
|
|
|
|
- name: Install Clang
|
|
if: "${{ matrix.platform == 'Linux x86_64 Clang' }}"
|
|
run: |
|
|
wget https://apt.llvm.org/llvm.sh
|
|
chmod +x llvm.sh
|
|
sudo ./llvm.sh ${{ matrix.clang-version }}
|
|
sudo apt install -y clang-${{ matrix.clang-version }} lld-${{ matrix.clang-version }}
|
|
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/clang-${{ matrix.clang-version }} 100
|
|
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++-${{ matrix.clang-version }} 100
|
|
sudo update-alternatives --set cc /usr/bin/clang-${{ matrix.clang-version }}
|
|
sudo update-alternatives --set c++ /usr/bin/clang++-${{ matrix.clang-version }}
|
|
|
|
- name: Enable Developer Command Prompt
|
|
uses: ilammy/msvc-dev-cmd@v1.13.0
|
|
if: ${{ startsWith(matrix.platform, 'Windows') }}
|
|
|
|
- uses: nttld/setup-ndk@v1
|
|
id: setup-ndk
|
|
if: ${{ startsWith(matrix.platform, 'Android') }}
|
|
with:
|
|
ndk-version: r26d
|
|
add-to-path: false
|
|
|
|
- name: Setup Environment Variables
|
|
if: ${{ startsWith(matrix.platform, 'Android') }}
|
|
run: |
|
|
echo "ANDROID_NDK_ROOT=${{ steps.setup-ndk.outputs.ndk-path }}" >> $GITHUB_ENV
|
|
echo "ANDROID_ABI=${{ matrix.abi }}" >> $GITHUB_ENV
|
|
|
|
- name: CMake Build
|
|
run: cmake --preset=${{matrix.preset}} ${{matrix.cmake-options}} && cmake --build --preset=${{matrix.preset}}
|
|
|
|
- name: Upload Artifacts
|
|
uses: pyTooling/upload-artifact@v4
|
|
with:
|
|
name: ${{ matrix.platform }} ${{matrix.configuration}} Artifacts
|
|
working-directory: build/${{matrix.preset}}/artifacts/
|
|
path: "*"
|
|
|
|
- name: Upload Test Configuration
|
|
uses: actions/upload-artifact@v4.6.2
|
|
with:
|
|
name: Temp ${{ matrix.platform }} ${{matrix.configuration}} Test Config
|
|
path: "build/${{matrix.preset}}/**/CTestTestfile.cmake"
|
|
|
|
test:
|
|
name: Test
|
|
runs-on: ${{ matrix.runner }}
|
|
needs: [create-emulation-root, build]
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
platform:
|
|
- Windows x86_64
|
|
- Linux x86_64 GCC
|
|
- Linux x86_64 GCC Sanitizer
|
|
- Linux x86_64 Clang
|
|
- macOS arm64
|
|
- macOS x86_64
|
|
emulator:
|
|
- Unicorn
|
|
- Icicle
|
|
emulation-root:
|
|
- Windows 2025
|
|
- Windows 2022
|
|
- Windows 2019
|
|
configuration:
|
|
- Debug
|
|
- Release
|
|
include:
|
|
- configuration: Debug
|
|
preset: debug
|
|
- configuration: Release
|
|
preset: release
|
|
- platform: Windows x86_64
|
|
runner: windows-latest
|
|
- platform: Linux x86_64 GCC
|
|
runner: ubuntu-24.04
|
|
- platform: Linux x86_64 GCC Sanitizer
|
|
runner: ubuntu-24.04
|
|
- platform: Linux x86_64 Clang
|
|
runner: ubuntu-24.04
|
|
- platform: macOS arm64
|
|
runner: macos-latest
|
|
- platform: macOS x86_64
|
|
runner: macos-13
|
|
steps:
|
|
- name: Checkout Source
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: recursive
|
|
|
|
- name: Setup Environment Variables
|
|
run: |
|
|
echo "RUST_BACKTRACE=1" >> $GITHUB_ENV
|
|
echo "ASAN_OPTIONS=detect_odr_violation=0" >> $GITHUB_ENV
|
|
echo "EMULATOR_ICICLE=${{ matrix.emulator == 'Icicle' }}" >> $GITHUB_ENV
|
|
|
|
- name: Download Test Configuration
|
|
uses: actions/download-artifact@v4.2.1
|
|
with:
|
|
name: Temp ${{ matrix.platform }} ${{matrix.configuration}} Test Config
|
|
path: build/${{matrix.preset}}
|
|
|
|
- name: Download Artifacts
|
|
uses: pyTooling/download-artifact@v4
|
|
with:
|
|
name: ${{ matrix.platform }} ${{matrix.configuration}} Artifacts
|
|
path: build/${{matrix.preset}}/artifacts
|
|
|
|
- name: Download Windows Artifacts
|
|
uses: pyTooling/download-artifact@v4
|
|
if: "${{ matrix.platform != 'Windows x86_64' }}"
|
|
with:
|
|
name: Windows x86_64 Release Artifacts
|
|
path: build/${{matrix.preset}}/artifacts
|
|
|
|
- name: Download Emulation Root
|
|
uses: pyTooling/download-artifact@v4
|
|
with:
|
|
name: ${{ matrix.emulation-root }} Emulation Root
|
|
path: build/${{matrix.preset}}/artifacts/root
|
|
|
|
- name: Copy Test Sample
|
|
run: cp build/${{matrix.preset}}/artifacts/test-sample.exe build/${{matrix.preset}}/artifacts/root/filesys/c/
|
|
|
|
- name: CMake Test
|
|
run: cd build/${{matrix.preset}} && ctest --verbose -j
|
|
env:
|
|
EMULATOR_ROOT: ${{github.workspace}}/build/${{matrix.preset}}/artifacts/root
|
|
EMULATOR_VERBOSE: ${{ github.event.inputs.verbose }}
|
|
ANALYSIS_SAMPLE: ${{github.workspace}}/build/${{matrix.preset}}/artifacts/dump-apiset.exe
|
|
|
|
smoke-test-android:
|
|
name: Smoke Test Android
|
|
runs-on: ${{ matrix.runner }}
|
|
needs: [create-emulation-root, build]
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
architecture:
|
|
- x86_64
|
|
#- arm64-v8a
|
|
emulator:
|
|
- Unicorn
|
|
- Icicle
|
|
emulation-root:
|
|
- Windows 2025
|
|
- Windows 2022
|
|
- Windows 2019
|
|
configuration:
|
|
- Debug
|
|
- Release
|
|
include:
|
|
- configuration: Debug
|
|
preset: debug
|
|
- configuration: Release
|
|
preset: release
|
|
- architecture: x86_64
|
|
runner: ubuntu-24.04
|
|
#- architecture: arm64-v8a
|
|
# runner: macos-latest
|
|
steps:
|
|
- name: Enable KVM
|
|
if: ${{ startsWith(matrix.runner, 'ubuntu') }}
|
|
run: |
|
|
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
|
|
sudo udevadm control --reload-rules
|
|
sudo udevadm trigger --name-match=kvm
|
|
|
|
- name: Download Artifacts
|
|
uses: pyTooling/download-artifact@v4
|
|
with:
|
|
name: Android ${{matrix.architecture}} ${{matrix.configuration}} Artifacts
|
|
path: build/${{matrix.preset}}/artifacts
|
|
|
|
- name: Download Windows Artifacts
|
|
uses: pyTooling/download-artifact@v4
|
|
with:
|
|
name: Windows x86_64 Release Artifacts
|
|
path: build/${{matrix.preset}}/artifacts
|
|
|
|
- name: Download Emulation Root
|
|
uses: pyTooling/download-artifact@v4
|
|
with:
|
|
name: ${{ matrix.emulation-root }} Emulation Root
|
|
path: build/${{matrix.preset}}/artifacts/root
|
|
|
|
- name: Copy Test Sample
|
|
run: cp build/${{matrix.preset}}/artifacts/test-sample.exe build/${{matrix.preset}}/artifacts/root/filesys/c/
|
|
|
|
- name: Run Test
|
|
uses: reactivecircus/android-emulator-runner@v2.34.0
|
|
with:
|
|
api-level: 29
|
|
arch: ${{matrix.architecture}}
|
|
script: "adb push build/${{matrix.preset}}/artifacts/* /data/local/tmp && adb shell \"cd /data/local/tmp && export LD_LIBRARY_PATH=. && chmod +x ./analyzer && EMULATOR_ICICLE=${{ matrix.emulator == 'Icicle' }} ./analyzer -e ./root c:/test-sample.exe\""
|
|
|
|
summary:
|
|
name: Pipeline Summary
|
|
runs-on: ubuntu-24.04
|
|
needs: [clang-tidy, build-apiset-dumper, smoke-test-android, create-emulation-root, build, test, verify-formatting]
|
|
if: always()
|
|
steps:
|
|
- uses: geekyeggo/delete-artifact@v5
|
|
with:
|
|
name: 'Temp *'
|
|
|
|
- name: Pipeline failed
|
|
if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
|
|
run: exit 1
|