REPO_POLICIES: pinning covers what we download ourselves; distribution packages are outside it (#156)
check / check (push) Canceled after 3s
check / check (push) Canceled after 3s
This commit was merged in pull request #156.
This commit is contained in:
+19
-18
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: Repository Policies
|
||||
last_modified: 2026-11-04
|
||||
last_modified: 2026-11-06
|
||||
---
|
||||
|
||||
This document covers repository structure, tooling, and workflow standards. Code
|
||||
@@ -21,13 +21,28 @@ style conventions are in separate documents:
|
||||
with the authoritative source as policies evolve.
|
||||
|
||||
- **External references must be pinned by cryptographic hash.** This is the
|
||||
single most important rule in this document. It covers everything fetched from
|
||||
a remote source, including:
|
||||
single most important rule in this document. It covers what we download and
|
||||
install ourselves in scripts and Dockerfiles:
|
||||
- Docker base images
|
||||
- Go modules
|
||||
- Python packages
|
||||
- Python packages from PyPI
|
||||
- npm packages
|
||||
- GitHub Actions
|
||||
- release archives fetched with `curl` or `wget`
|
||||
|
||||
Packages from the distribution's own package manager are outside this rule.
|
||||
They need no version and no hash, because the distribution is trusted. In a
|
||||
`Dockerfile`, it is the pinned base image's distribution. On a host, it is
|
||||
the host's. The host's package manager stands for its distribution, and that
|
||||
includes nix and brew. Updating the package index and upgrading installed
|
||||
packages are fine too. This command, for example, is allowed:
|
||||
|
||||
```sh
|
||||
apt update && apt upgrade -y && apt install -y build-essential
|
||||
```
|
||||
|
||||
A package source that a `Dockerfile` adds itself is not the distribution's
|
||||
own, so its packages are pinned like any other download.
|
||||
|
||||
A version tag such as `@v4`, `@latest` or `:3.21` is server-mutable, and
|
||||
therefore a remote code execution vulnerability. Reference an external
|
||||
@@ -44,17 +59,6 @@ style conventions are in separate documents:
|
||||
Unverified install scripts are arbitrary remote code execution. Double-check
|
||||
every external reference in every file before committing.
|
||||
|
||||
There is one exception: a package from the distribution's own package index
|
||||
needs no version and no hash. Pulling that index is also allowed. The
|
||||
distribution is trusted. In a `Dockerfile`, it is the pinned base image's
|
||||
distribution. On a host, it is the host's. The host's package manager stands
|
||||
for its distribution, and that includes nix and brew. These commands are
|
||||
examples:
|
||||
- `apt-get update`
|
||||
- `apt-get install`
|
||||
- `apk update`
|
||||
- `apk add`
|
||||
|
||||
These come from the distribution wherever possible:
|
||||
- node, meaning the distribution's newest Node package, such as
|
||||
`nodejs-current` on Alpine 3.24
|
||||
@@ -79,9 +83,6 @@ style conventions are in separate documents:
|
||||
- the npm registry
|
||||
- `go get`
|
||||
|
||||
A package source that a `Dockerfile` adds itself is not the distribution's
|
||||
own, so the exception does not cover it.
|
||||
|
||||
- Every repo with software must have a root `Makefile` with these targets:
|
||||
- `make bootstrap`
|
||||
- `make setup`
|
||||
|
||||
Reference in New Issue
Block a user