CI #74
This file contains hidden or 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: | |
| 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: | |
| 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 | |
| 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 | |
| - 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: Checkout repository and submodules | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| - name: Configure build | |
| run: | | |
| pip install requests | |
| cmake . --preset ${{ matrix.preset }} -G Ninja | |
| - name: Build | |
| 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 | |
| - name: Prepare Release Zip (draft full) | |
| if: inputs.new-release-tag != '' && startswith(matrix.preset, 'msvc') | |
| run: | | |
| python prepare_release.py ${{ matrix.preset }} --skip-install | |
| mv willow2-sdk-${{ matrix.preset }}.zip willow2-sdk.zip | |
| - name: Upload Artifact | |
| if: inputs.new-release-tag == '' || startswith(matrix.preset, 'msvc') | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ matrix.preset }} | |
| path: "*.zip" | |
| build-ubuntu: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| toolchain: | |
| - preset: clang-cross-release | |
| container: clang-cross | |
| - preset: llvm-mingw-release | |
| container: llvm-mingw | |
| - preset: mingw-release | |
| container: mingw | |
| steps: | |
| - name: Checkout repository and submodules | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| - name: Build | |
| uses: devcontainers/[email protected] | |
| with: | |
| cacheFrom: ghcr.io/bl-sdk/${{ matrix.toolchain.container }}:latest | |
| configFile: .devcontainer/${{ matrix.toolchain.container }}/devcontainer.json | |
| push: never | |
| # The git watcher cmake thinks something's unsafe? Doesn't happen to me locally. | |
| # Only run the prepare release script if doing a dev ci build | |
| runCmd: | | |
| git config --global --add safe.directory `pwd` | |
| git config --global --add safe.directory `pwd`/libs/pluginloader | |
| git config --global --add safe.directory `pwd`/libs/pyunrealsdk | |
| git config --global --add safe.directory `pwd`/libs/pyunrealsdk/libs/unrealsdk | |
| cmake . --preset ${{ matrix.toolchain.preset }} -G Ninja | |
| cmake --build out/build/${{ matrix.toolchain.preset }} --target install | |
| [ ${{ inputs.new-release-tag == '' && 1 || 0 }} -ne 0 ] && \ | |
| python prepare_release.py ${{ matrix.toolchain.preset }} --skip-install | |
| - name: Upload Artifact | |
| if: inputs.new-release-tag == '' | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ matrix.toolchain.preset }} | |
| path: "*.zip" | |
| # ============================================================================== | |
| 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 | |
| # Need newer python to run the python lib downloader script | |
| - name: Setup Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ">=3.10" | |
| # 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 | |
| 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 | |
| run: | | |
| python (Get-Command run-clang-tidy).Source ` | |
| -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 | |
| steps: | |
| - name: Setup Clang | |
| uses: egor-tensin/setup-clang@v1 | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - 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@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: Run pyright | |
| uses: jakebailey/pyright-action@v2 | |
| with: | |
| working-directory: ./src | |
| ruff: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Run Ruff Linting | |
| uses: chartboost/ruff-action@v1 | |
| with: | |
| src: ./src | |
| - name: Run Ruff Formatting | |
| uses: chartboost/ruff-action@v1 | |
| with: | |
| src: ./src | |
| args: format --check | |
| # ============================================================================== | |
| release-dev-ci: | |
| runs-on: ubuntu-latest | |
| if: > | |
| github.ref == 'refs/heads/master' | |
| && github.repository == 'bl-sdk/willow2-mod-manager' | |
| && inputs.new-release-tag == '' | |
| needs: | |
| - build-ubuntu | |
| - build-windows | |
| - clang-tidy | |
| - clang-format | |
| - spelling | |
| - pyright | |
| - ruff | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Download artifacts | |
| uses: actions/download-artifact@v4 | |
| - 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/willow2-mod-manager' | |
| && inputs.new-release-tag != '' | |
| 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 artifacts | |
| uses: actions/download-artifact@v4 | |
| - 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 |