Files
EpicNext-Cms/renovate.json
T
openhands 8ca538f99f
CI / check (push) Successful in 29s
CI / tests-integration (push) Successful in 2m13s
CI / tests-unit (push) Successful in 2m28s
CI / tests-imaging-browsers (push) Successful in 2m29s
CI / tests-quality (push) Successful in 55s
CI / tests-ui (push) Successful in 5m10s
CI / preflight (push) Skipped
CI / deploy (push) Successful in 3m47s
perf(build): resolve pnpm from the pin and reuse the real pnpm store
The Docker build was slower than it needed to be and could drift away from
the lockfile. Three separate causes, fixed together.

The image installed a pinned [email protected].1 while package.json pins 12.11.2
through `packageManager`. pnpm silently self-managed the difference at
build time: it downloaded the right version into an uncached location and
never verified the sha512 hash. Install corepack instead and let it resolve
version and hash from the pin, so the image can no longer diverge and a
tampered tarball is rejected. The resolved pnpm lives in COREPACK_HOME
inside the image, so the migrations image still runs pnpm offline
(`docker run --entrypoint pnpm ... db:migrate`).

The pnpm store cache-mount pointed at /root/.local/share/pnpm/store, but
pnpm keeps its store in $PNPM_HOME/store/v11. The mount was a no-op: every
build re-downloaded all 493 packages ("reused 0, downloaded 493"). Mounting
the store where pnpm actually keeps it turns that into "reused 493,
downloaded 0".

The build context carried backups/ (232MB of rotating database dumps) and
public/vendor/ (regenerated by `pnpm assets:editor` from node_modules).
Both grew the context and invalidated the `COPY . .` layer on every daily
backup rotation, forcing a full Next.js rebuild. Excluding them takes the
context from 276MB to 23MB.

Compose now also exports the build cache to .docker-cache/cms and imports it
again, so the cache survives `scripts/docker-prune.sh`, which trims the
daemon cache to 4GB after every deploy. Verified by pruning the entire
daemon cache: the next build restored every layer from the local export and
downloaded nothing.

Also: byparr's floating `:latest` tag is now pulled on every start, the
migrations build in scripts/docker-update.sh imports the same local cache,
the README no longer claims the build needs host networking or an
iptables-disabled daemon, the pnpm rationale in renovate.json reflects that
Docker follows the pin automatically, and contract tests pin the new
invariants so the store path cannot drift back.
2026-10-21 18:51:17 +02:00

70 lines
2.2 KiB
JSON

{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:recommended",
":timezone(Europe/Amsterdam)",
":semanticCommits",
"workarounds:all"
],
"labels": ["dependencies"],
"dependencyDashboard": true,
"dependencyDashboardOSVVulnerabilitySummary": "all",
"osvVulnerabilityAlerts": true,
"configMigration": true,
"automergeStrategy": "squash",
"schedule": [
"after 4:00 am and before 5:00 am on monday through friday",
"at 4:17 am on monday through friday"
],
"timezone": "Europe/Amsterdam",
"prConcurrentLimit": 5,
"prHourlyLimit": 3,
"minimumReleaseAge": "3 days",
"lockFileMaintenance": {
"enabled": true
},
"packageRules": [
{
"description": "Minor en patch: één groeps-PR, automerge pas na groene CI",
"matchUpdateTypes": ["minor", "patch", "pin", "digest"],
"groupName": "all non-major dependencies",
"automerge": true,
"platformAutomerge": false
},
{
"description": "Major updates vragen goedkeuring via het dependency-dashboard",
"matchUpdateTypes": ["major"],
"labels": ["major"],
"dependencyDashboardApproval": true
},
{
"description": "Beveiligingsfixes (OSV) niet tegenhouden door de wachttijd en in een eigen PR",
"matchCategories": ["security"],
"minimumReleaseAge": null,
"groupName": "security fixes",
"addLabels": ["security"]
},
{
"description": "Docker-compose draait op :latest; geen digest-pin-ruis",
"matchManagers": ["docker-compose"],
"pinDigests": false
},
{
"description": "Node-upgrades worden handmatig gecoördineerd over .nvmrc, package.json engines, @types/node, de Docker-basisimage en de runner; Renovate mag .nvmrc niet los bumpen (check-node-toolchain faalt anders)",
"matchManagers": ["nvm"],
"enabled": false
},
{
"description": "De Node-basisimage in de Dockerfile hoort bij dezelfde gecoördineerde Node-upgrade als .nvmrc",
"matchManagers": ["dockerfile"],
"matchPackageNames": ["node"],
"enabled": false
},
{
"description": "De pnpm packageManager-pin blijft handmatig: Docker (corepack) en de runner volgen de pin automatisch, maar een bump raakt ook de lockfile en de README-versietabel (scripts/sync-readme-versions.mjs)",
"matchPackageNames": ["pnpm"],
"enabled": false
}
]
}