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
WorkflowPurposeDocs
publish-alpha.ymlBump version, publish alpha to PyPI, open release PRreference
publish-stable.ymlRemove alpha flag, publish stable to PyPI, tag releasereference
build-tests.ymlBuild/install/test matrix across Python versions; channel compatibilityreference
channel-compat.ymlRun a repo's tests against an OVOS distro release channel (stable/testing constraints)reference
opm-check.ymlOPM plugin detection, interface validation, import timingreference
coverage.ymlRun pytest with coverage; post diff report to PR commentreference
coverage-pages.ymlRun tests with coverage; deploy HTML report to GitHub Pagesreference
license-check.ymlCheck all dependency licenses for copyleft violationsreference
pip-audit.ymlScan dependencies for known CVEs; optional SARIF uploadreference
release-preview.ymlPredict next version from PR labels/titlereference
repo-health.ymlRequired files check, version block validation, first-time contributor greetingreference
skill-check.ymlLocale coverage and skill.json validityreference
spec-lint.ymlValidate locale/ against OVOS-INTENT-1/-2 via ovos-spec-lintreference
locale-check.ymlVerify locale folder is included in package build (pyproject.toml + SOURCES.txt)reference
ovoscope.ymlEnd-to-end skill tests with auto-install of pipeline pluginsreference
downstream-check.ymlReport which packages depend on a given packagereference
python-support.ymlInstall matrix (regular + editable) per Python version (legacy β€” REMOVE AFTER 2027-01-01)reference
notify-matrix.ymlSend a message to the OVOS Matrix channelreference
type-check.ymlRun mypy; post πŸ”Ž Type Check section to PR commentreference
docs-check.ymlVerify required docs files exist; optional markdownlintreference

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:

ScriptPurpose
_version_utils.pyShared parsing: read_version, format_version, write_version_block
update_version.pyBump version in version.py (major/minor/build/alpha)
remove_alpha.pySet VERSION_ALPHA = 0 (declare stable)
get_version.pyRead and print version string from version.py
check_downstream.pyReport downstream dependents via pipdeptree
update_pr_comment.pyManage the shared OVOS PR Checks comment (find-or-create, section replace)
check_skill.pyAnalyse skill locale structure, skill.json, and translation coverage
check_locale_build.pyVerify locale folder is included in package build (pyproject.toml + SOURCES.txt)
check_release.pyPredict next version from PR labels/title using conventional commit rules
check_opm.pyDetect 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_version job only runs when github.event.pull_request.merged == true or workflow_dispatch
  • publish-stable.yml β€” bump_version job skips when github.actor == 'github-actions[bot]' (prevents infinite loop when the version commit triggers another push event)
  • release_workflow.yml (per-repo) β€” supports workflow_dispatch for manual reruns

Documentation

FileContents
docs/index.mdHigh-level overview and navigation
docs/release-flow.mdFull release lifecycle, versioning rules, channel overview
docs/workflow-reference.mdAll inputs, outputs, and jobs for each reusable workflow
docs/repo-setup.mdStep-by-step setup guide for new repos
docs/repos.mdAll repos currently using these automations
docs/maintenance.mdOpen 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

  1. Read docs/index.md β€” workflow overview, scripts reference, and cross-references.
  2. Read docs/maintenance.md β€” open technical debt and opportunistic rollouts.
  3. Run the test suite to confirm nothing is broken:
    cd gh-automations
    pip install pytest pyyaml
    pytest test/ -v
    
  4. Check docs/repos.md β€” many repos depend on this library. Understand the caller blast radius before any change.

Before making changes

  • Check dev vs master semantics: dev is active development; master is the frozen v1 stable baseline. All PRs target dev.
  • Test locally before pushing: the test suite covers every Python script. Add tests for any new scripts.
  • Never force-push master β€” caller repos use @master or @dev refs; a rewrite would break them.
  • Do not commit root-level *.md files. Planning, audit, FAQ, and session-log files belong in docs/ or in chat β€” not at the repo root. README.md is the only allowed root-level Markdown file.

After making changes

  1. Run pytest test/ -v β€” must be green before committing.
  2. 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 to coverage.yml with deploy_pages: true
  • python-support.yml β†’ migrate callers to build-tests.yml

Before removing either, check docs/repos.md for active callers.


Credits

Developed by TigreGΓ³tico for OpenVoiceOS.

NGI0 Commons Fund

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.