name: build-windows # Собирает преднастроенный RustDesk-клиент под Windows на раннере `windows` (тулчейн уже поднят — # см. scripts/provision-windows.ps1). Всю логику несёт scripts/build-windows.ps1. # # Секреты репозитория (Settings -> Actions -> Secrets): # RUSTDESK_SERVER, RUSTDESK_PUB_KEY, (опц.) RUSTDESK_PRESET_PASSWORD # Публикация: установщик кладётся в Gitea Release `latest` (обновляется каждый прогон — стабильная # ссылка на актуальный билд), а на теге v* — ещё и в версионный релиз. on: workflow_dispatch: push: tags: ['v*'] permissions: contents: write jobs: windows: runs-on: windows steps: - name: Checkout uses: actions/checkout@v4 - name: Add cargo to PATH shell: pwsh run: Add-Content -Path $env:GITHUB_PATH -Value "$env:USERPROFILE\.cargo\bin" - name: Build preconfigured client shell: pwsh env: RUSTDESK_SERVER: ${{ secrets.RUSTDESK_SERVER }} RUSTDESK_PUB_KEY: ${{ secrets.RUSTDESK_PUB_KEY }} RUSTDESK_PRESET_PASSWORD: ${{ secrets.RUSTDESK_PRESET_PASSWORD }} run: pwsh -NoProfile -File scripts/build-windows.ps1 - name: Publish installer to Gitea Release shell: pwsh env: GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} run: | $ErrorActionPreference = 'Stop' $base = "$env:GITHUB_SERVER_URL/api/v1/repos/$env:GITHUB_REPOSITORY" $isTag = $env:GITHUB_REF -like 'refs/tags/v*' $tag = if ($isTag) { $env:GITHUB_REF_NAME } else { 'latest' } $hdr = @{ Authorization = "token $env:GITEA_TOKEN" } $body = @{ tag_name=$tag; name=$tag; draft=$false; prerelease=(-not $isTag); target_commitish='master' } | ConvertTo-Json -Compress try { Invoke-RestMethod -Method Post -Uri "$base/releases" -Headers $hdr -ContentType 'application/json' -Body $body | Out-Null } catch { } $rel = Invoke-RestMethod -Uri "$base/releases/tags/$tag" -Headers $hdr if (-not $rel.id) { throw "нет release id для $tag" } $files = Get-ChildItem -Path dist -Filter 'rustdesk-*-install.exe' -File if (-not $files) { throw "нет установщика в dist/" } foreach ($f in $files) { foreach ($a in @($rel.assets | Where-Object { $_.name -eq $f.Name })) { try { Invoke-RestMethod -Method Delete -Uri "$base/releases/$($rel.id)/assets/$($a.id)" -Headers $hdr | Out-Null } catch { } } Write-Host "Uploading $($f.Name) -> release '$tag'..." & curl.exe -sf -X POST "$base/releases/$($rel.id)/assets?name=$($f.Name)" -H "Authorization: token $env:GITEA_TOKEN" -F "attachment=@$($f.FullName)" if ($LASTEXITCODE -ne 0) { throw "upload failed: $($f.Name)" } } Write-Host "Готово: $tag"