1*55e87721SMatt Gilbride#!/bin/bash 2*55e87721SMatt Gilbride# Copyright 2022 Google LLC 3*55e87721SMatt Gilbride# 4*55e87721SMatt Gilbride# Licensed under the Apache License, Version 2.0 (the "License"); 5*55e87721SMatt Gilbride# you may not use this file except in compliance with the License. 6*55e87721SMatt Gilbride# You may obtain a copy of the License at 7*55e87721SMatt Gilbride# 8*55e87721SMatt Gilbride# http://www.apache.org/licenses/LICENSE-2.0 9*55e87721SMatt Gilbride# 10*55e87721SMatt Gilbride# Unless required by applicable law or agreed to in writing, software 11*55e87721SMatt Gilbride# distributed under the License is distributed on an "AS IS" BASIS, 12*55e87721SMatt Gilbride# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*55e87721SMatt Gilbride# See the License for the specific language governing permissions and 14*55e87721SMatt Gilbride# limitations under the License. 15*55e87721SMatt Gilbride 16*55e87721SMatt Gilbrideset -eo pipefail 17*55e87721SMatt Gilbride 18*55e87721SMatt Gilbrideif [[ -z "${CREDENTIALS}" ]]; then 19*55e87721SMatt Gilbride CREDENTIALS=${KOKORO_KEYSTORE_DIR}/73713_docuploader_service_account 20*55e87721SMatt Gilbridefi 21*55e87721SMatt Gilbride 22*55e87721SMatt Gilbrideif [[ -z "${STAGING_BUCKET_V2}" ]]; then 23*55e87721SMatt Gilbride echo "Need to set STAGING_BUCKET_V2 environment variable" 24*55e87721SMatt Gilbride exit 1 25*55e87721SMatt Gilbridefi 26*55e87721SMatt Gilbride 27*55e87721SMatt Gilbride# work from the git root directory 28*55e87721SMatt Gilbridepushd $(dirname "$0")/../../ 29*55e87721SMatt Gilbride 30*55e87721SMatt Gilbrideroot_dir=$(pwd) 31*55e87721SMatt Gilbride 32*55e87721SMatt Gilbridepython3 --version 33*55e87721SMatt Gilbride 34*55e87721SMatt Gilbride# install docuploader package 35*55e87721SMatt Gilbridepython3 -m pip install --require-hashes -r .kokoro/requirements.txt 36*55e87721SMatt Gilbride 37*55e87721SMatt Gilbride# If DOCLET_VERSION is passed in (overriding version in shared-config) 38*55e87721SMatt Gilbrideif [ -n "${DOCLET_VERSION}" ]; then 39*55e87721SMatt Gilbride doclet_name="java-docfx-doclet-${DOCLET_VERSION}.jar" 40*55e87721SMatt Gilbridefi 41*55e87721SMatt Gilbride 42*55e87721SMatt Gilbridemvn -B -ntp \ 43*55e87721SMatt Gilbride -DtrimStackTrace=false \ 44*55e87721SMatt Gilbride -Dclirr.skip=true \ 45*55e87721SMatt Gilbride -Dorg.slf4j.simpleLogger.showDateTime=true -Dorg.slf4j.simpleLogger.dateTimeFormat=HH:mm:ss:SSS \ 46*55e87721SMatt Gilbride -Denforcer.skip=true \ 47*55e87721SMatt Gilbride -Dcheckstyle.skip=true \ 48*55e87721SMatt Gilbride -Dflatten.skip=true \ 49*55e87721SMatt Gilbride -Danimal.sniffer.skip=true \ 50*55e87721SMatt Gilbride -DskipTests=true \ 51*55e87721SMatt Gilbride -Djacoco.skip=true \ 52*55e87721SMatt Gilbride -T 1C \ 53*55e87721SMatt Gilbride install 54*55e87721SMatt Gilbride 55*55e87721SMatt Gilbrideif [[ -z "${MODULE_LIST}" ]]; then 56*55e87721SMatt Gilbride # Retrieve list of modules from aggregator pom 57*55e87721SMatt Gilbride modules=($(mvn help:evaluate -Dexpression=project.modules | grep '<.*>.*</.*>' | sed -e 's/<.*>\(.*\)<\/.*>/\1/g')) 58*55e87721SMatt Gilbrideelse 59*55e87721SMatt Gilbride modules=($(echo "${MODULE_LIST}" | tr ',' ' ')) 60*55e87721SMatt Gilbridefi 61*55e87721SMatt Gilbrideexcluded_modules=('gapic-libraries-bom' 'google-cloud-jar-parent' 'google-cloud-pom-parent' 'java-shared-dependencies') 62*55e87721SMatt Gilbride# TODO: Maps docs exclusion logic to be removed once we move to correct location on devsite. See b/262712184 and b/262600829 63*55e87721SMatt Gilbridewhile IFS= read -r -d $'\0'; do 64*55e87721SMatt Gilbride excluded_modules+=("$REPLY") 65*55e87721SMatt Gilbridedone < <(find java-maps-* -type d -maxdepth 0 -print0) 66*55e87721SMatt Gilbrideecho "Excluded modules: ${excluded_modules[*]}" 67*55e87721SMatt Gilbridefailed_modules=() 68*55e87721SMatt Gilbride 69*55e87721SMatt Gilbridefor module in "${modules[@]}"; do 70*55e87721SMatt Gilbride # Proceed if module is not excluded 71*55e87721SMatt Gilbride # Spaces are intentionally added -- Query is regex and array elements are space separated 72*55e87721SMatt Gilbride # It tries to match the *exact* `module` text 73*55e87721SMatt Gilbride if [[ ! " ${excluded_modules[*]} " =~ " ${module} " ]]; then 74*55e87721SMatt Gilbride pushd $module 75*55e87721SMatt Gilbride # Extract Cloud RAD module name from `distribution_name` in .repo-metadata.json 76*55e87721SMatt Gilbride NAME=$(grep -o '"distribution_name": "[^"]*' .repo-metadata.json | grep -o '[^"]*$' | cut -d ':' -f 2) 77*55e87721SMatt Gilbride # Extract (current) version from root `versions.txt` file and remove `-SNAPSHOT` 78*55e87721SMatt Gilbride VERSION=$(grep "^${NAME}:" "${root_dir}/versions.txt" | cut -d: -f3 | sed -e 's/-SNAPSHOT//g') 79*55e87721SMatt Gilbride echo "Running for ${NAME}-${VERSION}" 80*55e87721SMatt Gilbride 81*55e87721SMatt Gilbride # Cloud RAD generation 82*55e87721SMatt Gilbride if [ -z "${doclet_name}" ]; then 83*55e87721SMatt Gilbride mvn clean -B -ntp \ 84*55e87721SMatt Gilbride -P docFX \ 85*55e87721SMatt Gilbride -Dclirr.skip=true \ 86*55e87721SMatt Gilbride -Denforcer.skip=true \ 87*55e87721SMatt Gilbride -Dorg.slf4j.simpleLogger.showDateTime=true -Dorg.slf4j.simpleLogger.dateTimeFormat=HH:mm:ss:SSS \ 88*55e87721SMatt Gilbride -Dcheckstyle.skip=true \ 89*55e87721SMatt Gilbride -Dflatten.skip=true \ 90*55e87721SMatt Gilbride -Danimal.sniffer.skip=true \ 91*55e87721SMatt Gilbride javadoc:aggregate 92*55e87721SMatt Gilbride else 93*55e87721SMatt Gilbride mvn clean -B -ntp \ 94*55e87721SMatt Gilbride -P docFX \ 95*55e87721SMatt Gilbride -DdocletPath=${KOKORO_GFILE_DIR}/${doclet_name} \ 96*55e87721SMatt Gilbride -Dclirr.skip=true \ 97*55e87721SMatt Gilbride -Denforcer.skip=true \ 98*55e87721SMatt Gilbride -Dorg.slf4j.simpleLogger.showDateTime=true -Dorg.slf4j.simpleLogger.dateTimeFormat=HH:mm:ss:SSS \ 99*55e87721SMatt Gilbride -Dcheckstyle.skip=true \ 100*55e87721SMatt Gilbride -Dflatten.skip=true \ 101*55e87721SMatt Gilbride -Danimal.sniffer.skip=true \ 102*55e87721SMatt Gilbride javadoc:aggregate 103*55e87721SMatt Gilbride fi 104*55e87721SMatt Gilbride 105*55e87721SMatt Gilbride if [ "$?" -ne "0" ]; then 106*55e87721SMatt Gilbride failed_modules+=("${module}") 107*55e87721SMatt Gilbride continue 108*55e87721SMatt Gilbride fi 109*55e87721SMatt Gilbride # include CHANGELOG if exists 110*55e87721SMatt Gilbride if [ -e CHANGELOG.md ]; then 111*55e87721SMatt Gilbride cp CHANGELOG.md target/docfx-yml/history.md 112*55e87721SMatt Gilbride fi 113*55e87721SMatt Gilbride pushd target/docfx-yml 114*55e87721SMatt Gilbride 115*55e87721SMatt Gilbride echo "Creating metadata for ${module}..." 116*55e87721SMatt Gilbride # create metadata 117*55e87721SMatt Gilbride python3 -m docuploader create-metadata \ 118*55e87721SMatt Gilbride --name ${NAME} \ 119*55e87721SMatt Gilbride --version ${VERSION} \ 120*55e87721SMatt Gilbride --xrefs devsite://java/gax \ 121*55e87721SMatt Gilbride --xrefs devsite://java/google-cloud-core \ 122*55e87721SMatt Gilbride --xrefs devsite://java/api-common \ 123*55e87721SMatt Gilbride --xrefs devsite://java/proto-google-common-protos \ 124*55e87721SMatt Gilbride --xrefs devsite://java/google-api-client \ 125*55e87721SMatt Gilbride --xrefs devsite://java/google-http-client \ 126*55e87721SMatt Gilbride --xrefs devsite://java/protobuf \ 127*55e87721SMatt Gilbride --language java 128*55e87721SMatt Gilbride 129*55e87721SMatt Gilbride echo "Uploading tarball for ${module}..." 130*55e87721SMatt Gilbride # upload yml to production bucket 131*55e87721SMatt Gilbride python3 -m docuploader upload . \ 132*55e87721SMatt Gilbride --credentials ${CREDENTIALS} \ 133*55e87721SMatt Gilbride --staging-bucket ${STAGING_BUCKET_V2} \ 134*55e87721SMatt Gilbride --destination-prefix docfx 135*55e87721SMatt Gilbride 136*55e87721SMatt Gilbride echo "Uploaded tarball for ${module}" 137*55e87721SMatt Gilbride 138*55e87721SMatt Gilbride popd # out of target/docfx-yml 139*55e87721SMatt Gilbride popd # out of $module 140*55e87721SMatt Gilbride fi 141*55e87721SMatt Gilbridedone 142*55e87721SMatt Gilbride 143*55e87721SMatt Gilbrideif [ ${#failed_modules[@]} -eq 0 ]; then 144*55e87721SMatt Gilbride echo "All modules uploaded to CloudRAD" 145*55e87721SMatt Gilbrideelse 146*55e87721SMatt Gilbride echo "These modules failed: ${failed_modules[*]}" 147*55e87721SMatt Gilbride exit 1 148*55e87721SMatt Gilbridefi 149