name: build-windows # Собирает преднастроенный RustDesk-клиент под Windows на раннере `windows` (= GUSIK-PC, # где тулчейн уже поднят: Rust 1.75, Flutter 3.24.5, vcpkg@пин, LLVM 15, rustfmt). # Всю логику несёт scripts/build-windows.ps1 — тот же путь, что и локально. # # Секреты репозитория (Settings -> Actions -> Secrets): # RUSTDESK_SERVER — хост hbbs (напр. rd.enersbyt.ru) # RUSTDESK_PUB_KEY — публичный ключ сервера (base64) # Публикация: на теге v* установщик прикрепляется к Gitea Release; иначе кладётся в S:\rd-ci\out. on: workflow_dispatch: push: tags: ['v*'] permissions: contents: write env: REGISTRY_HOST: gitea.gusik.tech # Клон rustdesk (+ многогиговый target/) — на S:, т.к. C: на раннере тесный. RUSTDESK_SRC_DIR: 'S:\rd-ci\rustdesk' jobs: windows: runs-on: windows steps: - name: Checkout uses: actions/checkout@v4 # rustup ставился с --no-modify-path — гарантируем cargo/rustup в PATH раннера. - 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 }} run: pwsh -NoProfile -File scripts/build-windows.ps1 - name: Attach installer to Gitea Release if: startsWith(github.ref, 'refs/tags/v') shell: pwsh env: GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} GITEA_API: ${{ env.REGISTRY_HOST }} GITHUB_REPOSITORY: ${{ github.repository }} GITHUB_REF_NAME: ${{ github.ref_name }} run: | $ErrorActionPreference = 'Stop' $base = "https://$($env:GITEA_API)/api/v1/repos/$($env:GITHUB_REPOSITORY)" $tag = $env:GITHUB_REF_NAME $hdr = @{ Authorization = "token $env:GITEA_TOKEN" } $body = @{ tag_name = $tag; name = $tag; draft = $false; prerelease = $false } | 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) { Write-Host "Uploading $($f.Name)..." & 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." # Для ручного запуска (без тега) — сохранить установщик в стабильное место на раннере (GUSIK-PC). - name: Stash installer (dispatch) if: ${{ !startsWith(github.ref, 'refs/tags/v') }} shell: pwsh run: | $out = 'S:\rd-ci\out' New-Item -ItemType Directory -Force $out | Out-Null Copy-Item dist\rustdesk-*-install.exe $out -Force Get-ChildItem $out\rustdesk-*-install.exe | ForEach-Object { Write-Host "Установщик: $($_.FullName) ($([math]::Round($_.Length/1MB,1)) MB)" }