mirror of
https://github.com/onyx-and-iris/voicemeeter-compact.git
synced 2026-03-12 05:09:12 +00:00
remove hardcoded poetry path. add verify build outputs step. add build and release summaries.
342 lines
12 KiB
YAML
342 lines
12 KiB
YAML
name: Release Voicemeeter Compact
|
|
|
|
on:
|
|
release:
|
|
types: [published]
|
|
push:
|
|
tags: ['v*.*.*']
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: windows-latest
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: '3.12'
|
|
|
|
- name: Install Poetry
|
|
uses: snok/install-poetry@v1
|
|
with:
|
|
version: latest
|
|
virtualenvs-create: true
|
|
virtualenvs-in-project: true
|
|
|
|
- name: Install Task
|
|
uses: go-task/setup-task@v1
|
|
with:
|
|
version: 3.x
|
|
|
|
- name: Download Forest TTK Theme
|
|
run: |
|
|
# Clone the Forest theme repository
|
|
git clone https://github.com/rdbende/Forest-ttk-theme.git temp-forest-theme
|
|
|
|
# Copy the required theme files to theme/forest
|
|
Copy-Item "temp-forest-theme\forest-dark.tcl" "theme\forest\"
|
|
Copy-Item "temp-forest-theme\forest-light.tcl" "theme\forest\"
|
|
Copy-Item "temp-forest-theme\forest-dark" "theme\forest\" -Recurse
|
|
Copy-Item "temp-forest-theme\forest-light" "theme\forest\" -Recurse
|
|
|
|
# Clean up
|
|
Remove-Item temp-forest-theme -Recurse -Force
|
|
shell: pwsh
|
|
|
|
- name: Download Azure TTK Theme
|
|
run: |
|
|
# Clone the Azure theme repository
|
|
git clone https://github.com/rdbende/Azure-ttk-theme.git temp-azure-theme
|
|
|
|
# Copy the required theme files to theme/azure
|
|
Copy-Item "temp-azure-theme\azure.tcl" "theme\azure\"
|
|
Copy-Item "temp-azure-theme\theme" "theme\azure\" -Recurse
|
|
|
|
# Clean up
|
|
Remove-Item temp-azure-theme -Recurse -Force
|
|
shell: pwsh
|
|
|
|
- name: Cache Poetry dependencies
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: .venv
|
|
key: venv-${{ runner.os }}-${{ hashFiles('**/poetry.lock') }}
|
|
|
|
- name: Install Poetry plugins
|
|
run: poetry self add poethepoet
|
|
shell: bash
|
|
|
|
- name: Replace path dependencies with PyPI versions
|
|
run: |
|
|
poetry remove voicemeeter-api vban-cmd || true
|
|
poetry add voicemeeter-api vban-cmd
|
|
shell: bash
|
|
|
|
- name: Install dependencies
|
|
shell: pwsh
|
|
run: |
|
|
# Install project dependencies
|
|
poetry install --with build
|
|
|
|
# Verify PyInstaller is available
|
|
Write-Host "Verifying PyInstaller installation..."
|
|
poetry show pyinstaller
|
|
|
|
- name: Get Poetry executable path
|
|
shell: pwsh
|
|
run: |
|
|
$poetryPath = Get-Command poetry | Select-Object -ExpandProperty Source
|
|
Write-Host "Poetry path: $poetryPath"
|
|
echo "POETRY_BIN=$poetryPath" >> $env:GITHUB_ENV
|
|
|
|
- name: Build artifacts with dynamic taskfile
|
|
run: task --taskfile Taskfile.dynamic.yml build-all
|
|
shell: bash
|
|
env:
|
|
POETRY_BIN: ${{ env.POETRY_BIN }}
|
|
|
|
- name: Create release archives
|
|
run: task --taskfile Taskfile.dynamic.yml compress-all
|
|
shell: bash
|
|
env:
|
|
POETRY_BIN: ${{ env.POETRY_BIN }}
|
|
|
|
- name: Verify build outputs
|
|
shell: pwsh
|
|
run: |
|
|
Write-Host "Verifying build outputs..."
|
|
|
|
$expectedFiles = @(
|
|
"dist/sunvalley-basic.zip",
|
|
"dist/sunvalley-banana.zip",
|
|
"dist/sunvalley-potato.zip",
|
|
"dist/forest-dark-basic.zip",
|
|
"dist/forest-dark-banana.zip",
|
|
"dist/forest-dark-potato.zip",
|
|
"dist/forest-light-basic.zip",
|
|
"dist/forest-light-banana.zip",
|
|
"dist/forest-light-potato.zip",
|
|
"dist/azure-dark-basic.zip",
|
|
"dist/azure-dark-banana.zip",
|
|
"dist/azure-dark-potato.zip",
|
|
"dist/azure-light-basic.zip",
|
|
"dist/azure-light-banana.zip",
|
|
"dist/azure-light-potato.zip"
|
|
)
|
|
|
|
$missingFiles = @()
|
|
$foundFiles = @()
|
|
|
|
foreach ($file in $expectedFiles) {
|
|
if (Test-Path $file) {
|
|
$size = [math]::Round((Get-Item $file).Length / 1MB, 2)
|
|
$foundFiles += "$file ($size MB)"
|
|
} else {
|
|
$missingFiles += $file
|
|
}
|
|
}
|
|
|
|
Write-Host "Found files:"
|
|
$foundFiles | ForEach-Object { Write-Host " $_" }
|
|
|
|
if ($missingFiles.Count -gt 0) {
|
|
Write-Host -ForegroundColor Red "Missing files:"
|
|
$missingFiles | ForEach-Object { Write-Host " $_" }
|
|
exit 1
|
|
}
|
|
|
|
Write-Host -ForegroundColor Green "All expected files found!"
|
|
|
|
# Sunvalley theme variants
|
|
- name: Upload build artifacts - Sunvalley Basic
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: sunvalley-basic
|
|
path: dist/sunvalley-basic.zip
|
|
|
|
- name: Upload build artifacts - Sunvalley Banana
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: sunvalley-banana
|
|
path: dist/sunvalley-banana.zip
|
|
|
|
- name: Upload build artifacts - Sunvalley Potato
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: sunvalley-potato
|
|
path: dist/sunvalley-potato.zip
|
|
|
|
# Forest theme variants (dark)
|
|
- name: Upload build artifacts - Forest Basic Dark
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: forest-dark-basic
|
|
path: dist/forest-dark-basic.zip
|
|
|
|
- name: Upload build artifacts - Forest Banana Dark
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: forest-dark-banana
|
|
path: dist/forest-dark-banana.zip
|
|
|
|
- name: Upload build artifacts - Forest Potato Dark
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: forest-dark-potato
|
|
path: dist/forest-dark-potato.zip
|
|
|
|
# Forest theme variants (light)
|
|
- name: Upload build artifacts - Forest Basic Light
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: forest-light-basic
|
|
path: dist/forest-light-basic.zip
|
|
|
|
- name: Upload build artifacts - Forest Banana Light
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: forest-light-banana
|
|
path: dist/forest-light-banana.zip
|
|
|
|
- name: Upload build artifacts - Forest Potato Light
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: forest-light-potato
|
|
path: dist/forest-light-potato.zip
|
|
|
|
# Azure theme variants (dark)
|
|
- name: Upload build artifacts - Azure Basic Dark
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: azure-dark-basic
|
|
path: dist/azure-dark-basic.zip
|
|
|
|
- name: Upload build artifacts - Azure Banana Dark
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: azure-dark-banana
|
|
path: dist/azure-dark-banana.zip
|
|
|
|
- name: Upload build artifacts - Azure Potato Dark
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: azure-dark-potato
|
|
path: dist/azure-dark-potato.zip
|
|
|
|
# Azure theme variants (light)
|
|
- name: Upload build artifacts - Azure Basic Light
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: azure-light-basic
|
|
path: dist/azure-light-basic.zip
|
|
|
|
- name: Upload build artifacts - Azure Banana Light
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: azure-light-banana
|
|
path: dist/azure-light-banana.zip
|
|
|
|
- name: Upload build artifacts - Azure Potato Light
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: azure-light-potato
|
|
path: dist/azure-light-potato.zip
|
|
|
|
- name: Build Summary
|
|
shell: pwsh
|
|
run: |
|
|
Write-Host -ForegroundColor Green "Build completed successfully!"
|
|
Write-Host ""
|
|
Write-Host "Built artifacts (15 theme variants):"
|
|
Write-Host " Sunvalley Theme:"
|
|
Write-Host " - voicemeeter-compact-sunvalley-basic.zip"
|
|
Write-Host " - voicemeeter-compact-sunvalley-banana.zip"
|
|
Write-Host " - voicemeeter-compact-sunvalley-potato.zip"
|
|
Write-Host " Forest Theme:"
|
|
Write-Host " - voicemeeter-compact-forest-dark-basic.zip"
|
|
Write-Host " - voicemeeter-compact-forest-dark-banana.zip"
|
|
Write-Host " - voicemeeter-compact-forest-dark-potato.zip"
|
|
Write-Host " - voicemeeter-compact-forest-light-basic.zip"
|
|
Write-Host " - voicemeeter-compact-forest-light-banana.zip"
|
|
Write-Host " - voicemeeter-compact-forest-light-potato.zip"
|
|
Write-Host " Azure Theme:"
|
|
Write-Host " - voicemeeter-compact-azure-dark-basic.zip"
|
|
Write-Host " - voicemeeter-compact-azure-dark-banana.zip"
|
|
Write-Host " - voicemeeter-compact-azure-dark-potato.zip"
|
|
Write-Host " - voicemeeter-compact-azure-light-basic.zip"
|
|
Write-Host " - voicemeeter-compact-azure-light-banana.zip"
|
|
Write-Host " - voicemeeter-compact-azure-light-potato.zip"
|
|
|
|
release:
|
|
if: startsWith(github.ref, 'refs/tags/v')
|
|
needs: build
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: write
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Download all artifacts
|
|
uses: actions/download-artifact@v4
|
|
|
|
- name: Create Release
|
|
run: |
|
|
TAG_NAME=${GITHUB_REF#refs/tags/}
|
|
gh release create $TAG_NAME \
|
|
--title "Voicemeeter Compact $TAG_NAME" \
|
|
--notes "## Voicemeeter Compact Release $TAG_NAME
|
|
|
|
### Theme Variants
|
|
Choose your preferred theme and Voicemeeter version:
|
|
|
|
**Sunvalley Theme**
|
|
- **sunvalley-basic.zip** - For Voicemeeter Basic
|
|
- **sunvalley-banana.zip** - For Voicemeeter Banana
|
|
- **sunvalley-potato.zip** - For Voicemeeter Potato
|
|
|
|
**Forest Theme**
|
|
- **forest-dark-basic.zip** - Dark theme for Voicemeeter Basic
|
|
- **forest-dark-banana.zip** - Dark theme for Voicemeeter Banana
|
|
- **forest-dark-potato.zip** - Dark theme for Voicemeeter Potato
|
|
- **forest-light-basic.zip** - Light theme for Voicemeeter Basic
|
|
- **forest-light-banana.zip** - Light theme for Voicemeeter Banana
|
|
- **forest-light-potato.zip** - Light theme for Voicemeeter Potato
|
|
|
|
**Azure Theme**
|
|
- **azure-dark-basic.zip** - Dark theme for Voicemeeter Basic
|
|
- **azure-dark-banana.zip** - Dark theme for Voicemeeter Banana
|
|
- **azure-dark-potato.zip** - Dark theme for Voicemeeter Potato
|
|
- **azure-light-basic.zip** - Light theme for Voicemeeter Basic
|
|
- **azure-light-banana.zip** - Light theme for Voicemeeter Banana
|
|
- **azure-light-potato.zip** - Light theme for Voicemeeter Potato
|
|
|
|
### Requirements
|
|
- Windows 10/11
|
|
- Voicemeeter (Basic/Banana/Potato) installed
|
|
- Python 3.10+ (if running from source)
|
|
|
|
### Installation
|
|
1. Download the zip file matching your Voicemeeter version and preferred theme
|
|
2. Extract and run the executable - no installation required
|
|
3. The application will automatically detect your Voicemeeter installation
|
|
|
|
### Notes
|
|
- Built with PyInstaller for standalone execution
|
|
- Each variant is scaled for its specific Voicemeeter version
|
|
- Themes provide different visual styles while maintaining full functionality"
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Upload release assets
|
|
run: |
|
|
TAG_NAME=${GITHUB_REF#refs/tags/}
|
|
find . -name "*.zip" -exec gh release upload $TAG_NAME {} \;
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|