1#!/bin/bash 2 3# This script generates all GAPIC clients in this repo. 4# One-time setup: 5# cd path/to/googleapis # https://github.com/googleapis/googleapis 6# virtualenv env 7# . env/bin/activate 8# pip install googleapis-artman 9# deactivate 10# 11# Regenerate: 12# cd path/to/googleapis 13# . env/bin/activate 14# $GOPATH/src/cloud.google.com/go/regen-gapic.sh 15# deactivate 16# 17# Being in googleapis directory is important; 18# that's where we find YAML files and where artman puts the "artman-genfiles" directory. 19# 20# NOTE: This script does not generate the "raw" gRPC client found in google.golang.org/genproto. 21# To do that, use the regen.sh script in the genproto repo instead. 22 23set -ex 24 25APIS=( 26google/api/expr/artman_cel.yaml 27google/iam/artman_iam_admin.yaml 28google/cloud/asset/artman_cloudasset_v1beta1.yaml 29google/cloud/asset/artman_cloudasset_v1.yaml 30google/iam/credentials/artman_iamcredentials_v1.yaml 31google/cloud/bigquery/datatransfer/artman_bigquerydatatransfer.yaml 32google/cloud/bigquery/storage/artman_bigquerystorage_v1beta1.yaml 33google/cloud/dataproc/artman_dataproc_v1.yaml 34google/cloud/dataproc/artman_dataproc_v1beta2.yaml 35google/cloud/dialogflow/artman_dialogflow_v2.yaml 36google/cloud/iot/artman_cloudiot.yaml 37google/cloud/irm/artman_irm_v1alpha2.yaml 38google/cloud/kms/artman_cloudkms.yaml 39google/cloud/language/artman_language_v1.yaml 40google/cloud/language/artman_language_v1beta2.yaml 41google/cloud/oslogin/artman_oslogin_v1.yaml 42google/cloud/oslogin/artman_oslogin_v1beta.yaml 43google/cloud/phishingprotection/artman_phishingprotection_v1beta1.yaml 44google/cloud/recaptchaenterprise/artman_recaptchaenterprise_v1beta1.yaml 45google/cloud/redis/artman_redis_v1beta1.yaml 46google/cloud/redis/artman_redis_v1.yaml 47google/cloud/scheduler/artman_cloudscheduler_v1beta1.yaml 48google/cloud/scheduler/artman_cloudscheduler_v1.yaml 49google/cloud/securitycenter/artman_securitycenter_v1beta1.yaml 50google/cloud/securitycenter/artman_securitycenter_v1.yaml 51google/cloud/speech/artman_speech_v1.yaml 52google/cloud/speech/artman_speech_v1p1beta1.yaml 53google/cloud/talent/artman_talent_v4beta1.yaml 54google/cloud/tasks/artman_cloudtasks_v2beta2.yaml 55google/cloud/tasks/artman_cloudtasks_v2beta3.yaml 56google/cloud/tasks/artman_cloudtasks_v2.yaml 57google/cloud/texttospeech/artman_texttospeech_v1.yaml 58google/cloud/videointelligence/artman_videointelligence_v1.yaml 59google/cloud/videointelligence/artman_videointelligence_v1beta1.yaml 60google/cloud/videointelligence/artman_videointelligence_v1beta2.yaml 61google/cloud/vision/artman_vision_v1.yaml 62google/cloud/vision/artman_vision_v1p1beta1.yaml 63google/cloud/webrisk/artman_webrisk_v1beta1.yaml 64google/devtools/artman_clouddebugger.yaml 65google/devtools/clouderrorreporting/artman_errorreporting.yaml 66google/devtools/cloudtrace/artman_cloudtrace_v1.yaml 67google/devtools/cloudtrace/artman_cloudtrace_v2.yaml 68google/devtools/containeranalysis/artman_containeranalysis_v1.yaml 69google/devtools/containeranalysis/artman_containeranalysis_v1beta1.yaml 70google/firestore/artman_firestore.yaml 71google/firestore/admin/artman_firestore_v1.yaml 72grafeas/artman_grafeas_v1.yaml 73google/logging/artman_logging.yaml 74google/longrunning/artman_longrunning.yaml 75google/monitoring/artman_monitoring.yaml 76google/privacy/dlp/artman_dlp_v2.yaml 77google/pubsub/artman_pubsub.yaml 78google/spanner/admin/database/artman_spanner_admin_database.yaml 79google/spanner/admin/instance/artman_spanner_admin_instance.yaml 80google/spanner/artman_spanner.yaml 81) 82 83for api in "${APIS[@]}"; do 84 rm -rf artman-genfiles/* 85 artman --config "$api" generate go_gapic 86 cp -r artman-genfiles/gapi-*/cloud.google.com/go/* $GOPATH/src/cloud.google.com/go/ 87done 88 89microgen() { 90 input=$1 91 options="${@:2}" 92 93 # see https://github.com/googleapis/gapic-generator-go/blob/master/README.md#docker-wrapper for details 94 docker run \ 95 --mount type=bind,source=$(pwd),destination=/conf,readonly \ 96 --mount type=bind,source=$(pwd)/$input,destination=/in/$input,readonly \ 97 --mount type=bind,source=$GOPATH/src,destination=/out \ 98 --rm \ 99 gcr.io/gapic-images/gapic-generator-go:latest \ 100 $options 101} 102 103MICROAPIS=( 104 # input proto directory | gapic-generator-go flag | gapic-service-config flag 105 # "google/cloud/language/v1 --go-gapic-package cloud.google.com/go/language/apiv1;language --gapic-service-config google/cloud/language/language_v1.yaml" 106) 107 108for api in "${MICROAPIS[@]}"; do 109 microgen $api 110done 111 112pushd $GOPATH/src/cloud.google.com/go/ 113 gofmt -s -d -l -w . && goimports -w . 114 115 # NOTE(pongad): `sed -i` doesn't work on Macs, because -i option needs an argument. 116 # `-i ''` doesn't work on GNU, since the empty string is treated as a file name. 117 # So we just create the backup and delete it after. 118 ver=$(date +%Y%m%d) 119 git ls-files -mo | while read modified; do 120 dir=${modified%/*.*} 121 find . -path "*/$dir/doc.go" -exec sed -i.backup -e "s/^const versionClient.*/const versionClient = \"$ver\"/" '{}' + 122 done 123popd 124 125 126HASMANUAL=( 127errorreporting/apiv1beta1 128firestore/apiv1beta1 129firestore/apiv1 130logging/apiv2 131longrunning/autogen 132pubsub/apiv1 133spanner/apiv1 134trace/apiv1 135) 136for dir in "${HASMANUAL[@]}"; do 137 find "$GOPATH/src/cloud.google.com/go/$dir" -name '*.go' -exec sed -i.backup -e 's/setGoogleClientInfo/SetGoogleClientInfo/g' '{}' '+' 138done 139 140# These have manual edits and should not be auto-generated blindly. See jskeet@ 141# for details. 142git checkout grafeas 143git checkout containeranalysis/v1 144 145find $GOPATH/src/cloud.google.com/go/ -name '*.backup' -delete 146