[CI] rebuild binary for forked PR spec test #48
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: spec-test | ||
run-name: ${{ github.event.workflow_run.head_commit.message }} | ||
on: | ||
workflow_run: | ||
workflows: ['CI'] | ||
types: [completed] | ||
jobs: | ||
check-binary: | ||
if: ${{ github.event.workflow_run.conclusion == 'success' }} | ||
runs-on: ubuntu-22.04 | ||
outputs: | ||
cache-hit: ${{ steps.restore-cache.outputs.cache-hit }} | ||
steps: | ||
- uses: actions/cache@v4 | ||
id: restore-cache | ||
with: | ||
path: | | ||
${{ runner.workspace }}/b/ninja/simc | ||
profiles | ||
tests | ||
generate_profiles_ci.sh | ||
.git | ||
key: ubuntu-clang++-15-for_run-${{ github.event.workflow_run.head_sha }}-cpp-17 | ||
build_binary: | ||
needs: [ check-binary ] | ||
if: ${{ needs.check-binary.outputs.cache-hit != 'true' }} | ||
runs-on: ubuntu-22.04 | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
ref: ${{ github.event.workflow_run.head_branch }} | ||
- uses: actions/cache@v4 | ||
env: { ccache-prefix: 'ubuntu-clang++-15-cpp-17-ccache-0' } | ||
with: | ||
path: ${{ runner.workspace }}/.ccache | ||
key: ${{ env.ccache-prefix }}-${{ github.event.workflow_run.head_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 clang-15 lld-15 | ||
- 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=clang++-15 | ||
-DCMAKE_CXX_FLAGS="-Og ${{ 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=17 | ||
-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-clang++-15-for_run-${{ github.event.workflow_run.head_sha }}-cpp-17 | ||
spec-test: | ||
name: spec-test-${{ matrix.spec }}-${{ matrix.fightstyle }} | ||
runs-on: ubuntu-22.04 | ||
needs: [ check-binary, build-binary ] | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
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, monk_mistweaver, | ||
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: | ||
- 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 allow_experimental_specializations=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-clang++-15-for_run-${{ github.event.workflow_run.head_sha }}-cpp-17 | ||
- 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 \ | ||
allow_experimental_specializations=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.event.workflow_run.head_sha }}-${{ matrix.spec }} | ||
# path: ${{ matrix.spec }}.simc | ||
# retention-days: 1 | ||