name: HLE RSP

on:
  push:
    paths-ignore:
      - '.{gitattributes,gitignore,travis.yml}'
      - '*.md,appveyor.yml,README'
  pull_request:
    paths-ignore:
      - '.{gitattributes,gitignore,travis.yml}'
      - '*.md,appveyor.yml,README'
  workflow_dispatch:

jobs:

  Linux:
    strategy:
      fail-fast: false
      matrix:
        include:
          - cc: GCC
            arch: x64
          - cc: GCC
            arch: x86
          - cc: Clang
            arch: x64
          - cc: Clang
            arch: x86
    name: Linux / ${{ matrix.cc }} ${{ matrix.arch }}
    runs-on: ubuntu-24.04
    steps:
      - uses: actions/checkout@v4
      - name: Get build dependencies and arrange the environment
        run: |
          git clone --depth 1 https://github.com/mupen64plus/mupen64plus-core.git ../mupen64plus-core
          ./../mupen64plus-core/.github/workflows/scripts/ci_install_ubuntu_deps.sh ${{ matrix.arch }} ${{ matrix.cc }}
      - name: Build and related stuff, backup binaries
        run: |
          ./../mupen64plus-core/.github/workflows/scripts/ci_build.sh ${{ matrix.arch }} ${{ matrix.cc }} makepkg
      - name: Upload artifact
        if: matrix.cc == 'GCC'
        uses: actions/upload-artifact@v4
        with:
          name: ${{ env.PKG_NAME }}
          path: pkg/*.tar.gz

  MSYS2:
    strategy:
      fail-fast: false
      matrix:
        include:
          - cc: GCC
            arch: x64
            cross: x86_64
            env: MINGW64
          - cc: GCC
            arch: x86
            cross: i686
            env: MINGW32
          - cc: GCC
            arch: x64
            cross: ucrt-x86_64
            env: UCRT64
          - cc: Clang
            arch: x64
            cross: clang-x86_64
            env: CLANG64
    name: Windows ${{ matrix.arch }} / MSYS2 ${{ matrix.env }} ${{ matrix.cc }}
    runs-on: windows-2025
    defaults:
      run:
        shell: msys2 {0}
    steps:
      - uses: actions/checkout@v4
      - uses: msys2/setup-msys2@v2
        with:
          msystem: ${{ matrix.env }}
          update: true
          install: >-
            git
            libtool
            make
            mingw-w64-${{ matrix.cross }}-toolchain
            mingw-w64-${{ matrix.cross }}-ntldd
      - name: Build and related stuff, backup binaries
        run: |
          git clone --depth 1 https://github.com/mupen64plus/mupen64plus-core.git ../mupen64plus-core
          ./../mupen64plus-core/.github/workflows/scripts/ci_build.sh ${{ matrix.arch }} ${{ matrix.cc }}
      - name: Backup dependencies, etc...
        run: |
          ./../mupen64plus-core/.github/workflows/scripts/ci_backup_mingw_deps.sh ${{ matrix.env }}
      - name: Upload artifact
        uses: actions/upload-artifact@v4
        with:
          name: ${{ env.PKG_NAME }}
          path: pkg/*

  MSVC:
    strategy:
      fail-fast: false
      matrix:
        include:
          - toolset: v143
            arch: x64
            vs: 2025
          - toolset: v141_xp
            arch: x86
            vs: 2019
    name: Windows ${{ matrix.arch }} / MSVC with ${{ matrix.toolset }}
    runs-on: windows-${{ matrix.vs }}
    defaults:
      run:
        shell: cmd
    steps:
      - uses: actions/checkout@v4
      - uses: microsoft/setup-msbuild@v2
      - name: Build and related stuff, backup binaries
        run: |
          git clone --depth 1 https://github.com/mupen64plus/mupen64plus-core.git ..\mupen64plus-core
          set TOOLSET=${{ matrix.toolset }}
          .\..\mupen64plus-core\.github\workflows\scripts\ci_msvc_build.cmd ${{ matrix.arch }}
      - name: Backup dependencies, etc...
        run: |
          .\..\mupen64plus-core\.github\workflows\scripts\ci_backup_msvc_deps.cmd ${{ matrix.arch }}
      - name: Upload artifact
        uses: actions/upload-artifact@v4
        with:
          name: ${{ env.PKG_NAME }}
          path: pkg/*

  Nightly-build:
    runs-on: ubuntu-latest
    if: github.ref_name == 'master'
    needs: [Linux, MSYS2, MSVC]
    steps:
      - uses: actions/checkout@v4
      - name: Download artifacts
        uses: actions/download-artifact@v4
        with:
          path: binaries
      - name: Get some tools
        run: |
          git clone --depth 1 https://github.com/mupen64plus/mupen64plus-core.git ../mupen64plus-core
          sudo apt-get update
          sudo apt-get -y install hashdeep
      - name: Creating new artifacts and update nightly-build
        run: |
          ./../mupen64plus-core/.github/workflows/scripts/ci_nightly_artifacts.sh
      - name: Nightly-build
        uses: ncipollo/release-action@v1
        with:
          prerelease: true
          allowUpdates: true
          removeArtifacts: true
          replacesArtifacts: false
          tag: nightly-build
          artifacts: pkg/*
