Reusable Workflow Reference: Skill and Locale Checks¶
In a nutshell
This page documents the shared workflows that check OVOS skill packaging: skill-check.yml, locale-check.yml, and spec-lint.yml. For build and OVOS-plugin (OPM) checks, see Build Checks and Plugin, License, and Repo Checks. For end-to-end skill test execution, see Skill Test Workflows. Start with the gh-automations overview for the big picture, or the full Workflow Reference index.
All reusable workflows are in .github/workflows/ and are called via:
Ref: Always use
@dev.
Workflows on this page:
skill-check.yml¶
Analyses an OVOS skill repository for locale structure, language coverage, and skill.json validity. Silently passes for non-skill repos by default.
Source: .github/workflows/skill-check.yml
Inputs¶
| Input | Type | Default | Description |
|---|---|---|---|
runner |
string | ubuntu-latest |
Runner label |
python_version |
string | 3.14 |
Python version |
locale_dir |
string | "" |
Locale root path. Empty = auto-detect. |
skip_if_not_skill |
boolean | true |
Silently pass if no ovos.plugin.skill entry point found |
fail_on_missing_en_us |
boolean | true |
Fail if en-US locale directory is absent |
fail_on_invalid_skill_json |
boolean | false |
Fail if en-US skill.json is missing or invalid |
pr_comment |
boolean | true |
Post a '๐๏ธ Skill' section in the shared 'OVOS PR Checks' comment on the PR. Only runs when the workflow is triggered by a pull_request event. |
spec_lint |
boolean | true |
Also run ovos-spec-lint (spec-lint.yml) against the skill's locale folder. Every ovos-skill-* repo already calls this workflow, so this is how spec-lint reaches the fleet without a per-repo caller PR. Set to false to opt a repo out. |
spec_lint_locale_path |
string | locale |
Path passed to spec-lint.yml's locale_path input. |
Permissions¶
pull-requests: write, contents: read
Steps¶
Follows the canonical 3-phase pattern (continue-on-error โ format โ post โ re-raise):
| Step | Description |
|---|---|
| Checkout + scripts checkout | Checks out the calling repo and (on PR events) the gh-automations scripts |
| Setup Python | actions/setup-python@v6 |
| Run skill check | check_skill.py --repo-root . --locale-dir โฆ --output-json /tmp/skill-report.json. continue-on-error: true. |
| Format skill section | Inline Python reads skill-report.json โ skill-section.md |
| Post skill section to PR comment | Calls update_pr_comment.py with --section-id skill |
| Skip if not an OVOS skill repo | Exits 0 if is_skill: false and skip_if_not_skill: true |
| Fail if en-US locale is missing | Exits 1 if has_en_us: false and fail_on_missing_en_us: true |
| Fail if skill.json is invalid | Exits 1 if JSON malformed or required fields missing and fail_on_invalid_skill_json: true |
| Fail job if skill check failed | Re-raises error after comment is posted |
Since the spec_lint input landed (default true), the workflow also runs a second job. It calls spec-lint.yml as a nested reusable workflow against the skill's locale folder (spec_lint_locale_path, default locale).
Calling skill-check.yml therefore also runs spec-lint, with its own check, its own PR-comment section, and its own failure gate. Opt a repo out with spec_lint: false.
This is deliberate. Every ovos-skill-* repo already calls skill-check.yml, so the nested call is how spec-lint reaches the whole fleet without a per-repo caller PR.
PR comment content¶
๐๏ธ **ovos-skill-hello-world.openvoiceos** โ 14 languages
**en-US:** 2 intents ยท 4 dialogs ยท skill.json โ
<details><summary>Translation coverage โ 13 languages (12 complete, 1 partial)</summary>
| Language | Progress | Coverage |
|----------|----------|----------|
| ca-es | `โโโโโโโโโโ` | โ
100% (6/6) |
| de-de | `โโโโโโโโโโ` | โ ๏ธ 83.3% (5/6) |
</details>
Coverage icons: yes for 95% or more, partial for 50 to 94%, no for less than 50%. The
summary line counts languages in each band. Non-skill repos:
โน๏ธ Not an OVOS skill repo โ check skipped.
Typical usage¶
name: Skill Check
on:
pull_request:
branches: [dev]
workflow_dispatch:
jobs:
skill_check:
uses: OpenVoiceOS/gh-automations/.github/workflows/skill-check.yml@dev
secrets: inherit
Stricter skill repos¶
To enforce a valid skill.json, set fail_on_invalid_skill_json: true (it defaults to false so the check is informational by default).
locale-check.yml¶
Verifies that locale folders are correctly included in the package build, by checking pyproject.toml configuration and the build manifest.
Source: .github/workflows/locale-check.yml
Inputs¶
| Input | Type | Default | Description |
|---|---|---|---|
uv_prerelease |
string | allow |
uv prerelease resolution mode (allow | if-necessary | explicit | disallow). Defaults to "allow": the OVOS ecosystem ships pre-1.0 alphas and relies on prerelease floor-pins resolving the way pip did. |
runner |
string | ubuntu-latest |
|
python_version |
string | 3.11 |
|
locale_path |
string | "" |
Override locale path (relative to repo root). If empty, auto-detects. |
pr_comment |
boolean | true |
Post sections in the shared 'OVOS PR Checks' comment. Only runs when triggered by a pull_request event. |
spec-lint.yml¶
Runs ovos-spec-lint against a skill's locale folder to validate it against OVOS-INTENT-1 (template syntax) and OVOS-INTENT-2 (file naming and layout).
Source: .github/workflows/spec-lint.yml
Inputs¶
| Input | Type | Default | Description |
|---|---|---|---|
uv_prerelease |
string | allow |
uv prerelease resolution mode (allow | if-necessary | explicit | disallow). Defaults to "allow": the OVOS ecosystem ships pre-1.0 alphas and relies on prerelease floor-pins resolving the way pip did. |
runner |
string | ubuntu-latest |
Runner label |
python_version |
string | 3.14 |
Python version |
locale_path |
string | locale |
Path to the locale folder (or a single |
spec_version |
string | "" |
OVOS spec version to target. Empty = ovos-spec-lint default. Set to '0', '1', '2', or '3' to flag features newer than that version. |
strict |
boolean | false |
Treat warnings as errors (passes --strict to ovos-spec-lint) |
skip_if_no_locale |
boolean | true |
Silently pass if locale_path does not exist |
ovos_spec_tools_spec |
string | ovos-spec-tools |
Pip requirement spec for the linter. Override to pin a version or install from a git URL during alpha. |
pr_comment |
boolean | true |
Post a '๐งช Spec Lint' section in the shared 'OVOS PR Checks' comment. Only runs when the workflow is triggered by a pull_request event. |
Read next: Skill Test Workflows Related: gh-automations Overview ยท Build Checks ยท Plugin, License, and Repo Checks ยท Workflow Reference