gh-automations
August 1, 2026 Β· View on GitHub
Reusable GitHub Actions workflows and Python scripts for the OpenVoiceOS ecosystem.
Used by 209 repos across the OVOS project. See docs/repos.md for the full list.
Reusable Workflows
All workflows live in .github/workflows/ and are called from other repos via:
uses: OpenVoiceOS/gh-automations/.github/workflows/<name>.yml@dev
| Workflow | Purpose | Docs |
|---|---|---|
publish-alpha.yml | Bump version, publish alpha to PyPI, open release PR | reference |
publish-stable.yml | Remove alpha flag, publish stable to PyPI, tag release | reference |
build-tests.yml | Build/install/test matrix across Python versions; channel compatibility | reference |
channel-compat.yml | Run a repo's tests against an OVOS distro release channel (stable/testing constraints) | reference |
opm-check.yml | OPM plugin detection, interface validation, import timing | reference |
coverage.yml | Run pytest with coverage; post diff report to PR comment | reference |
coverage-pages.yml | Run tests with coverage; deploy HTML report to GitHub Pages | reference |
license-check.yml | Check all dependency licenses for copyleft violations | reference |
pip-audit.yml | Scan dependencies for known CVEs; optional SARIF upload | reference |
release-preview.yml | Predict next version from PR labels/title | reference |
repo-health.yml | Required files check, version block validation, first-time contributor greeting | reference |
skill-check.yml | Locale coverage and skill.json validity | reference |
spec-lint.yml | Validate locale/ against OVOS-INTENT-1/-2 via ovos-spec-lint | reference |
locale-check.yml | Verify locale folder is included in package build (pyproject.toml + SOURCES.txt) | reference |
ovoscope.yml | End-to-end skill tests with auto-install of pipeline plugins | reference |
downstream-check.yml | Report which packages depend on a given package | reference |
python-support.yml | Install matrix (regular + editable) per Python version (legacy β REMOVE AFTER 2027-01-01) | reference |
notify-matrix.yml | Send a message to the OVOS Matrix channel | reference |
type-check.yml | Run mypy; post π Type Check section to PR comment | reference |
docs-check.yml | Verify required docs files exist; optional markdownlint | reference |
Quick Start
See docs/repo-setup.md for the complete guide to setting up a new OVOS repo.
The minimum required files for a new package:
.github/workflows/
conventional-label.yaml # auto-label PRs by commit type
release_workflow.yml # alpha release on PR merge to dev
publish_stable.yml # stable release on PR merge to master
license_tests.yml # license compliance check
build_tests.yml # build/install/test matrix (build-tests.yml)
repo_health.yml # required-files check + contributor greeting
release_preview.yml # next-version prediction on every PR
For OVOS plugin repos, also add:
.github/workflows/
opm_check.yml # OPM plugin detection + interface validation
For OVOS skill repos, also add:
.github/workflows/
skill_check.yml # locale coverage + skill.json validity
Release Flow
See docs/release-flow.md for the full lifecycle diagram.
PR merged to dev
βββΊ publish-alpha.yml
ββ Bump version in version.py
ββ Publish alpha to PyPI
ββ Open release PR to master
PR merged to master (after human review)
βββΊ publish-stable.yml
ββ Remove alpha suffix
ββ Tag GitHub release
ββ Sync master β dev
Python Scripts
Scripts in scripts/ are checked out by the reusable workflows at run time:
| Script | Purpose |
|---|---|
_version_utils.py | Shared parsing: read_version, format_version, write_version_block |
update_version.py | Bump version in version.py (major/minor/build/alpha) |
remove_alpha.py | Set VERSION_ALPHA = 0 (declare stable) |
get_version.py | Read and print version string from version.py |
check_downstream.py | Report downstream dependents via pipdeptree |
update_pr_comment.py | Manage the shared OVOS PR Checks comment (find-or-create, section replace) |
check_skill.py | Analyse skill locale structure, skill.json, and translation coverage |
check_locale_build.py | Verify locale folder is included in package build (pyproject.toml + SOURCES.txt) |
check_release.py | Predict next version from PR labels/title using conventional commit rules |
check_opm.py | Detect OVOS plugins via OPM, validate interface, measure import time |
Note: The reusable workflows check out this repo at runtime pinned to
ref: dev.
Bot Safety
All workflows include guards against accidental bot-triggered runs:
publish-alpha.ymlβbump_versionjob only runs whengithub.event.pull_request.merged == trueorworkflow_dispatchpublish-stable.ymlβbump_versionjob skips whengithub.actor == 'github-actions[bot]'(prevents infinite loop when the version commit triggers another push event)release_workflow.yml(per-repo) β supportsworkflow_dispatchfor manual reruns
Documentation
| File | Contents |
|---|---|
| docs/index.md | High-level overview and navigation |
| docs/release-flow.md | Full release lifecycle, versioning rules, channel overview |
| docs/workflow-reference.md | All inputs, outputs, and jobs for each reusable workflow |
| docs/repo-setup.md | Step-by-step setup guide for new repos |
| docs/repos.md | All repos currently using these automations |
| docs/maintenance.md | Open technical debt and opportunistic rollouts |
New Maintainer Checklist
If you have just inherited or taken ownership of this repo, complete these steps:
Day 1 β Get oriented
- Read
docs/index.mdβ workflow overview, scripts reference, and cross-references. - Read
docs/maintenance.mdβ open technical debt and opportunistic rollouts. - Run the test suite to confirm nothing is broken:
cd gh-automations pip install pytest pyyaml pytest test/ -v - Check
docs/repos.mdβ many repos depend on this library. Understand the caller blast radius before any change.
Before making changes
- Check
devvsmastersemantics:devis active development;masteris the frozen v1 stable baseline. All PRs targetdev. - Test locally before pushing: the test suite covers every Python script. Add tests for any new scripts.
- Never force-push
masterβ caller repos use@masteror@devrefs; a rewrite would break them. - Do not commit root-level
*.mdfiles. Planning, audit, FAQ, and session-log files belong indocs/or in chat β not at the repo root.README.mdis the only allowed root-level Markdown file.
After making changes
- Run
pytest test/ -vβ must be green before committing. - Review
docs/workflow-reference.mdβ if inputs/outputs changed, update the reference.
Deprecated workflows
Two workflows are deprecated and scheduled for removal on 2027-01-01:
coverage-pages.ymlβ migrate callers tocoverage.ymlwithdeploy_pages: truepython-support.ymlβ migrate callers tobuild-tests.yml
Before removing either, check docs/repos.md for active callers.
Credits
Developed by TigreGΓ³tico for OpenVoiceOS.
This project was funded through the NGI0 Commons Fund, a fund established by NLnet with financial support from the European Commission's Next Generation Internet programme, under the aegis of DG Communications Networks, Content and Technology under grant agreement No 101135429.
