| #!/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 |