xref: /aosp_15_r20/external/truth/util/generate-latest-docs.sh (revision b3996a89512f34bffd8f9a69f0bc726f1b19016a)
1*b3996a89SAndroid Build Coastguard Worker#!/bin/bash
2*b3996a89SAndroid Build Coastguard Worker# A script to automatically deploy javadocs.
3*b3996a89SAndroid Build Coastguard Worker#
4*b3996a89SAndroid Build Coastguard Worker# This script is useful both in a CI regular build, where it will generate
5*b3996a89SAndroid Build Coastguard Worker# javadocs (aggregated) via a maven build, and deploy them to github pages. This script
6*b3996a89SAndroid Build Coastguard Worker# is derived from instructions given in this blog article:
7*b3996a89SAndroid Build Coastguard Worker# http://benlimmer.com/2013/12/26/automatically-publish-javadoc-to-gh-pages-with-travis-ci/
8*b3996a89SAndroid Build Coastguard Worker#
9*b3996a89SAndroid Build Coastguard Worker# If the RELEASE_VERSION environment variable is set, then it will perform a similar
10*b3996a89SAndroid Build Coastguard Worker# action, but push to a versioned api docs folder, under the current user's credentials
11*b3996a89SAndroid Build Coastguard Worker# rather than using an encrypted secret via github's GH_TOKEN mechanism.  Users who
12*b3996a89SAndroid Build Coastguard Worker# use the script this way must have a .ssh key which they have declared on github.com
13*b3996a89SAndroid Build Coastguard Worker# per the instructions here: https://help.github.com/articles/generating-ssh-keys/
14*b3996a89SAndroid Build Coastguard Worker#
15*b3996a89SAndroid Build Coastguard Workerset -euE
16*b3996a89SAndroid Build Coastguard Worker
17*b3996a89SAndroid Build Coastguard Workerecho -e "Publishing javadoc...\n"
18*b3996a89SAndroid Build Coastguard Worker
19*b3996a89SAndroid Build Coastguard Workerif [ -n "${RELEASE_VERSION:-}" ]; then
20*b3996a89SAndroid Build Coastguard Worker  # Release
21*b3996a89SAndroid Build Coastguard Worker  version_subdir=api/${RELEASE_VERSION}
22*b3996a89SAndroid Build Coastguard Worker  commit_message="Release $RELEASE_VERSION javadoc pushed to gh-pages."
23*b3996a89SAndroid Build Coastguard Worker  github_url="[email protected]:google/truth.git"
24*b3996a89SAndroid Build Coastguard Workerelse
25*b3996a89SAndroid Build Coastguard Worker  # CI
26*b3996a89SAndroid Build Coastguard Worker  version_subdir=api/latest
27*b3996a89SAndroid Build Coastguard Worker  commit_message="Latest javadoc on successful CI build auto-pushed to gh-pages."
28*b3996a89SAndroid Build Coastguard Worker  github_url="https://x-access-token:${GITHUB_TOKEN}@github.com/google/truth.git"
29*b3996a89SAndroid Build Coastguard Workerfi
30*b3996a89SAndroid Build Coastguard Worker
31*b3996a89SAndroid Build Coastguard Workermvn javadoc:aggregate
32*b3996a89SAndroid Build Coastguard Workerperl -ni -e 'print unless /Tolerant.*Comparison/ || /SubjectBuilderCallback/ || /UsingCorrespondence/ || /AsIterable/ || /Correspondence[.][A-Z]/ || /FluentAssertion/ || /PathSubject/ || /Re2jSubjects/ || /Ordered/' target/site/apidocs/allclasses-frame.html
33*b3996a89SAndroid Build Coastguard Workerfind target/site/apidocs -name '*.html' | xargs perl -077pi -e 's#<li class="blockList"><a name="nested.classes.inherited.from.class.com.google.common.truth.\w*Subject">.*?</li>##msg; if (m#<!-- ======== NESTED CLASS SUMMARY ======== -->(.*?)(?=<!-- =)#ms) { if ($1 !~ m#nested.classes.inherited.from|memberSummary#) { s#<!-- ======== NESTED CLASS SUMMARY ======== -->.*?(?=<!-- =)##msg; } }'
34*b3996a89SAndroid Build Coastguard Workertarget_dir="$(pwd)/target"
35*b3996a89SAndroid Build Coastguard Workercd ${target_dir}
36*b3996a89SAndroid Build Coastguard Workerrm -rf gh-pages
37*b3996a89SAndroid Build Coastguard Workergit clone --quiet --branch=gh-pages "${github_url}" gh-pages > /dev/null
38*b3996a89SAndroid Build Coastguard Workercd gh-pages
39*b3996a89SAndroid Build Coastguard Worker
40*b3996a89SAndroid Build Coastguard Workerif [[ -z "${RELEASE_VERSION:-}" ]]; then
41*b3996a89SAndroid Build Coastguard Worker  git config --global user.name "$GITHUB_ACTOR"
42*b3996a89SAndroid Build Coastguard Worker  git config --global user.email "$GITHUB_ACTOR@users.noreply.github.com"
43*b3996a89SAndroid Build Coastguard Workerfi
44*b3996a89SAndroid Build Coastguard Workerapi_version_dir="${target_dir}/gh-pages/${version_subdir}"
45*b3996a89SAndroid Build Coastguard Workergit rm -rf ${api_version_dir} || true
46*b3996a89SAndroid Build Coastguard Workercp -ar ${target_dir}/site/apidocs ${api_version_dir}
47*b3996a89SAndroid Build Coastguard Workergit add -A -f ${api_version_dir}
48*b3996a89SAndroid Build Coastguard Workergit commit -m "${commit_message}"
49*b3996a89SAndroid Build Coastguard Workergit push -fq origin gh-pages > /dev/null
50*b3996a89SAndroid Build Coastguard Worker
51*b3996a89SAndroid Build Coastguard Workerecho -e "Published Javadoc to gh-pages.\n"
52