Skip to content

integrate with mods db #6

integrate with mods db

integrate with mods db #6

Workflow file for this run

name: CI
on:
push: {}
pull_request: {}
workflow_dispatch:
inputs:
new-release-tag:
description: >
New Release Tag. If given, creates a (draft) full release using the given tag, if empty,
updates the dev release.
type: string
required: false
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
# Python settings
PYTHON_VERSION: "3.11.5"
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-release
- msvc-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: x64
- 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@v4
with:
python-version: ">=3.11"
- name: Checkout repository and submodules
uses: actions/checkout@v3
with:
submodules: recursive
- name: Configure build
working-directory: ${{ env.GITHUB_WORKSPACE }}
run: |
pip install requests
python libs/pyunrealsdk/common_cmake/explicit_python/download.py `
${{ env.PYTHON_VERSION }} `
amd64 `
--no-debug
cmake . --preset ${{ matrix.preset }}
- name: Build
working-directory: ${{ env.GITHUB_WORKSPACE }}
run: cmake --build out/build/${{ matrix.preset }} --target install
- name: Prepare Release Zip (dev ci)
if: inputs.new-release-tag == ''
run: python prepare_release.py ${{ matrix.preset }} --skip-install --no-bl3 --no-wl --unified
- name: Prepare Release Zip (draft full)
if: inputs.new-release-tag != '' && contains(matrix.preset, 'msvc')
run: |
python prepare_release.py ${{ matrix.preset }} --skip-install
mv bl3-sdk-${{ matrix.preset }}.zip bl3-sdk.zip
mv wl-sdk-${{ matrix.preset }}.zip wl-sdk.zip
- name: Upload Artifact
if: inputs.new-release-tag == '' || contains(matrix.preset, 'msvc')
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.preset }}
path: "*.zip"
build-ubuntu:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
preset:
- clang-cross-release
- mingw-release
steps:
- name: Setup CMake and Ninja
uses: lukka/get-cmake@latest
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: ">=3.11"
- name: Setup msitools
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: msitools
version: ${{ runner.os }}-apt
# 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_64 \
splat \
--include-debug-libs \
--output ~/xwin
- name: Checkout repository and submodules
uses: actions/checkout@v3
with:
submodules: recursive
- name: Configure build
working-directory: ${{ env.GITHUB_WORKSPACE }}
run: |
pip install requests
python libs/pyunrealsdk/common_cmake/explicit_python/download.py \
${{ env.PYTHON_VERSION }} \
amd64 \
--no-debug
cmake . \
--preset ${{ matrix.preset }} \
-G Ninja \
-DXWIN_DIR=$(readlink -f ~)/xwin
# The extra xwin dir arg won't do anything if we're not cross compiling
- name: Build
working-directory: ${{ env.GITHUB_WORKSPACE }}
run: cmake --build out/build/${{ matrix.preset }} --target install
- name: Prepare Release Zip (dev ci)
if: inputs.new-release-tag == ''
run: python prepare_release.py ${{ matrix.preset }} --skip-install --no-bl3 --no-wl --unified
- name: Upload Artifact
if: inputs.new-release-tag == ''
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.preset }}
path: "*.zip"
# ==============================================================================
clang-tidy:
runs-on: windows-latest
needs: cache-clang
strategy:
fail-fast: false
matrix:
preset:
- clang-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
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: ">=3.11"
- name: Checkout repository and submodules
uses: actions/checkout@v3
with:
submodules: recursive
- name: Configure build
working-directory: ${{ env.GITHUB_WORKSPACE }}
# Also need pyyaml for clang tidy to enable `-export-fixes`
run: |
pip install pyyaml requests
python libs/pyunrealsdk/common_cmake/explicit_python/download.py `
${{ env.PYTHON_VERSION }} `
amd64 `
--no-debug
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)$") `
-extra-arg="-Wno-unknown-pragmas"
# For some reason, the above started giving unknown pragma errors in library headers (both
# unrealsdk and python) in clang-tidy 17
# It compiles fine, doesn't show up in clangd, and doesn't happen in the unrealsdk build, so
# just suppressing it for now
- 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
black:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Check formatting
uses: psf/black@stable
with:
options: "--check --verbose"
src: "./src"
pyright:
runs-on: ubuntu-latest
steps:
- name: Checkout repository and submodules
uses: actions/checkout@v3
with:
submodules: recursive
- name: Run pyright
uses: jakebailey/pyright-action@v1
with:
working-directory: "./src/"
ruff:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Run Ruff
uses: chartboost/ruff-action@v1
with:
src: "./src"
# ==============================================================================
release-dev-ci:
runs-on: ubuntu-latest
if: >
github.ref == 'refs/heads/master'
&& github.repository == 'bl-sdk/oak-mod-manager'
&& inputs.new-release-tag == ''
needs:
- build-ubuntu
- build-windows
- clang-tidy
- clang-format
- spelling
- black
- pyright
- ruff
permissions:
contents: write
steps:
- name: Download artifacts
uses: actions/download-artifact@v3
- name: Upload releases
uses: andelf/nightly-release@main
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: nightly
files: "*/*.zip"
name: Automated Development Release
prerelease: true
body: >
This release is automatically built from the latest passing commits on master - it might
break things. Only use this if you know what you're doing.
release-draft-full:
runs-on: ubuntu-latest
if: >
github.ref == 'refs/heads/master'
&& github.repository == 'bl-sdk/oak-mod-manager'
&& inputs.new-release-tag != ''
needs:
- build-ubuntu
- build-windows
- clang-tidy
- clang-format
- spelling
- black
- pyright
- ruff
permissions:
contents: write
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Download artifacts
uses: actions/download-artifact@v3
- name: Create new release tag
uses: rickstaa/action-create-tag@v1
with:
tag: ${{ inputs.new-release-tag }}
- name: Upload releases
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ inputs.new-release-tag }}
files: "*/*.zip"
fail_on_unmatched_files: true
draft: true
generate_release_notes: true