Skip to content

Commit f1b7bf9

Browse files
committed
ci: remove standalone zizmor workflow, fix SECURITY.md lint
zizmor already runs as GITHUB_ACTIONS_ZIZMOR inside Super Linter, so the dedicated workflow was redundant. Also simplify the SECURITY.md prose to pass the NATURAL_LANGUAGE linter. https://claude.ai/code/session_01YEC8c9bU4Mory8FFoiAS5T
1 parent 14b4e4a commit f1b7bf9

2 files changed

Lines changed: 23 additions & 88 deletions

File tree

.github/workflows/zizmor.yaml

Lines changed: 0 additions & 60 deletions
This file was deleted.

SECURITY.md

Lines changed: 23 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -19,31 +19,26 @@ Flaws affecting components used by FrankenPHP (PHP, Caddy, Go...) or using Frank
1919

2020
## Supply-chain hardening
2121

22-
FrankenPHP follows the open-source security practices documented in
23-
[Astral's "Open source security at Astral" post](https://astral.sh/blog/open-source-security-at-astral):
24-
25-
- **Workflow auditing.** Every push and pull request that touches CI
26-
is audited by [zizmor](https://docs.zizmor.sh/) as a hard gate. The
27-
`unpinned-uses` rule in `zizmor.yaml` requires, at a minimum, a tag
28-
pin on every action.
29-
- **Least-privilege permissions.** Every workflow starts with
30-
`permissions: {}` and only broadens access on a per-job basis, so a
31-
newly added job inherits no permissions by default.
32-
- **Environment-scoped secrets.** Secrets that publish artifacts
33-
(Docker Hub credentials, the website deploy token, the translation
34-
API key) live in dedicated GitHub Environments (`dockerhub`,
35-
`website`, `translate`) instead of repository-wide secrets,
36-
limiting the blast radius of a compromised job.
37-
- **Build provenance.** Release binaries are attested with
38-
[`actions/attest-build-provenance`](https://github.com/actions/attest-build-provenance)
39-
so downstream consumers can verify they were produced by this
40-
repository's CI.
41-
- **Continuous dependency updates.** Dependabot tracks Go modules,
42-
GitHub Actions and Docker base images; new versions land through
43-
reviewable pull requests rather than implicit `latest` upgrades.
44-
- **No `pull_request_target`.** Workflows never use the
45-
`pull_request_target` trigger, which would expose write tokens to
46-
fork pull requests.
47-
- **Checkout without persisted credentials.** All `actions/checkout`
48-
steps set `persist-credentials: false` unless they specifically
49-
need to push back to the repository.
22+
FrankenPHP follows the open-source security practices from
23+
[Astral's security guide](https://astral.sh/blog/open-source-security-at-astral):
24+
25+
- **Workflow auditing** --
26+
[Super Linter](https://github.com/super-linter/super-linter) runs
27+
[zizmor](https://docs.zizmor.sh/) on every pull request.
28+
The `unpinned-uses` rule in `zizmor.yaml` requires a tag pin on every action.
29+
- **Least-privilege permissions** --
30+
Every workflow starts with `permissions: {}` and only grants access per job.
31+
- **Environment-scoped secrets** --
32+
Secrets for publishing (Docker Hub, website deploy, translation API)
33+
live in dedicated GitHub Environments (`dockerhub`, `website`, `translate`).
34+
- **Build provenance** --
35+
Release binaries carry
36+
[`attest-build-provenance`](https://github.com/actions/attest-build-provenance)
37+
attestations.
38+
- **Dependency updates** --
39+
Dependabot tracks Go modules, GitHub Actions, and Docker base images.
40+
- **Safe triggers** --
41+
Workflows never use `pull_request_target`.
42+
- **No persisted credentials** --
43+
All `actions/checkout` steps set `persist-credentials: false`
44+
unless the job needs to push.

0 commit comments

Comments
 (0)