@@ -51,7 +51,8 @@ print_header() {
5151}
5252
5353# Default values
54- GCP_PROJECT_ID=" "
54+ GOOGLE_CLOUD_PROJECT=" "
55+ GOOGLE_CLOUD_LOCATION=" global"
5556GITHUB_REPO=" "
5657POOL_NAME=" github"
5758
@@ -99,13 +100,17 @@ while [[ $# -gt 0 ]]; do
99100 shift 2
100101 ;;
101102 -p|--project)
102- GCP_PROJECT_ID =" $2 "
103+ GOOGLE_CLOUD_PROJECT =" $2 "
103104 shift 2
104105 ;;
105106 --pool-name)
106107 POOL_NAME=" $2 "
107108 shift 2
108109 ;;
110+ -l|--location)
111+ GOOGLE_CLOUD_LOCATION=" $2 "
112+ shift 2
113+ ;;
109114 -h|--help)
110115 show_help
111116 exit 0
@@ -139,17 +144,17 @@ if [[ ! "${GITHUB_REPO}" =~ ^[a-zA-Z0-9._-]+/[a-zA-Z0-9._-]+$ ]]; then
139144fi
140145
141146# Auto-detect project ID if not provided
142- if [[ -z " ${GCP_PROJECT_ID } " ]]; then
147+ if [[ -z " ${GOOGLE_CLOUD_PROJECT } " ]]; then
143148 print_info " Auto-detecting Google Cloud project..."
144- GCP_PROJECT_ID =$( gcloud config get-value project 2> /dev/null)
145- if [[ -z " ${GCP_PROJECT_ID } " ]]; then
149+ GOOGLE_CLOUD_PROJECT =$( gcloud config get-value project 2> /dev/null)
150+ if [[ -z " ${GOOGLE_CLOUD_PROJECT } " ]]; then
146151 print_error " Could not auto-detect Google Cloud project ID"
147152 echo " Please either:"
148153 echo " 1. Set default project: gcloud config set project YOUR_PROJECT_ID"
149154 echo " 2. Use --project flag: $0 --repo ${GITHUB_REPO} --project YOUR_PROJECT_ID"
150155 exit 1
151156 fi
152- print_success " Using project: ${GCP_PROJECT_ID } "
157+ print_success " Using project: ${GOOGLE_CLOUD_PROJECT } "
153158fi
154159
155160# Extract repository components
@@ -164,7 +169,7 @@ PROVIDER_NAME="gh-${REPO_HASH}"
164169
165170print_header " Starting Direct Workload Identity Federation setup"
166171echo " 📦 Repository: ${GITHUB_REPO} "
167- echo " ☁️ Project: ${GCP_PROJECT_ID } "
172+ echo " ☁️ Project: ${GOOGLE_CLOUD_PROJECT } "
168173echo " 🏊 Pool: ${POOL_NAME} "
169174echo " 🆔 Provider: ${PROVIDER_NAME} "
170175echo " "
@@ -180,8 +185,8 @@ if [[ -z "${GCLOUD_AUTH_LIST}" ]]; then
180185fi
181186
182187# Test project access
183- if ! gcloud projects describe " ${GCP_PROJECT_ID } " > /dev/null 2>&1 ; then
184- print_error " Cannot access project '${GCP_PROJECT_ID } '"
188+ if ! gcloud projects describe " ${GOOGLE_CLOUD_PROJECT } " > /dev/null 2>&1 ; then
189+ print_error " Cannot access project '${GOOGLE_CLOUD_PROJECT } '"
185190 echo " Please verify:"
186191 echo " 1. Project ID is correct"
187192 echo " 2. You have permissions on this project"
@@ -196,18 +201,18 @@ print_header "Step 1: Enabling required Google Cloud APIs"
196201apis_to_enable=" iamcredentials.googleapis.com cloudresourcemanager.googleapis.com iam.googleapis.com sts.googleapis.com logging.googleapis.com monitoring.googleapis.com cloudtrace.googleapis.com"
197202
198203print_info " Enabling APIs: ${apis_to_enable} "
199- gcloud services enable " ${apis_to_enable} " --project=" ${GCP_PROJECT_ID } "
204+ gcloud services enable " ${apis_to_enable} " --project=" ${GOOGLE_CLOUD_PROJECT } "
200205print_success " APIs enabled successfully"
201206
202207# Step 2: Create Workload Identity Pool
203208print_header " Step 2: Creating Workload Identity Pool"
204209if ! gcloud iam workload-identity-pools describe " ${POOL_NAME} " \
205- --project=" ${GCP_PROJECT_ID } " \
206- --location=" global " & > /dev/null; then
210+ --project=" ${GOOGLE_CLOUD_PROJECT } " \
211+ --location=" ${GOOGLE_CLOUD_LOCATION} " & > /dev/null; then
207212 print_info " Creating Workload Identity Pool: ${POOL_NAME} "
208213 gcloud iam workload-identity-pools create " ${POOL_NAME} " \
209- --project=" ${GCP_PROJECT_ID } " \
210- --location=" global " \
214+ --project=" ${GOOGLE_CLOUD_PROJECT } " \
215+ --location=" ${GOOGLE_CLOUD_LOCATION} " \
211216 --display-name=" GitHub Actions Pool"
212217 print_success " Workload Identity Pool created"
213218else
216221
217222# Get the pool ID
218223WIF_POOL_ID=$( gcloud iam workload-identity-pools describe " ${POOL_NAME} " \
219- --project=" ${GCP_PROJECT_ID } " \
220- --location=" global " \
224+ --project=" ${GOOGLE_CLOUD_PROJECT } " \
225+ --location=" ${GOOGLE_CLOUD_LOCATION} " \
221226 --format=" value(name)" )
222227
223228# Step 3: Create Workload Identity Provider
224229print_header " Step 3: Creating Workload Identity Provider"
225230ATTRIBUTE_CONDITION=" assertion.repository_owner == '${REPO_OWNER} '"
226231
227232if ! gcloud iam workload-identity-pools providers describe " ${PROVIDER_NAME} " \
228- --project=" ${GCP_PROJECT_ID } " \
229- --location=" global " \
233+ --project=" ${GOOGLE_CLOUD_PROJECT } " \
234+ --location=" ${GOOGLE_CLOUD_LOCATION} " \
230235 --workload-identity-pool=" ${POOL_NAME} " & > /dev/null; then
231236 print_info " Creating Workload Identity Provider: ${PROVIDER_NAME} "
232237 gcloud iam workload-identity-pools providers create-oidc " ${PROVIDER_NAME} " \
233- --project=" ${GCP_PROJECT_ID } " \
234- --location=" global " \
238+ --project=" ${GOOGLE_CLOUD_PROJECT } " \
239+ --location=" ${GOOGLE_CLOUD_LOCATION} " \
235240 --workload-identity-pool=" ${POOL_NAME} " \
236241 --display-name=" ${PROVIDER_NAME} " \
237242 --attribute-mapping=" google.subject=assertion.sub,attribute.actor=assertion.actor,attribute.repository=assertion.repository,attribute.repository_owner=assertion.repository_owner" \
@@ -250,29 +255,36 @@ print_info "Granting standard CI/CD permissions directly to the Workload Identit
250255
251256# Core observability permissions
252257print_info " Granting logging permissions..."
253- gcloud projects add-iam-policy-binding " ${GCP_PROJECT_ID } " \
258+ gcloud projects add-iam-policy-binding " ${GOOGLE_CLOUD_PROJECT } " \
254259 --role=" roles/logging.logWriter" \
255260 --member=" ${PRINCIPAL_SET} " \
256261 --condition=None
257262
258263print_info " Granting monitoring permissions..."
259- gcloud projects add-iam-policy-binding " ${GCP_PROJECT_ID } " \
264+ gcloud projects add-iam-policy-binding " ${GOOGLE_CLOUD_PROJECT } " \
260265 --role=" roles/monitoring.editor" \
261266 --member=" ${PRINCIPAL_SET} " \
262267 --condition=None
263268
264269print_info " Granting tracing permissions..."
265- gcloud projects add-iam-policy-binding " ${GCP_PROJECT_ID } " \
270+ gcloud projects add-iam-policy-binding " ${GOOGLE_CLOUD_PROJECT } " \
266271 --role=" roles/cloudtrace.agent" \
267272 --member=" ${PRINCIPAL_SET} " \
268273 --condition=None
269274
275+
276+ print_info " Granting vertex permissions..."
277+ gcloud projects add-iam-policy-binding " ${GOOGLE_CLOUD_PROJECT} " \
278+ --role=" roles/aiplatform.user" \
279+ --member=" ${PRINCIPAL_SET} " \
280+ --condition=None
281+
270282print_success " Standard permissions granted to Workload Identity Pool"
271283
272284# Get the full provider name for output
273285WIF_PROVIDER_FULL=$( gcloud iam workload-identity-pools providers describe " ${PROVIDER_NAME} " \
274- --project=" ${GCP_PROJECT_ID } " \
275- --location=" global " \
286+ --project=" ${GOOGLE_CLOUD_PROJECT } " \
287+ --location=" ${GOOGLE_CLOUD_LOCATION} " \
276288 --workload-identity-pool=" ${POOL_NAME} " \
277289 --format=" value(name)" )
278290
@@ -299,7 +311,13 @@ echo "🔑 Variable Name: OTLP_GCP_WIF_PROVIDER"
299311echo " Value: ${WIF_PROVIDER_FULL} "
300312echo " "
301313echo " ☁️ Variable Name: OTLP_GOOGLE_CLOUD_PROJECT"
302- echo " Value: ${GCP_PROJECT_ID} "
314+ echo " Value: ${GOOGLE_CLOUD_PROJECT} "
315+ echo " "
316+ echo " ☁️ Secret Name: GOOGLE_CLOUD_LOCATION"
317+ echo " Secret Value: ${GOOGLE_CLOUD_LOCATION} "
318+ echo " "
319+ echo " ☁️ Secret Name: GOOGLE_CLOUD_PROJECT"
320+ echo " Secret Value: ${GOOGLE_CLOUD_PROJECT} "
303321echo " "
304322
305323print_success " Setup completed successfully! 🚀"
0 commit comments