dev-manager-tauri/.github/workflows/release.yml

126 lines
5.0 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

name: Release
on:
push:
tags:
- 'v*'
jobs:
release:
runs-on: windows-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
with:
version: 9
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'pnpm'
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: './src-tauri -> target'
- run: pnpm install --frozen-lockfile
# 构建 Tauri 应用tauri-action 自动签名并创建 GitHub Release
- name: Build & Release
uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
with:
tagName: ${{ github.ref_name }}
releaseName: Dev Manager ${{ github.ref_name }}
releaseBody: |
## 更新内容
请查看提交记录了解详情。
releaseDraft: false
prerelease: false
# 找到生成的安装包和签名文件
- name: Collect artifacts
id: artifacts
shell: pwsh
run: |
$tag = "${{ github.ref_name }}"
$version = $tag.TrimStart('v')
$nsisDir = "$env:GITHUB_WORKSPACE\src-tauri\target\release\bundle\nsis"
$all = Get-ChildItem $nsisDir
$installer = $all | Where-Object { $_.Name -like "*_x64-setup.exe" -and $_.Name -notlike "*.sig" } | Select-Object -First 1
$updateZip = $all | Where-Object { $_.Name -like "*.nsis.zip" -and $_.Name -notlike "*.sig" } | Select-Object -First 1
$sigFile = $all | Where-Object { $_.Name -like "*.nsis.zip.sig" } | Select-Object -First 1
Write-Host "installer : $($installer.FullName)"
Write-Host "updateZip : $($updateZip.FullName)"
Write-Host "sigFile : $($sigFile.FullName)"
echo "INSTALLER=$($installer.FullName)" >> $env:GITHUB_OUTPUT
echo "UPDATE_ZIP=$($updateZip.FullName)" >> $env:GITHUB_OUTPUT
echo "SIG_FILE=$($sigFile.FullName)" >> $env:GITHUB_OUTPUT
echo "VERSION=$version" >> $env:GITHUB_OUTPUT
echo "INSTALLER_NAME=$($installer.Name)" >> $env:GITHUB_OUTPUT
echo "UPDATE_ZIP_NAME=$($updateZip.Name)" >> $env:GITHUB_OUTPUT
# 上传到阿里云 OSS + 生成 latest.json
- name: Upload to OSS & generate latest.json
shell: pwsh
env:
OSS_KEY_ID: ${{ secrets.OSS_KEY_ID }}
OSS_KEY_SECRET: ${{ secrets.OSS_KEY_SECRET }}
OSS_BUCKET: ${{ secrets.OSS_BUCKET }}
OSS_ENDPOINT: ${{ secrets.OSS_ENDPOINT }}
run: |
# 下载 ossutil 可执行文件
$oss = "$env:GITHUB_WORKSPACE\ossutil64.exe"
Invoke-WebRequest -Uri "https://gosspublic.alicdn.com/ossutil/1.7.17/ossutil-v1.7.17-windows-amd64.zip" -OutFile oss.zip
Expand-Archive oss.zip -DestinationPath oss_tmp
$exeFound = Get-ChildItem oss_tmp -Filter "ossutil*.exe" -Recurse | Select-Object -First 1
Copy-Item $exeFound.FullName $oss
$tag = "${{ github.ref_name }}"
$bucket = "oss://$env:OSS_BUCKET"
$endpoint = "https://$env:OSS_ENDPOINT"
# 配置 ossutil
& $oss config -e $endpoint -i $env:OSS_KEY_ID -k $env:OSS_KEY_SECRET -L CH
# 上传安装包和更新包
& $oss cp "${{ steps.artifacts.outputs.INSTALLER }}" "$bucket/releases/$tag/${{ steps.artifacts.outputs.INSTALLER_NAME }}" -f
& $oss cp "${{ steps.artifacts.outputs.UPDATE_ZIP }}" "$bucket/releases/$tag/${{ steps.artifacts.outputs.UPDATE_ZIP_NAME }}" -f
& $oss cp "${{ steps.artifacts.outputs.SIG_FILE }}" "$bucket/releases/$tag/${{ steps.artifacts.outputs.UPDATE_ZIP_NAME }}.sig" -f
# 生成 latest.json
$version = "${{ steps.artifacts.outputs.VERSION }}"
$date = (Get-Date -Format 'yyyy-MM-ddTHH:mm:ssZ')
$baseUrl = "https://$env:OSS_BUCKET.$env:OSS_ENDPOINT/releases/$tag"
$zipName = "${{ steps.artifacts.outputs.UPDATE_ZIP_NAME }}"
$sig = (Get-Content "${{ steps.artifacts.outputs.SIG_FILE }}" -Raw).Trim()
$json = [ordered]@{
version = $version
pub_date = $date
notes = "版本 $tag 已发布"
platforms = [ordered]@{
'windows-x86_64' = [ordered]@{
signature = $sig
url = "$baseUrl/$zipName"
}
}
} | ConvertTo-Json -Depth 5
$json | Out-File -FilePath latest.json -Encoding utf8NoBOM
& $oss cp latest.json "$bucket/latest.json" -f