add changelog and bump version number #80
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: | |
# Important to pin the clang version, cause we also use it for linting | |
CLANG_VERSION: 17 | |
CLANG_TIDY_JOBS: 4 | |
# LLVM MinGW download | |
LLVM_MINGW_VERSION: llvm-mingw-20231128-msvcrt-ubuntu-20.04-x86_64 | |
LLVM_MINGW_DOWNLOAD: https://github.com/mstorsjo/llvm-mingw/releases/download/20231128/llvm-mingw-20231128-msvcrt-ubuntu-20.04-x86_64.tar.xz | |
# xwin settings | |
XWIN_VERSION: xwin-0.5.0-x86_64-unknown-linux-musl | |
XWIN_DOWNLOAD: https://github.com/Jake-Shadle/xwin/releases/download/0.5.0/xwin-0.5.0-x86_64-unknown-linux-musl.tar.gz | |
jobs: | |
cache-clang: | |
runs-on: windows-latest | |
steps: | |
- name: Cache Clang | |
uses: actions/cache@v3 | |
id: cache-clang | |
with: | |
path: C:\Program Files\LLVM | |
key: ${{ runner.os }}-clang-${{ env.CLANG_VERSION }} | |
lookup-only: true | |
- name: Setup Clang | |
if: steps.cache-clang.outputs.cache-hit != 'true' | |
uses: egor-tensin/setup-clang@v1 | |
with: | |
version: ${{ env.CLANG_VERSION }} | |
# ============================================================================== | |
build-windows: | |
runs-on: windows-latest | |
needs: cache-clang | |
strategy: | |
fail-fast: false | |
matrix: | |
preset: [ | |
"clang-ue3-x86-release", | |
"clang-ue4-x64-release", | |
"msvc-ue3-x86-release", | |
"msvc-ue4-x64-release", | |
] | |
steps: | |
- name: Restore Clang Cache | |
if: startswith(matrix.preset, 'clang') | |
uses: actions/cache/restore@v3 | |
with: | |
path: C:\Program Files\LLVM | |
key: ${{ runner.os }}-clang-${{ env.CLANG_VERSION }} | |
fail-on-cache-miss: true | |
- name: Add MSVC to PATH | |
if: startswith(matrix.preset, 'msvc') | |
uses: TheMrMilchmann/setup-msvc-dev@v2 | |
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@v3 | |
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: | |
runs-on: ubuntu-latest | |
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", | |
# Currently, ubuntu-latest is 22.04, whose mingw version is too old, so disabling these | |
# builds for now | |
# Not sure of the exact threshold, 13.1.0 works | |
# "mingw-ue3-x86-release", | |
# "mingw-ue4-x64-release", | |
] | |
steps: | |
- name: Setup CMake and Ninja | |
uses: lukka/get-cmake@latest | |
# Both Clang and MinGW install quick enough that it's not worth caching | |
# Caching would also lose the +x - so we'd have to tar before caching/untar after, making it | |
# even slower | |
- name: Setup Clang | |
if: startswith(matrix.preset, 'clang') | |
run: | | |
wget https://apt.llvm.org/llvm.sh | |
chmod +x llvm.sh | |
sudo ./llvm.sh ${{ env.CLANG_VERSION }} | |
sudo update-alternatives --install \ | |
/usr/bin/clang \ | |
clang \ | |
/usr/bin/clang-${{ env.CLANG_VERSION }} \ | |
200 | |
sudo update-alternatives --install \ | |
/usr/bin/clang++ \ | |
clang++ \ | |
/usr/bin/clang++-${{ env.CLANG_VERSION }} \ | |
200 | |
sudo update-alternatives --install \ | |
/usr/bin/llvm-rc \ | |
llvm-rc \ | |
/usr/bin/llvm-rc-${{ env.CLANG_VERSION }} \ | |
200 | |
- 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: Set up MinGW | |
if: startswith(matrix.preset, 'mingw') | |
uses: egor-tensin/setup-mingw@v2 | |
with: | |
platform: ${{ fromJSON('["x86", "x64"]')[contains(matrix.preset, 'x64')] }} | |
# xwin does take long enough that caching's worth it | |
- name: Restore xwin cache | |
if: contains(matrix.preset, 'cross') | |
uses: actions/cache@v3 | |
id: cache-xwin | |
with: | |
path: ~/xwin | |
key: ${{ runner.os }}-xwin | |
- name: Setup xwin | |
if: contains(matrix.preset, 'cross') && steps.cache-xwin.outputs.cache-hit != 'true' | |
run: | | |
wget -nv ${{ env.XWIN_DOWNLOAD }} | |
tar -xf ${{ env.XWIN_VERSION }}.tar.gz | |
${{ env.XWIN_VERSION }}/xwin \ | |
--accept-license \ | |
--arch x86,x86_64 \ | |
splat \ | |
--include-debug-libs \ | |
--output ~/xwin | |
- name: Checkout repository and submodules | |
uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Configure CMake | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
# The extra xwin dir arg won't do anything if we're not cross compiling | |
run: > | |
cmake . | |
--preset ${{ matrix.preset }} | |
-G Ninja | |
-DXWIN_DIR=$(readlink -f ~)/xwin | |
- name: Build | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
run: cmake --build out/build/${{ matrix.preset }} | |
# ============================================================================== | |
clang-tidy: | |
runs-on: windows-latest | |
needs: cache-clang | |
strategy: | |
fail-fast: false | |
matrix: | |
preset: [ | |
"clang-ue3-x86-release", | |
"clang-ue4-x64-release", | |
] | |
steps: | |
- name: Restore Clang Cache | |
uses: actions/cache/restore@v3 | |
with: | |
path: C:\Program Files\LLVM | |
key: ${{ runner.os }}-clang-${{ env.CLANG_VERSION }} | |
fail-on-cache-miss: true | |
- 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@v3 | |
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 ` | |
-j ${{ env.CLANG_TIDY_JOBS }} ` | |
-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 | |
needs: cache-clang | |
steps: | |
- name: Restore Clang Cache | |
uses: actions/cache/restore@v3 | |
with: | |
path: C:\Program Files\LLVM | |
key: ${{ runner.os }}-clang-${{ env.CLANG_VERSION }} | |
fail-on-cache-miss: true | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- 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@v3 | |
- name: Check spelling | |
uses: crate-ci/typos@master |