Pin cached Gitea workflow actions

This commit is contained in:
Kevin
2026-09-04 03:43:31 -04:00
parent 4104b921f2
commit 485cb08b71
8 changed files with 37 additions and 10 deletions
+2 -2
View File
@@ -15,9 +15,9 @@ jobs:
ASTRO_TELEMETRY_DISABLED: '1'
steps:
- name: Checkout source
uses: https://github.com/actions/checkout@v4
uses: https://github.com/actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
- name: Use Node 22
uses: https://github.com/actions/setup-node@v4
uses: https://github.com/actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 22
cache: npm
+2 -2
View File
@@ -28,9 +28,9 @@ jobs:
ASTRO_TELEMETRY_DISABLED: '1'
steps:
- name: Checkout source
uses: https://github.com/actions/checkout@v4
uses: https://github.com/actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
- name: Use Node 22
uses: https://github.com/actions/setup-node@v4
uses: https://github.com/actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 22
cache: npm
+2 -2
View File
@@ -28,9 +28,9 @@ jobs:
ASTRO_TELEMETRY_DISABLED: '1'
steps:
- name: Checkout source
uses: https://github.com/actions/checkout@v4
uses: https://github.com/actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
- name: Use Node 22
uses: https://github.com/actions/setup-node@v4
uses: https://github.com/actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 22
cache: npm
+2 -2
View File
@@ -29,9 +29,9 @@ jobs:
ASTRO_TELEMETRY_DISABLED: '1'
steps:
- name: Checkout source
uses: https://github.com/actions/checkout@v4
uses: https://github.com/actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
- name: Use Node 22
uses: https://github.com/actions/setup-node@v4
uses: https://github.com/actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 22
cache: npm
+2 -2
View File
@@ -29,9 +29,9 @@ jobs:
ASTRO_TELEMETRY_DISABLED: '1'
steps:
- name: Checkout source
uses: https://github.com/actions/checkout@v4
uses: https://github.com/actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
- name: Use Node 22
uses: https://github.com/actions/setup-node@v4
uses: https://github.com/actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 22
cache: npm
+21
View File
@@ -29,6 +29,27 @@ If Cloudflare later assigns a different stable origin,
update the repository configuration, CORS origin, and OAuth redirect URI
together through review before enabling login.
## Runner cache settings
The Dockerized runner uses a persistent `/data` volume and the same dedicated
Docker network as its job containers. Its non-confidential cache settings are:
```yaml
cache:
enabled: true
dir: /data/cache
host: sloanops-gitea-runner
port: 8088
offline_mode: true
container:
network: sloanops-actions
```
`offline_mode` is safe here because every external `uses:` reference is pinned
to a reviewed full commit SHA. It prevents the runner from refreshing mutable
action branches on every job; npm packages remain keyed separately by
`package-lock.json` through setup-node's cache integration.
## Applied CORS policy
The tracked Gitea service in
+4
View File
@@ -88,6 +88,10 @@ staging branch:
fixed host and port reachable from job containers, avoiding the timeout caused
by its former auto-detected private address. Warm jobs reuse dependency
tarballs without caching `node_modules`.
- All external workflow actions are pinned to reviewed commit SHAs. The runner
may therefore set `cache.offline_mode: true` and reuse its local action
repository cache without trusting a mutable tag or refreshing GitHub on every
job.
The pilot dependencies were verified on `cms-pilot`. The same protection rules
apply to `cms`; its exact-origin CORS and OAuth values are the remaining
+2
View File
@@ -227,6 +227,8 @@ for (const path of [
'.gitea/workflows/production-blog.yml',
]) {
const text = await readFile(path, 'utf8');
assert(text.includes('uses: https://github.com/actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4'), `${path} must pin checkout v4 to its reviewed commit.`);
assert(text.includes('uses: https://github.com/actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4'), `${path} must pin setup-node v4 to its reviewed commit.`);
assert(/cache:\s*npm/.test(text) && /cache-dependency-path:\s*package-lock\.json/.test(text), `${path} must cache npm downloads by package-lock.json.`);
assert(text.includes('npm ci --prefer-offline --no-audit --no-fund'), `${path} must retain a clean lockfile install with quiet, cache-friendly npm options.`);
}