The documentation*.md files in this directory are the distilled GitLab documentation
principles, synced from
the same path
in gitlab-org/gitlab.
They are the standard for GitLab product documentation, and they govern the pages under
docs/docs-gitlab-com/.
Read them before writing or editing a page there.
The repository's own mise lint:docs task checks almost none of these rules, so a clean
lint run is not evidence that a page follows them.
A daily scheduled pipeline runs the doc-principles-sync job
(.gitlab/ci/doc-principles-sync.yml), which refetches the files and opens a merge request
when any of them changed upstream.
Only documentation*.md is synced.
The distilled directory also holds backend, frontend, database, Ruby, and Vue principles
that do not apply to this repository.
The sync adds and updates files, and never deletes them, so a file removed here stays removed until someone restores it.
This directory mirrors the upstream path deliberately, and it sits outside docs/.
Everything under docs/ is both prose-linted and mounted as content by the Hugo docs
build, and these files fail on both counts.
They are written upstream, so they cannot be changed to satisfy local rules, and they
document Hugo shortcodes that the docs build would try to expand.
Only the link checker reaches this directory, and it skips it.
Do not edit the documentation*.md files.
Each one carries a source_checksum and a "do not edit manually" banner from the
generator that produces it.
Changes belong upstream in gitlab-org/gitlab.
This README is not synced, so it can be edited freely.
The job runs only on a pipeline schedule that marks itself.
It uses the Orbit automation bot's Vault token through the .automation-bot template, so
no new token is needed:
- Create a daily pipeline schedule (Project > CI/CD > Schedules) on
mainwith the variableSCHEDULE_ONLYset todoc-principles-sync. That marker makes the schedule run only this job (see.skip-on-solo-schedulein.gitlab-ci.yml). - To rehearse it, set
DRY_RUNtotrueon the schedule and run it once. The job then logs the diff and stops before it pushes anything. Remove that variable to go live.
To rehearse the fetch locally, run mise run docs:principles:sync.
