Merge pull request #42 from apple1417/master #102
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 | |
on: [ | |
push, | |
pull_request, | |
workflow_dispatch | |
] | |
env: | |
LLVM_MINGW_VERSION: llvm-mingw-20240619-msvcrt-ubuntu-20.04-x86_64 | |
LLVM_MINGW_DOWNLOAD: https://github.com/mstorsjo/llvm-mingw/releases/download/20240619/llvm-mingw-20240619-msvcrt-ubuntu-20.04-x86_64.tar.xz | |
jobs: | |
build-windows: | |
runs-on: windows-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
preset: [ | |
"clang-ue3-x86-release", | |
"clang-ue4-x64-release", | |
"msvc-ue3-x86-release", | |
"msvc-ue4-x64-release", | |
] | |
steps: | |
- name: Setup Clang | |
if: startswith(matrix.preset, 'clang') | |
uses: egor-tensin/setup-clang@v1 | |
- name: Add MSVC to PATH | |
if: startswith(matrix.preset, 'msvc') | |
uses: TheMrMilchmann/setup-msvc-dev@v3 | |
with: | |
arch: ${{ fromJSON('["x86", "x64"]')[contains(matrix.preset, 'x64')] }} | |
- name: Setup CMake and Ninja | |
uses: lukka/get-cmake@latest | |
- name: Checkout repository and submodules | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Configure CMake | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
run: cmake . --preset ${{ matrix.preset }} | |
- name: Build | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
run: cmake --build out/build/${{ matrix.preset }} | |
build-ubuntu: | |
# Require at least 24 for the mingw build | |
runs-on: ubuntu-24.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
preset: [ | |
"clang-cross-ue3-x86-release", | |
"clang-cross-ue4-x64-release", | |
"llvm-mingw-ue3-x86-release", | |
"llvm-mingw-ue4-x64-release", | |
"mingw-ue3-x86-release", | |
"mingw-ue4-x64-release", | |
] | |
steps: | |
- name: Setup CMake and Ninja | |
uses: lukka/get-cmake@latest | |
- name: Setup LLVM MinGW | |
if: startswith(matrix.preset, 'llvm-mingw') | |
run: | | |
wget -nv ${{ env.LLVM_MINGW_DOWNLOAD }} | |
tar -xf ${{ env.LLVM_MINGW_VERSION }}.tar.xz -C ~/ | |
echo $(readlink -f ~/${{ env.LLVM_MINGW_VERSION }}/bin) >> $GITHUB_PATH | |
- name: Setup MinGW | |
if: startswith(matrix.preset, 'mingw') | |
uses: egor-tensin/setup-mingw@v2 | |
with: | |
platform: ${{ fromJSON('["x86", "x64"]')[contains(matrix.preset, 'x64')] }} | |
- name: Setup Clang | |
if: startswith(matrix.preset, 'clang-cross') | |
uses: egor-tensin/setup-clang@v1 | |
- name: Restore win sdk cache | |
if: startswith(matrix.preset, 'clang-cross') | |
uses: actions/cache@v4 | |
id: cache-win-sdk | |
with: | |
path: ~/win-sdk | |
key: ${{ runner.os }}-win-sdk | |
- name: Setup msitools | |
if: startswith(matrix.preset, 'clang-cross') && steps.cache-win-sdk.outputs.cache-hit != 'true' | |
uses: awalsh128/cache-apt-pkgs-action@latest | |
with: | |
packages: msitools | |
version: ${{ runner.os }}-msitools | |
- name: Setup win sdk | |
if: startswith(matrix.preset, 'clang-cross') && steps.cache-win-sdk.outputs.cache-hit != 'true' | |
run: | | |
git clone https://github.com/mstorsjo/msvc-wine.git | |
msvc-wine/vsdownload.py --accept-license --dest ~/win-sdk Microsoft.VisualStudio.Workload.VCTools | |
msvc-wine/install.sh ~/win-sdk | |
rm -r msvc-wine | |
- name: Checkout repository and submodules | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Configure CMake | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
# The extra msvc wine arg won't do anything if we're not cross compiling | |
run: > | |
cmake . | |
--preset ${{ matrix.preset }} | |
-G Ninja | |
-DMSVC_WINE_ENV_SCRIPT=$(readlink -f ~)/win-sdk/bin/${{ fromJSON('["x86", "x64"]')[contains(matrix.preset, 'x64')] }}/msvcenv.sh | |
- name: Build | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
run: cmake --build out/build/${{ matrix.preset }} | |
# ============================================================================== | |
clang-tidy: | |
runs-on: windows-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
preset: [ | |
"clang-ue3-x86-release", | |
"clang-ue4-x64-release", | |
] | |
steps: | |
- name: Setup Clang | |
if: startswith(matrix.preset, 'clang') | |
uses: egor-tensin/setup-clang@v1 | |
- name: Setup CMake and Ninja | |
uses: lukka/get-cmake@latest | |
# Needed for clang tidy to enable `-export-fixes` | |
- name: Install pyyaml | |
run: pip install pyyaml | |
- name: Checkout repository and submodules | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Configure CMake | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
run: cmake . --preset ${{ matrix.preset }} -DCMAKE_DISABLE_PRECOMPILE_HEADERS=On | |
- name: Remove `.modmap`s from compile commands | |
run: | | |
(Get-Content "out\build\${{ matrix.preset }}\compile_commands.json") ` | |
-replace "@CMakeFiles.+?\.modmap", "" ` | |
| Set-Content ` | |
-Path "out\build\${{ matrix.preset }}\compile_commands.json" | |
- name: Run clang-tidy | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
run: | | |
python (Get-Command run-clang-tidy).Source ` | |
-p "out\build\${{ matrix.preset }}" ` | |
-export-fixes clang-tidy-fixes.yml ` | |
$([Regex]::Escape("$pwd\src") + ".+\.(c|cpp|h|hpp)$") | |
- name: Process clang-tidy warnings | |
uses: asarium/clang-tidy-action@v1 | |
with: | |
fixesFile: clang-tidy-fixes.yml | |
clang-format: | |
runs-on: windows-latest | |
steps: | |
- name: Setup Clang | |
if: startswith(matrix.preset, 'clang') | |
uses: egor-tensin/setup-clang@v1 | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Run clang-format | |
run: | | |
clang-format ` | |
-n -Werror ` | |
$(Get-ChildItem ` | |
src ` | |
-File ` | |
-Recurse ` | |
-Include ("*.c", "*.cpp", "*.h", "*.hpp") ` | |
| % FullName) | |
spelling: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Check spelling | |
uses: crate-ci/typos@master |