Enhance branding and release workflows

- Updated README.md to include a reference to branding and releases documentation.
- Modified brand_config.py to support multi-brand packaging, including functions for collecting local release data and merging release manifests.
- Adjusted build_macos.sh to set a default brand if none is specified and updated DMG naming conventions.
- Enhanced create_release.ps1 and create_release.sh scripts to support dry-run functionality and improved artifact handling.
- Added a new template for brand configuration in build/brands/template.jsonc.
- Created comprehensive branding and releases documentation in docs/BRANDING_AND_RELEASES.md.
- Added unit tests for new branding functionalities in test_brand_config.py.
This commit is contained in:
claudi 2026-03-12 08:38:40 +01:00
parent fd69996c53
commit 67bfe4a600
8 changed files with 923 additions and 82 deletions

View file

@ -8,7 +8,13 @@ BUILD_SCRIPTS_DIR = Path(__file__).resolve().parents[2] / "build" / "scripts"
if str(BUILD_SCRIPTS_DIR) not in sys.path:
sys.path.insert(0, str(BUILD_SCRIPTS_DIR))
from brand_config import generate_release_manifest, load_brand_config
from brand_config import (
DEFAULT_BRAND_ID,
collect_local_release_data,
generate_release_manifest,
load_brand_config,
merge_release_manifests,
)
def test_load_agravity_brand_config():
@ -75,3 +81,63 @@ def test_generate_release_manifest_for_agravity(tmp_path):
manifest["brands"]["agravity"]["macos-universal"]["installer"]
== "AgravityBridge-0.8.4-macos-universal.dmg"
)
def test_collect_local_release_data_includes_default_brand(tmp_path):
"""Test discovering local artifacts for the default Windows build."""
project_root = tmp_path
installer_dir = project_root / "build" / "dist" / "windows" / DEFAULT_BRAND_ID
installer_dir.mkdir(parents=True)
installer = installer_dir / "WebDropBridge-0.8.4-win-x64.msi"
installer.write_bytes(b"msi")
checksum = installer_dir / f"{installer.name}.sha256"
checksum.write_text("abc", encoding="utf-8")
data = collect_local_release_data("0.8.4", platform="windows", root=project_root)
assert data["brands"] == [DEFAULT_BRAND_ID]
assert str(installer) in data["artifacts"]
assert str(checksum) in data["artifacts"]
assert (
data["manifest"]["brands"][DEFAULT_BRAND_ID]["windows-x64"]["installer"] == installer.name
)
def test_merge_release_manifests_preserves_existing_platforms():
"""Test merging platform-specific manifest entries from separate upload runs."""
base_manifest = {
"version": "0.8.4",
"channel": "stable",
"brands": {
"agravity": {
"windows-x64": {
"installer": "AgravityBridge-0.8.4-win-x64.msi",
"checksum": "AgravityBridge-0.8.4-win-x64.msi.sha256",
}
}
},
}
overlay_manifest = {
"version": "0.8.4",
"channel": "stable",
"brands": {
"agravity": {
"macos-universal": {
"installer": "AgravityBridge-0.8.4-macos-universal.dmg",
"checksum": "AgravityBridge-0.8.4-macos-universal.dmg.sha256",
}
}
},
}
merged = merge_release_manifests(base_manifest, overlay_manifest)
assert (
merged["brands"]["agravity"]["windows-x64"]["installer"]
== "AgravityBridge-0.8.4-win-x64.msi"
)
assert (
merged["brands"]["agravity"]["macos-universal"]["installer"]
== "AgravityBridge-0.8.4-macos-universal.dmg"
)