Co-authored-by: Rene Nochebuena Guerrero <rene@nochebuena.dev>
ci
Scoped workflows for every einherjar repository.
What this repository is
Gitea reads .gitea/scoped_workflows/ from here and runs those workflows on
every repository owned by the einherjar organisation, once this repository
is registered at einherjar → Settings → Actions → Scoped Workflows.
.gitea/scoped_workflows/ pr.yml, title.yml, main.yml run on every einherjar repo
.gitea/workflows/ test.yml runs on this repository only
Read this before changing anything
- Scoped workflows are read from this repository's default branch only. There
is no tag and no pin: what is on
mainis what every repository runs, from the moment it merges. A mistake here is a mistake in 17 repositories at once. mainis protected and reviewed by a person. Agents are not code owners of this repository, deliberately — see.gitea/CODEOWNERS.test.ymlexercises these workflows here before they reach anything else. It is the only safety net this design has.- A required status check that never posts blocks every merge in the organisation. Mark a check required only after its first green run. Branch protection is configured by an organisation owner, not from here.
on: scheduleandon: workflow_runare not supported in scoped workflows.
Pull request titles
The title becomes the squash subject on main, and merging it is the release.
| Title | Merging it |
|---|---|
patch | fix(web): close the body on decode errors |
releases the next patch |
minor | feat(core): add Code.Slug |
releases the next minor |
major | feat(web)!: drop Bind |
releases the next major — the module path must already end in /vN |
docs(core): explain the issue pointer |
releases nothing; ci, chore and test likewise |
Every releasing merge takes its own number: two patch merges are x.y.1 then x.y.2.
The api phase checks the claimed bump against the actual API change, and a ci,
docs, chore or test title may not change the API at all. Branches are <type>/<slug>.
A title that releases nothing must also change nothing that ships. The scope phase holds each
non-releasing type to the files it names: docs to Markdown and docs/, test to *_test.go and
testdata/, ci to .gitea/, Markdown and lint configuration, and chore to anything but
non-test Go source, go.mod, go.sum and a Dockerfile.
Status checks
Scoped workflows report as einherjar/ci: <workflow> / <job> (<event>), so every
einherjar repository reports the same context names. The exact strings are read
from a real pull request head before they are required anywhere.