name: Windows on: # push代码时触发workflow push: paths: - 'QtScrcpy/**' - '!QtScrcpy/res/**' - '.github/workflows/windows.yml' # pull_request时触发workflow pull_request: paths: - 'QtScrcpy/**' - '!QtScrcpy/res/**' jobs: build: name: Build # 运行平台, windows-latest目前是windows server 2019,选择2016是2016安装的是vs2017 # https://github.com/actions/virtual-environments/blob/master/images/win/Windows2019-Readme.md # https://help.github.com/en/actions/reference/virtual-environments-for-github-hosted-runners runs-on: windows-2016 strategy: # 矩阵配置 matrix: qt_ver: [5.12.6] qt_target: [desktop] # mingw用不了 # qt_arch: [win64_msvc2017_64, win32_msvc2017, win32_mingw53,win32_mingw73] qt_arch: [win64_msvc2017_64, win32_msvc2017] # 额外设置msvc_arch include: - qt_arch: win64_msvc2017_64 msvc_arch: x64 qt_arch_install: msvc2017_64 - qt_arch: win32_msvc2017 msvc_arch: x86 qt_arch_install: msvc2017 env: targetName: QtScrcpy.exe # 步骤 steps: - name: Cache Qt id: WindowsCacheQt uses: actions/cache@v1 with: path: ../../Qt5/${{matrix.qt_ver}}/${{matrix.qt_arch_install}} key: ${{ runner.os }}-Qt5.12.6/${{matrix.qt_ver}}/${{matrix.qt_arch}} - name: Setup Qt if: steps.WindowsCacheQt.outputs.cache-hit == 'true' shell: pwsh env: QtPath: ../../Qt5/${{matrix.qt_ver}}/${{matrix.qt_arch_install}} run: | $qt_Path=${env:QtPath} echo "::set-env name=Qt5_Dir::$qt_Path" echo "::add-path::$qt_Path/bin" # 安装Qt - name: Install Qt if: steps.WindowsCacheQt.outputs.cache-hit != 'true' # 使用外部action。这个action专门用来安装Qt uses: jurplel/install-qt-action@v2.0.0 with: # Version of Qt to install version: ${{ matrix.qt_ver }} # Target platform for build target: ${{ matrix.qt_target }} # Architecture for Windows/Android arch: ${{ matrix.qt_arch }} # 拉取代码 - uses: actions/checkout@v1 with: fetch-depth: 1 # 编译msvc - name: Build MSVC shell: cmd env: ENV_VCVARSALL: 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat' ENV_QT_PATH: 'd:\a\Qt5\5.12.6' run: | call "ci\win\build_for_win.bat" release ${{ matrix.msvc_arch }} # tag 打包 - name: Package if: startsWith(github.event.ref, 'refs/tags/') env: publish_dir: QtScrcpy-win-${{matrix.msvc_arch}} ref: ${{ github.event.ref }} shell: pwsh run: | [string]$tag = ${env:ref}.Substring(${env:ref}.LastIndexOf('/') + 1) [string]$full_publish_dir = ${env:publish_dir} + '-' + ${tag} cmd.exe /c ci\win\publish_for_win.bat ${{matrix.msvc_arch}} ..\build\$full_publish_dir # 打包zip Compress-Archive -Path ci\build\$full_publish_dir ci\build\${full_publish_dir}.zip # 记录环境变量packageName给后续step $name = $full_publish_dir echo "::set-env name=packageName::$name" # 打印环境变量packageName Write-Host 'packageName:'${env:packageName} # 查询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} # 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