From cfaff94c85716d43e6d2a73a51e2418737fe74c2 Mon Sep 17 00:00:00 2001 From: jared Date: Sat, 7 Dec 2019 03:18:05 +0800 Subject: [PATCH] windows deployment --- .github/workflows/windows.yml | 98 +++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 9e32fb2..5b2fc9e 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -33,6 +33,8 @@ jobs: - qt_arch: win32_msvc2017 msvc_arch: x86 qt_arch_install: msvc2017 + env: + targetName: HelloActions-Qt.exe # 步骤 steps: - name: cacheQt @@ -75,3 +77,99 @@ jobs: call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" %vc_arch% qmake nmake + # tag 打包 + - name: package + if: startsWith(github.event.ref, 'refs/tags/') + env: + VCINSTALLDIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC' + archiveName: ${{ matrix.qt_ver }}-${{ matrix.qt_target }}-${{ matrix.qt_arch }} + shell: pwsh + run: | + # 创建文件夹 + New-Item -ItemType Directory ${env:archiveName} + # 拷贝exe + Copy-Item bin\${env:targetName} ${env:archiveName}\ + # 拷贝依赖 + windeployqt --qmldir . ${env:archiveName}\${env:targetName} + # 打包zip + Compress-Archive -Path ${env:archiveName} ${env:archiveName}'.zip' + # 记录环境变量packageName给后续step + $name = ${env:archiveName} + echo "::set-env name=packageName::$name" + # 打印环境变量packageName + Write-Host 'packageName:'${env:packageName} + # tag 查询github-Release + - name: queryReleaseWin + id: queryReleaseWin + 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 + # 没查到,输出 + echo "::set-output name=needCreateRelease::true" + return + } + [string]$latestUpUrl = $response.upload_url + Write-Host 'latestUpUrl:'$latestUpUrl + if ($latestUpUrl.Length -eq 0) { + # 没查到,输出 + echo "::set-output name=needCreateRelease::true" + } + # tag 创建github-Release + - name: createReleaseWin + id: createReleaseWin + if: startsWith(github.event.ref, 'refs/tags/') && steps.queryReleaseWin.outputs.needCreateRelease == 'true' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + uses: actions/create-release@v1.0.0 + with: + tag_name: ${{ github.ref }} + release_name: Release ${{ github.ref }} + body: ${{ github.event.head_commit.message }} + draft: false + prerelease: false + # 重定向upload_url到环境变量uploadUrl。 + - name: getLatestTagRelease + # tag 上一步无论成功还是失败都执行 + if: startsWith(github.event.ref, 'refs/tags/') + shell: pwsh + env: + githubFullName: ${{ github.event.repository.full_name }} + upUrl: ${{ steps.createReleaseWin.outputs.upload_url }} + ref: ${{ github.event.ref }} + run: | + # upUrl不为空,导出就完事 + if (${env:upUrl}.Length -gt 0) { + $v=${env:upUrl} + echo "::set-env name=uploadUrl::$v" + return + } + [string]$tag = ${env:ref}.Substring(${env:ref}.LastIndexOf('/') + 1) + [string]$url = 'https://api.github.com/repos/' + ${env:githubFullName} + '/releases/tags/' + ${tag} + $response = Invoke-RestMethod -Uri $url -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: uploadRelease + 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: ./${{ env.packageName }}.zip + asset_name: ${{ env.packageName }}.zip + asset_content_type: application/zip \ No newline at end of file