Read latest commit message as string, not array #181
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: Build | |
on: | |
push: | |
branches: [ master ] | |
tags: | |
- '*' | |
pull_request: | |
branches: [ master ] | |
jobs: | |
build: | |
runs-on: windows-2022 | |
defaults: | |
run: | |
shell: pwsh | |
env: | |
GH_TOKEN: ${{ github.token }} | |
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: actions/cache/restore@v4 | |
with: | |
path: ${{ env.bizhawk_required_files }} | |
key: bizhawk-binaries-${{ env.bizhawk_hash }} | |
- name: Download BizHawk binaries | |
if: ${{ steps.bizhawk-binaries-cache-restore.outputs.cache-hit != 'true' }} | |
run: | | |
git submodule update --init --depth 1 | |
git -C lib/BizHawk fetch --tags | |
$tag = $(git -C lib/BizHawk tag --points-at HEAD) | |
if ([string]::IsNullOrEmpty($tag)) | |
{ | |
exit 0 | |
} | |
else | |
{ | |
gh release download -R TASVideos/BizHawk -p BizHawk*$tag*.zip | |
Expand-Archive -Path ./BizHawk*$tag*.zip -DestinationPath lib/BizHawk/output | |
} | |
- 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: actions/cache/save@v4 | |
with: | |
path: ${{ env.bizhawk_required_files }} | |
key: ${{ steps.bizhawk-binaries-cache-restore.outputs.cache-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) | Out-String | |
# In case of a force push to a pull request, Github will add an | |
# invisible merge commit that doesn't contain the expected newest | |
# commit message. Merge commits should otherwise be rare in a PR, | |
# so simply checking the message for the word "Merge" handles this. | |
$pr = "${{ github.event_name == 'pull_request' }}" -eq 'true' | |
$merge = $msg.StartsWith('Merge') | |
if ($pr -and $merge) | |
{ | |
continue | |
} | |
$skip = $msg -match '\[skip benchmarks?\]' | |
echo "skip_benchmarks=$skip" >> $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: crowbarmaster/[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: crowbarmaster/[email protected] | |
with: | |
repo_token: "${{ secrets.GITHUB_TOKEN }}" | |
draft: true | |
prerelease: false | |
generate_release_notes: true | |
files: | | |
*.zip |