# .github/workflows/build.yml name: 🚀 Build & Release on: push: tags: - 'v*' workflow_dispatch: inputs: version: description: 'Version tag (e.g., v2.0.1)' required: true default: 'v2.0.1' permissions: contents: write jobs: build-windows: name: 🪟 Build on Windows runs-on: windows-latest steps: - name: 📥 Checkout uses: actions/checkout@v4 - name: 🐍 Setup Python 3.10 uses: actions/setup-python@v5 with: python-version: '3.10' cache: 'pip' cache-dependency-path: 'requirements.txt' - name: 🔧 Setup MSVC environment uses: ilammy/msvc-dev-cmd@v1 with: arch: x64 - name: 📦 Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt pip install nuitka # 🔧 ИЗВЛЕЧЕНИЕ ВЕРСИИ: парсим тег или используем ввод - name: 🔧 Parse version for Windows id: version run: | # Определяем исходную версию $raw = "${{ github.ref_name }}" if ([string]::IsNullOrEmpty($raw) -or $raw -eq "main" -or $raw -eq "master") { $raw = "${{ github.event.inputs.version }}" } # Удаляем префикс 'v' или 'V' $clean = $raw -replace '^v', '' -replace '^V', '' # Разбиваем на части и дополняем до 4-х чисел $parts = $clean -split '\.' | Where-Object { $_ -match '^\d+$' } while ($parts.Count -lt 4) { $parts += '0' } $windowsVersion = ($parts[0..3] -join '.') # Сохраняем в output для использования в следующих шагах echo "version=$windowsVersion" >> $env:GITHUB_OUTPUT echo "✓ Версия для Windows: $windowsVersion" shell: pwsh # 🛠️ Сборка с ПРАВИЛЬНОЙ версией - name: 🛠️ Compile with Nuitka run: | nuitka ` --standalone ` --onefile ` --windows-console-mode=force ` --remove-output ` --assume-yes-for-downloads ` --include-package=yandex_music,aiohttp,aiofiles ` --nofollow-import-to=pytest,setuptools,pip,wheel ` --python-flag=no_site ` --output-filename=YandexMusicDownloader.exe ` --file-version=${{ steps.version.outputs.version }} ` --product-version=${{ steps.version.outputs.version }} ` --file-description="Download tracks from Yandex Music in maximum quality" ` --product-name="Yandex Music Downloader" ` --company-name="KromSystems" ` --copyright="(c) 2026 KromSystems. Powered by J.A.R.V.I.S. core" ` main.py shell: pwsh # ✅ Проверка создания файла - name: ✅ Verify executable run: | if (Test-Path "dist\YandexMusicDownloader.exe") { Write-Host "✓ YandexMusicDownloader.exe создан" -ForegroundColor Green Get-ChildItem "dist\YandexMusicDownloader.exe" | Select-Object Name, Length } else { Write-Error "✗ Файл не найден!" exit 1 } shell: pwsh - name: 📦 Prepare release assets run: | mkdir release-assets -ErrorAction SilentlyContinue Copy-Item "dist\YandexMusicDownloader.exe" "release-assets\" Copy-Item "README.md" "release-assets\" Copy-Item "LICENSE" "release-assets\" -ErrorAction SilentlyContinue shell: pwsh - name: 🚀 Create Release uses: softprops/action-gh-release@v2 with: name: "🎵 Yandex Music Downloader ${{ steps.version.outputs.version }}" body: | ## 🤖 Yandex Music Downloader v${{ steps.version.outputs.version }} ### ✨ Особенности - ⚡ Асинхронная загрузка через `yandex-music-api` - 🎨 Интерфейс в стиле Тони Старка (StarkUI) - 🔐 Токен вводится вручную — не сохраняется - 🛠️ Скомпилировано через Nuitka ### 📥 Использование 1. Скачайте `YandexMusicDownloader.exe` 2. Запустите → получите токен (браузер откроется автоматически) 3. Вставьте токен и укажите папку ### ⚠️ Примечания - Требуется Яндекс.Плюс для FLAC - Ложные срабатывания антивирусов — отправляйте файл на проверку в Microsoft [Исходный код](${{ github.server_url }}/${{ github.repository }}) --- *Powered by J.A.R.V.I.S. core • © 2026 KromSystems* files: | release-assets/YandexMusicDownloader.exe release-assets/README.md release-assets/LICENSE draft: false prerelease: false make_latest: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}