[CI-PTR] Allow PTR Spec Test to have an empty spec matrix, but still pass CI. #24449
Workflow file for this run
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: [ thewarwithin ] | ||
push: | ||
branches: [ thewarwithin ] | ||
paths-ignore: | ||
- 'ActionPriorityLists/**' | ||
- 'SpellDataDump/*.txt' | ||
- '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, gcc-14] | ||
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 | ||
- compiler: gcc-14 | ||
cxx: g++-14 | ||
packages: gcc-14 g++-14 | ||
os: ubuntu-24.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, clang++-18] | ||
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 | ||
- compiler: clang++-18 | ||
os: ubuntu-24.04 | ||
packages: clang-18 lld-18 | ||
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 }} | ||
- 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 }} | ||
spec-test: | ||
name: spec-test-${{ matrix.spec }}-${{ matrix.fightstyle }} | ||
runs-on: ${{ matrix.os }} | ||
needs: [ ubuntu-clang-build ] | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
cppVersion: [17] | ||
compiler: [clang++-15] | ||
spec: [ | ||
deathknight_blood, deathknight_unholy, deathknight_frost, | ||
demonhunter_vengeance, demonhunter_havoc, | ||
druid_balance, druid_feral, druid_guardian, druid_restoration, | ||
evoker_devastation, evoker_augmentation, | ||
hunter_beast_mastery, hunter_marksmanship, hunter_survival, | ||
mage_arcane, mage_fire, mage_frost, | ||
monk_brewmaster, monk_windwalker, | ||
paladin_protection, paladin_retribution, | ||
priest_shadow, | ||
rogue_assassination, rogue_outlaw, rogue_subtlety, | ||
shaman_elemental, | ||
warlock_affliction, warlock_demonology, warlock_destruction, | ||
warrior_arms, warrior_fury, warrior_protection | ||
] | ||
fightstyle: [singletarget, multitarget, dungeonslice] | ||
include: | ||
- compiler: clang++-15 | ||
os: ubuntu-22.04 | ||
- fightstyle: multitarget | ||
style_arg: desired_targets=10 | ||
- fightstyle: dungeonslice | ||
style_arg: fight_style=DungeonSlice | ||
env: | ||
UBSAN_OPTIONS: print_stacktrace=1 | ||
SIMC_ARGS: output=/dev/null threads=2 iterations=10 cleanup_threads=1 | ||
PLAYER_ARGS: load_default_gear=1 | ||
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: Setup | ||
id: setup | ||
env: | ||
MATRIX_SPEC: ${{ matrix.spec }} | ||
run: | | ||
echo "CLASS_STR=${MATRIX_SPEC%%_*}" >> "$GITHUB_ENV" | ||
echo "SPEC_STR=${MATRIX_SPEC#*_}" >> "$GITHUB_ENV" | ||
- name: "Log Debug" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} log=1 debug=1 ${{ matrix.style_arg }} \ | ||
enable_all_talents=1 enable_all_item_effects=1 enable_all_sets=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} log=1 debug=1 ${{ matrix.style_arg }} \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} | ||
- name: "HTML JSON" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} html=test.html json=test.json ${{ matrix.style_arg }} \ | ||
enable_all_talents=1 enable_all_item_effects=1 enable_all_sets=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} html=test.html json=test.json ${{ matrix.style_arg }} \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} | ||
- name: "No Talents, No Effects, No Sets" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} ${{ matrix.style_arg }} \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} | ||
- name: "No Talents, No Effects, All Sets" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} ${{ matrix.style_arg }} \ | ||
enable_all_sets=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} | ||
- name: "No Talents, All Effects, No Sets" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} ${{ matrix.style_arg }} \ | ||
enable_all_item_effects=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} | ||
- name: "No Talents, All Effects, All Sets" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} ${{ matrix.style_arg }} \ | ||
enable_all_item_effects=1 enable_all_sets=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} | ||
- name: "Starter Talents, No Effects, No Sets" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} ${{ matrix.style_arg }} \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} load_default_talents=1 | ||
- name: "Starter Talents, No Effects, All Sets" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} ${{ matrix.style_arg }} \ | ||
enable_all_sets=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} load_default_talents=1 | ||
- name: "Starter Talents, All Effects, No Sets" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} ${{ matrix.style_arg }} \ | ||
enable_all_item_effects=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} load_default_talents=1 | ||
- name: "Starter Talents, All Effects, All Sets" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} ${{ matrix.style_arg }} \ | ||
enable_all_item_effects=1 enable_all_sets=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} load_default_talents=1 | ||
- name: "All Talents, No Effects, No Sets" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} ${{ matrix.style_arg }} \ | ||
enable_all_talents=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} | ||
- name: "All Talents, No Effects, All Sets" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} ${{ matrix.style_arg }} \ | ||
enable_all_talents=1 enable_all_sets=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} | ||
- name: "All Talents, All Effects, No Sets" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} ${{ matrix.style_arg }} \ | ||
enable_all_talents=1 enable_all_item_effects=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} | ||
- name: "All Talents, All Effects, All Sets" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} ${{ matrix.style_arg }} \ | ||
enable_all_talents=1 enable_all_item_effects=1 enable_all_sets=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} | ||
- name: Dump APL | ||
id: dump_apl | ||
if: github.event_name == 'push' && matrix.fightstyle == 'singletarget' && !failure() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc save_profiles=1 save_full_profile=0 \ | ||
enable_all_talents=1 enable_all_item_effects=1 enable_all_sets=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ | ||
save_actions=${{ matrix.spec }}.simc | ||
- name: Upload APL | ||
if: steps.dump_apl.outcome == 'success' | ||
continue-on-error: true | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: apl-${{ github.sha }}-${{ matrix.spec }} | ||
path: ${{ matrix.spec }}.simc | ||
retention-days: 1 | ||
spec-test-ptr: | ||
name: spec-test-ptr-${{ matrix.spec }}-${{ matrix.fightstyle }} | ||
runs-on: ${{ matrix.os }} | ||
needs: [ ubuntu-clang-build ] | ||
if: ${{ matrix.spec != '[]' }} | ||
Check failure on line 337 in .github/workflows/main.yml GitHub Actions / CIInvalid workflow file
|
||
strategy: | ||
fail-fast: false | ||
matrix: | ||
cppVersion: [17] | ||
compiler: [clang++-15] | ||
spec: [ | ||
] | ||
fightstyle: [singletarget, multitarget, dungeonslice] | ||
include: | ||
- compiler: clang++-15 | ||
os: ubuntu-22.04 | ||
- fightstyle: multitarget | ||
style_arg: desired_targets=10 | ||
- fightstyle: dungeonslice | ||
style_arg: fight_style=DungeonSlice | ||
env: | ||
UBSAN_OPTIONS: print_stacktrace=1 | ||
SIMC_ARGS: output=/dev/null threads=2 iterations=10 cleanup_threads=1 ptr=1 | ||
PLAYER_ARGS: load_default_gear=1 | ||
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: Setup | ||
id: setup | ||
env: | ||
MATRIX_SPEC: ${{ matrix.spec }} | ||
run: | | ||
echo "CLASS_STR=${MATRIX_SPEC%%_*}" >> "$GITHUB_ENV" | ||
echo "SPEC_STR=${MATRIX_SPEC#*_}" >> "$GITHUB_ENV" | ||
- name: "Log Debug" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} log=1 debug=1 ${{ matrix.style_arg }}\ | ||
enable_all_talents=1 enable_all_item_effects=1 enable_all_sets=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} log=1 debug=1 ${{ matrix.style_arg }}\ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} | ||
- name: "HTML JSON" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} html=test.html json=test.json ${{ matrix.style_arg }}\ | ||
enable_all_talents=1 enable_all_item_effects=1 enable_all_sets=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} html=test.html json=test.json ${{ matrix.style_arg }}\ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} | ||
- name: "No Talents, No Effects, No Sets" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} ${{ matrix.style_arg }}\ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} | ||
- name: "No Talents, No Effects, All Sets" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} ${{ matrix.style_arg }}\ | ||
enable_all_sets=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} | ||
- name: "No Talents, All Effects, No Sets" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} ${{ matrix.style_arg }}\ | ||
enable_all_item_effects=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} | ||
- name: "No Talents, All Effects, All Sets" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} ${{ matrix.style_arg }}\ | ||
enable_all_item_effects=1 enable_all_sets=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} | ||
- name: "Starter Talents, No Effects, No Sets" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} ${{ matrix.style_arg }}\ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} load_default_talents=1 | ||
- name: "Starter Talents, No Effects, All Sets" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} ${{ matrix.style_arg }}\ | ||
enable_all_sets=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} load_default_talents=1 | ||
- name: "Starter Talents, All Effects, No Sets" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} ${{ matrix.style_arg }}\ | ||
enable_all_item_effects=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} load_default_talents=1 | ||
- name: "Starter Talents, All Effects, All Sets" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} ${{ matrix.style_arg }}\ | ||
enable_all_item_effects=1 enable_all_sets=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} load_default_talents=1 | ||
- name: "All Talents, No Effects, No Sets" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} ${{ matrix.style_arg }}\ | ||
enable_all_talents=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} | ||
- name: "All Talents, No Effects, All Sets" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} ${{ matrix.style_arg }}\ | ||
enable_all_talents=1 enable_all_sets=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} | ||
- name: "All Talents, All Effects, No Sets" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} ${{ matrix.style_arg }}\ | ||
enable_all_talents=1 enable_all_item_effects=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} | ||
- name: "All Talents, All Effects, All Sets" | ||
if: always() | ||
run: | | ||
${{ runner.workspace }}/b/ninja/simc ${{ env.SIMC_ARGS }} ${{ matrix.style_arg }}\ | ||
enable_all_talents=1 enable_all_item_effects=1 enable_all_sets=1 \ | ||
${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} | ||
apl-profile: | ||
name: Action Priority List Dump / Regenerate Profiles | ||
runs-on: ${{ matrix.os }} | ||
needs: [ spec-test, spelldata-dump ] | ||
if: github.event_name == 'push' && ( success() || failure() ) && github.repository == 'simulationcraft/simc' | ||
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: Download APLs | ||
uses: actions/download-artifact@v4 | ||
with: | ||
path: ActionPriorityLists | ||
pattern: apl-${{ github.sha }}-* | ||
merge-multiple: true | ||
- name: Setup | ||
run: echo "SHORT_SHA=$(git rev-parse --short ${{ github.sha }})" >> $GITHUB_ENV | ||
- name: Run | ||
env: | ||
UBSAN_OPTIONS: print_stacktrace=1 | ||
SIMC_CLI_PATH: ${{ runner.workspace }}/b/ninja/simc | ||
run: ${{ github.workspace }}/generate_profiles_ci.sh | ||
- name: Commit APLs | ||
continue-on-error: true | ||
uses: EndBug/add-and-commit@v9 | ||
with: | ||
message: 'Update APL Dump / Regenerate Profiles ${{ env.SHORT_SHA }}' | ||
default_author: github_actions | ||
fetch: --no-tags --force --prune --no-recurse-submodules --depth=1 origin ${{ github.ref_name }} | ||
add: '*.simc' | ||
- name: Cleanup | ||
uses: geekyeggo/delete-artifact@v5 | ||
with: | ||
name: apl-${{ github.sha }}-* | ||
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, clang++-18, gcc-7, gcc-12, gcc-14] | ||
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: clang++-18 | ||
os: ubuntu-24.04 | ||
- compiler: gcc-14 | ||
os: ubuntu-24.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 ${{ matrix.simc_flags }} | ||
spelldata-dump: | ||
name: Spell Data Dump | ||
runs-on: ${{ matrix.os }} | ||
needs: [ ubuntu-clang-build, ubuntu-run ] | ||
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: Dump Spell Data | ||
env: | ||
UBSAN_OPTIONS: print_stacktrace=1 | ||
SIMC_CLI_PATH: ${{ runner.workspace }}/b/ninja/simc | ||
run: ${{ github.workspace}}/SpellDataDump/spelldatadump_ci.sh | ||
- name: Check for Non-Trivial Changes | ||
run: | | ||
if [ "$(git ls-files -m)" = "SpellDataDump/build_info.txt" ]; then | ||
git checkout -- SpellDataDump/build_info.txt | ||
fi | ||
- name: Setup | ||
run: echo "SHORT_SHA=$(git rev-parse --short ${{ github.sha }})" >> $GITHUB_ENV | ||
- name: Commit Spell Data | ||
continue-on-error: true | ||
uses: EndBug/add-and-commit@v9 | ||
with: | ||
message: 'Update Spell Data Dump ${{ env.SHORT_SHA }}' | ||
default_author: github_actions | ||
fetch: --no-tags --force --prune --no-recurse-submodules --depth=1 origin ${{ github.ref_name }} | ||
add: '*.txt' | ||
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: false # disable smoke test for now, as it seems to hang the workflow indefinitely on assert, instead of failing. | ||
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 |