gh-automations

June 16, 2026 · View on GitHub

gh-automations (hosted at OpenVoiceOS/gh-automations) is the shared GitHub Actions automation library for all OpenVoiceOS repositories. It provides reusable workflows and Python scripts that implement the OVOS rolling-release model: bump version on PR merge to dev, publish alpha to PyPI, open a release PR to master, then on merge declare stable and tag.

As of 2026-03-09 it is used by 209 OVOS repositories. All calling repos should reference @dev:

uses: OpenVoiceOS/gh-automations/.github/workflows/<name>.yml@dev

Scripts checkout

The reusable workflows check out this repo at runtime to access scripts/, pinned to ref: dev:

- uses: actions/checkout@v4
  with:
    repository: OpenVoiceOS/gh-automations
    ref: dev
    path: _gh_automations/

Reusable Workflows

All workflows are called with:

uses: OpenVoiceOS/gh-automations/.github/workflows/<name>.yml@dev
WorkflowPurposeUsed by
publish-alpha.ymlBump version, publish alpha to PyPI, open release PRAll 209 repos — release_workflow.yml
publish-stable.ymlRemove alpha suffix, tag stable release, sync devAll 209 repos — publish_stable.yml
build-tests.ymlBuild/install/test matrix across Python versions; channel compatibility checkAll repos — build_tests.yml
opm-check.ymlOPM plugin detection, interface validation, import timingPlugin repos — opm_check.yml
coverage.ymlRun pytest with coverage; post diff report to PR commentSelected repos — coverage.yml
coverage-pages.ymlRun tests with coverage and deploy HTML report to GitHub PagesSelected repos — coverage_pages.yml
license-check.ymlScan dependencies for copyleft/incompatible licenses126 repos — license_tests.yml
pip-audit.ymlScan installed dependencies for CVEs; optional SARIF uploadSelected repos — pipaudit.yml
release-preview.ymlPredict next version from PR labels/titleAll repos — release_preview.yml
repo-health.ymlCheck required files, version block, greet first-time contributorsAll repos — repo_health.yml
skill-check.ymlLocale coverage and skill.json validitySkill repos — skill_check.yml
spec-lint.ymlValidate locale/ against OVOS-INTENT-1/-2 via ovos-spec-lintSkill repos — spec_lint.yml
downstream-check.ymlReport which packages depend on a given package13 repos — downstream.yml
python-support.ymlInstall matrix (regular + editable) per Python version (legacy — REMOVE AFTER 2027-01-01)Superseded by build-tests.yml for most repos
notify-matrix.ymlPost release notifications to OVOS Matrix channelVia publish-alpha.yml/publish-stable.yml notify_matrix input
type-check.ymlRun mypy and post 🔎 Type Check section to PR commentRepos with type hints
docs-check.ymlVerify required docs files exist; optional markdownlintAll repos

Full input/output/job reference: workflow-reference.md


Python Scripts

Located in scripts/. Checked out by the reusable workflows at run time — not installed as a package.

ScriptKey functionPurpose
_version_utils.pyread_version(version_file)scripts/_version_utils.py:17Parse version.py block; shared by all version scripts
_version_utils.pyformat_version(major, minor, build, alpha)scripts/_version_utils.py:54Format PEP 440 version string
_version_utils.pywrite_version_block(version_file, ...)scripts/_version_utils.py:72Rewrite block, preserve surrounding content
update_version.pyupdate_version(part, version_file)scripts/update_version.py:22Bump VERSION_MAJOR/MINOR/BUILD/ALPHA in version.py
remove_alpha.pyupdate_alpha(version_file)scripts/remove_alpha.py:17Set VERSION_ALPHA = 0 (declare stable)
get_version.pyget_version(version_file)scripts/get_version.py:15Read and print current version string
check_downstream.pyget_downstream(package_name)scripts/check_downstream.py:61Report reverse dependencies using pipdeptree
update_pr_comment.pyfind_ovos_comment(repo, pr)scripts/update_pr_comment.py:56Find-or-create the shared OVOS PR Checks comment
update_pr_comment.pyinsert_or_replace_section(body, ...)scripts/update_pr_comment.py:81Replace a named section in the shared PR comment
check_skill.pyrun_checks(repo_root, ...)scripts/check_skill.py:220Full skill locale and skill.json analysis
check_release.pyrun_checks(version_file, ...)scripts/check_release.py:196Predict next version from PR labels/title
check_opm.pycheck_opm(plugin_type, entry_point, ...)scripts/check_opm.py:406OPM plugin detection, interface validation, import timing

All version scripts share the version.py block format:

# START_VERSION_BLOCK
VERSION_MAJOR = 1
VERSION_MINOR = 2
VERSION_BUILD = 3
VERSION_ALPHA = 4   # 0 = stable
# END_VERSION_BLOCK

Documentation

  • Release Flow — Full lifecycle: alpha → stable → channel constraints; gh-automations own versioning policy
  • Workflow Reference — All inputs, outputs, jobs, and bot guards for each reusable workflow
  • Repo Setup — Step-by-step guide for adding CI/CD to a new OVOS repo (uses @dev)
  • Repos — Complete inventory of all 209 repos using gh-automations, grouped by category

ResourcePath
Maintenance notesmaintenance.md
Workflow referenceworkflow-reference.md
Repo setup guiderepo-setup.md
Release flowrelease-flow.md
Caller reposrepos.md

Cross-References

Key repos that call these workflows

RepoWorkflows used
ovos-corepublish-alpha.yml, publish-stable.yml, license-check.yml, notify-matrix.yml, downstream-check.yml
ovos-utilsAll core workflows (downstream tracking: 13 repos depend on it)
ovos-bus-clientAll core workflows
ovos-workshopAll core workflows
ovos-messagebuspublish-alpha.yml, publish-stable.yml, license-check.yml, notify-matrix.yml
ovos-releasesManages constraints-alpha/testing/stable.txt — updated after stable releases
raspOVOSUses constraints-alpha.txt URL as CONSTRAINTS env var during image builds