[ele]Expire AD #109
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 }} | |
spelldata-dump: | |
name: Spell Data Dump | |
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: 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' | |
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 ] | |
strategy: | |
fail-fast: false | |
matrix: | |
cppVersion: [17] | |
compiler: [clang++-15] | |
spec: [ | |
shaman_elemental | |
] | |
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 }} | |
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 |