This project uses config/modules.json to define which upstream Puppet modules are tested.
- Open config/modules.json.
- Add a new object under
modules. - At minimum, set
repo. - Optionally set
ref,id,os, andprereqs.
Minimal example:
{
"repo": "https://github.com/voxpupuli/puppet-firewalld",
"ref": "master"
}Example with optional fields:
{
"id": "puppet-augeasproviders_core",
"repo": "https://github.com/voxpupuli/puppet-augeasproviders_core",
"ref": "master",
"os": "ubuntu-latest",
"prereqs": {
"apt": ["libaugeas-dev", "augeas-tools", "pkg-config", "build-essential"]
}
}Use os for modules that require a specific GitHub Actions runner, such as Windows-only modules. If omitted, the workflow defaults to ubuntu-latest.
Schema file: config/modules.schema.json
Validation script: scripts/validate_modules_config.py
Run locally:
python -m pip install jsonschema
python scripts/validate_modules_config.py --config config/modules.json --schema config/modules.schema.jsonExpected success output:
OK: config/modules.json is valid against config/modules.schema.json
If invalid, the script prints path-based errors and exits non-zero.
The GitHub Actions workflow validates config/modules.json before building the module matrix.
Workflow: .github/workflows/compatibility-runner-puppet8.yml
If schema validation fails, the prepare job fails and module test jobs are blocked.
Top-level shape:
{
"modules": [
{
"repo": "https://github.com/org/repo",
"ref": "main"
}
]
}Field definitions for each module item:
repo(required, string): Git repository URL. Must start withhttps://orgit@.ref(optional, string): Branch, tag, or commit-ish to clone. Defaults tomainin runner logic when omitted.id(optional, string): Stable identifier for reporting/artifacts. Allowed characters: letters, numbers,_,.,-.os(optional, string): Allowed values areubuntu-latest,windows-latest,macos-latest. The workflow uses this to chooseruns-on. Defaults toubuntu-latestwhen omitted.prereqs(optional, object): Package-manager specific prerequisites.
prereqs subfields (each optional):
apt: array of package namesdnf: array of package namesyum: array of package namesapk: array of package namesbrew: array of package nameschoco: array of package namespacman: array of package names
Rules for each package list:
- Must be an array of non-empty strings.
- Must not contain duplicates.
- Missing required
repo. - Extra unexpected keys in module objects.
- Empty package names in
prereqslists. - Invalid
idcharacters. - Invalid
repoformat (must start withhttps://orgit@).
- Add/update module entries in config/modules.json.
- Run schema validation locally.
- Ensure no duplicate
idvalues in the list. - Include
prereqsfor modules with known native/system package requirements.