Skip to content

Commit

Permalink
add ci
Browse files Browse the repository at this point in the history
  • Loading branch information
apple1417 committed Sep 21, 2023
1 parent ca0e2cc commit 54357ac
Show file tree
Hide file tree
Showing 4 changed files with 280 additions and 1 deletion.
1 change: 1 addition & 0 deletions .clang-tidy
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ Checks: >
-cppcoreguidelines-pro-type-union-access,
-cppcoreguidelines-pro-type-vararg,
misc-*,
-misc-include-cleaner,
-misc-non-private-member-variables-in-classes,
-misc-no-recursion,
modernize-*,
Expand Down
4 changes: 4 additions & 0 deletions .clangd
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# Turn off include cleaner for now, since it can't handle exports yet, required to use a pch
Diagnostics:
UnusedIncludes: None
---
If:
PathMatch: src/pch.h
CompileFlags:
Expand Down
2 changes: 1 addition & 1 deletion .cruft.json
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": {
Expand Down
274 changes: 274 additions & 0 deletions .github/workflows/build.yml
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

0 comments on commit 54357ac

Please sign in to comment.