From 5dea1e1df44540f51735e78890dad21c5cdd9b6b Mon Sep 17 00:00:00 2001 From: gastank <42421688+gastank@users.noreply.github.com> Date: Mon, 2 Mar 2026 10:15:11 -0800 Subject: [PATCH 1/4] [CI] use matrix structure to determine spec & class name tokens --- .github/workflows/spec_test.yml | 167 ++++++++++++++------------------ 1 file changed, 74 insertions(+), 93 deletions(-) diff --git a/.github/workflows/spec_test.yml b/.github/workflows/spec_test.yml index 26eb48475eb..19bc2fa569f 100644 --- a/.github/workflows/spec_test.yml +++ b/.github/workflows/spec_test.yml @@ -12,7 +12,7 @@ on: jobs: spec-test: - name: spec-test-${{ matrix.spec }} + name: spec-test-${{ matrix.class }}_${{ matrix.spec }} runs-on: ubuntu-22.04 continue-on-error: ${{ inputs.is-ptr }} timeout-minutes: 15 @@ -20,43 +20,34 @@ jobs: strategy: fail-fast: false matrix: - spec: - [ - deathknight_blood, - deathknight_unholy, - deathknight_frost, - demonhunter_devourer, - demonhunter_havoc, - demonhunter_vengeance, - 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, - shaman_enhancement, - warlock_affliction, - warlock_demonology, - warlock_destruction, - warrior_arms, - warrior_fury, - warrior_protection, - ] + class: [deathknight, demonhunter, druid, evoker, hunter, mage, monk, paladin, priest, rogue, shaman, warlock, warrior] + include: + - class: deathknight + spec: [blood, unholy, frost] + - class: demonhunter + spec: [devourer, havoc, vengeance] + - class: druid + spec: [balance, feral, guardian, restoration] + - class: evoker + spec: [devastation, augmentation] + - class: hunter + spec: [beast_mastery, marksmanship, survival] + - class: mage + spec: [arcane, fire, frost] + - class: monk + spec: [brewmaster, windwalker] + - class: paladin + spec: [protection, retribution] + - class: priest + spec: [shadow] + - class: rogue + spec: [assassination, outlaw, subtlety] + - class: shaman + spec: [elemental, enhancement] + - class: warlock + spec: [affliction, demonology, destruction] + - class: warrior + spec: [arms, fury, protection] env: UBSAN_OPTIONS: print_stacktrace=1 @@ -76,14 +67,6 @@ jobs: .git key: ${{ inputs.cache-key }} - - 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: Enable PTR if: inputs.is-ptr run: echo "PTR_ARG=ptr=1" >> "$GITHUB_ENV" @@ -92,12 +75,12 @@ jobs: run: | echo ">>>>> Hero Tree 1 <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} iterations=1 \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=1 set_bonus=latest_2pc=1/latest_4pc=1 use_blizzard_action_list=1 echo echo ">>>>> Hero Tree 2 <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} iterations=1 \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=2 set_bonus=latest_2pc=1/latest_4pc=1 use_blizzard_action_list=1 - name: "Log Debug" @@ -106,17 +89,17 @@ jobs: echo ">>>>> Single Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} log=1 debug=1 \ 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 }} + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Multi Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.MT_ARGS}} log=1 debug=1 \ 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 }} + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Dungeon Slice <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.DS_ARGS}} log=1 debug=1 \ 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 }} + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} - name: "HTML JSON" if: always() @@ -124,32 +107,32 @@ jobs: echo ">>>>> Single Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} html=test.html json=test.json \ 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 }} + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Multi Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.MT_ARGS}} html=test_mt.html json=test_mt.json \ 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 }} + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Dungeon Slice <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.DS_ARGS}} html=test_ds.html json=test_ds.json \ 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 }} + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} - name: "No Talents, No Effects, No Sets" if: always() run: | echo ">>>>> Single Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Multi Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.MT_ARGS}} \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Dungeon Slice <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.DS_ARGS}} \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} - name: "No Talents, No Effects, All Sets" if: always() @@ -157,17 +140,17 @@ jobs: echo ">>>>> Single Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} \ enable_all_sets=1 \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Multi Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.MT_ARGS}} \ enable_all_sets=1 \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Dungeon Slice <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.DS_ARGS}} \ enable_all_sets=1 \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} - name: "No Talents, All Effects, No Sets" if: always() @@ -175,17 +158,17 @@ jobs: echo ">>>>> Single Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} \ enable_all_item_effects=1 \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Multi Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.MT_ARGS}} \ enable_all_item_effects=1 \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Dungeon Slice <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.DS_ARGS}} \ enable_all_item_effects=1 \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} - name: "All Talents, No Effects, No Sets" if: always() @@ -193,34 +176,34 @@ jobs: echo ">>>>> Single Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} \ enable_all_talents=1 \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Multi Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.MT_ARGS}} \ enable_all_talents=1 \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Dungeon Slice <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.DS_ARGS}} \ enable_all_talents=1 \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} - name: "Starter Talents, Hero Tree 1, No Sets" if: always() run: | echo ">>>>> Single Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=1 echo echo ">>>>> Multi Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.MT_ARGS}} \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=1 echo echo ">>>>> Dungeon Slice <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.DS_ARGS}} \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=1 - name: "Starter Talents, Hero Tree 2, No Sets" @@ -228,17 +211,17 @@ jobs: run: | echo ">>>>> Single Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=2 echo echo ">>>>> Multi Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.MT_ARGS}} \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=2 echo echo ">>>>> Dungeon Slice <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.DS_ARGS}} \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=2 - name: "Starter Talents, Hero Tree 1, All Sets" @@ -247,19 +230,19 @@ jobs: echo ">>>>> Single Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} \ enable_all_sets=1 \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=1 echo echo ">>>>> Multi Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.MT_ARGS}} \ enable_all_sets=1 \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=1 echo echo ">>>>> Dungeon Slice <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.DS_ARGS}} \ enable_all_sets=1 \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=1 - name: "Starter Talents, Hero Tree 2, All Sets" @@ -268,19 +251,19 @@ jobs: echo ">>>>> Single Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} \ enable_all_sets=1 \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=2 echo echo ">>>>> Multi Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.MT_ARGS}} \ enable_all_sets=1 \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=2 echo echo ">>>>> Dungeon Slice <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.DS_ARGS}} \ enable_all_sets=1 \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=2 - name: "All Talents, All Effects, All Sets" @@ -289,23 +272,23 @@ jobs: echo ">>>>> Single Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} \ 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 }} + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Multi Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.MT_ARGS}} \ 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 }} + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Dungeon Slice <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.DS_ARGS}} \ 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 }} + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} - name: "Profileset Test" if: always() run: | ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} \ - ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ profileset.base=load_default_talents=1 \ profileset.one=load_default_talents=1 profileset.one+=hero_talents=1 \ profileset.two=load_default_talents=1 profileset.two+=hero_talents=2 \ @@ -323,30 +306,28 @@ jobs: if: github.event_name == 'push' && !failure() && !inputs.is-ptr run: | mkdir default - ${{ runner.workspace }}/b/ninja/simc save_profiles=1 save_full_profile=0 \ + ${{ runner.workspace }}/b/ninja/simc save_profiles=1 save_full_profile=0 allow_experimental_specializations=1 \ enable_all_talents=1 enable_all_sets=1 \ - allow_experimental_specializations=1 ${{ env.CLASS_STR }}=${{ matrix.spec }} \ - spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ - save_actions=default/${{ matrix.spec }}.simc + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ + save_actions=default/${{ matrix.class }}_${{ matrix.spec }}.simc - name: Dump APL Assisted id: dump_apl_assisted if: github.event_name == 'push' && !failure() && !inputs.is-ptr run: | mkdir assisted_combat - ${{ runner.workspace }}/b/ninja/simc save_profiles=1 save_full_profile=0 \ + ${{ runner.workspace }}/b/ninja/simc save_profiles=1 save_full_profile=0 allow_experimental_specializations=1 \ enable_all_talents=1 enable_all_sets=1 \ - allow_experimental_specializations=1 ${{ env.CLASS_STR }}=${{ matrix.spec }} \ - spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} use_blizzard_action_list=1 \ - save_actions=assisted_combat/${{ matrix.spec }}.simc + ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ + use_blizzard_action_list=1 save_actions=assisted_combat/${{ matrix.class }}_${{ matrix.spec }}.simc - name: Upload APL if: steps.dump_apl_default.outcome == 'success' || steps.dump_apl_assisted.outcome == 'success' continue-on-error: true uses: actions/upload-artifact@v4 with: - name: apl-${{ github.sha }}-${{ matrix.spec }} + name: apl-${{ github.sha }}-${{ matrix.class }}_${{ matrix.spec }} path: | - default/${{ matrix.spec }}.simc - assisted_combat/${{ matrix.spec }}.simc + default/${{ matrix.class }}_${{ matrix.spec }}.simc + assisted_combat/${{ matrix.class }}_${{ matrix.spec }}.simc retention-days: 1 From 62798245191f1929ccdaad40efab000dbc5ea81d Mon Sep 17 00:00:00 2001 From: gastank <42421688+gastank@users.noreply.github.com> Date: Mon, 2 Mar 2026 10:38:59 -0800 Subject: [PATCH 2/4] can't use arrays in include --- .github/workflows/spec_test.yml | 68 ++++++++++++++++++++++++++------- 1 file changed, 55 insertions(+), 13 deletions(-) diff --git a/.github/workflows/spec_test.yml b/.github/workflows/spec_test.yml index 19bc2fa569f..def628a3983 100644 --- a/.github/workflows/spec_test.yml +++ b/.github/workflows/spec_test.yml @@ -23,31 +23,73 @@ jobs: class: [deathknight, demonhunter, druid, evoker, hunter, mage, monk, paladin, priest, rogue, shaman, warlock, warrior] include: - class: deathknight - spec: [blood, unholy, frost] + spec: blood + - class: deathknight + spec: unholy + - class: deathknight + spec: frost + - class: demonhunter + spec: devourer - class: demonhunter - spec: [devourer, havoc, vengeance] + spec: havoc + - class: demonhunter + spec: vengeance + - class: druid + spec: balance + - class: druid + spec: feral - class: druid - spec: [balance, feral, guardian, restoration] + spec: guardian + - class: druid + spec: restoration + - class: evoker + spec: devastation - class: evoker - spec: [devastation, augmentation] + spec: augmentation + - class: hunter + spec: beast_mastery - class: hunter - spec: [beast_mastery, marksmanship, survival] + spec: marksmanship + - class: hunter + spec: survival + - class: mage + spec: arcane - class: mage - spec: [arcane, fire, frost] + spec: fire + - class: mage + spec: frost + - class: monk + spec: brewmaster - class: monk - spec: [brewmaster, windwalker] + spec: windwalker + - class: paladin + spec: protection - class: paladin - spec: [protection, retribution] + spec: retribution - class: priest - spec: [shadow] + spec: shadow + - class: rogue + spec: assassination + - class: rogue + spec: outlaw - class: rogue - spec: [assassination, outlaw, subtlety] + spec: subtlety - class: shaman - spec: [elemental, enhancement] + spec: elemental + - class: shaman + spec: enhancement + - class: warlock + spec: affliction + - class: warlock + spec: demonology - class: warlock - spec: [affliction, demonology, destruction] + spec: destruction + - class: warrior + spec: arms + - class: warrior + spec: fury - class: warrior - spec: [arms, fury, protection] + spec: protection env: UBSAN_OPTIONS: print_stacktrace=1 From b2a9a67d68ba8e4dff3bdd204f9d65eafe0de43d Mon Sep 17 00:00:00 2001 From: gastank <42421688+gastank@users.noreply.github.com> Date: Mon, 2 Mar 2026 11:13:10 -0800 Subject: [PATCH 3/4] Revert "can't use arrays in include" This reverts commit 62798245191f1929ccdaad40efab000dbc5ea81d. --- .github/workflows/spec_test.yml | 68 +++++++-------------------------- 1 file changed, 13 insertions(+), 55 deletions(-) diff --git a/.github/workflows/spec_test.yml b/.github/workflows/spec_test.yml index def628a3983..19bc2fa569f 100644 --- a/.github/workflows/spec_test.yml +++ b/.github/workflows/spec_test.yml @@ -23,73 +23,31 @@ jobs: class: [deathknight, demonhunter, druid, evoker, hunter, mage, monk, paladin, priest, rogue, shaman, warlock, warrior] include: - class: deathknight - spec: blood - - class: deathknight - spec: unholy - - class: deathknight - spec: frost - - class: demonhunter - spec: devourer + spec: [blood, unholy, frost] - class: demonhunter - spec: havoc - - class: demonhunter - spec: vengeance - - class: druid - spec: balance - - class: druid - spec: feral + spec: [devourer, havoc, vengeance] - class: druid - spec: guardian - - class: druid - spec: restoration - - class: evoker - spec: devastation + spec: [balance, feral, guardian, restoration] - class: evoker - spec: augmentation - - class: hunter - spec: beast_mastery + spec: [devastation, augmentation] - class: hunter - spec: marksmanship - - class: hunter - spec: survival - - class: mage - spec: arcane + spec: [beast_mastery, marksmanship, survival] - class: mage - spec: fire - - class: mage - spec: frost - - class: monk - spec: brewmaster + spec: [arcane, fire, frost] - class: monk - spec: windwalker - - class: paladin - spec: protection + spec: [brewmaster, windwalker] - class: paladin - spec: retribution + spec: [protection, retribution] - class: priest - spec: shadow - - class: rogue - spec: assassination - - class: rogue - spec: outlaw + spec: [shadow] - class: rogue - spec: subtlety + spec: [assassination, outlaw, subtlety] - class: shaman - spec: elemental - - class: shaman - spec: enhancement - - class: warlock - spec: affliction - - class: warlock - spec: demonology + spec: [elemental, enhancement] - class: warlock - spec: destruction - - class: warrior - spec: arms - - class: warrior - spec: fury + spec: [affliction, demonology, destruction] - class: warrior - spec: protection + spec: [arms, fury, protection] env: UBSAN_OPTIONS: print_stacktrace=1 From 3500fd09748bf8f7f77c938b33e68616b92c74b8 Mon Sep 17 00:00:00 2001 From: gastank <42421688+gastank@users.noreply.github.com> Date: Mon, 2 Mar 2026 11:13:11 -0800 Subject: [PATCH 4/4] Revert "[CI] use matrix structure to determine spec & class name tokens" This reverts commit 5dea1e1df44540f51735e78890dad21c5cdd9b6b. --- .github/workflows/spec_test.yml | 167 ++++++++++++++++++-------------- 1 file changed, 93 insertions(+), 74 deletions(-) diff --git a/.github/workflows/spec_test.yml b/.github/workflows/spec_test.yml index 19bc2fa569f..26eb48475eb 100644 --- a/.github/workflows/spec_test.yml +++ b/.github/workflows/spec_test.yml @@ -12,7 +12,7 @@ on: jobs: spec-test: - name: spec-test-${{ matrix.class }}_${{ matrix.spec }} + name: spec-test-${{ matrix.spec }} runs-on: ubuntu-22.04 continue-on-error: ${{ inputs.is-ptr }} timeout-minutes: 15 @@ -20,34 +20,43 @@ jobs: strategy: fail-fast: false matrix: - class: [deathknight, demonhunter, druid, evoker, hunter, mage, monk, paladin, priest, rogue, shaman, warlock, warrior] - include: - - class: deathknight - spec: [blood, unholy, frost] - - class: demonhunter - spec: [devourer, havoc, vengeance] - - class: druid - spec: [balance, feral, guardian, restoration] - - class: evoker - spec: [devastation, augmentation] - - class: hunter - spec: [beast_mastery, marksmanship, survival] - - class: mage - spec: [arcane, fire, frost] - - class: monk - spec: [brewmaster, windwalker] - - class: paladin - spec: [protection, retribution] - - class: priest - spec: [shadow] - - class: rogue - spec: [assassination, outlaw, subtlety] - - class: shaman - spec: [elemental, enhancement] - - class: warlock - spec: [affliction, demonology, destruction] - - class: warrior - spec: [arms, fury, protection] + spec: + [ + deathknight_blood, + deathknight_unholy, + deathknight_frost, + demonhunter_devourer, + demonhunter_havoc, + demonhunter_vengeance, + 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, + shaman_enhancement, + warlock_affliction, + warlock_demonology, + warlock_destruction, + warrior_arms, + warrior_fury, + warrior_protection, + ] env: UBSAN_OPTIONS: print_stacktrace=1 @@ -67,6 +76,14 @@ jobs: .git key: ${{ inputs.cache-key }} + - 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: Enable PTR if: inputs.is-ptr run: echo "PTR_ARG=ptr=1" >> "$GITHUB_ENV" @@ -75,12 +92,12 @@ jobs: run: | echo ">>>>> Hero Tree 1 <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} iterations=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=1 set_bonus=latest_2pc=1/latest_4pc=1 use_blizzard_action_list=1 echo echo ">>>>> Hero Tree 2 <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} iterations=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=2 set_bonus=latest_2pc=1/latest_4pc=1 use_blizzard_action_list=1 - name: "Log Debug" @@ -89,17 +106,17 @@ jobs: echo ">>>>> Single Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} log=1 debug=1 \ enable_all_talents=1 enable_all_item_effects=1 enable_all_sets=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Multi Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.MT_ARGS}} log=1 debug=1 \ enable_all_talents=1 enable_all_item_effects=1 enable_all_sets=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Dungeon Slice <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.DS_ARGS}} log=1 debug=1 \ enable_all_talents=1 enable_all_item_effects=1 enable_all_sets=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} - name: "HTML JSON" if: always() @@ -107,32 +124,32 @@ jobs: echo ">>>>> Single Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} html=test.html json=test.json \ enable_all_talents=1 enable_all_item_effects=1 enable_all_sets=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Multi Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.MT_ARGS}} html=test_mt.html json=test_mt.json \ enable_all_talents=1 enable_all_item_effects=1 enable_all_sets=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Dungeon Slice <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.DS_ARGS}} html=test_ds.html json=test_ds.json \ enable_all_talents=1 enable_all_item_effects=1 enable_all_sets=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} - name: "No Talents, No Effects, No Sets" if: always() run: | echo ">>>>> Single Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Multi Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.MT_ARGS}} \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Dungeon Slice <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.DS_ARGS}} \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} - name: "No Talents, No Effects, All Sets" if: always() @@ -140,17 +157,17 @@ jobs: echo ">>>>> Single Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} \ enable_all_sets=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Multi Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.MT_ARGS}} \ enable_all_sets=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Dungeon Slice <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.DS_ARGS}} \ enable_all_sets=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} - name: "No Talents, All Effects, No Sets" if: always() @@ -158,17 +175,17 @@ jobs: echo ">>>>> Single Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} \ enable_all_item_effects=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Multi Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.MT_ARGS}} \ enable_all_item_effects=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Dungeon Slice <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.DS_ARGS}} \ enable_all_item_effects=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} - name: "All Talents, No Effects, No Sets" if: always() @@ -176,34 +193,34 @@ jobs: echo ">>>>> Single Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} \ enable_all_talents=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Multi Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.MT_ARGS}} \ enable_all_talents=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Dungeon Slice <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.DS_ARGS}} \ enable_all_talents=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} - name: "Starter Talents, Hero Tree 1, No Sets" if: always() run: | echo ">>>>> Single Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=1 echo echo ">>>>> Multi Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.MT_ARGS}} \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=1 echo echo ">>>>> Dungeon Slice <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.DS_ARGS}} \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=1 - name: "Starter Talents, Hero Tree 2, No Sets" @@ -211,17 +228,17 @@ jobs: run: | echo ">>>>> Single Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=2 echo echo ">>>>> Multi Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.MT_ARGS}} \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=2 echo echo ">>>>> Dungeon Slice <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.DS_ARGS}} \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=2 - name: "Starter Talents, Hero Tree 1, All Sets" @@ -230,19 +247,19 @@ jobs: echo ">>>>> Single Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} \ enable_all_sets=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=1 echo echo ">>>>> Multi Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.MT_ARGS}} \ enable_all_sets=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=1 echo echo ">>>>> Dungeon Slice <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.DS_ARGS}} \ enable_all_sets=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=1 - name: "Starter Talents, Hero Tree 2, All Sets" @@ -251,19 +268,19 @@ jobs: echo ">>>>> Single Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} \ enable_all_sets=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=2 echo echo ">>>>> Multi Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.MT_ARGS}} \ enable_all_sets=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=2 echo echo ">>>>> Dungeon Slice <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.DS_ARGS}} \ enable_all_sets=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ load_default_talents=1 hero_talents=2 - name: "All Talents, All Effects, All Sets" @@ -272,23 +289,23 @@ jobs: echo ">>>>> Single Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} \ enable_all_talents=1 enable_all_item_effects=1 enable_all_sets=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Multi Target <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.MT_ARGS}} \ enable_all_talents=1 enable_all_item_effects=1 enable_all_sets=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} echo echo ">>>>> Dungeon Slice <<<<<" ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} ${{ env.DS_ARGS}} \ enable_all_talents=1 enable_all_item_effects=1 enable_all_sets=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} - name: "Profileset Test" if: always() run: | ${{ runner.workspace }}/b/ninja/simc ${{ env.PTR_ARG }} ${{ env.SIMC_ARGS }} \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ + ${{ env.CLASS_STR }}=${{ matrix.spec }} spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ profileset.base=load_default_talents=1 \ profileset.one=load_default_talents=1 profileset.one+=hero_talents=1 \ profileset.two=load_default_talents=1 profileset.two+=hero_talents=2 \ @@ -306,28 +323,30 @@ jobs: if: github.event_name == 'push' && !failure() && !inputs.is-ptr run: | mkdir default - ${{ runner.workspace }}/b/ninja/simc save_profiles=1 save_full_profile=0 allow_experimental_specializations=1 \ + ${{ runner.workspace }}/b/ninja/simc save_profiles=1 save_full_profile=0 \ enable_all_talents=1 enable_all_sets=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ - save_actions=default/${{ matrix.class }}_${{ matrix.spec }}.simc + allow_experimental_specializations=1 ${{ env.CLASS_STR }}=${{ matrix.spec }} \ + spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} \ + save_actions=default/${{ matrix.spec }}.simc - name: Dump APL Assisted id: dump_apl_assisted if: github.event_name == 'push' && !failure() && !inputs.is-ptr run: | mkdir assisted_combat - ${{ runner.workspace }}/b/ninja/simc save_profiles=1 save_full_profile=0 allow_experimental_specializations=1 \ + ${{ runner.workspace }}/b/ninja/simc save_profiles=1 save_full_profile=0 \ enable_all_talents=1 enable_all_sets=1 \ - ${{ matrix.class }}=${{ matrix.class }}_${{ matrix.spec }} spec=${{ matrix.spec }} ${{ env.PLAYER_ARGS }} \ - use_blizzard_action_list=1 save_actions=assisted_combat/${{ matrix.class }}_${{ matrix.spec }}.simc + allow_experimental_specializations=1 ${{ env.CLASS_STR }}=${{ matrix.spec }} \ + spec=${{ env.SPEC_STR }} ${{ env.PLAYER_ARGS }} use_blizzard_action_list=1 \ + save_actions=assisted_combat/${{ matrix.spec }}.simc - name: Upload APL if: steps.dump_apl_default.outcome == 'success' || steps.dump_apl_assisted.outcome == 'success' continue-on-error: true uses: actions/upload-artifact@v4 with: - name: apl-${{ github.sha }}-${{ matrix.class }}_${{ matrix.spec }} + name: apl-${{ github.sha }}-${{ matrix.spec }} path: | - default/${{ matrix.class }}_${{ matrix.spec }}.simc - assisted_combat/${{ matrix.class }}_${{ matrix.spec }}.simc + default/${{ matrix.spec }}.simc + assisted_combat/${{ matrix.spec }}.simc retention-days: 1