roc/www/netlify.toml
2023-11-10 20:18:13 -05:00

68 lines
2.9 KiB
TOML

# This is the file that generates and deploys https://www.roc-lang.org,
# which is served on Netlify.
#
# Netlify's docs for how this configuration file works:
# https://docs.netlify.com/routing/headers/#syntax-for-the-netlify-configuration-file
[build]
publish = "build/"
command = "bash netlify.sh"
# Always build on push - see https://answers.netlify.com/t/builds-cancelled-for-a-new-branch-due-to-no-content-change/17169/2
ignore = "/bin/false"
[[headers]]
for = "/*"
[headers.values]
X-Frame-Options = "DENY"
X-XSS-Protection = "1; mode=block"
X-Content-Type-Options = "nosniff"
# Firefox prefetch requires some cache-control to be set
# See https://bugzilla.mozilla.org/show_bug.cgi?id=1527334
Cache-Control = "public, max-age=1200"
[[headers]]
for = "/packages/*"
[headers.values]
X-Frame-Options = "DENY"
X-XSS-Protection = "1; mode=block"
X-Content-Type-Options = "nosniff"
# unsafe-eval is needed for wasm compilation in the repl to work on Safari and Chrome;
# otherwise they block it.
# TODO figure out how to tell Netlify to apply that policy only to the repl, not to everything.
#
# This style-src hash is to permit the <style> in the favicon so it looks good in both light and
# dark mode. Favicons can only do this using inline <style> tags, so this exception is needed!
#
# When changing the favicon's <style>, generate a new hash and put it here using:
#
# $ echo -n "polygon{fill:#7d59dd}@media (prefers-color-scheme: dark){polygon{fill:#9c7bea}}" | openssl dgst -sha256 -binary | openssl enc -base64
#
# Details on how this works: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/style-src
#
# Also note that the sha256 in the script-src is for the <script> in the <head>
# which removes the 'no-js' class. When changing it, use:
#
# $ echo -n "document.documentElement.className = document.documentElement.className.replace('no-js', '');" | openssl dgst -sha256 -binary | openssl enc -base64
#
# In both cases, the sha256 should be in this format: 'sha256-MySha256GoesHere'
Content-Security-Policy = "default-src 'self'; img-src *; script-src 'self' 'sha256-glHRII/7b3zzlpV/fHgyDU43eehue/Hg2K6Ihbt7o6Q='; style-src 'self' 'sha256-07CmErfGgav8i4u4UOrGznokE/Q4Cax2Kmj7zGcW4l8=' 'unsafe-inline';"
# Firefox prefetch requires some cache-control to be set
# See https://bugzilla.mozilla.org/show_bug.cgi?id=1527334
Cache-Control = "public, max-age=1200"
[[headers]]
for = "/fonts/*"
[headers.values]
# Preloading fonts requires CORS headers for some reason
Access-Control-Allow-Origin = "*"
# Redirect roc-lang.org/authors to the AUTHORS file in this repo
#
# This is referenced in the LICENSE file, which says to see roc-lang.org/authors
# for a list of authors!
[[redirects]]
from = "/authors"
to = "https://raw.githubusercontent.com/roc-lang/roc/main/AUTHORS"
force = true
status = 200