# SPDX-FileCopyrightText: 2022 yuzu Emulator Project
# SPDX-License-Identifier: GPL-3.0-or-later

name: 'yuzu verify'

on:
  pull_request:
    branches: [ master ]
env:
  PR_NUMBER: pr${{ github.event.number }}

jobs:
  format:
    name: 'verify format'
    runs-on: ubuntu-latest
    container:
      image: yuzuemu/build-environments:linux-clang-format
      options: -u 1001
    steps:
      - uses: actions/checkout@v3
        with:
          submodules: false
      - name: 'Verify Formatting'
        run: bash -ex ./.ci/scripts/format/script.sh
  build:
    name: 'test build'
    needs: format
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - type: clang
            image: linux-fresh
          - type: linux
            image: linux-fresh
          - type: windows
            image: linux-mingw
    container:
      image: yuzuemu/build-environments:${{ matrix.image }}
      options: -u 1001
    steps:
      - uses: actions/checkout@v3
        with:
          submodules: recursive
          fetch-depth: 0
      - name: Set up cache
        uses: actions/cache@v3
        id: ccache-restore
        with:
          path: ~/.ccache
          key: ${{ runner.os }}-${{ matrix.type }}-${{ github.sha }}
          restore-keys: |
            ${{ runner.os }}-${{ matrix.type }}-
      - name: Create ccache directory
        if: steps.ccache-restore.outputs.cache-hit != 'true'
        run: mkdir -p ~/.ccache
      - name: Build
        run: ./.ci/scripts/${{ matrix.type }}/docker.sh
        env:
          ENABLE_COMPATIBILITY_REPORTING: "ON"
      - name: Pack
        run: ./.ci/scripts/${{ matrix.type }}/upload.sh
        env:
          NO_SOURCE_PACK: "YES"
      - name: Upload
        uses: actions/upload-artifact@v3
        with:
          name: ${{ matrix.type }}
          path: artifacts/
  build-msvc:
    name: 'test build (windows, msvc)'
    needs: format
    runs-on: windows-2022
    steps:
      - name: Set up cache
        uses: actions/cache@v3
        with:
          path: ~/.buildcache
          key: ${{ runner.os }}-msvc-${{ github.sha }}
          restore-keys: |
            ${{ runner.os }}-msvc-
      - name: Install dependencies
        # due to how chocolatey works, only cmd.exe is supported here
        shell: cmd
        run: |
          choco install vulkan-sdk wget
          call refreshenv
          wget https://github.com/mbitsnbites/buildcache/releases/download/v0.27.6/buildcache-windows.zip
          7z x buildcache-windows.zip
          copy buildcache\bin\buildcache.exe C:\ProgramData\chocolatey\bin
          rmdir buildcache
          echo %PATH% >> %GITHUB_PATH%
      - name: Set up MSVC
        uses: ilammy/msvc-dev-cmd@v1
      - uses: actions/checkout@v3
        with:
          submodules: recursive
          fetch-depth: 0
      - name: Configure
        env:
          CC: cl.exe
          CXX: cl.exe
        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 -DGIT_BRANCH=pr-verify -DYUZU_CRASH_DUMPS=ON
      - name: Build
        run: cmake --build build
      - name: Cache Summary
        run: buildcache -s
      - name: Pack
        shell: pwsh
        run: .\.ci\scripts\windows\upload.ps1
      - name: Upload
        uses: actions/upload-artifact@v3
        with:
          name: msvc
          path: artifacts/
      - name: Upload EXE
        uses: actions/upload-artifact@v3
        with:
          name: ${{ env.INDIVIDUAL_EXE }}
          path: ${{ env.INDIVIDUAL_EXE }}
  android:
    runs-on: ubuntu-latest
    needs: format
    steps:
      - uses: actions/checkout@v3
        with:
          submodules: recursive
      - name: set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'adopt'
      - name: Set up cache
        uses: actions/cache@v3
        with:
          path: |
            ~/.gradle/caches
            ~/.gradle/wrapper
            ~/.ccache
          key: ${{ runner.os }}-android-${{ github.sha }}
          restore-keys: |
            ${{ runner.os }}-android-
      - name: Query tag name
        uses: olegtarasov/get-tag@v2.1.2
        id: tagName
      - name: Install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y ccache apksigner glslang-dev glslang-tools
          git -C ./externals/vcpkg/ fetch --all --unshallow
      - name: Build
        run: ./.ci/scripts/android/build.sh
      - name: Copy and sign artifacts
        env:
          ANDROID_KEYSTORE_B64: ${{ secrets.ANDROID_KEYSTORE_B64 }}
          ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
          ANDROID_KEYSTORE_PASS: ${{ secrets.ANDROID_KEYSTORE_PASS }}
        run: ./.ci/scripts/android/upload.sh
      - name: Upload
        uses: actions/upload-artifact@v3
        with:
          name: android
          path: artifacts/