All checks were successful
Build and deploy / Validate source (push) Successful in 5s
Build and deploy / Integration suite on a real stack (push) Successful in 1m10s
Build and deploy / Secret scan and release gate (push) Successful in 5s
Build and deploy / Publish images and notify Portainer (push) Successful in 1m43s
The Site pulled pdf.js 3.11.174 from cdnjs with no integrity attribute, and the policy trusted the whole of cdnjs.cloudflare.com for both script-src and worker-src. Anything that host served would have executed, and a customer measuring a PDF sheet depended on it being reachable. Vendor both files instead of pinning a hash: it removes the dependency rather than constraining it, and lets the policy name only 'self'. Provenance and SHA-256 digests are recorded in local/static/vendor/README.md, verified on download against the SRI digests cdnjs publishes for that release. cdnjs is now absent from script-src, worker-src and connect-src in both gateway templates. Workers are 'self' plus blob:, which the Site needs for the worker it constructs itself. Verified in a browser against the running stack: pdf.js loads from /vendor/, the blob worker starts, and a real seven-page PDF parses with no CSP violation. Both browser suites and the full integration suite pass. The version is deliberately unchanged. 3.11.174 is old, but its known eval path is already closed by isEvalSupported:false, and upgrading is an API change that needs its own testing rather than riding along with this. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Production deployment files
The DTF application is one Portainer-owned Docker Swarm stack. Gitea builds,
tests, scans, and publishes the two application images, then calls the stack's
Portainer webhook. Start with the short operator guide in ../PORTAINER.md.
- The deployed stack is the repository's
docker-compose.yml, not a file here. Dockerfile.apiandDockerfile.web— prebuilt registry images.portainer.env.example— non-secret Portainer variables.production_preflight.py— fail-closed application/configuration validator.PRODUCTION_CHECKLIST.md— production evidence checklist.
The current application remains deliberately blocked from production because real adapters and Docker-secret file loading are absent and current validation base images have unresolved HIGH/CRITICAL findings. No real provider or production service has been configured or contacted.