github-actions LinkML schema
datasets/github-actions-linkml-schemaChecked by automation only
still a draft
Written 2026-10-28 by ktl-librarian (automation). Last checked 2026-10-28 by ktl-librarian (automation).
The full record
- Checks
- 2026-10-28 by
ktl-librarian(automation)
- 2026-10-28 by
- Sources
src/github_actions/schema/github_actions.yamlsrc/github_actions/schema/README.mdsrc/github_actions/schema/github_actions_core.yamlsrc/github_actions/schema/github_actions_workflow.yamlsrc/github_actions/schema/github_actions_action.yamlsrc/github_actions/schema/github_actions_rules.yamlREADME.mdproject.justfile.lokf/github-actions.yaml.lokf/justfile
- Derived from
- Pointed to by
- Derive and check concepts from workflow files (about)
- Element names and the shared namespace (about)
- Generated artefacts (derived from)
- Knowledge Release (knowledge-release.yaml) (related to)
- Regenerate and test the schema (about)
- Scope, influences and mappings (about)
- Test data and schema tests (about)
- Validate data against the schema (about)
- Graph
- Open this concept in the knowledge graph
- IRI
https://w3id.org/lmodel/github-actions/knowledge/datasets/github-actions-linkml-schema- Licence
- Apache-2.0
- Files
- MarkdownJSON-LDSource on GitHubHistory on GitHub
github-actions LinkML schema
Section titled “github-actions LinkML schema”src/github_actions/schema/github_actions.yaml is the umbrella schema, titled “GitHub Actions workflows, actions and repository rulesets”. Its header gives version: "2026-10-28", the date GitHub’s documentation pages were read, because those pages are versionless.1 The header’s source is SchemaStore’s tree at commit f7c2f3bcb512651bd980ed6896639ea8ded9ddf0, and its annotations pin the same commit, the REST API version 2026-03-10 and the reading date. A comment says that scripts/check_upstream_release.py reads the same three pins, and that the release tags are the schema’s own versions. The schema declares the prefix gha: as https://w3id.org/lmodel/github-actions/ and the license Apache-2.0.
Modules
Section titled “Modules”The schema directory’s README lists the umbrella and four modules.2 LINKML_SCHEMA_NAME in config.public.mk names the umbrella, so the just recipes generate from it. The core module imports only linkml:types. The workflow and action modules import the core, and the rules module imports the workflow module, because a required check names the workflow that reports it. Each module lints alone, and no module imports the umbrella, so an importer can take one module.
github_actions_core.yamlholds what workflows and actions share: thegha_identifiertype, which is the key form GitHub accepts for a job, an input, an output or a secret; the abstract classesGhaInputandGhaOutput; and the mixinGhaRequiredMixin, which carriesrequired.3github_actions_workflow.yamlholdsGhaWorkflowand its jobs (GhaWorkflowJob), andGhaReusableWorkflowwithGhaWorkflowInput,GhaWorkflowOutputandGhaWorkflowSecret. It also holds thegha_permissiontype and theGhaWorkflowInputTypeandGhaRunnerEnvironmentenums.4github_actions_action.yamlholdsGhaActionwithGhaActionInputandGhaActionOutput, and theGhaActionRuntimeenum of the runtimes thatruns.usingmay name:composite,docker,node20andnode24.5github_actions_rules.yamlholdsGhaRepositoryRuleset,GhaBypassActorandGhaRequiredStatusCheck, and theGhaRulesetSourceType,GhaRulesetTargetandGhaRulesetEnforcementenums.6
The umbrella adds only the tree root, GhaDocument, which holds the workflows, reusable workflows, actions, rulesets and required checks of one or more repositories. Across the five files, the schema defines 16 classes, 6 enums and 2 types, and no subsets.
What the classes record
Section titled “What the classes record”GhaWorkflowis a workflow file in a repository’s.github/workflowsdirectory. It records the events under the file’sonkey (triggers), the access itsGITHUB_TOKENgets (permissions) and its jobs (jobs). Each job records its runner labels, its runner group and its permissions, or the reusable workflow it calls.workflow_pathmust name a file directly in.github/workflows, because GitHub reads no subdirectory of it.GhaReusableWorkflowis aGhaWorkflowwhose triggers includeworkflow_call. It records the inputs, outputs and secrets underon.workflow_call, and names each secret without its value. See Reusable workflow.GhaActionrecords the path of an action’saction.ymloraction.yaml, the inputs and outputs it declares, and the runtime that executes it (using). The metadata file’s name and description are the concept’stitleanddescription, so the class adds neither.GhaRepositoryRulesetrecords a ruleset’s target, its enforcement, the refs it includes and excludes, its bypass actors, the type of each rule it holds and the status checks it requires. Of the rules’ parameters, only those ofrequired_status_checksare modelled. See Repository ruleset.GhaRequiredStatusCheckrecords the context a check run must report and the app it must come from. It also records the path of job ids from the top-level workflow’s job to the job that reports it, what can skip that job, andemitted_by, the workflow whose job reports it. See Required status check.
The schema requires triggers, workflow_path and jobs on a workflow, action_path and using on an action, ruleset_target and enforcement on a ruleset, and check_context on a required check. The README says that workflow_path, workflow_repository and runner_environment are written as GitHub’s build type for SLSA provenance writes them.7
Rules and patterns
Section titled “Rules and patterns”GhaWorkflowJob carries two rules: a job that calls a reusable workflow names no runner labels, and it names no runner group. GhaReusableWorkflow requires workflow_call among its triggers. Patterns hold the keys (gha_identifier), the grants (gha_permission), event names, rule types, actor types and bypass modes. For each of the last five, a comment says that a pattern stands in for an enumeration because GitHub adds values. Validate data against the schema says which tool checks what.
Mappings
Section titled “Mappings”GhaWorkflow has a close mapping to CycloneDX 1.7’s workflow and a related mapping to SPDX 3.0.1’s Build, and triggers has a related mapping to CycloneDX’s trigger. GhaAction has a close mapping to CycloneDX’s task, and GhaRequiredStatusCheck a related mapping to in-toto’s Test Result predicate. Scope, influences and mappings says why each mapping is close or related.
As the bundle’s domain schema
Section titled “As the bundle’s domain schema”A LOKF domain schema is a LinkML schema that imports LOKF’s lokf.yaml and adds a host’s classes and keys, so that lokf validate checks the concepts typed with them. The README says that this bundle’s domain schema is .lokf/github-actions.yaml, a copy that lokf adapt wrote from src/github_actions/schema/github_actions.yaml. Edit the source, never the copy. just lokf-adapt rewrites the copy, and just lokf-adapt-check fails when the copy is stale against the schema or .lokf/lokf.yaml. The schema := line of .lokf/justfile names the copy, so just lokf-validate and just lokf-check-refs pass it to the validator.
project.justfile passes four roots to lokf adapt: GhaWorkflow, GhaAction, GhaRepositoryRuleset and GhaRequiredStatusCheck. It says that GhaReusableWorkflow follows GhaWorkflow. It also says that the recipes run the lokf that the sidecar’s floor pins, 0.9.0 or later, unless LOKF_CMD names another.8 The copy’s notes say that lokf adapt re-rooted the four classes on lokf:Concept. It dropped workflow_uri, action_uri, ruleset_uri and check_uri for LOKF’s id, and folded description into LOKF’s.9 So a concept may name any of the five classes as its type, and writes id in place of the class’s own identifier. The concepts under workflows/ in this bundle are typed GhaWorkflow.
The README lists the five classes for Obsidian users of the KTL Registrar and KTL Curator plugins to add to the Known LOKF types setting. It also says that knowledge-release.yaml attaches the same copy to a release as schema-<tag>-github-actions.yaml, beside the bundle. The workflow attaches it when the bundle has changed since the last release that carries one. The README adds that a release that changes only the schema needs a run by hand with force. See Knowledge Release.
Element names and the shared namespace says why no class, enum or type shares a name with lokf.yaml or slsa’s copy, and which keys are renamed. The merged copies in docs/schema/, the Python models, project/ and the adapt copy are generated from these files: see Generated artefacts.
Footnotes
Section titled “Footnotes”-
src/github_actions/schema/github_actions.yaml, the header ↩
-
src/github_actions/schema/README.md, the table of modules ↩
-
src/github_actions/schema/github_actions_core.yaml, the types, slots and classes ↩
-
src/github_actions/schema/github_actions_workflow.yaml, the classes, types and enums ↩
-
src/github_actions/schema/github_actions_action.yaml, the classes and the GhaActionRuntime enum ↩
-
src/github_actions/schema/github_actions_rules.yaml, the classes and enums ↩
-
README.md, the What it models and Knowledge Trust Ladder (KTL) sections ↩
-
project.justfile, the knowledge bundle recipes ↩
-
.lokf/github-actions.yaml, the notes at the end ↩