@@ -113,10 +113,38 @@ npm run local -- serve
113113The ` local ` prefix runs the script against the sibling Docsy, and the server
114114watches it, so theme edits hot-reload.
115115
116+ ### Workflow security analysis
117+
118+ ` .github/workflows/zizmor.yaml ` runs [ zizmor] [ ] over this repo's workflows in
119+ its pedantic persona (security audits plus workflow hygiene) on every PR, on
120+ pushes to ` main ` , and weekly, so the online audits catch advisories published
121+ against already-pinned actions. Results upload to the repository's Security tab
122+ as code-scanning alerts.
123+
124+ - The job passes whatever it finds; findings are alerts to triage. Blocking, if
125+ any, would come from a code-scanning rule in a ruleset on ` main ` .
126+ - The workflow calls the [ OpenTelemetry shared workflow] [ otel-zizmor ] at a
127+ pinned commit; that workflow pins the zizmor action, which pins the zizmor
128+ image by digest, so the scanner moves only when the pin here does. Review the
129+ chain at each bump.
130+ - CI-only by design: the repo carries no tooling dependency for it. For a local
131+ run, with ` GH_TOKEN ` set for the online audits, where _ ` VERSION ` _ is the
132+ zizmor version the workflow's latest run logs (its ` zizmor vX.Y.Z ` banner):
133+
134+ ``` bash
135+ uvx zizmor@VERSION --persona=pedantic .
136+ ```
137+
138+ - ` security-events: write ` sits alone in this workflow, away from the job that
139+ installs and builds.
140+
116141[ alternate dashboard ] : https://app.netlify.com/sites/goldydocs/deploys
117142[ deploys ] : https://app.netlify.com/sites/docsy-example/deploys
118143[ Docsy ] : https://github.com/google/docsy
119144[ hugo-extended ] : https://www.npmjs.com/package/hugo-extended
120145[ Hugo workspace ] : https://gohugo.io/configuration/module/#top-level-settings
146+ [ otel-zizmor] :
147+ https://github.com/open-telemetry/shared-workflows/blob/main/zizmor/README.md
148+ [ zizmor ] : https://docs.zizmor.sh/
121149
122150<!-- cSpell:ignore hugo docsy -->
0 commit comments