mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
fix(landing): keep mixed-case locale casing in emitted URLs (#562)
Astro's getRelativeLocaleUrl lowercases the locale segment by default, so landing links and hreflang for zh-CN, zh-TW, and pt-BR were emitted lowercase and 404 on case-sensitive Cloudflare Pages. Pin the casing at the localizeHref chokepoint with normalizeLocale: false, add an e2e hreflang casing guard, and add a deploy-time check that blocks the build if any lowercased locale path leaks into the output. Closes #554
This commit is contained in:
@@ -33,6 +33,34 @@ jobs:
|
||||
# fetch isn't rate-limited on shared runner IPs (60 req/hr unauth).
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# Astro's getRelativeLocaleUrl lowercases locale segments by default, so a
|
||||
# regression could re-emit /zh-cn/ etc. in hrefs and hreflang. Those 404 on
|
||||
# case-sensitive Cloudflare Pages while the built dirs + sitemap keep canonical
|
||||
# mixed case, and the mismatch is invisible on a case-insensitive dev machine.
|
||||
# Fail the deploy if any lowercased variant of a mixed-case locale directory
|
||||
# leaks into the emitted HTML. See #554.
|
||||
- name: Guard against lowercased locale URLs
|
||||
run: |
|
||||
set -uo pipefail
|
||||
dist=apps/landing/dist
|
||||
fail=0
|
||||
for dir in "$dist"/*/; do
|
||||
name=$(basename "$dir")
|
||||
lower=$(printf '%s' "$name" | tr '[:upper:]' '[:lower:]')
|
||||
[ "$name" = "$lower" ] && continue
|
||||
hits=$(grep -rIl --include='*.html' "/$lower/" "$dist" || true)
|
||||
if [ -n "$hits" ]; then
|
||||
echo "::error::Lowercased locale path /$lower/ found in built HTML (canonical is /$name/); it would 404 on Cloudflare Pages. See #554."
|
||||
printf '%s\n' "$hits" | head -5
|
||||
fail=1
|
||||
fi
|
||||
done
|
||||
if [ "$fail" -ne 0 ]; then
|
||||
echo "Deploy blocked: lowercased locale URLs would 404 on case-sensitive hosting."
|
||||
exit 1
|
||||
fi
|
||||
echo "Locale URL casing OK: no lowercased locale paths in built output."
|
||||
|
||||
- name: Deploy to Cloudflare Pages
|
||||
run: npx wrangler pages deploy apps/landing/dist --project-name snapotter-landing --branch main --commit-dirty=true
|
||||
env:
|
||||
|
||||
Reference in New Issue
Block a user