2024-02-01 11:03:32 +03:00
#!/usr/bin/env bash
2024-01-10 18:48:53 +03:00
mkdir website/html 2>/dev/null
rm -r website/html/* 2>/dev/null
set -euo pipefail
commithash = $( git rev-parse --short HEAD)
commitdate = $( git log -1 --date= format:"%Y-%m-%d" --format= "%ad" )
export commithash
export commitdate
# Link to static files and cross-references.
ln -sf ../../../mox-website-files/files website/html/files
ln -sf ../../rfc/xr website/html/xr
# All commands below are executed relative to ./website/
cd website
go run website.go -root -title 'Mox: modern, secure, all-in-one mail server' 'Mox' < index.md >html/index.html
mkdir html/features
(
cat features/index.md
echo
sed -n -e '/# FAQ/q' -e '/## Roadmap/,/# FAQ/p' < ../README.md
echo
echo 'Also see the [Protocols](../protocols/) page for implementation status, and (non)-plans.'
) | go run website.go 'Features' >html/features/index.html
mkdir html/screenshots
go run website.go 'Screenshots' < screenshots/index.md >html/screenshots/index.html
mkdir html/install
go run website.go 'Install' < install/index.md >html/install/index.html
mkdir html/faq
sed -n '/# FAQ/,//p' < ../README.md | go run website.go 'FAQ' >html/faq/index.html
mkdir html/config
(
echo '# Config reference'
echo
sed -n '/^Package config holds /,/\*\//p' < ../config/doc.go | grep -v -E '^(Package config holds |\*/)' | sed 's/^# /## /'
) | go run website.go 'Config reference' >html/config/index.html
mkdir html/commands
(
echo '# Command reference'
echo
sed -n '/^Mox is started /,/\*\//p' < ../doc.go | grep -v '\*/' | sed 's/^# /## /'
) | go run website.go 'Command reference' >html/commands/index.html
mkdir html/protocols
go run website.go -protocols 'Protocols' <../rfc/index.txt >html/protocols/index.html
2024-03-12 11:41:09 +03:00
mkdir html/b
cat <<'EOF' >html/b/index.html
<!doctype html>
<html>
<head>
<meta charset = "utf-8" />
<title>mox build</title>
<meta name = "viewport" content = "width=device-width, initial-scale=1" />
<link rel = "icon" href = "noNeedlessFaviconRequestsPlease:" />
<style>
body { padding: 1em; }
* { font-size: 18px; font-family: ubuntu, lato, sans-serif; margin: 0; padding: 0; box-sizing: border-box; }
p { max-width: 50em; margin-bottom: 2ex; }
pre { font-family: 'ubuntu mono' , monospace; }
pre, blockquote { padding: 1em; background-color: #eee; border-radius: .25em; display: inline-block; margin-bottom: 1em; }
h1 { margin: 1em 0 .5em 0; }
</style>
</head>
<body>
<script>
const elem = ( name, ...s) = > {
const e = document.createElement( name)
e.append( ...s)
return e
}
2024-03-17 09:58:02 +03:00
const link = ( url, anchor) = > {
2024-03-12 11:41:09 +03:00
const e = document.createElement( 'a' )
e.setAttribute( 'href' , url)
e.setAttribute( 'rel' , 'noopener' )
2024-03-17 09:58:02 +03:00
e.append( anchor || url)
2024-03-12 11:41:09 +03:00
return e
}
let h = location.hash.substring( 1)
const ok = /^[ a-zA-Z0-9_\. ] +$/.test( h)
if ( !ok) {
h = '<tag-or-branch-or-commithash>'
}
const init = ( ) = > {
document.body.append(
elem( 'p' , 'Compile or download any version of mox, by tag (release), branch or commit hash.' ) ,
elem( 'h1' , 'Compile' ) ,
elem( 'p' , 'Run:' ) ,
elem( 'pre' , 'CGO_ENABLED=0 GOBIN=$PWD go install github.com/mjl-/mox@' +h) ,
elem( 'p' , 'Mox is tested with the Go toolchain versions that are still have support: The most recent version, and the version before.' ) ,
elem( 'h1' , 'Download' ) ,
elem( 'p' , 'Download a binary for your platform:' ) ,
elem( 'blockquote' , ok ?
link( 'https://beta.gobuilds.org/github.com/mjl-/mox@' +h) :
'https://beta.gobuilds.org/github.com/mjl-/mox@' +h
) ,
elem( 'p' , 'Because mox is written in Go, builds are reproducible, also when cross-compiling. Gobuilds.org is a service that builds Go applications on-demand with the latest Go toolchain/runtime.' ) ,
2024-03-17 09:58:02 +03:00
elem( 'h1' , 'Localserve' ) ,
elem( 'p' , 'Changes to mox can often be most easily tested locally with ' , link( '../features/#hdr-localserve' , '"mox localserve"' ) , ', without having to update your running mail server.' ) ,
2024-03-12 11:41:09 +03:00
)
}
window.addEventListener( 'load' , init)
</script>
</body>
</html>
EOF