diff --git a/.github/workflows/ui-preview-deploy.yml b/.github/workflows/ui-preview-deploy.yml index dc0fe3d7ca..abd46ae96a 100644 --- a/.github/workflows/ui-preview-deploy.yml +++ b/.github/workflows/ui-preview-deploy.yml @@ -99,8 +99,10 @@ jobs: test -d client || { echo "::error::artifact missing client/ assets dir"; exit 1; } # 3) Allowlist file extensions — fail on anything that isn't a normal web/build output (blocks # smuggled scripts/binaries). A few extensionless CF asset files are explicitly permitted. + # `zip` covers the served downloads (e.g. /downloads/gittensory-extension.zip) — a passive + # static asset wrangler only uploads (never executes), so allowing it doesn't run fork code. unexpected="$(find . -regextype posix-extended -type f \ - -not -iregex '.*\.(mjs|js|cjs|map|json|css|html?|txt|svg|png|jpe?g|gif|webp|avif|ico|bmp|woff2?|ttf|otf|eot|wasm|xml|webmanifest|md|csv|wgsl|glb|gltf)$' \ + -not -iregex '.*\.(mjs|js|cjs|map|json|css|html?|txt|svg|png|jpe?g|gif|webp|avif|ico|bmp|woff2?|ttf|otf|eot|wasm|xml|webmanifest|md|csv|zip|wgsl|glb|gltf)$' \ -not -name '_headers' -not -name '_redirects' -not -name '_routes.json' -not -name '.assetsignore')" if [ -n "$unexpected" ]; then echo "::error::Artifact contains unexpected file types — refusing to deploy:"