|
| 1 | +name: Pre-release Build |
| 2 | + |
| 3 | +on: |
| 4 | + # Pre-release oluşturulduğunda veya düzenlendiğinde tetiklenir |
| 5 | + release: |
| 6 | + types: [prereleased, edited] |
| 7 | + |
| 8 | + # Manuel tetikleme |
| 9 | + workflow_dispatch: |
| 10 | + inputs: |
| 11 | + release_tag: |
| 12 | + description: 'Pre-release tag (örn: v1.0.2-beta). Boş bırakılırsa en son pre-release kullanılır.' |
| 13 | + required: false |
| 14 | + type: string |
| 15 | + |
| 16 | +permissions: |
| 17 | + contents: write |
| 18 | + |
| 19 | +jobs: |
| 20 | + build: |
| 21 | + runs-on: windows-latest |
| 22 | + |
| 23 | + steps: |
| 24 | + - name: Checkout repository |
| 25 | + uses: actions/checkout@v4 |
| 26 | + |
| 27 | + - name: Get release info |
| 28 | + id: release_info |
| 29 | + shell: pwsh |
| 30 | + env: |
| 31 | + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| 32 | + run: | |
| 33 | + if ("${{ github.event_name }}" -eq "release") { |
| 34 | + # Release event'inden gelen bilgileri kullan |
| 35 | + $tagName = "${{ github.event.release.tag_name }}" |
| 36 | + $releaseId = "${{ github.event.release.id }}" |
| 37 | + } elseif ("${{ github.event.inputs.release_tag }}" -ne "") { |
| 38 | + # Manuel girilen tag'i kullan |
| 39 | + $tagName = "${{ github.event.inputs.release_tag }}" |
| 40 | + $release = gh release view $tagName --json id,tagName | ConvertFrom-Json |
| 41 | + $releaseId = $release.id |
| 42 | + } else { |
| 43 | + # En son pre-release'i bul |
| 44 | + $releases = gh release list --json tagName,isPrerelease,isDraft | ConvertFrom-Json |
| 45 | + $prerelease = $releases | Where-Object { $_.isPrerelease -and -not $_.isDraft } | Select-Object -First 1 |
| 46 | + if ($null -eq $prerelease) { |
| 47 | + Write-Error "Pre-release bulunamadı!" |
| 48 | + exit 1 |
| 49 | + } |
| 50 | + $tagName = $prerelease.tagName |
| 51 | + $release = gh release view $tagName --json id | ConvertFrom-Json |
| 52 | + $releaseId = $release.id |
| 53 | + } |
| 54 | + |
| 55 | + Write-Output "Tag: $tagName" |
| 56 | + Write-Output "Release ID: $releaseId" |
| 57 | + |
| 58 | + echo "tag_name=$tagName" >> $env:GITHUB_OUTPUT |
| 59 | + echo "release_id=$releaseId" >> $env:GITHUB_OUTPUT |
| 60 | +
|
| 61 | + - name: Setup Node.js |
| 62 | + uses: actions/setup-node@v4 |
| 63 | + with: |
| 64 | + node-version: 20 |
| 65 | + cache: 'npm' |
| 66 | + cache-dependency-path: 'package-lock.json' |
| 67 | + |
| 68 | + - name: Setup Rust |
| 69 | + uses: dtolnay/rust-toolchain@stable |
| 70 | + |
| 71 | + - name: Rust cache |
| 72 | + uses: swatinem/rust-cache@v2 |
| 73 | + with: |
| 74 | + workspaces: './src-tauri -> target' |
| 75 | + |
| 76 | + - name: Install frontend dependencies |
| 77 | + run: npm ci |
| 78 | + |
| 79 | + - name: Download yt-dlp |
| 80 | + shell: pwsh |
| 81 | + run: | |
| 82 | + New-Item -ItemType Directory -Force -Path "src-tauri/bin" |
| 83 | + Invoke-WebRequest -Uri "https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp.exe" -OutFile "src-tauri/bin/yt-dlp-x86_64-pc-windows-msvc.exe" |
| 84 | +
|
| 85 | + - name: Download FFmpeg |
| 86 | + shell: pwsh |
| 87 | + run: | |
| 88 | + Invoke-WebRequest -Uri "https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-win64-gpl.zip" -OutFile "ffmpeg.zip" |
| 89 | + Expand-Archive -Path "ffmpeg.zip" -DestinationPath "ffmpeg-temp" |
| 90 | + $ffmpegDir = Get-ChildItem -Path "ffmpeg-temp" -Directory | Select-Object -First 1 |
| 91 | + Copy-Item "$($ffmpegDir.FullName)/bin/ffmpeg.exe" "src-tauri/bin/ffmpeg-x86_64-pc-windows-msvc.exe" |
| 92 | + Copy-Item "$($ffmpegDir.FullName)/bin/ffprobe.exe" "src-tauri/bin/ffprobe-x86_64-pc-windows-msvc.exe" |
| 93 | + Remove-Item -Recurse -Force "ffmpeg-temp", "ffmpeg.zip" |
| 94 | +
|
| 95 | + - name: Build Tauri app |
| 96 | + run: npm run tauri build |
| 97 | + |
| 98 | + - name: Delete old assets from release |
| 99 | + shell: pwsh |
| 100 | + env: |
| 101 | + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| 102 | + run: | |
| 103 | + $tagName = "${{ steps.release_info.outputs.tag_name }}" |
| 104 | + |
| 105 | + # Mevcut asset'leri listele ve sil |
| 106 | + $assets = gh release view $tagName --json assets --jq '.assets[].name' 2>$null |
| 107 | + if ($assets) { |
| 108 | + foreach ($asset in $assets) { |
| 109 | + Write-Output "Siliniyor: $asset" |
| 110 | + gh release delete-asset $tagName $asset --yes |
| 111 | + } |
| 112 | + } |
| 113 | +
|
| 114 | + - name: Upload release assets |
| 115 | + shell: pwsh |
| 116 | + env: |
| 117 | + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| 118 | + run: | |
| 119 | + $tagName = "${{ steps.release_info.outputs.tag_name }}" |
| 120 | + $bundlePath = "src-tauri/target/release/bundle" |
| 121 | + |
| 122 | + # MSI dosyalarını yükle |
| 123 | + $msiFiles = Get-ChildItem -Path "$bundlePath/msi/*.msi" -ErrorAction SilentlyContinue |
| 124 | + foreach ($file in $msiFiles) { |
| 125 | + Write-Output "Yükleniyor: $($file.Name)" |
| 126 | + gh release upload $tagName $file.FullName --clobber |
| 127 | + } |
| 128 | + |
| 129 | + # NSIS setup dosyalarını yükle |
| 130 | + $nsisFiles = Get-ChildItem -Path "$bundlePath/nsis/*.exe" -ErrorAction SilentlyContinue |
| 131 | + foreach ($file in $nsisFiles) { |
| 132 | + Write-Output "Yükleniyor: $($file.Name)" |
| 133 | + gh release upload $tagName $file.FullName --clobber |
| 134 | + } |
| 135 | + |
| 136 | + Write-Output "Tüm dosyalar başarıyla yüklendi!" |
0 commit comments