diff --git a/terraform/apps/outputs.tf b/terraform/apps/outputs.tf index b5233ef..97490e7 100644 --- a/terraform/apps/outputs.tf +++ b/terraform/apps/outputs.tf @@ -310,3 +310,40 @@ output "mocktail_required_dns" { description = "DNS records required at the registrar to verify and serve the custom domain" value = google_firebase_hosting_custom_domain.mocktail.required_dns_updates } + +# ── Personal Site 2026 Outputs ────────────────────────────── +output "personal_site_2026_wif_provider" { + description = "WIF_PROVIDER for personal-site-2026 repo GitHub secrets" + value = module.personal_site_identity.wif_provider +} + +output "personal_site_2026_gcp_sa_email" { + description = "GCP_SA_EMAIL for personal-site-2026 repo GitHub secrets" + value = module.personal_site_identity.ci_cd_sa_email +} + +output "personal_site_2026_cloud_run_url" { + description = "Cloud Run service URL" + value = module.personal_site_cloud_run.service_url +} + +output "personal_site_2026_hosting_url" { + description = "Firebase Hosting URL" + value = module.personal_site_hosting.site_url +} + +output "personal_site_2026_custom_domains" { + description = "Custom domains for personal-site-2026 (apex serves, www redirects)" + value = { + apex = google_firebase_hosting_custom_domain.personal_site_apex.custom_domain + www = google_firebase_hosting_custom_domain.personal_site_www.custom_domain + } +} + +output "personal_site_2026_required_dns" { + description = "DNS records to add at the registrar for junaid.guru and www.junaid.guru" + value = { + apex = google_firebase_hosting_custom_domain.personal_site_apex.required_dns_updates + www = google_firebase_hosting_custom_domain.personal_site_www.required_dns_updates + } +} diff --git a/terraform/apps/personal-site-2026.tf b/terraform/apps/personal-site-2026.tf new file mode 100644 index 0000000..086552a --- /dev/null +++ b/terraform/apps/personal-site-2026.tf @@ -0,0 +1,73 @@ +# ───────────────────────────────────────────────────────────── +# Personal Site 2026 — Deno/Fresh SSR portfolio +# ───────────────────────────────────────────────────────────── +# Firebase Hosting fronts a single Cloud Run service that +# server-renders every route. The Hosting CDN honours the app's +# stale-while-revalidate Cache-Control headers (utils/cache.ts); +# /_fresh/ assets stay immutable. No database — pure SSR. +# +# Fast cold start comes from startup_cpu_boost (hardcoded on in the +# cloud-run module) + the compiled Deno binary, not from steady-state +# CPU. So we keep the 1 vCPU default. Scales to zero, capped at 1. +# ───────────────────────────────────────────────────────────── + +module "personal_site_identity" { + source = "../modules/app-identity" + + project_id = var.project_id + app_name = "personal-site-2026" + github_org = var.github_org + github_repo = "personal-site-2026" + wif_pool_id = var.wif_pool_id + wif_pool_name = var.wif_pool_name + + runtime_roles = [ + "roles/logging.logWriter", + "roles/monitoring.metricWriter", + "roles/cloudtrace.agent", + ] +} + +module "personal_site_hosting" { + source = "../modules/hosting" + + project_id = var.project_id + site_id = "personal-site-2026" +} + +module "personal_site_cloud_run" { + source = "../modules/cloud-run" + + project_id = var.project_id + region = var.region + service_name = "personal-site-2026" + service_account_email = module.personal_site_identity.runtime_sa_email + + max_instances = 1 + health_path = "/" + + depends_on = [module.personal_site_identity] +} + +# ── Custom Domains ────────────────────────────────────────── +# Apex serves the site; www 301-redirects to the apex so there is +# one canonical host. Both need DNS records at the registrar — +# see the personal_site_2026_required_dns output. +resource "google_firebase_hosting_custom_domain" "personal_site_apex" { + provider = google-beta + project = var.project_id + site_id = module.personal_site_hosting.site_id + custom_domain = "junaid.guru" + + wait_dns_verification = false +} + +resource "google_firebase_hosting_custom_domain" "personal_site_www" { + provider = google-beta + project = var.project_id + site_id = module.personal_site_hosting.site_id + custom_domain = "www.junaid.guru" + redirect_target = "junaid.guru" + + wait_dns_verification = false +} \ No newline at end of file diff --git a/terraform/outputs.tf b/terraform/outputs.tf index e774038..fd96429 100644 --- a/terraform/outputs.tf +++ b/terraform/outputs.tf @@ -322,3 +322,34 @@ output "mocktail_required_dns" { description = "DNS records required at the registrar to verify and serve the mocktail custom domain" value = module.apps.mocktail_required_dns } + +# ── personal-site-2026 ────────────────────────────────────── +output "personal_site_2026_wif_provider" { + description = "WIF_PROVIDER for personal-site-2026 repo GitHub secrets" + value = module.apps.personal_site_2026_wif_provider +} + +output "personal_site_2026_gcp_sa_email" { + description = "GCP_SA_EMAIL for personal-site-2026 repo GitHub secrets" + value = module.apps.personal_site_2026_gcp_sa_email +} + +output "personal_site_2026_cloud_run_url" { + description = "personal-site-2026 Cloud Run URL" + value = module.apps.personal_site_2026_cloud_run_url +} + +output "personal_site_2026_hosting_url" { + description = "personal-site-2026 Firebase Hosting URL" + value = module.apps.personal_site_2026_hosting_url +} + +output "personal_site_2026_custom_domains" { + description = "personal-site-2026 custom domains (apex serves, www redirects)" + value = module.apps.personal_site_2026_custom_domains +} + +output "personal_site_2026_required_dns" { + description = "DNS records to add at the registrar for junaid.guru and www.junaid.guru" + value = module.apps.personal_site_2026_required_dns +}