name: MacOS
on: 
  push:
    paths:
      - 'QtScrcpy/**'
      - '!QtScrcpy/res/**'
      - '.github/workflows/macos.yml'
  pull_request:
    paths:
      - 'QtScrcpy/**'
      - '!QtScrcpy/res/**'
      - '.github/workflows/macos.yml'
jobs:
  build:
    name: Build
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [macos-latest]
        qt_ver: [5.12.6]
        qt_arch: [clang_64]
    env:
      targetName: QtScrcpy
    steps:
      - name: Cache Qt
        id: MacosCacheQt
        uses: actions/cache@v1
        with:
          path: ../Qt/${{matrix.qt_ver}}/${{matrix.qt_arch}}
          key: ${{ runner.os }}-Qt/${{matrix.qt_ver}}/${{matrix.qt_arch}}
      - name: Setup Qt
        if: steps.MacosCacheQt.outputs.cache-hit == 'true'
        shell: pwsh
        env:
          QtPath: ../Qt/${{matrix.qt_ver}}/${{matrix.qt_arch}}
        run: |
          $qt_Path=${env:QtPath}
          echo "::set-env name=Qt5_Dir::$qt_Path"
          echo "::add-path::$qt_Path/bin"    
      - name: Install Qt
        if: steps.MacosCacheQt.outputs.cache-hit != 'true'
        uses: jurplel/install-qt-action@v2.0.0
        with:
          version: ${{ matrix.qt_ver }}
      
      - uses: actions/checkout@v1
        with:
          fetch-depth: 1
      - name: Build MacOS
        run: |
          export ENV_QT_CLANG=$(pwd)/${{env.Qt5_Dir}}
          ci/mac/build_for_mac.sh release
      - name: Publish
        if: startsWith(github.event.ref, 'refs/tags/')
        run: |
          export ENV_QT_CLANG=$(pwd)/${{env.Qt5_Dir}}
          ci/mac/publish_for_mac.sh ../build
      # tag 打包
      - name: Package
        if: startsWith(github.event.ref, 'refs/tags/')
        shell: pwsh
        env:
          ref: ${{ github.event.ref }}
        run: |
          [string]$tag = ${env:ref}.Substring(${env:ref}.LastIndexOf('/') + 1)
          [string]$name = 'QtScrcpy-mac-x64-' + ${tag}
          # 打包zip
          Compress-Archive -Path ci\build\QtScrcpy.app ci\build\${name}.zip
      # 查询Release
      - name: Query Release
        if: startsWith(github.event.ref, 'refs/tags/')
        shell: pwsh
        env:
          githubFullName: ${{ github.event.repository.full_name }}
          ref: ${{ github.event.ref }}
        run: |
          [string]$tag = ${env:ref}.Substring(${env:ref}.LastIndexOf('/') + 1)
          [string]$url = 'https://api.github.com/repos/' + ${env:githubFullName} + '/releases/tags/' + ${tag}
          $response={}
          try {
            $response = Invoke-RestMethod -Uri $url -Method Get
          } catch {
            Write-Host "StatusCode:" $_.Exception.Response.StatusCode.value__ 
            Write-Host "StatusDescription:" $_.Exception.Response.StatusDescription
            # 没查到
            return 1
          }
          [string]$latestUpUrl = $response.upload_url
          Write-Host 'latestUpUrl:'$latestUpUrl
          if ($latestUpUrl.Length -eq 0) {
            # 没查到
            return 1
          }
      # 获取上传url
      - name: Get Release Url
        if: startsWith(github.event.ref, 'refs/tags/')
        shell: pwsh
        env:
          githubFullName: ${{ github.event.repository.full_name }}
          ref: ${{ github.event.ref }}
          github_token: ${{ secrets.GITHUB_TOKEN }}
        run: |
          [string]$tag = ${env:ref}.Substring(${env:ref}.LastIndexOf('/') + 1)
          [string]$url = 'https://api.github.com/repos/' + ${env:githubFullName} + '/releases/tags/' + ${tag}
          # github token防止api rate limite，否则一个小时只能60个api请求
          $token = ${env:github_token}
          $authInfo = ("{0}" -f $token)
          $authInfo = [System.Text.Encoding]::UTF8.GetBytes($authInfo)
          $authInfo = [System.Convert]::ToBase64String($authInfo)
          $headers = @{Authorization=("barry-ran {0}" -f $authInfo)}
          $response = Invoke-RestMethod -Uri $url -ContentType 'text/json' -Headers $headers -Method Get
          [string]$latestUpUrl = $response.upload_url
          Write-Host 'latestUpUrl:'$latestUpUrl
          echo "::set-env name=uploadUrl::$latestUpUrl"
          Write-Host 'env uploadUrl:'${env:uploadUrl}
          [string]$name = 'QtScrcpy-mac-x64-' + ${tag}
          # 记录环境变量packageName给后续step
          echo "::set-env name=packageName::$name"
          # 打印环境变量packageName
          Write-Host 'packageName:'${env:packageName}
      # tag 上传Release
      - name: Upload Release
        id: uploadRelease
        if: startsWith(github.event.ref, 'refs/tags/')
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        uses: actions/upload-release-asset@v1.0.1
        with:
          upload_url: ${{ env.uploadUrl }}
          asset_path: ci/build/${{ env.packageName }}.zip
          asset_name: ${{ env.packageName }}.zip
          asset_content_type: application/zip