Update main.yml #2
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: | |
pull_request: | |
branches: [ dragonflight ] | |
push: | |
branches: [ dragonflight ] | |
paths-ignore: | |
- 'SpellDataDump/**' | |
- 'dbc_extract3/**' | |
- 'casc_extract/**' | |
env: | |
SIMC_PROFILE: profiles/CI.simc | |
CCACHE_COMPRESS: true # always enable ccache compression | |
ccache-generation: 0 # bump if you need to "clean" ccache | |
jobs: | |
ubuntu-gcc-build: | |
name: ubuntu-${{ matrix.compiler }}-cpp${{ matrix.cppVersion }}-build | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
compiler: [gcc-12, gcc-7] | |
cppVersion: [17, 20] | |
include: | |
- compiler: gcc-7 | |
cxx: g++-7 | |
packages: gcc-7 g++-7 | |
os: ubuntu-20.04 | |
- compiler: gcc-12 | |
cxx: g++-12 | |
packages: gcc-12 g++-12 | |
os: ubuntu-22.04 | |
exclude: | |
- compiler: gcc-7 | |
cppVersion: 20 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/cache@v4 | |
env: { ccache-prefix: 'ubuntu-${{ matrix.compiler }}-cpp-${{ matrix.cppVersion }}-ccache-${{ env.ccache-generation }}' } | |
with: | |
path: ${{ runner.workspace }}/.ccache | |
key: ${{ env.ccache-prefix }}-${{ github.sha }} | |
restore-keys: ${{ env.ccache-prefix }}- | |
- name: Install deps | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y libcurl4-openssl-dev ninja-build ccache ${{ matrix.packages }} | |
- name: Configure | |
run: cmake -H. -B'${{ runner.workspace }}/b/ninja' -GNinja -DBUILD_GUI=OFF | |
-DCMAKE_BUILD_TYPE=Debug | |
-DCMAKE_CXX_COMPILER=${{ matrix.cxx }} -DCMAKE_C_COMPILER=${{ matrix.compiler }} | |
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache | |
-DCMAKE_CXX_STANDARD=${{ matrix.cppVersion }} | |
- name: Build | |
env: | |
CCACHE_BASEDIR: ${{ runner.workspace }} | |
CCACHE_DIR: ${{ runner.workspace }}/.ccache | |
CCACHE_MAXSIZE: 192M # full build consumes around ~80, ~2x that to be safe | |
run: | | |
ccache -z | |
ninja -C '${{ runner.workspace }}/b/ninja' | |
ccache -s | |
- uses: actions/cache@v4 | |
with: | |
path: | | |
${{ runner.workspace }}/b/ninja/simc | |
profiles | |
tests | |
generate_profiles_ci.sh | |
.git | |
key: ubuntu-${{ matrix.compiler }}-for_run-${{ github.sha }}-cpp-${{ matrix.cppVersion }} | |
ubuntu-clang-build: | |
name: ubuntu-build-${{ matrix.compiler }}-C++${{ matrix.cppVersion }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
cppVersion: [17, 20] | |
compiler: [clang++-7, clang++-15] | |
include: | |
- compiler: clang++-7 | |
os: ubuntu-20.04 | |
packages: clang-7 lld-7 | |
- compiler: clang++-15 | |
os: ubuntu-22.04 | |
packages: clang-15 lld-15 | |
enable_file_prefix_map: true | |
exclude: | |
- compiler: clang++-7 | |
cppVersion: 20 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/cache@v4 | |
env: { ccache-prefix: 'ubuntu-${{ matrix.compiler }}-cpp-${{ matrix.cppVersion }}-ccache-${{ env.ccache-generation }}' } | |
with: | |
path: ${{ runner.workspace }}/.ccache | |
key: ${{ env.ccache-prefix }}-${{ github.sha }} | |
restore-keys: ${{ env.ccache-prefix }}- | |
- name: Install deps | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y libcurl4-openssl-dev ninja-build ccache ${{ matrix.packages }} | |
sudo sysctl vm.mmap_rnd_bits=28 | |
- name: Configure | |
env: | |
UBSAN_STRIP_COUNT: "`echo \"${{ runner.workspace }}//\" | grep -o '/' - | wc -l`" | |
run: cmake -H. -B'${{ runner.workspace }}/b/ninja' -GNinja -DBUILD_GUI=OFF | |
-DCMAKE_BUILD_TYPE=Debug | |
-DCMAKE_CXX_COMPILER=${{ matrix.compiler }} | |
-DCMAKE_CXX_FLAGS="-Og ${{ matrix.enable_file_prefix_map && format('-ffile-prefix-map={0}/=/', runner.workspace) || ''}} | |
-fno-omit-frame-pointer -fsanitize=address,undefined | |
-fsanitize-undefined-strip-path-components=$UBSAN_STRIP_COUNT" | |
-DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld -fsanitize=address,undefined" | |
-DCMAKE_CXX_STANDARD=${{ matrix.cppVersion }} | |
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache | |
- name: Build | |
env: | |
CCACHE_BASEDIR: ${{ runner.workspace }} | |
CCACHE_DIR: ${{ runner.workspace }}/.ccache | |
CCACHE_MAXSIZE: 256M # full build consumes around ~124, ~2x that to be safe | |
run: | | |
ccache -z | |
ninja -C '${{ runner.workspace }}/b/ninja' | |
ccache -s | |
- uses: actions/cache@v4 | |
with: | |
path: | | |
${{ runner.workspace }}/b/ninja/simc | |
profiles | |
tests | |
generate_profiles_ci.sh | |
.git | |
key: ubuntu-${{ matrix.compiler }}-for_run-${{ github.sha }}-cpp-${{ matrix.cppVersion }} | |
ubuntu-run: | |
name: ubuntu-${{ matrix.compiler }}-cpp-${{ matrix.cppVersion }}-${{ matrix.type }} | |
runs-on: ${{ matrix.os }} | |
needs: [ ubuntu-clang-build, ubuntu-gcc-build ] | |
strategy: | |
fail-fast: false | |
matrix: | |
cppVersion: [17, 20] | |
compiler: [clang++-7, clang++-15, gcc-7, gcc-12] | |
type: [spell_query, log_debug, patchwerk, dungeon_slice] | |
include: | |
- type: spell_query | |
simc_flags: spell_query=spell > /dev/null | |
- type: log_debug | |
simc_flags: $SIMC_PROFILE log=1 debug=1 max_time=100 | |
- type: patchwerk | |
simc_flags: $SIMC_PROFILE iterations=10 cleanup_threads=1 | |
- type: dungeon_slice | |
simc_flags: $SIMC_PROFILE iterations=10 fight_style=DungeonSlice cleanup_threads=1 | |
- compiler: clang++-7 | |
os: ubuntu-20.04 | |
- compiler: clang++-15 | |
os: ubuntu-22.04 | |
- compiler: gcc-12 | |
os: ubuntu-22.04 | |
- compiler: gcc-7 | |
os: ubuntu-20.04 | |
exclude: | |
- compiler: clang++-7 | |
cppVersion: 20 | |
- compiler: gcc-7 | |
cppVersion: 20 | |
steps: | |
- uses: actions/cache@v4 | |
with: | |
path: | | |
${{ runner.workspace }}/b/ninja/simc | |
profiles | |
tests | |
generate_profiles_ci.sh | |
.git | |
key: ubuntu-${{ matrix.compiler }}-for_run-${{ github.sha }}-cpp-${{ matrix.cppVersion }} | |
- name: Run | |
env: | |
UBSAN_OPTIONS: print_stacktrace=1 | |
run: ${{ runner.workspace }}/b/ninja/simc output=/dev/null html=/dev/null json2=/dev/null json3=/dev/null ${{ matrix.simc_flags }} | |
simc-tests: | |
name: test-${{ matrix.tier }}-${{ matrix.spec }} | |
runs-on: ${{ matrix.os }} | |
needs: [ ubuntu-clang-build ] | |
strategy: | |
fail-fast: false | |
matrix: | |
cppVersion: [17] | |
tier: [ Tier30, Tier31 ] | |
compiler: [clang++-15] | |
spec: [ | |
Death_Knight_Blood, Death_Knight_Frost, Death_Knight_Unholy, | |
Demon_Hunter_Havoc, Demon_Hunter_Vengeance, | |
Druid_Balance, Druid_Feral, Druid_Guardian, | |
Evoker_Devastation, Evoker_Preservation, | |
Hunter_Beast_Mastery, Hunter_Marksmanship, Hunter_Survival, | |
Mage_Arcane, Mage_Fire, Mage_Frost, | |
Monk_Brewmaster, Monk_Windwalker, | |
Paladin_Holy, Paladin_Protection, Paladin_Retribution, | |
Priest_Discipline, Priest_Shadow, | |
Rogue_Assassination, Rogue_Outlaw, Rogue_Subtlety, | |
Shaman_Elemental, Shaman_Enhancement, Shaman_Restoration, | |
Warlock_Affliction, Warlock_Demonology, Warlock_Destruction, | |
Warrior_Arms, Warrior_Fury, Warrior_Protection, | |
] | |
include: | |
- compiler: clang++-15 | |
os: ubuntu-22.04 | |
steps: | |
- uses: actions/cache@v4 | |
with: | |
path: | | |
${{ runner.workspace }}/b/ninja/simc | |
profiles | |
tests | |
generate_profiles_ci.sh | |
.git | |
key: ubuntu-${{ matrix.compiler }}-for_run-${{ github.sha }}-cpp-${{ matrix.cppVersion }} | |
- name: Install Python dependencies | |
run: pip3 install -r ${{ github.workspace }}/tests/requirements.txt | |
- name: Run | |
env: | |
UBSAN_OPTIONS: print_stacktrace=1 | |
SIMC_CLI_PATH: ${{ runner.workspace }}/b/ninja/simc | |
SIMC_PROFILE_DIR: ${{ github.workspace }}/profiles/${{ matrix.tier }} | |
SIMC_THREADS: 2 | |
SIMC_ITERATIONS: 2 | |
run: ${{ github.workspace }}/tests/run.py ${{ matrix.spec }} -tests trinket baseline --max-profiles-to-use 1 --enable-all-talents --enable-all-sets | |
simc-profiles: | |
name: Regenerate profiles | |
runs-on: ${{ matrix.os }} | |
needs: [ ubuntu-clang-build ] | |
if: ${{ github.event_name == 'push' }} | |
strategy: | |
fail-fast: false | |
matrix: | |
cppVersion: [17] | |
compiler: [clang++-15] | |
include: | |
- compiler: clang++-15 | |
os: ubuntu-22.04 | |
steps: | |
- uses: actions/cache@v4 | |
with: | |
path: | | |
${{ runner.workspace }}/b/ninja/simc | |
profiles | |
tests | |
generate_profiles_ci.sh | |
.git | |
key: ubuntu-${{ matrix.compiler }}-for_run-${{ github.sha }}-cpp-${{ matrix.cppVersion }} | |
- uses: actions/checkout@v4 | |
- name: Run | |
env: | |
UBSAN_OPTIONS: print_stacktrace=1 | |
SIMC_CLI_PATH: ${{ runner.workspace }}/b/ninja/simc | |
SIMC_PROFILE_DIR: ${{ github.workspace }}/profiles/${{ matrix.tier }} | |
SIMC_THREADS: 2 | |
SIMC_ITERATIONS: 2 | |
run: | | |
${{ github.workspace }}/generate_profiles_ci.sh | |
- name: Commit Profiles | |
uses: EndBug/[email protected] | |
with: | |
message: 'Regenerate profiles' | |
default_author: github_actions | |
fetch: false | |
add: '*.simc' | |
build-osx: | |
name: macos-latest | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Build | |
run: make SANITIZE=1 -C engine debug -j 2 | |
- name: Smoke Test | |
run: ./engine/simc $SIMC_PROFILE iterations=5 output=/dev/null html=/dev/null json2=/dev/null cleanup_threads=1 | |
windows-VS: | |
name: windows-VS-${{ matrix.vs }}-${{ matrix.arch }} | |
runs-on: windows-latest | |
strategy: | |
matrix: | |
vs: [2019] | |
arch: [x64, amd64_arm64] | |
include: | |
- arch: x64 | |
runSmokeTest: true | |
env: | |
CMAKE_BUILD_DIR: ${{ github.workspace }}/builddir/ | |
steps: | |
- uses: actions/checkout@v4 | |
# Setup the build machine with the most recent versions of CMake and Ninja. Both are cached if not already: on subsequent runs both will be quickly restored from GitHub cache service. | |
- uses: lukka/get-cmake@latest | |
# On Windows runners, let's ensure to have the Developer Command Prompt environment setup correctly. As used here the Developer Command Prompt created is targeting x64 and using the default the Windows SDK. | |
- uses: ilammy/msvc-dev-cmd@v1 | |
with: | |
arch: ${{ matrix.arch }} | |
- name: Generate project files | |
run: | | |
cmake -B "${{ env.CMAKE_BUILD_DIR }}" -GNinja -DBUILD_GUI=OFF -DCMAKE_BUILD_TYPE=Debug | |
- name: Build | |
run: | | |
cmake --build "${{ env.CMAKE_BUILD_DIR }}" | |
- name: Smoke Test | |
if: ${{ matrix.runSmokeTest }} | |
run: ${{ env.CMAKE_BUILD_DIR }}/simc.exe $env:SIMC_PROFILE iterations=5 output=nul html=nul json2=nul cleanup_threads=1 |