5 Commits

Author SHA1 Message Date
0db0f3b4dc reuse task from parent Taskfile 2026-03-31 13:08:09 +01:00
Onyx and Iris
428db10b8f add generate-specs to azure/forest Taskfiles
ensure generate-specs is run before build tasks.
2026-03-31 10:50:39 +01:00
5258671a79 add pre-commit config 2026-03-21 13:33:59 +00:00
2185748435 upd shell 2026-03-11 20:33:44 +00:00
d82afc1973 add pyinstaller dep check
remove hardcoded poetry path.

add verify build outputs step.

add build and release summaries.
2026-03-11 20:25:00 +00:00
5 changed files with 167 additions and 10 deletions

View File

@@ -77,20 +77,79 @@ jobs:
shell: bash
- name: Install dependencies
run: poetry install --with build
shell: bash
run: |
# Install project dependencies
poetry install --with build
# Verify PyInstaller is available
echo "Verifying PyInstaller installation..."
poetry show pyinstaller
- name: Get Poetry executable path
shell: bash
run: |
poetryPath=$(which poetry)
echo "Poetry path: $poetryPath"
echo "POETRY_BIN=$poetryPath" >> $GITHUB_ENV
- name: Build artifacts with dynamic taskfile
run: task --taskfile Taskfile.dynamic.yml build-all
shell: bash
env:
POETRY_BIN: /c/Users/runneradmin/.local/bin/poetry
POETRY_BIN: ${{ env.POETRY_BIN }}
- name: Create release archives
run: task --taskfile Taskfile.dynamic.yml compress-all
shell: bash
env:
POETRY_BIN: /c/Users/runneradmin/.local/bin/poetry
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
@@ -187,6 +246,31 @@ jobs:
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
@@ -204,7 +288,48 @@ jobs:
- name: Create Release
run: |
TAG_NAME=${GITHUB_REF#refs/tags/}
gh release create $TAG_NAME --title "Release $TAG_NAME" --generate-notes
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 }}

3
.gitignore vendored
View File

@@ -224,6 +224,9 @@ spec/**/*
!spec/*/
!spec/**/.gitkeep
# Backup files
tools/src/*.bk
# Taskfile build files
Taskfile.unified.yml
SPEC_CONSOLIDATION.md

13
.pre-commit-config.yaml Normal file
View File

@@ -0,0 +1,13 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.3.0
hooks:
- id: check-yaml
- id: end-of-file-fixer
- id: trailing-whitespace
- repo: https://github.com/python-poetry/poetry
rev: '2.3.2'
hooks:
- id: poetry-check
- id: poetry-lock

View File

@@ -3,24 +3,32 @@ version: '3'
tasks:
build:
desc: Build Azure artifacts
deps: [rewrite]
deps: [generate-specs, rewrite]
cmds:
- defer: { task: restore }
- for:
matrix:
KIND: [basic, banana, potato]
THEME: [azure-light, azure-dark]
cmd: poetry run pyinstaller --noconfirm --distpath dist/{{.ITEM.THEME}}-{{.ITEM.KIND}} spec/azure/{{.ITEM.THEME}}-{{.ITEM.KIND}}.spec
cmd: poetry run pyinstaller --noconfirm --distpath dist/{{.ITEM.THEME}}-{{.ITEM.KIND}} spec/{{.THEME}}/{{.ITEM.THEME}}-{{.ITEM.KIND}}.spec
generate-specs:
desc: Generate all spec files from templates
cmds:
- task: :generate-specs
internal: true
rewrite:
desc: Run the source code rewriter
cmds:
- poetry run python tools/rewriter.py --rewrite --theme {{.THEME}}
internal: true
restore:
desc: Restore the backup files
cmds:
- poetry run python tools/rewriter.py --restore
internal: true
compress:
desc: Compress Azure artifacts
@@ -35,4 +43,4 @@ tasks:
desc: Clean build and dist directories
cmds:
- |
{{.SHELL}} -Command "Remove-Item -Path build/azure-*,dist/azure-* -Recurse -Force"
{{.SHELL}} -Command "Remove-Item -Path build/{{.THEME}}-*,dist/{{.THEME}}-* -Recurse -Force"

View File

@@ -3,24 +3,32 @@ version: '3'
tasks:
build:
desc: Build Forest artifacts
deps: [rewrite]
deps: [generate-specs, rewrite]
cmds:
- defer: { task: restore }
- for:
matrix:
KIND: [basic, banana, potato]
THEME: [forest-light, forest-dark]
cmd: poetry run pyinstaller --noconfirm --distpath dist/{{.ITEM.THEME}}-{{.ITEM.KIND}} spec/forest/{{.ITEM.THEME}}-{{.ITEM.KIND}}.spec
cmd: poetry run pyinstaller --noconfirm --distpath dist/{{.ITEM.THEME}}-{{.ITEM.KIND}} spec/{{.THEME}}/{{.ITEM.THEME}}-{{.ITEM.KIND}}.spec
generate-specs:
desc: Generate all spec files from templates
cmds:
- task: :generate-specs
internal: true
rewrite:
desc: Run the source code rewriter
cmds:
- poetry run python tools/rewriter.py --rewrite --theme {{.THEME}}
internal: true
restore:
desc: Restore the backup files
cmds:
- poetry run python tools/rewriter.py --restore
internal: true
compress:
desc: Compress Forest artifacts
@@ -35,4 +43,4 @@ tasks:
desc: Clean build and dist directories
cmds:
- |
{{.SHELL}} -Command "Remove-Item -Path build/forest-*,dist/forest-* -Recurse -Force"
{{.SHELL}} -Command "Remove-Item -Path build/{{.THEME}}-*,dist/{{.THEME}}-* -Recurse -Force"