a68d0bc4df
deploy/cloudflare/deploy.sh (build → optional parallel R2 media sync → Pages deploy); 'make deploy' (frontend-only) / 'make deploy-media'. One-time setup stays documented in README. Guards against unauth + mis-keyed R2 uploads. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
26 lines
968 B
Bash
Executable File
26 lines
968 B
Bash
Executable File
#!/usr/bin/env bash
|
|
# Upload ONE file to R2 with the right content-type + immutable cache. Used by
|
|
# deploy.sh's parallel xargs (wrangler has no bulk sync). Reads BUCKET / MEDIA_OUT /
|
|
# WRANGLER from the environment; the single argument is the local file path.
|
|
set -u
|
|
f="$1"
|
|
key="${f#"$MEDIA_OUT"/}"
|
|
# Guard: if the prefix strip didn't fire (e.g. relative path vs absolute MEDIA_OUT),
|
|
# the key would wrongly keep a leading dir → wrong R2 path. Fail loudly, don't ship it.
|
|
if [ "$key" = "$f" ]; then
|
|
echo "FAIL $f (key strip failed — MEDIA_OUT='$MEDIA_OUT' is not a prefix; pass absolute paths)"
|
|
exit 1
|
|
fi
|
|
case "${f##*.}" in
|
|
mp4) ct=video/mp4 ;;
|
|
mp3) ct=audio/mpeg ;;
|
|
json) ct=application/json ;;
|
|
*) ct=application/octet-stream ;;
|
|
esac
|
|
if "$WRANGLER" r2 object put "$BUCKET/$key" --file "$f" --remote \
|
|
--content-type "$ct" --cache-control "public, max-age=31536000, immutable" >/dev/null 2>&1; then
|
|
echo "ok $key"
|
|
else
|
|
echo "FAIL $key"
|
|
fi
|