diff options
Diffstat (limited to 'js/src/doc/publish.sh')
-rwxr-xr-x | js/src/doc/publish.sh | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/js/src/doc/publish.sh b/js/src/doc/publish.sh new file mode 100755 index 000000000..fad0b27d9 --- /dev/null +++ b/js/src/doc/publish.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash + +# Format js/src/doc documentation in SOURCEDIR, place formatted files in OUTPUTDIR, +# and post all changed pages to MDN using KEYID and SECRET to identify the poster. +# See js/src/doc/README.md for general usage information. +# +# Usage: +# +# ./publish.sh SOURCEDIR OUTPUTDIR KEYID SECRET +# +# Pages are tagged with the current Mercurial parent changeset ID. + +set -eu + +progname=$(basename $0) +doc=$(cd $(dirname $0); pwd) +lib=$doc/lib + +sourcedir=$1 +outputdir=$2 +keyid=$3 +secret=$4 + +$doc/format.sh --mdn "$sourcedir" "$outputdir" + +config=$sourcedir/config.sh + +watermark=$lib/extract-watermark.sh + +# Fetch a URL, with caching disabled. +fetch() { + curl --silent -XGET "$1" \ + -H"Cache-Control: no-cache, no-store, must-revalidate" \ + -H"Pragma: no-cache" \ + -H"Expires: 0" +} + +source $lib/dummy-config.sh + +markdown() { + INPUT_FILE=$1 + URL=$BASE_URL$2 + + local formatted_file=$outputdir/${INPUT_FILE/md/html} + + # Extract the watermark from the formatted file. + local local_watermark=$("$watermark" < "$formatted_file") + + # Get the existing page, and extract its watermark, if any. + local public_watermark=$(fetch "$URL?raw" | "$watermark") + + if [ "$local_watermark" != "$public_watermark" ]; then + echo "$progname: Updating: $URL" >&2 + local status + status=$(curl --silent -X PUT -H"Content-Type: text/html" --upload-file "$formatted_file" -u "$keyid:$secret" "$URL") + case "$status" in + CREATED | RESET) + ;; + *) + echo "$progname: Error posting $URL, from $config: $status" >&2 + exit 1 + ;; + esac + else + echo "$progname: Unchanged: $URL" >&2 + fi +} + +# MDN can't currently update attached resources. But we can verify that the current +# published versions match what we have. +resource() { + local label=$1 + local file=$sourcedir/$2 + local url=$3 + + if cmp "$file" <(fetch "$url") > /dev/null; then + echo "$progname: Unchanged: $url" >&2 + else + echo "$progname: Warning: resource out of date: $url" >&2 + fi +} + +source $config |