#!/bin/bash # Update Doxygen documentation after push to 'master'. # Author: @pah set -e DOXYGEN_VER=doxygen-1.8.13 DOXYGEN_TAR=${DOXYGEN_VER}.linux.bin.tar.gz DOXYGEN_URL="http://ftp.stack.nl/pub/users/dimitri/${DOXYGEN_TAR}" : ${GITHUB_REPO:="Tencent/rapidjson"} GITHUB_HOST="github.com" GITHUB_CLONE="git://${GITHUB_HOST}/${GITHUB_REPO}" GITHUB_URL="https://${GITHUB_HOST}/${GITHUB_PUSH-${GITHUB_REPO}}" # if not set, ignore password #GIT_ASKPASS="${TRAVIS_BUILD_DIR}/gh_ignore_askpass.sh" skip() { echo "$@" 1>&2 echo "Exiting..." 1>&2 exit 0 } abort() { echo "Error: $@" 1>&2 echo "Exiting..." 1>&2 exit 1 } # TRAVIS_BUILD_DIR not set, exiting [ -d "${TRAVIS_BUILD_DIR-/nonexistent}" ] || \ abort '${TRAVIS_BUILD_DIR} not set or nonexistent.' # check for pull-requests [ "${TRAVIS_PULL_REQUEST}" = "false" ] || \ skip "Not running Doxygen for pull-requests." # check for branch name [ "${TRAVIS_BRANCH}" = "master" ] || \ skip "Running Doxygen only for updates on 'master' branch (current: ${TRAVIS_BRANCH})." # check for job number # [ "${TRAVIS_JOB_NUMBER}" = "${TRAVIS_BUILD_NUMBER}.1" ] || \ # skip "Running Doxygen only on first job of build ${TRAVIS_BUILD_NUMBER} (current: ${TRAVIS_JOB_NUMBER})." # install doxygen binary distribution doxygen_install() { wget -O - "${DOXYGEN_URL}" | \ tar xz -C ${TMPDIR-/tmp} ${DOXYGEN_VER}/bin/doxygen export PATH="${TMPDIR-/tmp}/${DOXYGEN_VER}/bin:$PATH" } doxygen_run() { cd "${TRAVIS_BUILD_DIR}"; doxygen ${TRAVIS_BUILD_DIR}/build/doc/Doxyfile; doxygen ${TRAVIS_BUILD_DIR}/build/doc/Doxyfile.zh-cn; } gh_pages_prepare() { cd "${TRAVIS_BUILD_DIR}/build/doc"; [ ! -d "html" ] || \ abort "Doxygen target directory already exists." git --version git clone --single-branch -b gh-pages "${GITHUB_CLONE}" html cd html # setup git config (with defaults) git config user.name "${GIT_NAME-travis}" git config user.email "${GIT_EMAIL-"travis@localhost"}" # clean working dir rm -f .git/index git clean -df } gh_pages_commit() { cd "${TRAVIS_BUILD_DIR}/build/doc/html"; echo "rapidjson.org" > CNAME git add --all; git diff-index --quiet HEAD || git commit -m "Automatic doxygen build"; } gh_setup_askpass() { cat > ${GIT_ASKPASS} < ${HOME}/.git-credentials ; \ chmod go-rw ${HOME}/.git-credentials ) ) # push to GitHub git push origin gh-pages } doxygen_install gh_pages_prepare doxygen_run gh_pages_commit gh_pages_push