name: "Build emu (Windows)" on: workflow_call: # needed since it allows this to become a reusable workflow workflow_dispatch: # allows manual trigger permissions: contents: "write" env: PREMAKE_ACTION: "vs2022" DEPS_CACHE_KEY: "emu-deps-win" DEPS_CACHE_DIR: "build/deps/win" THIRD_PARTY_BASE_DIR: "third-party" jobs: deps: name: "Restore or build deps" if: ${{ !cancelled() }} uses: "./.github/workflows/emu-deps-win.yml" builds-matrix-win: name: "build" needs: ["deps"] runs-on: "windows-2022" if: ${{ !cancelled() }} continue-on-error: true strategy: fail-fast: false matrix: prj: [ # regular api "api_regular", # (experimental) api + client "api_experimental", "steamclient_experimental_stub", # client (experimental) + loader + extra dll + gameoverlaylib "steamclient_experimental", "steamclient_experimental_loader", "steamclient_experimental_extra", "lib_game_overlay_renderer", # tools "tool_lobby_connect", "tool_generate_interfaces", ] arch: ["x64", "Win32"] cfg: ["debug", "release"] steps: # on Windows Git will auto change line ending to CRLF, not preferable - name: "Ensure LF line ending" shell: "cmd" working-directory: "${{ github.workspace }}" run: | git config --local core.autocrlf false git config --system core.autocrlf false git config --global core.autocrlf false # ensure we have msbuild - name: "Add MSBuild to PATH" uses: microsoft/setup-msbuild@v2 # clone branch - name: "Checkout branch" uses: actions/checkout@v4 # deps - name: "Restore deps" id: "emu-deps-cache-step" uses: actions/cache@v4 with: key: "${{ env.DEPS_CACHE_KEY }}-${{ env.PREMAKE_ACTION }}" path: "${{ env.DEPS_CACHE_DIR }}/${{ env.PREMAKE_ACTION }}" # extra helpers/tools, these are not built inside the deps build dir - name: "Clone third-party build helpers (common/win)" uses: actions/checkout@v4 with: ref: "third-party/common/win" path: "${{env.THIRD_PARTY_BASE_DIR}}/common/win" - name: "Clone third-party deps (build/win)" uses: actions/checkout@v4 with: ref: "third-party/build/win" path: "${{env.THIRD_PARTY_BASE_DIR}}/build/win" # generate project files - name: "Generate project files" shell: "cmd" working-directory: "${{ github.workspace }}" run: | "${{env.THIRD_PARTY_BASE_DIR}}\common\win\premake\premake5.exe" --file=premake5.lua --genproto --emubuild=${{ github.sha }} --dosstub --winrsrc --winsign --os=windows vs2022 # build target - name: "Build target" shell: "cmd" working-directory: "${{ github.workspace }}/build/project/vs2022/win" run: | msbuild /nologo /target:${{ matrix.prj }} /m:2 /v:n /p:Configuration=${{ matrix.cfg }},Platform=${{ matrix.arch }} gbe.sln # upload artifact/package to github Actions - name: "Upload target package" uses: actions/upload-artifact@v4 with: name: "emu-win-${{ matrix.prj }}-${{ matrix.cfg }}-${{ matrix.arch }}-${{ github.sha }}" path: "build/win" if-no-files-found: "error" compression-level: 9 retention-days: 1