mirror of
https://github.com/onyx-and-iris/voicemeeter-compact.git
synced 2026-09-14 06:12:24 +00:00
Compare commits
14
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d1f1ab8495 | ||
|
|
9a8ce9d482 | ||
|
|
0db0f3b4dc | ||
|
|
428db10b8f | ||
|
|
5258671a79 | ||
|
|
2185748435 | ||
|
|
d82afc1973 | ||
|
|
6be32dcd32 | ||
|
|
abb55d5090 | ||
|
|
3271a52f15 | ||
|
|
eb2ce5360f | ||
|
|
45dbcae804 | ||
|
|
4fab6d9ad9 | ||
|
|
fee3fa199b |
@@ -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 }}
|
||||
|
||||
|
||||
@@ -224,6 +224,9 @@ spec/**/*
|
||||
!spec/*/
|
||||
!spec/**/.gitkeep
|
||||
|
||||
# Backup files
|
||||
tools/src/*.bk
|
||||
|
||||
# Taskfile build files
|
||||
Taskfile.unified.yml
|
||||
SPEC_CONSOLIDATION.md
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
### Changed
|
||||
|
||||
+11
-3
@@ -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"
|
||||
|
||||
@@ -1,7 +1,15 @@
|
||||
version: '3'
|
||||
|
||||
# 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:
|
||||
THEMES: '{{.THEMES | default "all"}}'
|
||||
|
||||
+11
-3
@@ -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"
|
||||
|
||||
Generated
+12
-12
@@ -1,4 +1,4 @@
|
||||
# This file is automatically @generated by Poetry 2.3.2 and should not be changed by hand.
|
||||
# This file is automatically @generated by Poetry 2.4.1 and should not be changed by hand.
|
||||
|
||||
[[package]]
|
||||
name = "altgraph"
|
||||
@@ -147,24 +147,24 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "setuptools"
|
||||
version = "78.1.1"
|
||||
description = "Easily download, build, install, upgrade, and uninstall Python packages"
|
||||
version = "83.0.0"
|
||||
description = "Most extensible Python build backend with support for C/C++ extension modules"
|
||||
optional = false
|
||||
python-versions = ">=3.9"
|
||||
groups = ["build"]
|
||||
python-versions = ">=3.10"
|
||||
groups = ["build", "dev"]
|
||||
files = [
|
||||
{file = "setuptools-78.1.1-py3-none-any.whl", hash = "sha256:c3a9c4211ff4c309edb8b8c4f1cbfa7ae324c4ba9f91ff254e3d305b9fd54561"},
|
||||
{file = "setuptools-78.1.1.tar.gz", hash = "sha256:fcc17fd9cd898242f6b4adfaca46137a9edef687f43e6f78469692a5e70d851d"},
|
||||
{file = "setuptools-83.0.0-py3-none-any.whl", hash = "sha256:29b23c360f22f414dc7336bb39178cc7bcbf6021ed2733cde173f09dba19abb3"},
|
||||
{file = "setuptools-83.0.0.tar.gz", hash = "sha256:025bccbbf0fa05b6192bc64ae1e7b16e001fd6d6d4d5de03c97b1c1ade523bef"},
|
||||
]
|
||||
|
||||
[package.extras]
|
||||
check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.8.0) ; sys_platform != \"cygwin\""]
|
||||
core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"]
|
||||
check = ["pytest-checkdocs (>=2.14)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.13.0) ; sys_platform != \"cygwin\""]
|
||||
core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"]
|
||||
cover = ["pytest-cov"]
|
||||
doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"]
|
||||
enabler = ["pytest-enabler (>=2.2)"]
|
||||
enabler = ["pytest-enabler (>=3.4)"]
|
||||
test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"]
|
||||
type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"]
|
||||
type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.18.*)", "pytest-mypy (>=1.0.1) ; platform_python_implementation != \"PyPy\""]
|
||||
|
||||
[[package]]
|
||||
name = "sv-ttk"
|
||||
@@ -223,7 +223,7 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "vban-cmd"
|
||||
version = "2.10.2"
|
||||
version = "2.10.3"
|
||||
description = "Python interface for the VBAN RT Packet Service (Sendtext)"
|
||||
optional = false
|
||||
python-versions = ">=3.10"
|
||||
|
||||
Reference in New Issue
Block a user