Files
SageTube/.github/workflows/build-windows.yml
T
Your Name dbd0c040a6 Update version replacement regex in Windows build workflow
Refines the PowerShell regex patterns for updating version strings in setup.py, setup-ffmpeg.py, and windows-build-universal.ps1 to ensure consistent use of double quotes around version values.
2025-08-27 01:26:07 +03:00

185 lines
6.8 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
# Update build script
$buildScript = Get-Content "build/windows/windows-build-universal.ps1" -Raw
$buildScript = $buildScript -replace '\$SCRIPT_VERSION = "[^"]*"', "`$SCRIPT_VERSION = `"$version`""
Set-Content "build/windows/windows-build-universal.ps1" -Value $buildScript
Write-Host "Version updated in all files"
- name: Build Standard Version (MSI + ZIP)
shell: powershell
run: |
.\venv\Scripts\Activate.ps1
Write-Host "Building Standard Version..."
.\build\windows\windows-build-universal.ps1 -Verbose
- name: Build FFmpeg Version (MSI + ZIP)
shell: powershell
run: |
.\venv\Scripts\Activate.ps1
Write-Host "Building FFmpeg Version..."
.\build\windows\windows-build-universal.ps1 -FFmpeg -Verbose
- 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
$standardMsi = Get-ChildItem -Path "releases" -Filter "YTSage-v$version.msi" -Recurse | 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 "releases" -Filter "YTSage-v$version.zip" -Recurse | 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
$ffmpegMsi = Get-ChildItem -Path "releases" -Filter "YTSage-v$version-ffmpeg.msi" -Recurse | 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 "releases" -Filter "YTSage-v$version-ffmpeg.zip" -Recurse | 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 }}