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/vs2022/${{ matrix.cfg }}" if-no-files-found: 'error' compression-level: 9 retention-days: 1