Skip to content

Only build BizHawk from scratch if it can't be downloaded #143

Only build BizHawk from scratch if it can't be downloaded

Only build BizHawk from scratch if it can't be downloaded #143

Workflow file for this run

name: Build
on:
push:
branches: [ master ]
tags:
- '*'
pull_request:
branches: [ master ]
jobs:
build:
runs-on: windows-2022
defaults:
run:
shell: pwsh
env:
bizhawk_hash: ''
bizhawk_required_files: |
lib/BizHawk/output/dll/BizHawk.*.dll
lib/BizHawk/output/EmuHawk.exe
skip_benchmarks: false
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: false
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
- name: Get BizHawk submodule SHA
run: echo "bizhawk_hash=$(git rev-parse HEAD:lib/BizHawk)" >> $env:GITHUB_ENV
- name: Restore BizHawk binaries from cache
id: bizhawk-binaries-cache-restore
uses: martijnhols/actions-cache/restore@v3
with:
path: ${{ env.bizhawk_required_files }}
key: bizhawk-binaries-${{ env.bizhawk_hash }}
- name: Check out BizHawk
if: ${{ hashFiles(env.bizhawk_required_files) == '' }}
run: git submodule update --init
- name: Build BizHawk
if: ${{ hashFiles(env.bizhawk_required_files) == '' }}
run: QuickTestBuildAndPackage_Release.bat
shell: cmd
working-directory: lib/BizHawk/Dist
- name: Save BizHawk binaries to cache
if: ${{ steps.bizhawk-binaries-cache-restore.outputs.cache-hit != 'true' }}
uses: martijnhols/actions-cache/save@v3
with:
path: ${{ env.bizhawk_required_files }}
key: ${{ steps.bizhawk-binaries-cache-restore.outputs.primary-key }}
- name: Build external tool
run: dotnet build -c:Release -t:CreateZip
working-directory: src/SHME.ExternalTool
- name: Check for [skip benchmarks]
run: |
# rev-list is necessary because the HEAD~X syntax doesn't actually go in
# order one commit at a time, instead traversing by parent, so merge
# commits cause big jumps that throw off one's expectations.
foreach ($sha in $(git rev-list HEAD))
{
$msg = $(git show -s --format=%B $sha)
# In case of a force push, Github will add an invisible merge commit
# that doesn't contain the expected newest commit message.
#
# Powershell's StartsWith also returns multiple values, one per line
# of the input, so just check element 0 and ignore the rest.
if (${{ github.event.forced }} && $msg[0].StartsWith('Merge'))
{
continue
}
echo "skip_benchmarks=$($msg.Contains('[skip benchmarks]'))" >> $env:GITHUB_ENV
break
}
- name: Run benchmarks
if: ${{ env.skip_benchmarks != 'true' }}
run: dotnet run -c Release -- -f * -e json -a ../../artifacts/test/benchmark
working-directory: test/Benchmark
- name: Rename benchmark results
if: ${{ env.skip_benchmarks != 'true' }}
run: Rename-Item -Path BenchmarkRun*.json -NewName benchmark-results.json
working-directory: artifacts/test/benchmark/results
- name: Upload benchmark results
if: ${{ github.event_name != 'pull_request' && env.skip_benchmarks != 'true' }}
uses: benchmark-action/github-action-benchmark@v1
with:
name: SHME BenchmarkDotNet results
tool: 'benchmarkdotnet'
output-file-path: artifacts/test/benchmark/results/benchmark-results.json
gh-repository: github.com/ItEndsWithTens/PerfTrendsWithTens
benchmark-data-dir-path: SHME/bench
github-token: ${{ secrets.PERF_REPO_WRITE_TOKEN }}
auto-push: true
- name: Upload .zip
uses: actions/upload-artifact@v4
with:
name: zip
path: artifacts/dist/*.zip
compression-level: 0
create-release:
needs: build
if: ${{ github.event_name != 'pull_request' }}
runs-on: ubuntu-latest
steps:
- name: Download zip file
uses: actions/download-artifact@v4
with:
name: zip
- name: Release latest dev build
if: ${{ !startsWith(github.ref, 'refs/tags/v') }}
uses: dciborow/[email protected]
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: 'latest'
title: 'Latest dev build'
prerelease: false
generate_release_notes: true
files: |
*.zip
- name: Prepare draft release of tag
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
uses: dciborow/[email protected]
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
draft: true
prerelease: false
generate_release_notes: true
files: |
*.zip