chrismdp / land-a-pull-request
A pull request lands once CI has run
AWML checked this file when it was pushed, and the registry refuses a push with any mistake. It is checked again here, by the AWML this registry runs. Here is each check it ran, in the order its spec gives them.
workflow.yaml
Checked by AWML v0.8.0
- The file is YAML
file.yamlPassedEach file can be read, and holds a YAML mapping of fields.
- The file is of the version this release reads
file.versionPassedawml is "0.8". An older file is upgraded with awml convert.
- Every field is known and none is missing
fields.knownPassedEach file, scope, part, line, implementation, block and comment has the fields it needs and no others, and each list is a list of mappings.
- Every kind is known
kinds.knownPassedEach part and line has a kind the spec defines.
- No id is used twice
ids.uniquePassedScope, part, block and comment ids are unique across the file.
- Every id is well written
ids.writtenPassedAn id is letters, digits and underscores, starting with a letter, and a block's platform is a company id or owner/platforms/slug.
- Every value that should be text is text
values.textPassedIds, labels, kinds and references are text, not something YAML read as true, false, a number or a date.
- Every reference names something in the file
references.knownPassedEach in, from and to, each part a block names and each part a comment ties names a scope, block or part the file has.
- No scope or block is nested in itself
nesting.acyclicPassedFollowing in from any scope or block never leads back to it.
- A comment is linked only by tie lines
comments.tie-onlyPassedA comment moves nothing, so only a tie, or a hidden line, may touch it.
- Every tie has a comment at one end
ties.commentPassedA tie links a comment to what it explains, so one of its ends is a comment.
- No line goes into a trigger
triggers.no-line-in1 mistakeA trigger only starts its own workflow, so no line but a tie or a hidden one goes into it. A workflow starts another with an outside action whose ref names the other's trigger.
- the line from "ci" to "tryfailed" goes into trigger "tryfailed": a trigger only starts its own workflow, so start another workflow with an outside action whose ref names its trigger
- Every op is known and on a step
ops.knownPassedAn op is one of the operations the spec lists, on an ai, code or person step.
- Only a do step leads to an outside action
operations.only-do-actsPassedA step that leads to an outside action, straight or through a review or a standing approval, is a do step.
- An answer or check step never writes to a context
operations.answer-check-read-onlyPassedAn answer step and a check step read contexts and speak on surfaces, but never write to a context.
- Every outside action's label ends with its tier
tiers.writtenPassedAn outside action's label ends with Allow, Ask or Block after a colon.
- Every tier agrees with what stands in front of it
tiers.shapePassedAn Ask action has a review, a standing approval or a person's own step on every way in, an Allow action has no review or standing approval in front of it, and only red lines lead to a Block action.
- Every standing approval lists its actions on a surface
approvals.listedPassedA standing approval leads to the surface where each action it covers is listed.
- Every processing is well written
processing.writtenPassedA scope's processing is any, none, or a map from company ids to any or a list of known operations.
- An inner scope allows no more processing than its outer one
processing.nestedPassedA scope inside another allows no company or operation that the outer scope doesn't.
- Only a block takes a platform
platform.blocks-onlyPassedplatform belongs to a block of an implementation, never to a scope.
- Every wait is a duration on a trigger
wait.durationPassedwait is an ISO 8601 duration in weeks, days, hours, minutes or seconds, given only on a trigger.
- Every at is a path on a context
at.pathPassedat is a relative path of plain names, given only on a context.
- Only a trigger, connector or context is marked untrusted
untrusted.partsPasseduntrusted is true or false, and is true only on a trigger, connector or context.
- Only a code step cleans
cleans.code-onlyPassedcleans is true or false, and is true only on a code step, since strangers' text can steer an AI step however it's written.
- No untrusted text reaches an outside action unstopped
untrusted.outsidePassedText from a part marked untrusted reaches an outside action only past a review, a person's own step or a code step marked cleans, which stops it, or through a standing approval in front of the action, which accepts the risk. Workflows given together are followed through the parts they share and the workflows they start.
- Every ref is well written
refs.writtenPassedA ref is owner/slug#id for a published workflow, or a path to a file alongside, ending .yaml, then # and the part's id.
- Only a context, connector, surface or outside action takes a ref
refs.parts1 mistakeWorkflows share the contexts, connectors and surfaces both reach, and an outside action names the trigger of the workflow it starts. A trigger belongs to the workflow it starts, so it never refers.
- part "tryfailed" has a ref, but a trigger belongs to the workflow it starts: start another workflow with an outside action whose ref names its trigger
- No part is placed twice in an implementation
placement.oncePassedEach part sits in at most one block of each implementation.
- Every part that needs a block has one
placement.completePassedEvery part but a trigger or comment sits in a block of each implementation.
- Every ref names a part of the workflow it refers to
refs.knownPassedA ref to a workflow given with it names a part that workflow has. A ref to a workflow not given is left alone.
- Every copy agrees with the part it refers to
refs.agreePassedA context, connector or surface that refers to another workflow's has the same kind, label and at, and a scope with the same people and terms.
- Every outside action's ref names a trigger
refs.startsPassedAn outside action that refers to a workflow given with it names that workflow's trigger, which it starts.
- Every shared part has one owner
refs.ownerPassedA ref names a part of another workflow, never its own, and following refs from any copy ends at the one that owns the part, rather than going round in a circle.
- No do step is decided by AI
warn.do-by-codePassedA do step should be code acting on what an earlier step decided; this warns and never fails.
- Each do step makes one change
warn.one-changePassedA do step should lead to one change, counting each outside action and surface and all contexts together as one; this warns and never fails.
- The file holds one workflow
warn.several-workflows1 warningA trigger's run is every part its start lines reach, and triggers whose runs share a part are one workflow, so triggers in more than one group mean the file should be split at its triggers; this warns and never fails.
Warnings don't fail the check.
- this file holds 2 workflows: the one started by "The app pushes the pull request's branch" and the one started by "A try failed": split it at its triggers into workflows that refer to each other
- Every part is linked to a trigger
warn.unlinked-partPassedFollowing lines either way from the triggers, leaving out comments and their ties, reaches every part; this warns and never fails.
- Every comment is tied to a part
warn.untied-commentPassedA comment explains what it is tied to, so each has a tie; this warns and never fails.
- Every step is started by a trigger
warn.unstarted-stepPassedEach step, review and standing approval is in some trigger's run, the parts its start lines reach; this warns and never fails.
- No context is written by more than one workflow
warn.shared-writersPassedA context that workflows given together share is written by only one of them, since each may change what another relies on; this warns and never fails.
- No connector is read by more than one workflow
warn.shared-readersPassedA connector that workflows given together share brings items in for only one of them, since each may take an item another expects; this warns and never fails.
- Every platform description value is of the right kind
description.valuesSkippedplatform is a mapping, off_for_up_to a duration, steps code or agent, agents and calls lists of company ids, and holds a list.
Skipped because no file given is a platform description.
- Every company id and path is well written
description.idsSkippedA platform description's id is a company id or owner/platforms/slug, its company ids are lower-case letters, digits and hyphens, and what it holds are relative paths.
Skipped because no file given is a platform description.