name: CI

on:
  workflow_dispatch:

  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  Build_x64:
    runs-on: windows-2019
    timeout-minutes: 45

    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Setup msbuild
        uses: microsoft/setup-msbuild@v1.3

    #
    # Compile Sandboxie Core
    #

      - name: Build Sandboxie x86 (dll's & svc)
        run: msbuild /t:build Sandboxie\SandboxDll.sln /p:Configuration="SbieRelease" /p:Platform=Win32 -maxcpucount:8

      - name: Build Sandboxie x64 (all)
        run: msbuild /t:build Sandboxie\Sandbox.sln /p:Configuration="SbieRelease" /p:Platform=x64 -maxcpucount:8
        
    #
    # Prepare Qt Framework
    #

#      - name: Install Qt6 x64
#        uses: jurplel/install-qt-action@v3
#        with:
#      #    version: '6.2.4'
#          version: '6.3.1'
#      #    dir: ..
#      #    arch:  ${{ matrix.qt-target }}
#          arch:  'win64_msvc2019_64'
#      #    tools: 'tools_qtcreator,4.14.0-0-202012170949,qt.tools.qtcreator'
#          cache: true

      - name: Install Qt5 x64
        uses: jurplel/install-qt-action@v3
        with:
          version: '5.15.2'
      #    dir: ..
      #    arch:  ${{ matrix.qt-target }}
          arch:  'win64_msvc2019_64'
      #    tools: 'tools_qtcreator,4.14.0-0-202012170949,qt.tools.qtcreator'
      #    cached: ${{ steps.cache-qt.outputs.cache-hit }}
          cache: true

      - name: Installing Jom
      #  if: steps.cache-qt.outputs.cache-hit != 'true'
        run: SandboxiePlus\install_jom.cmd

    #
    # Compile Sandboxie Plus
    #

      - name: Build Sandboxie-Plus x64
        run: SandboxiePlus\qmake_plus.cmd x64

      - name: Build SbieShell x64
        run: msbuild /t:restore,build -p:RestorePackagesConfig=true SandboxiePlus\SbieShell\SbieShell.sln /p:Configuration="Release" /p:Platform=x64

    #
    # Compile Sandboxie Tools
    #

      - name: Build Sandboxie-Tools x64
        run: msbuild /t:build SandboxieTools\SandboxieTools.sln /p:Configuration="Release" /p:Platform=x64 -maxcpucount:8

    #
    # Merge everything together
    #

#      - name: Add Windows 7 compatible Qt6 DLLs
#        run: Installer\fix_qt6_win7.cmd

      - name: Merging Builds
        run: Installer\merge_builds.cmd

      - name: Collect installer assets
        run: Installer\get_assets.cmd

      - name: Upload installer assets
        uses: actions/upload-artifact@v3
        with:
          name: Assets
          path: |
            Installer/Assets/*
          retention-days: 60

      - name: Upload Sandboxie x64
        uses: actions/upload-artifact@v3
        with:
          name: Sandboxie_x64
          path: |
            Installer/SbiePlus_x64/*
          retention-days: 60
      

  Build_ARM64:
    runs-on: windows-2019
    timeout-minutes: 45

    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Setup msbuild
        uses: microsoft/setup-msbuild@v1.3

    #
    # Compile Sandboxie Core
    #

      - name: Build Sandboxie x86 (dll's & svc)
        run: msbuild /t:build Sandboxie\SandboxDll.sln /p:Configuration="SbieRelease" /p:Platform=Win32 -maxcpucount:8

      - name: Build Sandboxie ARM64 (all)
        run: msbuild /t:build Sandboxie\Sandbox.sln /p:Configuration="SbieRelease" /p:Platform=ARM64 -maxcpucount:8

      - name: Build Sandboxie ARM64EC (dll)
        run: msbuild /t:build Sandboxie\SandboxDll.sln /p:Configuration="SbieRelease" /p:Platform=ARM64EC -maxcpucount:8

    #
    # Prepare Qt Framework
    #

      - name: Install Qt6 ARM64
        uses: jurplel/install-qt-action@v3
        with:
      #    version: '6.2.4'
          version: '6.3.1'
      #    dir: ..
      #    arch:  ${{ matrix.qt-target }}
          arch:  'win64_msvc2019_arm64'
      #    tools: 'tools_qtcreator,4.14.0-0-202012170949,qt.tools.qtcreator'
          cache: true

      - name: Installing Jom
      #  if: steps.cache-qt.outputs.cache-hit != 'true'
        run: SandboxiePlus\install_jom.cmd

    #
    # Compile Sandboxie Plus
    #

      - name: Build Sandboxie-Plus ARM64
        run: SandboxiePlus\qmake_plus.cmd ARM64

      - name: Build SbieShell ARM64
        run: msbuild /t:restore,build -p:RestorePackagesConfig=true SandboxiePlus\SbieShell\SbieShell.sln /p:Configuration="Release" /p:Platform=ARM64

    #
    # Compile Sandboxie Tools
    #

      - name: Build Sandboxie-Tools ARM64
        run: msbuild /t:build SandboxieTools\SandboxieTools.sln /p:Configuration="Release" /p:Platform=ARM64 -maxcpucount:8
        
    #
    # Merge everything together
    #

      - name: Merging Builds
        run: Installer\merge_builds.cmd

      - name: Upload Sandboxie ARM64
        uses: actions/upload-artifact@v3
        with:
          name: Sandboxie_ARM64
          path: |
            Installer/SbiePlus_a64/*
          retention-days: 60



  Build_x86:
    runs-on: windows-2019
    timeout-minutes: 45

    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Setup msbuild
        uses: microsoft/setup-msbuild@v1.3

    #
    # Compile Sandboxie Core
    #

      - name: Build Sandboxie x86 (all)
        run: msbuild /t:build Sandboxie\Sandbox.sln /p:Configuration="SbieRelease" /p:Platform=Win32 -maxcpucount:8

    #
    # Prepare Qt Framework
    #

      - name: Install Qt5 x86
        uses: jurplel/install-qt-action@v3
        with:
          version: '5.15.2'
      #    dir: ..
      #    arch:  ${{ matrix.qt-target }}
          arch:  'win32_msvc2019'
      #    tools: 'tools_qtcreator,4.14.0-0-202012170949,qt.tools.qtcreator'
      #    cached: ${{ steps.cache-qt.outputs.cache-hit }}
          cache: true

      - name: Installing Jom
      #  if: steps.cache-qt.outputs.cache-hit != 'true'
        run: SandboxiePlus\install_jom.cmd

    #
    # Compile Sandboxie Plus
    #

      - name: Build Sandboxie-Plus x86
        run: SandboxiePlus\qmake_plus.cmd Win32

    #
    # Compile Sandboxie Tools
    #

      - name: Build Sandboxie-Tools x86
        run: msbuild /t:build SandboxieTools\SandboxieTools.sln /p:Configuration="Release" /p:Platform=x86 -maxcpucount:8
        
    #
    # Merge everything together
    #

      - name: Add missing languages for Qt5 x86 (issue 1528)
        run: Installer\fix_qt5_languages.cmd Win32

      - name: Merging Builds
        run: Installer\merge_builds.cmd

      - name: Upload Sandboxie x86
        uses: actions/upload-artifact@v3
        with:
          name: Sandboxie_x86
          path: |
            Installer/SbiePlus_x86/*
          retention-days: 60
