From ff97476eaf6133203a5d2addc72513cea5847f24 Mon Sep 17 00:00:00 2001 From: Brian Helba Date: Fri, 30 Jan 2026 11:33:33 -0500 Subject: [PATCH] Add Terraform to manage the frontend deployment --- terraform/main.tf | 7 ++++++ terraform/www.tf | 55 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 terraform/www.tf diff --git a/terraform/main.tf b/terraform/main.tf index 89f43d97..9c5a3d52 100644 --- a/terraform/main.tf +++ b/terraform/main.tf @@ -16,6 +16,10 @@ terraform { heroku = { source = "heroku/heroku" } + cloudflare = { + source = "cloudflare/cloudflare" + version = "~> 4.0" + } } } @@ -26,3 +30,6 @@ provider "aws" { provider "heroku" { # Must set HEROKU_EMAIL, HEROKU_API_KEY envvars } +provider "cloudflare" { + # Must set CLOUDFLARE_API_TOKEN envvars +} diff --git a/terraform/www.tf b/terraform/www.tf new file mode 100644 index 00000000..64423c97 --- /dev/null +++ b/terraform/www.tf @@ -0,0 +1,55 @@ +locals { + www_env_vars = { + VITE_APP_API_ROOT = "https://${module.django.fqdn}" + VITE_APP_LOGIN_REDIRECT = "https://${module.django.fqdn}/" + } +} + +data "cloudflare_accounts" "this" { + name = "Kitware" +} + +resource "cloudflare_pages_project" "www" { + account_id = data.cloudflare_accounts.this.accounts[0].id + name = "bats-ai" + production_branch = "master" + + source { + type = "github" + config { + production_branch = "master" + owner = "Kitware" + repo_name = "batai" + } + } + + build_config { + build_caching = true + root_dir = "client" + build_command = "npm run build" + destination_dir = "dist" + } + + deployment_configs { + preview { + environment_variables = local.www_env_vars + } + production { + environment_variables = local.www_env_vars + } + } +} + +resource "cloudflare_pages_domain" "www" { + account_id = data.cloudflare_accounts.this.accounts[0].id + project_name = cloudflare_pages_project.www.name + domain = aws_route53_record.www.fqdn +} + +resource "aws_route53_record" "www" { + zone_id = data.aws_route53_zone.this.zone_id + name = "www" + type = "CNAME" + ttl = 300 + records = [cloudflare_pages_project.www.subdomain] +}