mirror of
https://github.com/jamiepine/voicebox.git
synced 2026-09-26 13:45:16 -07:00
add release skills, backfill changelog, wire CI to use changelog for GitHub releases
- Backfill CHANGELOG.md from all 17 GitHub releases (was stale at v0.1.0) - Add draft-release-notes and release-bump agent skills - Extract release notes from CHANGELOG.md in release CI instead of hardcoded placeholder - Remove stale PATCH_NOTES.md, mlx-test/, move PROJECT_STATUS to docs/notes - Reorganize API reference docs from unknown/ to named groups - Update openapi.json
This commit is contained in:
@@ -119,6 +119,6 @@ Given current version `X.Y.Z`:
|
|||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
- This skill does not create a GitHub Release. That happens when the tag is pushed and CI runs, or the user can create it manually via `gh release create`.
|
- When the tag is pushed, the release CI (`.github/workflows/release.yml`) automatically extracts the matching version section from `CHANGELOG.md` and uses it as the GitHub Release body. No manual copy-paste needed.
|
||||||
- The release commit message is controlled by `.bumpversion.cfg` (`Bump version: X.Y.Z -> A.B.C`). Do not override it.
|
- The release commit message is controlled by `.bumpversion.cfg` (`Bump version: X.Y.Z -> A.B.C`). Do not override it.
|
||||||
- If the user wants to update the GitHub Release body with the changelog narrative after pushing, they can use: `gh release edit vX.Y.Z --notes-file <(sed -n '/## \[X.Y.Z\]/,/## \[/p' CHANGELOG.md | head -n -1)`
|
- If you need to manually update the GitHub Release body after the fact: `gh release edit vX.Y.Z --notes-file <(sed -n '/## \[X.Y.Z\]/,/## \[/p' CHANGELOG.md | head -n -1)`
|
||||||
|
|||||||
@@ -123,6 +123,29 @@ jobs:
|
|||||||
p12-file-base64: ${{ secrets.APPLE_CERTIFICATE }}
|
p12-file-base64: ${{ secrets.APPLE_CERTIFICATE }}
|
||||||
p12-password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
p12-password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Extract release notes from CHANGELOG.md
|
||||||
|
id: changelog
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
# Get the version from the tag (strip leading 'v')
|
||||||
|
VERSION="${GITHUB_REF_NAME#v}"
|
||||||
|
|
||||||
|
# Extract the section for this version from CHANGELOG.md
|
||||||
|
# Matches from "## [X.Y.Z]" until the next "## [" heading
|
||||||
|
NOTES=$(sed -n "/^## \[${VERSION}\]/,/^## \[/{/^## \[${VERSION}\]/d;/^## \[/d;p;}" CHANGELOG.md)
|
||||||
|
|
||||||
|
# Fall back to a placeholder if the version isn't in the changelog
|
||||||
|
if [ -z "$(echo "$NOTES" | tr -d '[:space:]')" ]; then
|
||||||
|
NOTES="See the assets below to download and install this version."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Use multiline output syntax
|
||||||
|
{
|
||||||
|
echo "notes<<CHANGELOG_EOF"
|
||||||
|
echo "$NOTES"
|
||||||
|
echo "CHANGELOG_EOF"
|
||||||
|
} >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
- uses: tauri-apps/[email protected]
|
- uses: tauri-apps/[email protected]
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
@@ -139,17 +162,7 @@ jobs:
|
|||||||
projectPath: tauri
|
projectPath: tauri
|
||||||
tagName: v__VERSION__
|
tagName: v__VERSION__
|
||||||
releaseName: "voicebox v__VERSION__"
|
releaseName: "voicebox v__VERSION__"
|
||||||
releaseBody: |
|
releaseBody: ${{ steps.changelog.outputs.notes }}
|
||||||
## What's Changed
|
|
||||||
See the assets below to download and install this version.
|
|
||||||
|
|
||||||
### Installation
|
|
||||||
- **macOS (Apple Silicon)**: Download the `aarch64.dmg` file - uses MLX for fast native inference
|
|
||||||
- **macOS (Intel)**: Download the `x64.dmg` file - uses PyTorch
|
|
||||||
- **Windows**: Download the `.msi` installer
|
|
||||||
- **Linux**: Compile from source (see README)
|
|
||||||
|
|
||||||
The app includes automatic updates - future updates will be installed automatically.
|
|
||||||
releaseDraft: true
|
releaseDraft: true
|
||||||
prerelease: false
|
prerelease: false
|
||||||
args: ${{ matrix.args }}
|
args: ${{ matrix.args }}
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"title": "General",
|
||||||
|
"pages": ["root__get", "health_health_get"]
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"title": "Generation",
|
||||||
|
"pages": [
|
||||||
|
"generate_speech_generate_post",
|
||||||
|
"transcribe_audio_transcribe_post",
|
||||||
|
"get_audio_audio__generation_id__get"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"title": "History",
|
||||||
|
"pages": [
|
||||||
|
"list_history_history_get",
|
||||||
|
"get_generation_history__generation_id__get",
|
||||||
|
"delete_generation_history__generation_id__delete",
|
||||||
|
"get_stats_history_stats_get"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"title": "API Reference",
|
"title": "API Reference",
|
||||||
"defaultOpen": true,
|
"defaultOpen": true,
|
||||||
"pages": ["unknown"]
|
"pages": ["general", "profiles", "generation", "history", "models"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"title": "Models",
|
||||||
|
"pages": [
|
||||||
|
"get_model_status_models_status_get",
|
||||||
|
"load_model_models_load_post",
|
||||||
|
"unload_model_models_unload_post",
|
||||||
|
"trigger_model_download_models_download_post",
|
||||||
|
"get_model_progress_models_progress__model_name__get"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"title": "Profiles",
|
||||||
|
"pages": [
|
||||||
|
"list_profiles_profiles_get",
|
||||||
|
"create_profile_profiles_post",
|
||||||
|
"get_profile_profiles__profile_id__get",
|
||||||
|
"update_profile_profiles__profile_id__put",
|
||||||
|
"delete_profile_profiles__profile_id__delete",
|
||||||
|
"get_profile_samples_profiles__profile_id__samples_get",
|
||||||
|
"add_profile_sample_profiles__profile_id__samples_post",
|
||||||
|
"delete_profile_sample_profiles_samples__sample_id__delete"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
{
|
|
||||||
"title": "Endpoints",
|
|
||||||
"pages": [
|
|
||||||
"root__get",
|
|
||||||
"health_health_get",
|
|
||||||
"list_profiles_profiles_get",
|
|
||||||
"create_profile_profiles_post",
|
|
||||||
"get_profile_profiles__profile_id__get",
|
|
||||||
"update_profile_profiles__profile_id__put",
|
|
||||||
"delete_profile_profiles__profile_id__delete",
|
|
||||||
"add_profile_sample_profiles__profile_id__samples_post",
|
|
||||||
"get_profile_samples_profiles__profile_id__samples_get",
|
|
||||||
"delete_profile_sample_profiles_samples__sample_id__delete",
|
|
||||||
"generate_speech_generate_post",
|
|
||||||
"list_history_history_get",
|
|
||||||
"get_generation_history__generation_id__get",
|
|
||||||
"delete_generation_history__generation_id__delete",
|
|
||||||
"get_stats_history_stats_get",
|
|
||||||
"transcribe_audio_transcribe_post",
|
|
||||||
"get_audio_audio__generation_id__get",
|
|
||||||
"load_model_models_load_post",
|
|
||||||
"unload_model_models_unload_post",
|
|
||||||
"get_model_progress_models_progress__model_name__get",
|
|
||||||
"get_model_status_models_status_get",
|
|
||||||
"trigger_model_download_models_download_post"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
+1441
-1
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user