mirror of
https://github.com/onyx-and-iris/voicemeeter-compact.git
synced 2026-04-08 17:03:32 +00:00
Compare commits
26 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0db0f3b4dc | |||
|
|
428db10b8f | ||
| 5258671a79 | |||
| 2185748435 | |||
| d82afc1973 | |||
| 6be32dcd32 | |||
| abb55d5090 | |||
| 3271a52f15 | |||
| eb2ce5360f | |||
| 45dbcae804 | |||
| 4fab6d9ad9 | |||
| fee3fa199b | |||
| cf3205a86f | |||
| c0416d5b7c | |||
| a952f64bab | |||
| 3f6172c4bf | |||
| 96f3fbbee1 | |||
| 0bc566fa00 | |||
| c9b7f89453 | |||
| bdba07694b | |||
| 462301cd4e | |||
| 768fed217b | |||
| 34299ad84e | |||
| 7a78d7233e | |||
| 971b4a4601 | |||
| b219511ef8 |
53
.github/workflows/publish.yml
vendored
Normal file
53
.github/workflows/publish.yml
vendored
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
name: Publish to PyPI
|
||||||
|
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types: [published]
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 'v*.*.*'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: '3.12'
|
||||||
|
|
||||||
|
- name: Install Poetry
|
||||||
|
run: |
|
||||||
|
pip install poetry==2.3.1
|
||||||
|
poetry --version
|
||||||
|
|
||||||
|
- name: Build package
|
||||||
|
run: |
|
||||||
|
poetry install --only-root
|
||||||
|
poetry build
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: dist
|
||||||
|
path: ./dist
|
||||||
|
|
||||||
|
pypi-publish:
|
||||||
|
needs: build
|
||||||
|
name: Upload release to PyPI
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
environment:
|
||||||
|
name: pypi
|
||||||
|
url: https://pypi.org/project/voicemeeter-compact/
|
||||||
|
permissions:
|
||||||
|
id-token: write
|
||||||
|
steps:
|
||||||
|
- uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: dist
|
||||||
|
path: ./dist
|
||||||
|
|
||||||
|
- name: Publish package distributions to PyPI
|
||||||
|
uses: pypa/gh-action-pypi-publish@release/v1
|
||||||
|
with:
|
||||||
|
packages-dir: ./dist
|
||||||
205
.github/workflows/release.yml
vendored
205
.github/workflows/release.yml
vendored
@@ -28,11 +28,9 @@ jobs:
|
|||||||
virtualenvs-in-project: true
|
virtualenvs-in-project: true
|
||||||
|
|
||||||
- name: Install Task
|
- name: Install Task
|
||||||
run: |
|
uses: go-task/setup-task@v1
|
||||||
Invoke-WebRequest -OutFile go-task.zip -Uri "https://github.com/go-task/task/releases/latest/download/task_windows_amd64.zip"
|
with:
|
||||||
Expand-Archive -Path go-task.zip -DestinationPath .
|
version: 3.x
|
||||||
Move-Item task.exe C:\Windows\System32\
|
|
||||||
shell: pwsh
|
|
||||||
|
|
||||||
- name: Download Forest TTK Theme
|
- name: Download Forest TTK Theme
|
||||||
run: |
|
run: |
|
||||||
@@ -68,14 +66,90 @@ jobs:
|
|||||||
path: .venv
|
path: .venv
|
||||||
key: venv-${{ runner.os }}-${{ hashFiles('**/poetry.lock') }}
|
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
|
- 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
|
- name: Build artifacts with dynamic taskfile
|
||||||
run: task --taskfile Taskfile.dynamic.yml build-all
|
run: task --taskfile Taskfile.dynamic.yml build-all
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
POETRY_BIN: ${{ env.POETRY_BIN }}
|
||||||
|
|
||||||
- name: Create release archives
|
- name: Create release archives
|
||||||
run: task --taskfile Taskfile.dynamic.yml compress-all
|
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
|
# Sunvalley theme variants
|
||||||
- name: Upload build artifacts - Sunvalley Basic
|
- name: Upload build artifacts - Sunvalley Basic
|
||||||
@@ -100,77 +174,102 @@ jobs:
|
|||||||
- name: Upload build artifacts - Forest Basic Dark
|
- name: Upload build artifacts - Forest Basic Dark
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: forest-basic-dark
|
name: forest-dark-basic
|
||||||
path: dist/forest-basic-dark.zip
|
path: dist/forest-dark-basic.zip
|
||||||
|
|
||||||
- name: Upload build artifacts - Forest Banana Dark
|
- name: Upload build artifacts - Forest Banana Dark
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: forest-banana-dark
|
name: forest-dark-banana
|
||||||
path: dist/forest-banana-dark.zip
|
path: dist/forest-dark-banana.zip
|
||||||
|
|
||||||
- name: Upload build artifacts - Forest Potato Dark
|
- name: Upload build artifacts - Forest Potato Dark
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: forest-potato-dark
|
name: forest-dark-potato
|
||||||
path: dist/forest-potato-dark.zip
|
path: dist/forest-dark-potato.zip
|
||||||
|
|
||||||
# Forest theme variants (light)
|
# Forest theme variants (light)
|
||||||
- name: Upload build artifacts - Forest Basic Light
|
- name: Upload build artifacts - Forest Basic Light
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: forest-basic-light
|
name: forest-light-basic
|
||||||
path: dist/forest-basic-light.zip
|
path: dist/forest-light-basic.zip
|
||||||
|
|
||||||
- name: Upload build artifacts - Forest Banana Light
|
- name: Upload build artifacts - Forest Banana Light
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: forest-banana-light
|
name: forest-light-banana
|
||||||
path: dist/forest-banana-light.zip
|
path: dist/forest-light-banana.zip
|
||||||
|
|
||||||
- name: Upload build artifacts - Forest Potato Light
|
- name: Upload build artifacts - Forest Potato Light
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: forest-potato-light
|
name: forest-light-potato
|
||||||
path: dist/forest-potato-light.zip
|
path: dist/forest-light-potato.zip
|
||||||
|
|
||||||
# Azure theme variants (dark)
|
# Azure theme variants (dark)
|
||||||
- name: Upload build artifacts - Azure Basic Dark
|
- name: Upload build artifacts - Azure Basic Dark
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: azure-basic-dark
|
name: azure-dark-basic
|
||||||
path: dist/azure-basic-dark.zip
|
path: dist/azure-dark-basic.zip
|
||||||
|
|
||||||
- name: Upload build artifacts - Azure Banana Dark
|
- name: Upload build artifacts - Azure Banana Dark
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: azure-banana-dark
|
name: azure-dark-banana
|
||||||
path: dist/azure-banana-dark.zip
|
path: dist/azure-dark-banana.zip
|
||||||
|
|
||||||
- name: Upload build artifacts - Azure Potato Dark
|
- name: Upload build artifacts - Azure Potato Dark
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: azure-potato-dark
|
name: azure-dark-potato
|
||||||
path: dist/azure-potato-dark.zip
|
path: dist/azure-dark-potato.zip
|
||||||
|
|
||||||
# Azure theme variants (light)
|
# Azure theme variants (light)
|
||||||
- name: Upload build artifacts - Azure Basic Light
|
- name: Upload build artifacts - Azure Basic Light
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: azure-basic-light
|
name: azure-light-basic
|
||||||
path: dist/azure-basic-light.zip
|
path: dist/azure-light-basic.zip
|
||||||
|
|
||||||
- name: Upload build artifacts - Azure Banana Light
|
- name: Upload build artifacts - Azure Banana Light
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: azure-banana-light
|
name: azure-light-banana
|
||||||
path: dist/azure-banana-light.zip
|
path: dist/azure-light-banana.zip
|
||||||
|
|
||||||
- name: Upload build artifacts - Azure Potato Light
|
- name: Upload build artifacts - Azure Potato Light
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: azure-potato-light
|
name: azure-light-potato
|
||||||
path: dist/azure-potato-light.zip
|
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:
|
release:
|
||||||
if: startsWith(github.ref, 'refs/tags/v')
|
if: startsWith(github.ref, 'refs/tags/v')
|
||||||
@@ -180,13 +279,57 @@ jobs:
|
|||||||
contents: write
|
contents: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Download all artifacts
|
- name: Download all artifacts
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
|
|
||||||
- name: Create Release
|
- name: Create Release
|
||||||
run: |
|
run: |
|
||||||
TAG_NAME=${GITHUB_REF#refs/tags/}
|
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:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
|||||||
19
.github/workflows/ruff.yml
vendored
Normal file
19
.github/workflows/ruff.yml
vendored
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
name: Ruff
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
|
||||||
|
pull_request:
|
||||||
|
branches: [main]
|
||||||
|
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
ruff:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
- uses: astral-sh/ruff-action@v3
|
||||||
|
with:
|
||||||
|
args: 'format --check --diff'
|
||||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -224,6 +224,9 @@ spec/**/*
|
|||||||
!spec/*/
|
!spec/*/
|
||||||
!spec/**/.gitkeep
|
!spec/**/.gitkeep
|
||||||
|
|
||||||
|
# Backup files
|
||||||
|
tools/src/*.bk
|
||||||
|
|
||||||
# Taskfile build files
|
# Taskfile build files
|
||||||
Taskfile.unified.yml
|
Taskfile.unified.yml
|
||||||
SPEC_CONSOLIDATION.md
|
SPEC_CONSOLIDATION.md
|
||||||
|
|||||||
13
.pre-commit-config.yaml
Normal file
13
.pre-commit-config.yaml
Normal 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
|
||||||
21
CHANGELOG.md
21
CHANGELOG.md
@@ -9,6 +9,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
- [ ]
|
- [ ]
|
||||||
|
|
||||||
|
## [1.10.0] - 2026-03-26
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Automated builds for Releases. This is much preferred over manual releases because users can be sure the files are built directly from the source code.
|
||||||
|
- Azure theme added to Releases.
|
||||||
|
- vban.toml files can now use key `host` intead of `ip`.
|
||||||
|
- `ip` is still usable for backwards compatibility.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Attempting a VBAN connection now uses a PING/PONG handshake to verify connection, this makes connections more reliable.
|
||||||
|
- Navigation frame is disabled by default. You can easily enable it from the menu or with an app.toml config.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Comp, Gate sliders now receive feedback when changes are made on the Voicemeeter GUI.
|
||||||
|
- Bus CONFIG mode button rotates through the correct modes for Basic Kind.
|
||||||
|
- Bus CONFIG mono now rotates through *off, on, stereo reverse*.
|
||||||
|
- Bus CONFIG mode/mono buttons are now a fixed width.
|
||||||
|
|
||||||
## [1.9.8] - 2025-01-22
|
## [1.9.8] - 2025-01-22
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|||||||
@@ -3,24 +3,32 @@ version: '3'
|
|||||||
tasks:
|
tasks:
|
||||||
build:
|
build:
|
||||||
desc: Build Azure artifacts
|
desc: Build Azure artifacts
|
||||||
deps: [rewrite]
|
deps: [generate-specs, rewrite]
|
||||||
cmds:
|
cmds:
|
||||||
- defer: { task: restore }
|
- defer: { task: restore }
|
||||||
- for:
|
- for:
|
||||||
matrix:
|
matrix:
|
||||||
KIND: [basic, banana, potato]
|
KIND: [basic, banana, potato]
|
||||||
THEME: [azure-light, azure-dark]
|
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:
|
rewrite:
|
||||||
desc: Run the source code rewriter
|
desc: Run the source code rewriter
|
||||||
cmds:
|
cmds:
|
||||||
- poetry run python tools/rewriter.py --rewrite --theme {{.THEME}}
|
- poetry run python tools/rewriter.py --rewrite --theme {{.THEME}}
|
||||||
|
internal: true
|
||||||
|
|
||||||
restore:
|
restore:
|
||||||
desc: Restore the backup files
|
desc: Restore the backup files
|
||||||
cmds:
|
cmds:
|
||||||
- poetry run python tools/rewriter.py --restore
|
- poetry run python tools/rewriter.py --restore
|
||||||
|
internal: true
|
||||||
|
|
||||||
compress:
|
compress:
|
||||||
desc: Compress Azure artifacts
|
desc: Compress Azure artifacts
|
||||||
@@ -35,4 +43,4 @@ tasks:
|
|||||||
desc: Clean build and dist directories
|
desc: Clean build and dist directories
|
||||||
cmds:
|
cmds:
|
||||||
- |
|
- |
|
||||||
{{.SHELL}} -Command "Remove-Item -Path build/azure-*,dist/azure-* -Recurse -Force"
|
{{.SHELL}} -Command "Remove-Item -Path build/{{.THEME}}-*,dist/{{.THEME}}-* -Recurse -Force"
|
||||||
|
|||||||
@@ -1,7 +1,15 @@
|
|||||||
version: '3'
|
version: '3'
|
||||||
|
|
||||||
# Dynamic build system - no spec files needed!
|
# Dynamic build system - no spec files needed!
|
||||||
# Usage: task build THEMES="azure forest" or task build-all
|
# Examples:
|
||||||
|
# - task -t Taskfile.dynamic.yml build THEMES="azure forest"
|
||||||
|
# - task -t Taskfile.dynamic.yml build-all
|
||||||
|
# THEMES can be specified as a space-separated list or "all" to build everything.
|
||||||
|
#
|
||||||
|
# Compression tasks are also dynamic and can be used like:
|
||||||
|
# Usage examples:
|
||||||
|
# - task -t Taskfile.dynamic.yml compress THEME=azure
|
||||||
|
# - task -t Taskfile.dynamic.yml compress-all
|
||||||
|
|
||||||
vars:
|
vars:
|
||||||
THEMES: '{{.THEMES | default "all"}}'
|
THEMES: '{{.THEMES | default "all"}}'
|
||||||
@@ -11,27 +19,27 @@ tasks:
|
|||||||
build:
|
build:
|
||||||
desc: Build specified themes dynamically (no spec files needed)
|
desc: Build specified themes dynamically (no spec files needed)
|
||||||
cmds:
|
cmds:
|
||||||
- poetry run python tools/dynamic_builder.py {{.THEMES}}
|
- ${POETRY_BIN:-poetry} run python tools/dynamic_builder.py {{.THEMES}}
|
||||||
|
|
||||||
build-all:
|
build-all:
|
||||||
desc: Build all themes
|
desc: Build all themes
|
||||||
cmds:
|
cmds:
|
||||||
- poetry run python tools/dynamic_builder.py all
|
- ${POETRY_BIN:-poetry} run python tools/dynamic_builder.py all
|
||||||
|
|
||||||
build-azure:
|
build-azure:
|
||||||
desc: Build only azure theme
|
desc: Build only azure theme
|
||||||
cmds:
|
cmds:
|
||||||
- poetry run python tools/dynamic_builder.py azure
|
- ${POETRY_BIN:-poetry} run python tools/dynamic_builder.py azure
|
||||||
|
|
||||||
build-forest:
|
build-forest:
|
||||||
desc: Build only forest theme
|
desc: Build only forest theme
|
||||||
cmds:
|
cmds:
|
||||||
- poetry run python tools/dynamic_builder.py forest
|
- ${POETRY_BIN:-poetry} run python tools/dynamic_builder.py forest
|
||||||
|
|
||||||
build-sunvalley:
|
build-sunvalley:
|
||||||
desc: Build only sunvalley theme
|
desc: Build only sunvalley theme
|
||||||
cmds:
|
cmds:
|
||||||
- poetry run python tools/dynamic_builder.py sunvalley
|
- ${POETRY_BIN:-poetry} run python tools/dynamic_builder.py sunvalley
|
||||||
|
|
||||||
compress:
|
compress:
|
||||||
desc: Compress artifacts for specified theme
|
desc: Compress artifacts for specified theme
|
||||||
|
|||||||
@@ -3,24 +3,32 @@ version: '3'
|
|||||||
tasks:
|
tasks:
|
||||||
build:
|
build:
|
||||||
desc: Build Forest artifacts
|
desc: Build Forest artifacts
|
||||||
deps: [rewrite]
|
deps: [generate-specs, rewrite]
|
||||||
cmds:
|
cmds:
|
||||||
- defer: { task: restore }
|
- defer: { task: restore }
|
||||||
- for:
|
- for:
|
||||||
matrix:
|
matrix:
|
||||||
KIND: [basic, banana, potato]
|
KIND: [basic, banana, potato]
|
||||||
THEME: [forest-light, forest-dark]
|
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:
|
rewrite:
|
||||||
desc: Run the source code rewriter
|
desc: Run the source code rewriter
|
||||||
cmds:
|
cmds:
|
||||||
- poetry run python tools/rewriter.py --rewrite --theme {{.THEME}}
|
- poetry run python tools/rewriter.py --rewrite --theme {{.THEME}}
|
||||||
|
internal: true
|
||||||
|
|
||||||
restore:
|
restore:
|
||||||
desc: Restore the backup files
|
desc: Restore the backup files
|
||||||
cmds:
|
cmds:
|
||||||
- poetry run python tools/rewriter.py --restore
|
- poetry run python tools/rewriter.py --restore
|
||||||
|
internal: true
|
||||||
|
|
||||||
compress:
|
compress:
|
||||||
desc: Compress Forest artifacts
|
desc: Compress Forest artifacts
|
||||||
@@ -35,4 +43,4 @@ tasks:
|
|||||||
desc: Clean build and dist directories
|
desc: Clean build and dist directories
|
||||||
cmds:
|
cmds:
|
||||||
- |
|
- |
|
||||||
{{.SHELL}} -Command "Remove-Item -Path build/forest-*,dist/forest-* -Recurse -Force"
|
{{.SHELL}} -Command "Remove-Item -Path build/{{.THEME}}-*,dist/{{.THEME}}-* -Recurse -Force"
|
||||||
|
|||||||
2
poetry.lock
generated
2
poetry.lock
generated
@@ -223,7 +223,7 @@ files = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "vban-cmd"
|
name = "vban-cmd"
|
||||||
version = "2.10.2"
|
version = "2.10.3"
|
||||||
description = "Python interface for the VBAN RT Packet Service (Sendtext)"
|
description = "Python interface for the VBAN RT Packet Service (Sendtext)"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.10"
|
python-versions = ">=3.10"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "voicemeeter-compact"
|
name = "voicemeeter-compact"
|
||||||
version = "1.9.8"
|
version = "1.10.0"
|
||||||
description = "A Compact Voicemeeter Remote App"
|
description = "A Compact Voicemeeter Remote App"
|
||||||
authors = [{ name = "Onyx and Iris", email = "code@onyxandiris.online" }]
|
authors = [{ name = "Onyx and Iris", email = "code@onyxandiris.online" }]
|
||||||
license = { text = "MIT" }
|
license = { text = "MIT" }
|
||||||
@@ -14,9 +14,9 @@ dependencies = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[project.scripts]
|
[project.scripts]
|
||||||
gui-basic-compact = "vmcompact.gui.basic:run"
|
voicemeeter-compact-basic = "vmcompact.gui.basic:run"
|
||||||
gui-banana-compact = "vmcompact.gui.banana:run"
|
voicemeeter-compact-banana = "vmcompact.gui.banana:run"
|
||||||
gui-potato-compact = "vmcompact.gui.potato:run"
|
voicemeeter-compact-potato = "vmcompact.gui.potato:run"
|
||||||
|
|
||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
packages = [{ include = "vmcompact" }]
|
packages = [{ include = "vmcompact" }]
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ Generates spec files on-the-fly and builds executables without storing intermedi
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
@@ -164,8 +165,9 @@ class DynamicBuilder:
|
|||||||
|
|
||||||
# Build with PyInstaller
|
# Build with PyInstaller
|
||||||
dist_path = self.dist_dir / f'{theme_variant}-{kind}'
|
dist_path = self.dist_dir / f'{theme_variant}-{kind}'
|
||||||
|
poetry_bin = os.getenv('POETRY_BIN', 'poetry')
|
||||||
cmd = [
|
cmd = [
|
||||||
'poetry',
|
poetry_bin,
|
||||||
'run',
|
'run',
|
||||||
'pyinstaller',
|
'pyinstaller',
|
||||||
'--noconfirm',
|
'--noconfirm',
|
||||||
@@ -179,14 +181,14 @@ class DynamicBuilder:
|
|||||||
cmd, cwd=self.base_dir, capture_output=True, text=True
|
cmd, cwd=self.base_dir, capture_output=True, text=True
|
||||||
)
|
)
|
||||||
if result.returncode == 0:
|
if result.returncode == 0:
|
||||||
print(f'✓ Built {theme_variant}-{kind}')
|
print(f'[OK] Built {theme_variant}-{kind}')
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
print(f'✗ Failed to build {theme_variant}-{kind}')
|
print(f'[FAIL] Failed to build {theme_variant}-{kind}')
|
||||||
print(f'Error: {result.stderr}')
|
print(f'Error: {result.stderr}')
|
||||||
return False
|
return False
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f'✗ Exception building {theme_variant}-{kind}: {e}')
|
print(f'[ERROR] Exception building {theme_variant}-{kind}: {e}')
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def build_theme(self, theme_family: str) -> Dict[str, bool]:
|
def build_theme(self, theme_family: str) -> Dict[str, bool]:
|
||||||
@@ -211,8 +213,9 @@ def run_rewriter(theme_family: str, base_dir: Path) -> bool:
|
|||||||
"""Run the theme rewriter if needed."""
|
"""Run the theme rewriter if needed."""
|
||||||
if theme_family in ['azure', 'forest']:
|
if theme_family in ['azure', 'forest']:
|
||||||
print(f'Running rewriter for {theme_family} theme...')
|
print(f'Running rewriter for {theme_family} theme...')
|
||||||
|
poetry_bin = os.getenv('POETRY_BIN', 'poetry')
|
||||||
cmd = [
|
cmd = [
|
||||||
'poetry',
|
poetry_bin,
|
||||||
'run',
|
'run',
|
||||||
'python',
|
'python',
|
||||||
'tools/rewriter.py',
|
'tools/rewriter.py',
|
||||||
@@ -232,7 +235,8 @@ def run_rewriter(theme_family: str, base_dir: Path) -> bool:
|
|||||||
def restore_rewriter(base_dir: Path) -> bool:
|
def restore_rewriter(base_dir: Path) -> bool:
|
||||||
"""Restore files after rewriter."""
|
"""Restore files after rewriter."""
|
||||||
print('Restoring rewriter changes...')
|
print('Restoring rewriter changes...')
|
||||||
cmd = ['poetry', 'run', 'python', 'tools/rewriter.py', '--restore']
|
poetry_bin = os.getenv('POETRY_BIN', 'poetry')
|
||||||
|
cmd = [poetry_bin, 'run', 'python', 'tools/rewriter.py', '--restore']
|
||||||
try:
|
try:
|
||||||
result = subprocess.run(cmd, cwd=base_dir)
|
result = subprocess.run(cmd, cwd=base_dir)
|
||||||
return result.returncode == 0
|
return result.returncode == 0
|
||||||
@@ -298,7 +302,7 @@ def main():
|
|||||||
total_count = 0
|
total_count = 0
|
||||||
|
|
||||||
for build_name, success in all_results.items():
|
for build_name, success in all_results.items():
|
||||||
status = '✓' if success else '✗'
|
status = '[OK]' if success else '[FAIL]'
|
||||||
print(f'{status} {build_name}')
|
print(f'{status} {build_name}')
|
||||||
if success:
|
if success:
|
||||||
success_count += 1
|
success_count += 1
|
||||||
|
|||||||
Reference in New Issue
Block a user