d3b62bcee3
Replaces universal build script calls with explicit build, MSI, and ZIP steps for both standard and FFmpeg versions. Cleans previous build artifacts before building, and updates artifact preparation to source files from the 'dist' directory instead of 'releases'. Improves reliability and transparency of build and release artifact management.
214 lines
8.0 KiB
YAML
214 lines
8.0 KiB
YAML
name: Build Windows Release
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- 'v*'
|
|
|
|
env:
|
|
PYTHON_VERSION: '3.12.10'
|
|
|
|
jobs:
|
|
build-windows:
|
|
runs-on: windows-latest
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Extract version from tag
|
|
id: get_version
|
|
shell: powershell
|
|
run: |
|
|
$tag = "${{ github.ref_name }}"
|
|
$version = $tag -replace '^v', ''
|
|
Write-Host "Extracted version: $version"
|
|
echo "VERSION=$version" >> $env:GITHUB_OUTPUT
|
|
|
|
- name: Setup Python
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: ${{ env.PYTHON_VERSION }}
|
|
|
|
- name: Cache Python dependencies
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: |
|
|
venv
|
|
~\AppData\Local\pip\Cache
|
|
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-pip-
|
|
|
|
- name: Create virtual environment and install dependencies
|
|
shell: powershell
|
|
run: |
|
|
python -m venv venv
|
|
.\venv\Scripts\Activate.ps1
|
|
python -m pip install --upgrade pip
|
|
pip install --no-cache-dir -r requirements.txt
|
|
pip install --no-cache-dir cx_Freeze
|
|
pip install --no-cache-dir yt-dlp
|
|
|
|
- name: Update version in setup files
|
|
shell: powershell
|
|
run: |
|
|
$version = "${{ steps.get_version.outputs.VERSION }}"
|
|
Write-Host "Updating version to: $version"
|
|
|
|
# Update setup.py
|
|
$setupContent = Get-Content "build/windows/setup.py" -Raw
|
|
$setupContent = $setupContent -replace 'version="[^"]*"', "version=`"$version`""
|
|
Set-Content "build/windows/setup.py" -Value $setupContent
|
|
|
|
# Update setup-ffmpeg.py
|
|
$setupFFmpegContent = Get-Content "build/windows/setup-ffmpeg.py" -Raw
|
|
$setupFFmpegContent = $setupFFmpegContent -replace 'version="[^"]*"', "version=`"$version`""
|
|
Set-Content "build/windows/setup-ffmpeg.py" -Value $setupFFmpegContent
|
|
|
|
Write-Host "Version updated in setup files (build script auto-detects version)"
|
|
|
|
- name: Build Standard Version (MSI + ZIP)
|
|
shell: powershell
|
|
run: |
|
|
.\venv\Scripts\Activate.ps1
|
|
Write-Host "Building Standard Version..."
|
|
|
|
# Clean previous build artifacts
|
|
if (Test-Path "build\exe.*") { Remove-Item "build\exe.*" -Recurse -Force }
|
|
if (Test-Path "dist") { Remove-Item "dist" -Recurse -Force }
|
|
|
|
# Build executable
|
|
python build\windows\setup.py build
|
|
|
|
# Build MSI installer
|
|
python build\windows\setup.py bdist_msi
|
|
|
|
# Create ZIP distribution
|
|
$exeDir = Get-ChildItem -Path "build" -Directory -Filter "exe.*" | Select-Object -First 1
|
|
if ($exeDir) {
|
|
$version = "${{ steps.get_version.outputs.VERSION }}"
|
|
Compress-Archive -Path "$($exeDir.FullName)\*" -DestinationPath "dist\YTSage-v$version.zip" -Force
|
|
Write-Host "Created ZIP: YTSage-v$version.zip"
|
|
}
|
|
|
|
- name: Build FFmpeg Version (MSI + ZIP)
|
|
shell: powershell
|
|
run: |
|
|
.\venv\Scripts\Activate.ps1
|
|
Write-Host "Building FFmpeg Version..."
|
|
|
|
# Clean previous build artifacts
|
|
if (Test-Path "build\exe.*") { Remove-Item "build\exe.*" -Recurse -Force }
|
|
if (Test-Path "dist\*.msi") { Remove-Item "dist\*.msi" -Force }
|
|
|
|
# Build executable with FFmpeg
|
|
python build\windows\setup-ffmpeg.py build
|
|
|
|
# Build MSI installer with FFmpeg
|
|
python build\windows\setup-ffmpeg.py bdist_msi
|
|
|
|
# Create ZIP distribution with FFmpeg
|
|
$exeDir = Get-ChildItem -Path "build" -Directory -Filter "exe.*" | Select-Object -First 1
|
|
if ($exeDir) {
|
|
$version = "${{ steps.get_version.outputs.VERSION }}"
|
|
Compress-Archive -Path "$($exeDir.FullName)\*" -DestinationPath "dist\YTSage-v$version-ffmpeg.zip" -Force
|
|
Write-Host "Created ZIP: YTSage-v$version-ffmpeg.zip"
|
|
}
|
|
|
|
- name: Prepare release artifacts
|
|
shell: powershell
|
|
run: |
|
|
$version = "${{ steps.get_version.outputs.VERSION }}"
|
|
|
|
Write-Host "Preparing artifacts for version: $version"
|
|
New-Item -ItemType Directory -Path "artifacts" -Force
|
|
|
|
# Find and copy standard build artifacts from dist directory
|
|
$standardMsi = Get-ChildItem -Path "dist" -Filter "*.msi" | Where-Object { $_.Name -notlike "*ffmpeg*" } | Select-Object -First 1
|
|
if ($standardMsi) {
|
|
Copy-Item $standardMsi.FullName "artifacts\YTSage-v$version.msi"
|
|
Write-Host "Copied: $($standardMsi.Name) -> YTSage-v$version.msi"
|
|
}
|
|
|
|
$standardZip = Get-ChildItem -Path "dist" -Filter "YTSage-v$version.zip" | Select-Object -First 1
|
|
if ($standardZip) {
|
|
Copy-Item $standardZip.FullName "artifacts\YTSage-v$version.zip"
|
|
Write-Host "Copied: $($standardZip.Name) -> YTSage-v$version.zip"
|
|
}
|
|
|
|
# Find and copy FFmpeg build artifacts from dist directory
|
|
$ffmpegMsi = Get-ChildItem -Path "dist" -Filter "*.msi" | Where-Object { $_.Name -like "*ffmpeg*" } | Select-Object -First 1
|
|
if ($ffmpegMsi) {
|
|
Copy-Item $ffmpegMsi.FullName "artifacts\YTSage-v$version-ffmpeg.msi"
|
|
Write-Host "Copied: $($ffmpegMsi.Name) -> YTSage-v$version-ffmpeg.msi"
|
|
}
|
|
|
|
$ffmpegZip = Get-ChildItem -Path "dist" -Filter "YTSage-v$version-ffmpeg.zip" | Select-Object -First 1
|
|
if ($ffmpegZip) {
|
|
Copy-Item $ffmpegZip.FullName "artifacts\YTSage-v$version-ffmpeg.zip"
|
|
Write-Host "Copied: $($ffmpegZip.Name) -> YTSage-v$version-ffmpeg.zip"
|
|
}
|
|
|
|
# List all artifacts
|
|
Write-Host "Final artifacts:"
|
|
Get-ChildItem artifacts | ForEach-Object { Write-Host " $($_.Name)" }
|
|
|
|
- name: Create draft release
|
|
uses: softprops/action-gh-release@v1
|
|
with:
|
|
tag_name: ${{ github.ref_name }}
|
|
name: YTSage ${{ github.ref_name }}
|
|
draft: true
|
|
prerelease: false
|
|
body: |
|
|
# YTSage ${{ github.ref_name }}
|
|
|
|
**Release Date**: ${{ github.event.head_commit.timestamp }}
|
|
|
|
## Downloads
|
|
|
|
### Standard Version
|
|
- **YTSage-v${{ steps.get_version.outputs.VERSION }}.msi** - Windows Installer (Recommended)
|
|
- **YTSage-v${{ steps.get_version.outputs.VERSION }}.zip** - Portable ZIP (No installation required)
|
|
|
|
### FFmpeg Bundle Version
|
|
- **YTSage-v${{ steps.get_version.outputs.VERSION }}-ffmpeg.msi** - Windows Installer with FFmpeg included
|
|
- **YTSage-v${{ steps.get_version.outputs.VERSION }}-ffmpeg.zip** - Portable ZIP with FFmpeg included
|
|
|
|
## Installation Instructions
|
|
|
|
### MSI Installer
|
|
1. Download the `.msi` file
|
|
2. Double-click to run the installer
|
|
3. Follow the installation wizard
|
|
4. YTSage will be available in your Start Menu
|
|
|
|
### Portable ZIP
|
|
1. Download the `.zip` file
|
|
2. Extract to your preferred location
|
|
3. Run `YTSage.exe`
|
|
|
|
## System Requirements
|
|
|
|
- Windows 10/11 (64-bit)
|
|
- .NET Framework (usually pre-installed)
|
|
- Internet connection for yt-dlp updates
|
|
|
|
## Notes
|
|
|
|
- Standard version: Downloads FFmpeg automatically when needed
|
|
- FFmpeg bundle: Includes FFmpeg binaries for offline use
|
|
|
|
---
|
|
|
|
**Full Changelog**: https://github.com/${{ github.repository }}/compare/${{ github.ref_name }}
|
|
files: |
|
|
artifacts/YTSage-v${{ steps.get_version.outputs.VERSION }}.msi
|
|
artifacts/YTSage-v${{ steps.get_version.outputs.VERSION }}.zip
|
|
artifacts/YTSage-v${{ steps.get_version.outputs.VERSION }}-ffmpeg.msi
|
|
artifacts/YTSage-v${{ steps.get_version.outputs.VERSION }}-ffmpeg.zip
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |