Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions terraform/apps/outputs.tf
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
}
73 changes: 73 additions & 0 deletions terraform/apps/personal-site-2026.tf
Original file line number Diff line number Diff line change
@@ -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
}
31 changes: 31 additions & 0 deletions terraform/outputs.tf
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Loading