123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- #!/bin/sh
- #
- # vim: expandtab ts=2 :
- ARGS=$*
- SPHINXBUILD=sphinx-build
- TMPDIR='/tmp/offlineimap-sphinx-doctrees'
- WEBSITE='./website'
- DOCBASE="${WEBSITE}/_doc"
- DESTBASE="${DOCBASE}/versions"
- VERSIONS_YML="${WEBSITE}/_data/versions.yml"
- ANNOUNCES_YML="${WEBSITE}/_data/announces.yml"
- ANNOUNCES_YML_LIMIT=31
- ANNOUNCES_YML_TMP="${ANNOUNCES_YML}.tmp"
- CONTRIB_YML="${WEBSITE}/_data/contribs.yml"
- CONTRIB="${DOCBASE}/contrib"
- HEADER="# DO NOT EDIT MANUALLY: it is generated by a script (website-doc.sh)."
- function fix_pwd () {
- cd "$(git rev-parse --show-toplevel)" || \
- exit 2 "cannot determine the root of the repository"
- test -d "$DESTBASE" || exit 1
- }
- fix_pwd
- version="v$(./offlineimap.py --version)"
- #
- # Add the doc for the contrib files.
- #
- function contrib () {
- echo $HEADER > "$CONTRIB_YML"
- # systemd
- cp -afv "./contrib/systemd/README.md" "${CONTRIB}/systemd.md"
- echo "- {filename: 'systemd', linkname: 'Integrate with systemd'}" >> "$CONTRIB_YML"
- }
- #
- # Build the sphinx documentation.
- #
- function api () {
- # Build the doc with sphinx.
- dest="${DESTBASE}/${version}"
- echo "Cleaning target directory: $dest"
- rm -rf "$dest"
- $SPHINXBUILD -b html -d "$TMPDIR" ./docs/doc-src "$dest"
- # Build the JSON definitions for Jekyll.
- # This let know the website about the available APIs documentations.
- echo "Building Jekyll data: $VERSIONS_YML"
- # Erase previous content.
- echo > "$VERSIONS_YML" <<EOF
- $HEADER
- # Used to publish the APIs.
- #
- # However, it's correct to _remove_ old API docs here. In this case, don't
- # forget to adjust the _doc/versions directory too.
- EOF
- for version in $(ls "$DESTBASE" -1 | sort -nr)
- do
- echo "- $version"
- done | sort -V >> "$VERSIONS_YML"
- }
- #
- # Return title from release entry.
- # $1: full release title
- #
- function parse_releases_get_link () {
- echo $1 | sed -r -e 's,^### (OfflineIMAP.*)\),\1,' \
- | tr '[:upper:]' '[:lower:]' \
- | sed -r -e 's,[\.("],,g' \
- | sed -r -e 's, ,-,g'
- }
- #
- # Return version from release entry.
- # $1: full release title
- #
- function parse_releases_get_version () {
- echo $1 | sed -r -e 's,^### [a-Z]+ (v[^ ]+).*,\1,'
- }
- #
- # Return date from release entry.
- # $1: full release title
- #
- function parse_releases_get_date () {
- echo $1 | sed -r -e 's,.*\(([0-9]+-[0-9]+-[0-9]+).*,\1,'
- }
- #
- # Make Changelog public and save links to them as JSON.
- #
- function releases () {
- # Copy the Changelogs.
- for foo in ./Changelog.md ./Changelog.maint.md
- do
- cp -afv "$foo" "$DOCBASE"
- done
- # Build the announces JSON list. Format is JSON:
- # - {version: '<version>', link: '<link>'}
- # - ...
- echo "$HEADER" > "$ANNOUNCES_YML"
- # Announces for the mainline.
- grep -E '^### OfflineIMAP' ./Changelog.md | while read title
- do
- link="$(parse_releases_get_link "$title")"
- v="$(parse_releases_get_version "$title")"
- d="$(parse_releases_get_date "$title")"
- echo "- {date: '${d}', version: '${v}', link: 'Changelog.html#${link}'}"
- done | tee -a "$ANNOUNCES_YML_TMP"
- # Announces for the maintenance releases.
- grep -E '^### OfflineIMAP' ./Changelog.maint.md | while read title
- do
- link="$(parse_releases_get_link "$title")"
- v="$(parse_releases_get_version "$title")"
- d="$(parse_releases_get_date "$title")"
- echo "- {date: '${d}', version: '${v}', link: 'Changelog.maint.html#${link}'}"
- done | tee -a "$ANNOUNCES_YML_TMP"
- sort -nr "$ANNOUNCES_YML_TMP" | head -n $ANNOUNCES_YML_LIMIT >> "$ANNOUNCES_YML"
- rm -f "$ANNOUNCES_YML_TMP"
- }
- function manhtml () {
- set -e
- cd ./docs
- make manhtml
- cd ..
- cp -afv ./docs/manhtml/* "$DOCBASE"
- }
- exit_code=0
- test "n$ARGS" = 'n' && ARGS='usage' # no option passed
- for arg in $ARGS
- do
- # PWD was fixed at the very beginning.
- case "n$arg" in
- "nreleases")
- releases
- ;;
- "napi")
- api
- ;;
- "nhtml")
- manhtml
- ;;
- "ncontrib")
- contrib
- ;;
- "nusage")
- echo "Usage: website-doc.sh <releases|api|contrib|usage>"
- ;;
- *)
- echo "unkown option $arg"
- exit_code=$(( $exit_code + 1 ))
- ;;
- esac
- done
- exit $exit_code
|