Skip to content

Commit 48858c0

Browse files
committed
feat: Add secret manager import handling to GitHub Actions and PowerShell script
1 parent c2235a5 commit 48858c0

File tree

3 files changed

+88
-1
lines changed

3 files changed

+88
-1
lines changed

.github/workflows/terraform.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,26 @@ jobs:
4848
run: terraform validate -no-color
4949
working-directory: ./terraform
5050

51+
- name: 'Handle Existing Secret Manager Resources'
52+
id: import_secrets
53+
run: |
54+
# Check if the secret exists and try to import it if needed
55+
if gcloud secrets describe gemini-api-key --project=${{ secrets.GCP_PROJECT_ID }} >/dev/null 2>&1; then
56+
echo "Secret gemini-api-key already exists, attempting to import..."
57+
terraform import google_secret_manager_secret.gemini_api_key projects/${{ secrets.GCP_PROJECT_ID }}/secrets/gemini-api-key || echo "Import failed or resource already in state"
58+
59+
# Try to import the secret version if it exists
60+
VERSION_ID=$(gcloud secrets versions list gemini-api-key --project=${{ secrets.GCP_PROJECT_ID }} --limit=1 --format="value(name)" 2>/dev/null || echo "")
61+
if [ ! -z "$VERSION_ID" ]; then
62+
echo "Attempting to import secret version..."
63+
terraform import google_secret_manager_secret_version.gemini_api_key_version projects/${{ secrets.GCP_PROJECT_ID }}/secrets/gemini-api-key/versions/$VERSION_ID || echo "Version import failed or already in state"
64+
fi
65+
else
66+
echo "Secret gemini-api-key does not exist, will be created by Terraform"
67+
fi
68+
working-directory: ./terraform
69+
continue-on-error: true
70+
5171
- name: 'Terraform Plan'
5272
id: plan
5373
run: terraform plan -no-color -input=false -out=tfplan

scripts/handle-secret-import.ps1

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# PowerShell script to handle Secret Manager import for local development
2+
# This script mirrors the logic in the GitHub Actions workflow
3+
4+
param(
5+
[Parameter(Mandatory=$true)]
6+
[string]$ProjectId
7+
)
8+
9+
Write-Host "Checking for existing Secret Manager resources..." -ForegroundColor Green
10+
11+
# Change to terraform directory
12+
Set-Location "h:\My Drive\Github\Agentic Data Science\terraform"
13+
14+
try {
15+
# Check if the secret exists
16+
$secretExists = $false
17+
try {
18+
gcloud secrets describe gemini-api-key --project=$ProjectId 2>$null
19+
if ($LASTEXITCODE -eq 0) {
20+
$secretExists = $true
21+
Write-Host "Secret 'gemini-api-key' already exists" -ForegroundColor Yellow
22+
}
23+
}
24+
catch {
25+
Write-Host "Secret 'gemini-api-key' does not exist" -ForegroundColor Green
26+
}
27+
28+
if ($secretExists) {
29+
Write-Host "Attempting to import existing secret..." -ForegroundColor Yellow
30+
31+
# Try to import the secret
32+
try {
33+
terraform import google_secret_manager_secret.gemini_api_key "projects/$ProjectId/secrets/gemini-api-key"
34+
Write-Host "Successfully imported secret" -ForegroundColor Green
35+
}
36+
catch {
37+
Write-Host "Secret import failed or resource already in state: $($_.Exception.Message)" -ForegroundColor Yellow
38+
}
39+
40+
# Try to import the secret version
41+
try {
42+
$versionId = gcloud secrets versions list gemini-api-key --project=$ProjectId --limit=1 --format="value(name)" 2>$null
43+
if ($versionId -and $LASTEXITCODE -eq 0) {
44+
Write-Host "Attempting to import secret version: $versionId" -ForegroundColor Yellow
45+
terraform import google_secret_manager_secret_version.gemini_api_key_version "projects/$ProjectId/secrets/gemini-api-key/versions/$versionId"
46+
Write-Host "Successfully imported secret version" -ForegroundColor Green
47+
}
48+
}
49+
catch {
50+
Write-Host "Secret version import failed or already in state: $($_.Exception.Message)" -ForegroundColor Yellow
51+
}
52+
} else {
53+
Write-Host "Secret does not exist - Terraform will create it" -ForegroundColor Green
54+
}
55+
56+
Write-Host "`nRunning Terraform plan to check configuration..." -ForegroundColor Green
57+
terraform plan -no-color
58+
59+
} catch {
60+
Write-Error "Error occurred: $($_.Exception.Message)"
61+
exit 1
62+
}
63+
64+
Write-Host "`nSecret Manager import process completed!" -ForegroundColor Green

terraform/main.tf

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,10 @@ resource "google_secret_manager_secret" "gemini_api_key" {
193193
auto {}
194194
}
195195

196-
depends_on = [google_project_service.required_apis]
196+
depends_on = [
197+
google_project_service.required_apis,
198+
google_project_iam_member.github_actions_roles
199+
]
197200
}
198201

199202
# Secret version for Gemini API key

0 commit comments

Comments
 (0)