name: Testbuild for Win64
run-name: testbuild_win64
on:
  push:
    branches:
      - 'master'
    tags:
      - "*"
  pull_request:
    types:
      - opened
      - edited
concurrency:
  # Cancel concurrent workflows for the same PR or commit hash.
  group: ${{github.workflow}}-${{github.event_name == 'pull_request' && github.head_ref || github.sha}}
  cancel-in-progress: true
jobs:
  build_mingw_x86_64:
    runs-on: windows-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - { sys: mingw64, env: x86_64 }
    steps:
    - uses: msys2/setup-msys2@v2
      with:
        msystem: ${{matrix.sys}}
        update: true
        install: >-
          git
          make
          zip
          unzip
          mingw-w64-${{matrix.env}}-curl
          mingw-w64-${{matrix.env}}-ffmpeg
          mingw-w64-${{matrix.env}}-gcc
          mingw-w64-${{matrix.env}}-make
          mingw-w64-${{matrix.env}}-openal
          mingw-w64-${{matrix.env}}-SDL2
          mingw-w64-${{matrix.env}}-vulkan-headers
          mingw-w64-${{matrix.env}}-wget
    - name: Check out repository code
      uses: actions/checkout@v4
    - name: Build
      shell: msys2 {0}
      run: |
        # Public runners come with 2 CPUs.
        make -j2
        make -j2 ref_gles1
    - name: Create testbuild package
      shell: msys2 {0}
      run: |
        # Create release directory tree
        mkdir -p publish/quake2-win64-${{github.sha}}/misc/docs
        # Copy release assets
        cp -r release/* publish/quake2-win64-${{github.sha}}/
        # Copy misc assets
        cp -r stuff/yq2.cfg publish/quake2-win64-${{github.sha}}/misc/yq2.cfg
        cp -r stuff/mapfixes publish/quake2-win64-${{github.sha}}/misc
        cp LICENSE publish/quake2-win64-${{github.sha}}/misc/docs/LICENSE.txt
        cp README.md publish/quake2-win64-${{github.sha}}/misc/docs/README.txt
        cp doc/010_index.md publish/quake2-win64-${{github.sha}}/misc/docs/010_index.txt
        cp doc/020_installation.md publish/quake2-win64-${{github.sha}}/misc/docs/020_installation.txt
        cp doc/030_configuration.md publish/quake2-win64-${{github.sha}}/misc/docs/030_configuration.txt
        cp doc/040_cvarlist.md publish/quake2-win64-${{github.sha}}/misc/docs/040_cvarlist.txt
        cp doc/050_commands.md publish/quake2-win64-${{github.sha}}/misc/docs/050_commands.txt
        cp doc/060_multiplayer.md publish/quake2-win64-${{github.sha}}/misc/docs/060_multiplayer.txt
        cp doc/070_packaging.md publish/quake2-win64-${{github.sha}}/misc/docs/070_packaging.txt
        cp doc/080_contributing.md publish/quake2-win64-${{github.sha}}/misc/docs/080_contributing.txt
        cp doc/090_filelists.md publish/quake2-win64-${{github.sha}}/misc/docs/090_filelists.md
        # SDL2
        wget -c https://github.com/libsdl-org/SDL/releases/download/release-2.30.7/SDL2-2.30.7-win32-x64.zip
        unzip -o SDL2-2.30.7-win32-x64.zip
        cp SDL2.dll publish/quake2-win64-${{github.sha}}/
        # static ffmpeg
        wget -c https://github.com/BtbN/FFmpeg-Builds/releases/download/autobuild-2024-08-31-12-50/ffmpeg-n7.0.2-6-g7e69129d2f-win64-lgpl-shared-7.0.zip
        unzip -o ffmpeg-n7.0.2-6-g7e69129d2f-win64-lgpl-shared-7.0.zip
        cp ffmpeg-n7.0.2-6-g7e69129d2f-win64-lgpl-shared-7.0/bin/*.dll publish/quake2-win64-${{github.sha}}/
        # remove unused libraries
        rm -fv  publish/quake2-win64-${{github.sha}}/avdevice*.dll publish/quake2-win64-${{github.sha}}/avfilter*.dll  publish/quake2-win64-${{github.sha}}/postproc*.dll
        # openal-soft
        wget -c https://github.com/kcat/openal-soft/releases/download/1.23.1/openal-soft-1.23.1-bin.zip
        unzip -o openal-soft-1.23.1-bin.zip
        cp openal-soft-1.23.1-bin/bin/Win64/soft_oal.dll publish/quake2-win64-${{github.sha}}/openal32.dll
        # curl (releases use a custom build curl.dll)
        wget -c https://curl.se/windows/dl-8.9.1_1/curl-8.9.1_1-win64-mingw.zip
        unzip -o curl-8.9.1_1-win64-mingw.zip
        cp curl-8.9.1_1-win64-mingw/bin/libcurl-x64.dll publish/quake2-win64-${{github.sha}}/curl.dll
    - name: Upload testbuild package
      uses: actions/upload-artifact@v4
      if: ${{ ! startsWith(github.ref, 'refs/tags/') }}
      with:
        name: quake2-win64-${{github.sha}}
        path: publish/
        if-no-files-found: error
    - name: Create tag package
      if: ${{ startsWith(github.ref, 'refs/tags/') }}
      shell: msys2 {0}
      run: |
        # create archive
        mkdir yquake2remaster-${{matrix.env}}-${{github.ref_name}}
        cp -rv publish/quake2-win64-${{github.sha}}/* yquake2remaster-${{matrix.env}}-${{github.ref_name}}
        zip -9r yquake2remaster-${{matrix.env}}-${{github.ref_name}}.zip yquake2remaster-${{matrix.env}}-${{github.ref_name}}
    - name: Upload Release Asset
      uses: softprops/action-gh-release@v2
      if: ${{ startsWith(github.ref, 'refs/tags/') }}
      with:
        files: |
          yquake2remaster-${{matrix.env}}-${{github.ref_name}}.zip