123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- #!/bin/bash
- # Update Doxygen documentation after push to 'master'.
- # Author: @pah
- set -e
- DOXYGEN_VER=doxygen-1.8.7
- DOXYGEN_TAR=${DOXYGEN_VER}.linux.bin.tar.gz
- DOXYGEN_URL="http://ftp.stack.nl/pub/users/dimitri/${DOXYGEN_TAR}"
- DOXYGEN_BIN="/usr/local/bin/doxygen"
- : ${GITHUB_REPO:="miloyip/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 -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} <<EOF
- #!/bin/bash
- echo
- exit 0
- EOF
- chmod a+x "$GIT_ASKPASS"
- }
- gh_pages_push() {
- # check for secure variables
- [ "${TRAVIS_SECURE_ENV_VARS}" = "true" ] || \
- skip "Secure variables not available, not updating GitHub pages."
- # check for GitHub access token
- [ "${GH_TOKEN+set}" = set ] || \
- skip "GitHub access token not available, not updating GitHub pages."
- [ "${#GH_TOKEN}" -eq 40 ] || \
- abort "GitHub token invalid: found ${#GH_TOKEN} characters, expected 40."
- cd "${TRAVIS_BUILD_DIR}/build/doc/html";
- # setup credentials (hide in "set -x" mode)
- git remote set-url --push origin "${GITHUB_URL}"
- git config credential.helper 'store'
- # ( set +x ; git config credential.username "${GH_TOKEN}" )
- ( set +x ; [ -f ${HOME}/.git-credentials ] || \
- ( echo "https://${GH_TOKEN}:@${GITHUB_HOST}" > ${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
|