Skip to content

Merge pull request #47 from apple1417/master #111

Merge pull request #47 from apple1417/master

Merge pull request #47 from apple1417/master #111

Workflow file for this run

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