From 5cda63041749bdaaf39c8c2ccf25660b3c13f76d Mon Sep 17 00:00:00 2001
From: Kyle Kienapfel <Docteh@users.noreply.github.com>
Date: Fri, 15 Jul 2022 19:29:44 -0700
Subject: [PATCH] package MSVC CI Builds differently, and include yuzu.exe

This is related to 8486

Ninja places the exe files into .\build\bin while MSBuild may place them
into .\build\bin\Release

upload.ps1 was originally written for use with Azure Dev Ops to cough up
about 5 files and the script appears to be used for both CI and
mainline builds

GHA (GitHub Actions) makes available a single zip of the items uploaded by
each Upload action (artifacts directory), so we want to work with that.

I'm doing changes to upload.ps1 to accomplish this.

The changes to the verify.yml are as follows

-DGIT_BRANCH=pr-verify changes the header in yuzu, instead of saying
HEAD-<hash>-dirty it'll say pr-verify-<hash>

-DCLANG_FORMAT_SUFFIX=discordplzdontclang tricks the CMake stuff for
discord-rpc to NOT run clang-format, as this was marking CI builds as
dirty

I'm also making it upload just the exe by itself, as the msvc builds are
quite chunky. but maybe this is unnecessary.

Currently the MSVC artifact option is a 274MB zip that contains 3 copies
of the DLLs, and 4 copies of the source tarball, and zero copies of yuzu.exe

This PR should have msvc artifacts of about 190MB that downloads as 81 MB zip
---
 .ci/scripts/windows/upload.ps1 | 47 ++++++++++++++++++++++++++++++++++
 .github/workflows/verify.yml   |  9 ++++++-
 2 files changed, 55 insertions(+), 1 deletion(-)

diff --git a/.ci/scripts/windows/upload.ps1 b/.ci/scripts/windows/upload.ps1
index 62483607b..230dd6954 100644
--- a/.ci/scripts/windows/upload.ps1
+++ b/.ci/scripts/windows/upload.ps1
@@ -47,6 +47,49 @@ Copy-Item .\CMakeModules -Recurse -Destination $MSVC_SOURCE
 7z a -r -ttar $MSVC_SOURCE_TAR $MSVC_SOURCE
 7z a -r -txz $MSVC_SOURCE_TARXZ $MSVC_SOURCE_TAR
 
+# Following section is quick hack to package artifacts differently for GitHub Actions
+if ("$env:GITHUB_ACTIONS" -eq "true") {
+    echo "Hello GitHub Actions"
+
+    # Hopefully there is an exe in either .\build\bin or .\build\bin\Release
+    cp .\build\bin\yuzu*.exe .\artifacts\
+    Copy-Item "$BUILD_DIR\*" -Destination "artifacts" -Recurse
+    Remove-Item .\artifacts\tests.exe -ErrorAction ignore
+
+    # None of the other GHA builds are including source, so commenting out today
+    #Copy-Item $MSVC_SOURCE_TARXZ -Destination "artifacts"
+
+    # Are debug symbols important?
+    # cp .\build\bin\yuzu*.pdb .\pdb\
+
+    # Write out a tag BUILD_TAG to environment for the Upload step
+    # We're getting ${{ github.event.number }} as $env:PR_NUMBER"
+    echo "env:PR_NUMBER: $env:PR_NUMBER"
+    if (Test-Path env:PR_NUMBER) {
+        $PR_NUMBER = $env:PR_NUMBER.Substring(2) -as [int]
+        $PR_NUMBER_TAG = "pr"+([string]$PR_NUMBER).PadLeft(5,'0')
+        if ($PR_NUMBER -gt 1){
+            $BUILD_TAG="verify-$PR_NUMBER_TAG-$GITDATE-$GITREV"
+        } else {
+            $BUILD_TAG = "verify-$GITDATE-$GITREV"
+        }
+    } else {
+        # If env:PR_NUMBER isn't set, we should still write out a variable
+        $BUILD_TAG = "verify-$GITDATE-$GITREV"
+    }
+    echo "BUILD_TAG=$BUILD_TAG"
+    echo "BUILD_TAG=$BUILD_TAG" >> $env:GITHUB_ENV
+
+    # For extra job, just the exe
+    $INDIVIDUAL_EXE = "yuzu-msvc-$BUILD_TAG.exe"
+    echo "INDIVIDUAL_EXE=$INDIVIDUAL_EXE"
+    echo "INDIVIDUAL_EXE=$INDIVIDUAL_EXE" >> $env:GITHUB_ENV
+    echo "Just the exe: $INDIVIDUAL_EXE"
+    cp .\artifacts\yuzu.exe .\$INDIVIDUAL_EXE
+
+
+} else {
+
 # Build the final release artifacts
 Copy-Item $MSVC_SOURCE_TARXZ -Destination $RELEASE_DIST
 Copy-Item "$BUILD_DIR\*" -Destination $RELEASE_DIST -Recurse
@@ -62,3 +105,7 @@ Get-ChildItem "$BUILD_DIR" -Recurse -Filter "QtWebEngineProcess*.exe" | Copy-Ite
 Get-ChildItem . -Filter "*.zip" | Copy-Item -destination "artifacts"
 Get-ChildItem . -Filter "*.7z" | Copy-Item -destination "artifacts"
 Get-ChildItem . -Filter "*.tar.xz" | Copy-Item -destination "artifacts"
+}
+# Extra items
+git status
+cp .\build\src\common\scm_rev.cpp .\artifacts
diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml
index 88e3a9a72..887220441 100644
--- a/.github/workflows/verify.yml
+++ b/.github/workflows/verify.yml
@@ -3,6 +3,8 @@ name: 'yuzu verify'
 on:
   pull_request:
     branches: [ master ]
+env:
+  PR_NUMBER: pr${{ github.event.number }}
 
 jobs:
   format:
@@ -99,7 +101,7 @@ jobs:
         run: |
           glslangValidator --version
           mkdir build
-          cmake . -B build -GNinja -DCMAKE_TOOLCHAIN_FILE="CMakeModules/MSVCCache.cmake" -DUSE_CCACHE=ON -DYUZU_USE_BUNDLED_QT=1 -DYUZU_USE_BUNDLED_SDL2=1 -DYUZU_USE_QT_WEB_ENGINE=ON -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON -DYUZU_ENABLE_COMPATIBILITY_REPORTING=ON -DUSE_DISCORD_PRESENCE=ON -DENABLE_QT_TRANSLATION=ON -DCMAKE_BUILD_TYPE=Release -DYUZU_TESTS=OFF -DYUZU_USE_BUNDLED_VCPKG=ON
+          cmake . -B build -GNinja -DCMAKE_TOOLCHAIN_FILE="CMakeModules/MSVCCache.cmake" -DUSE_CCACHE=ON -DYUZU_USE_BUNDLED_QT=1 -DYUZU_USE_BUNDLED_SDL2=1 -DYUZU_USE_QT_WEB_ENGINE=ON -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON -DYUZU_ENABLE_COMPATIBILITY_REPORTING=ON -DUSE_DISCORD_PRESENCE=ON -DENABLE_QT_TRANSLATION=ON -DCMAKE_BUILD_TYPE=Release -DGIT_BRANCH=pr-verify -DCLANG_FORMAT_SUFFIX=discordplzdontclang -DYUZU_TESTS=OFF -DYUZU_USE_BUNDLED_VCPKG=ON
       - name: Build
         run: cmake --build build
       - name: Cache Summary
@@ -112,3 +114,8 @@ jobs:
         with:
           name: msvc
           path: artifacts/
+      - name: Upload EXE
+        uses: actions/upload-artifact@v3
+        with:
+          name: ${{ env.INDIVIDUAL_EXE }}
+          path: ${{ env.INDIVIDUAL_EXE }}