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 = "src-tauri/target/release/bundle/nsis" # 安装包(用于首次下载) $installer = Get-ChildItem $nsisDir -Filter "*_x64-setup.exe" | Select-Object -First 1 # 更新包(updater 用) $updateZip = Get-ChildItem $nsisDir -Filter "*.nsis.zip" | Select-Object -First 1 $sigFile = Get-ChildItem $nsisDir -Filter "*.nsis.zip.sig" | Select-Object -First 1 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