update to sdk v3.0 #25
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 download | |
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 | |
# Limit which presets make artifacts | |
RELEASE_ARTIFACT_PRESET: "msvc-release" | |
ALLOWED_ARTIFACT_PRESETS: "msvc-release;" | |
jobs: | |
build-windows: | |
runs-on: windows-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
preset: | |
- clang-release | |
- msvc-release | |
steps: | |
- name: Setup Clang | |
if: startswith(matrix.preset, 'clang') | |
uses: egor-tensin/setup-clang@v1 | |
with: | |
platform: x86 | |
- name: Add MSVC to PATH | |
if: startswith(matrix.preset, 'msvc') | |
uses: TheMrMilchmann/setup-msvc-dev@v3 | |
with: | |
arch: x86 | |
- name: Setup CMake and Ninja | |
uses: lukka/get-cmake@latest | |
# We only actually need this python version to run the download script, we're not going to link | |
# against it, so don't need to specify arch | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ">=3.11" | |
- name: Setup Pip | |
run: pip install requests | |
- name: Checkout repository and submodules | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Build | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
run: > | |
python ./prepare_releases.py | |
--preset ${{ matrix.preset }} | |
--configure | |
--build | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v4 | |
if: contains(env.ALLOWED_ARTIFACT_PRESETS, matrix.preset) | |
with: | |
name: ${{ matrix.preset }} | |
path: | | |
*.zip | |
*.sdkmod | |
build-ubuntu: | |
# Require at least 24 for the mingw build | |
runs-on: ubuntu-24.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
preset: | |
- clang-cross-release | |
- llvm-mingw-release | |
- mingw-release | |
steps: | |
- name: Setup CMake and Ninja | |
uses: lukka/get-cmake@latest | |
- name: Setup apt packages | |
uses: awalsh128/cache-apt-pkgs-action@latest | |
with: | |
packages: msitools python3-requests | |
version: ${{ runner.os }}-apt | |
- 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: x86 | |
- name: Setup Clang | |
if: startswith(matrix.preset, 'clang-cross') | |
uses: egor-tensin/setup-clang@v1 | |
with: | |
platform: x86 | |
- 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 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: Build | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
# The extra msvc wine arg won't do anything if we're not cross compiling | |
run: > | |
./prepare_releases.py | |
--preset ${{ matrix.preset }} | |
--configure -C-G=Ninja -C-DMSVC_WINE_ENV_SCRIPT=$(readlink -f ~)/win-sdk/bin/x86/msvcenv.sh | |
--build | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v4 | |
if: contains(env.ALLOWED_ARTIFACT_PRESETS, matrix.preset) | |
with: | |
name: ${{ matrix.preset }} | |
path: | | |
*.zip | |
*.sdkmod | |
# ============================================================================== | |
clang-tidy: | |
runs-on: windows-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
preset: | |
- clang-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 | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ">=3.11" | |
# Needed pyyaml for clang tidy to enable `-export-fixes` and requests for the python lib downloader | |
- name: Install pip packages | |
run: pip install pyyaml requests | |
- name: Checkout repository and submodules | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Configure CMake | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
run: | | |
python prepare_releases.py ` | |
--preset ${{ matrix.preset }} ` | |
--configure -C-DCMAKE_DISABLE_PRECOMPILE_HEADERS=On | |
- name: Remove `.modmap`s from compile commands | |
run: | | |
(Get-Content ".out\build\${{ matrix.preset }}\compile_commands.json") ` | |
-replace "@\S+CMakeFiles\S+?\.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\") + "[^.].+\.(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: | | |
$all_files=$(Get-ChildItem ` | |
$(Get-ChildItem . -Directory -Exclude ".*",TextModLoader) ` | |
-File ` | |
-Recurse ` | |
-Include ("*.c", "*.cpp", "*.h", "*.hpp") ` | |
| % FullName) | |
echo "::group::Files being checked" | |
foreach ($file in $all_files) { echo $file } | |
echo "::endgroup::" | |
clang-format -n -Werror $all_files | |
# ============================================================================== | |
spelling: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Check spelling | |
uses: crate-ci/typos@master | |
pyright: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository and submodules | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ">=3.13" | |
cache: pip | |
- name: Setup Pip | |
run: pip install pytest | |
- name: Run pyright | |
uses: jakebailey/pyright-action@v2 | |
ruff: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Run Ruff Linting | |
uses: chartboost/ruff-action@v1 | |
- name: Run Ruff Formatting | |
uses: chartboost/ruff-action@v1 | |
with: | |
args: format --check | |
# ============================================================================== | |
release: | |
runs-on: ubuntu-latest | |
if: github.ref == 'refs/heads/master' && github.repository == 'apple1417/willow2-sdk-mods' | |
needs: | |
- build-ubuntu | |
- build-windows | |
- clang-tidy | |
- clang-format | |
- spelling | |
- pyright | |
- ruff | |
permissions: | |
contents: write | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Download releases | |
uses: actions/download-artifact@v4 | |
with: | |
name: ${{ env.RELEASE_ARTIFACT_PRESET }} | |
- name: Upload releases | |
uses: andelf/nightly-release@main | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: nightly | |
files: | | |
*.sdkmod | |
*.zip | |
name: Automated Releases | |
prerelease: false | |
body: > | |
This release is automatically built from the latest (passing) commits on master. |