-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
280 additions
and
1 deletion.
There are no files selected for viewing
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
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
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,6 @@ | ||
{ | ||
"template": "[email protected]:bl-sdk/common_dotfiles.git", | ||
"commit": "c6cad57d450e0b696fb8586daaf29814427ef7c1", | ||
"commit": "a66f9767ed477bfa89d6ca505392d226ebdd4275", | ||
"checkout": null, | ||
"context": { | ||
"cookiecutter": { | ||
|
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,274 @@ | ||
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 | ||
# Since we use rather new c++ features, we need a rather new version of MinGW | ||
# LLVM MinGW seems to be the newest prebuilt binaries around | ||
LLVM_MINGW_VERSION: llvm-mingw-20230919-msvcrt-ubuntu-20.04-x86_64 | ||
LLVM_MINGW_DOWNLOAD: https://github.com/mstorsjo/llvm-mingw/releases/download/20230919/llvm-mingw-20230919-msvcrt-ubuntu-20.04-x86_64.tar.xz | ||
# xwin settings | ||
XWIN_VERSION: xwin-0.3.1-x86_64-unknown-linux-musl | ||
XWIN_DOWNLOAD: https://github.com/Jake-Shadle/xwin/releases/download/0.3.1/xwin-0.3.1-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-x86-release", | ||
"clang-x64-release", | ||
"msvc-x86-release", | ||
"msvc-x64-release", | ||
] | ||
|
||
steps: | ||
- name: Restore Clang Cache | ||
if: contains(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: contains(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 }} --target install | ||
|
||
- name: Upload artifact | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: ${{ matrix.preset }} | ||
path: out/install/${{ matrix.preset }}/ | ||
|
||
build-ubuntu: | ||
runs-on: ubuntu-latest | ||
|
||
strategy: | ||
fail-fast: false | ||
matrix: | ||
preset: [ | ||
"mingw-x86-release", | ||
"mingw-x64-release", | ||
"clang-cross-x86-release", | ||
"clang-cross-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: contains(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 MinGW | ||
if: contains(matrix.preset, '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 | ||
# 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 }} --target install | ||
|
||
- name: Upload artifact | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: ${{ matrix.preset }} | ||
path: out/install/${{ matrix.preset }}/ | ||
|
||
# ============================================================================== | ||
|
||
clang-tidy: | ||
runs-on: windows-latest | ||
needs: cache-clang | ||
|
||
strategy: | ||
fail-fast: false | ||
matrix: | ||
preset: [ | ||
"clang-x86-release", | ||
"clang-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: 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 |