From c309fbaa983714122845058f8026871df19de7d4 Mon Sep 17 00:00:00 2001 From: Jamie Brunton Date: Sat, 24 Jan 2026 21:21:54 +0000 Subject: [PATCH] Clean up Terraform: remove duplicate workspace-based config - Remove root-level main.tf, variables.tf, outputs.tf, versions.tf (duplicated the module-based approach) - Remove duplicate terraform/templates/ directory - Remove stale terraform.tfvars.example and .terraform.lock.hcl - Remove outdated scripts/import-production.sh - Fix non-prod SMTP error by using merge() to completely omit SMTP fields instead of setting them to null - Update README to remove workspace migration section The environment directories approach (terraform/environments/*) is now the only supported method. Co-Authored-By: Claude Opus 4.5 --- terraform/.terraform.lock.hcl | 25 --- terraform/README.md | 26 --- terraform/main.tf | 275 ------------------------- terraform/modules/supabase/main.tf | 54 +++-- terraform/outputs.tf | 14 -- terraform/scripts/import-production.sh | 51 ----- terraform/templates/confirmation.html | 206 ------------------ terraform/templates/email_change.html | 207 ------------------- terraform/templates/invite.html | 227 -------------------- terraform/templates/magic_link.html | 204 ------------------ terraform/templates/recovery.html | 207 ------------------- terraform/terraform.tfvars.example | 10 - terraform/variables.tf | 68 ------ terraform/versions.tf | 32 --- 14 files changed, 32 insertions(+), 1574 deletions(-) delete mode 100644 terraform/.terraform.lock.hcl delete mode 100644 terraform/main.tf delete mode 100644 terraform/outputs.tf delete mode 100755 terraform/scripts/import-production.sh delete mode 100644 terraform/templates/confirmation.html delete mode 100644 terraform/templates/email_change.html delete mode 100644 terraform/templates/invite.html delete mode 100644 terraform/templates/magic_link.html delete mode 100644 terraform/templates/recovery.html delete mode 100644 terraform/terraform.tfvars.example delete mode 100644 terraform/variables.tf delete mode 100644 terraform/versions.tf diff --git a/terraform/.terraform.lock.hcl b/terraform/.terraform.lock.hcl deleted file mode 100644 index 7460be2..0000000 --- a/terraform/.terraform.lock.hcl +++ /dev/null @@ -1,25 +0,0 @@ -# This file is maintained automatically by "terraform init". -# Manual edits may be lost in future updates. - -provider "registry.terraform.io/supabase/supabase" { - version = "1.6.1" - constraints = "~> 1.0" - hashes = [ - "h1:qQoXMVMdUp4Id9eKYPyTp52t6RchV38rXF10ayMeeNs=", - "zh:115437eb15451558b47984155e6e34fb18d85635f7d57a12f5933aa99231ca90", - "zh:1403a3be401cc746cbfbaac11f2b5f5f492b4a1142441b380895b20a4ca700f1", - "zh:4087e7238f2a1e930f3798c83c5544947f5096803d9132f0694e4036ee6228cc", - "zh:4d9effb75c41409700d325fd715d39cb135f958c7442e32d1686f13928e94de7", - "zh:575dcc18f686fa3aefd40e5f668e075dc2a4b628804b1f0eba0ba2bad299476d", - "zh:5a95fa37e0eb126721c2187dd389f63c09640082cd50cc521a0dfe898eea683c", - "zh:6e20a8faa09627a9ef0b7c9950af7da93c69d682fe3bfd930807db0b58aa59a1", - "zh:757a8da9f8fafcd2aa9ecb9f4cb2773567090313c736ee95d3fa41bd92535538", - "zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f", - "zh:a815c20e132981abbda986b60445f9786bfd5dd3254bcb52d52e9e31cd105a04", - "zh:c665269e5474a7144ec88bb3849dacea2f1c720500e86f84279d4318806044a8", - "zh:da054f0bb9bb7432c4f5c66093262566e99403f5e4a5d72853873359472d7c1c", - "zh:de584088b3d86ec1889dd719406783f9f3698df0a91007741a156f313bf61aa7", - "zh:e83615654ce2c82b1a243c79cc53c29214e7fd81fb286a7e3befb35d5a1c3492", - "zh:ed2f7545a8217ab2eae2cf9447c6b7b1ec660764ae764c08b033f5e3800a5608", - ] -} diff --git a/terraform/README.md b/terraform/README.md index c09973b..5894b63 100644 --- a/terraform/README.md +++ b/terraform/README.md @@ -167,29 +167,3 @@ For team environments, configure a remote backend in each environment's `version - Use GitHub Secrets for CI/CD - OAuth provider credentials are set in Supabase Dashboard, not Terraform -## Migration from Workspace-Based Setup - -If you previously used Terraform workspaces, migrate as follows: - -1. Export state from old setup: - ```bash - cd terraform # old location - terraform workspace select production - terraform state pull > prod.tfstate - terraform workspace select non-production - terraform state pull > non-prod.tfstate - ``` - -2. Import state to new environments: - ```bash - cd environments/prod - terraform init - terraform state push ../../prod.tfstate - - cd ../non-prod - terraform init - terraform state push ../../non-prod.tfstate - ``` - -3. Verify with `terraform plan` in each environment -4. Delete old workspace-based files from terraform root diff --git a/terraform/main.tf b/terraform/main.tf deleted file mode 100644 index 8a21e58..0000000 --- a/terraform/main.tf +++ /dev/null @@ -1,275 +0,0 @@ -# Supabase Project Configuration -# -# This manages the configuration for Sauci Supabase projects. -# Uses Terraform workspaces to manage multiple environments: -# - production: ckjcrkjpmhqhiucifukx -# - non-production: itbzhrvlgvdmzbnhzhyx -# -# Usage: -# terraform workspace select production -# terraform plan -# -# To import settings for a new workspace: -# terraform workspace new -# terraform import supabase_settings.main - -# Project settings - API, Auth, Network, Storage configuration -resource "supabase_settings" "main" { - project_ref = local.project_ref - - # API Settings - api = jsonencode({ - db_schema = "public,graphql_public" - db_extra_search_path = "public, extensions" - max_rows = 1000 - }) - - # Auth Settings - auth = jsonencode({ - # Site URL and redirects - site_url = "https://sauci.app" - uri_allow_list = "app.sauci://**,app.sauci://(auth)/login" - - # Signup and auth settings - disable_signup = false - external_anonymous_users_enabled = true - external_email_enabled = true - external_phone_enabled = false - - # OAuth providers - external_google_enabled = true - external_google_client_id = "764866133492-57iilbc72t1urtmurgioci9tne5l6j67.apps.googleusercontent.com,764866133492-4g566mrb8tm5uti4ejub6oogcvnln7kc.apps.googleusercontent.com,764866133492-e78o2rh3rdjc4rfj2j6r2j77b065kggm.apps.googleusercontent.com" - external_google_email_optional = false - external_google_skip_nonce_check = false - - external_apple_enabled = true - external_apple_client_id = "com.sauci.app" - external_apple_email_optional = false - - # Disabled OAuth providers (with email_optional settings) - external_azure_enabled = false - external_azure_email_optional = false - external_bitbucket_enabled = false - external_bitbucket_email_optional = false - external_discord_enabled = false - external_discord_email_optional = false - external_facebook_enabled = false - external_facebook_email_optional = false - external_figma_enabled = false - external_figma_email_optional = false - external_github_enabled = false - external_github_email_optional = false - external_gitlab_enabled = false - external_gitlab_email_optional = false - external_kakao_enabled = false - external_kakao_email_optional = false - external_keycloak_enabled = false - external_keycloak_email_optional = false - external_linkedin_oidc_enabled = false - external_linkedin_oidc_email_optional = false - external_notion_enabled = false - external_notion_email_optional = false - external_slack_enabled = false - external_slack_email_optional = false - external_slack_oidc_enabled = false - external_slack_oidc_email_optional = false - external_spotify_enabled = false - external_spotify_email_optional = false - external_twitch_enabled = false - external_twitch_email_optional = false - external_twitter_enabled = false - external_twitter_email_optional = false - external_workos_enabled = false - external_zoom_enabled = false - external_zoom_email_optional = false - external_web3_ethereum_enabled = false - external_web3_solana_enabled = false - - # JWT settings - jwt_exp = 3600 - refresh_token_rotation_enabled = true - security_refresh_token_reuse_interval = 10 - - # Session settings - sessions_inactivity_timeout = 0 - sessions_single_per_user = false - sessions_timebox = 0 - - # API settings - api_max_request_duration = 10 - db_max_pool_size = 10 - db_max_pool_size_unit = "connections" - - # Password settings - password_min_length = 6 - password_hibp_enabled = false - - # Rate limits (rate_limit_email_sent requires custom SMTP in production) - rate_limit_anonymous_users = 30 - rate_limit_email_sent = local.is_production ? 25 : 3 - rate_limit_otp = 30 - rate_limit_sms_sent = 30 - rate_limit_token_refresh = 150 - rate_limit_verify = 30 - rate_limit_web3 = 30 - - # MFA settings - mfa_max_enrolled_factors = 10 - mfa_totp_enroll_enabled = true - mfa_totp_verify_enabled = true - mfa_phone_enroll_enabled = false - mfa_phone_verify_enabled = false - mfa_phone_max_frequency = 5 - mfa_phone_otp_length = 6 - mfa_phone_template = "Your code is {{ .Code }}" - mfa_web_authn_enroll_enabled = false - mfa_web_authn_verify_enabled = false - - # SAML - saml_enabled = false - - # Security settings - security_captcha_enabled = false - security_captcha_provider = "hcaptcha" - security_manual_linking_enabled = true - security_update_password_require_reauthentication = false - - # Email/mailer settings - mailer_autoconfirm = false - mailer_allow_unverified_email_sign_ins = false - mailer_secure_email_change_enabled = true - mailer_otp_exp = 3600 - mailer_otp_length = 8 - - # Mailer notifications - mailer_notifications_email_changed_enabled = false - mailer_notifications_identity_linked_enabled = false - mailer_notifications_identity_unlinked_enabled = false - mailer_notifications_mfa_factor_enrolled_enabled = false - mailer_notifications_mfa_factor_unenrolled_enabled = false - mailer_notifications_password_changed_enabled = false - mailer_notifications_phone_changed_enabled = false - - # Email subjects - mailer_subjects_confirmation = "Confirm Your Signup" - mailer_subjects_email_change = "sauci@jbrunton.co.uk" - mailer_subjects_email_changed_notification = "Your email address has been changed" - mailer_subjects_identity_linked_notification = "A new identity has been linked" - mailer_subjects_identity_unlinked_notification = "An identity has been unlinked" - mailer_subjects_invite = "You have been invited" - mailer_subjects_magic_link = "Your Magic Link" - mailer_subjects_mfa_factor_enrolled_notification = "A new MFA factor has been enrolled" - mailer_subjects_mfa_factor_unenrolled_notification = "An MFA factor has been unenrolled" - mailer_subjects_password_changed_notification = "Your password has been changed" - mailer_subjects_phone_changed_notification = "Your phone number has been changed" - mailer_subjects_reauthentication = "Confirm Reauthentication" - mailer_subjects_recovery = "Reset Your Password" - - # Email templates (see templates/ directory for full HTML) - mailer_templates_confirmation_content = file("${path.module}/templates/confirmation.html") - mailer_templates_email_change_content = file("${path.module}/templates/email_change.html") - mailer_templates_invite_content = file("${path.module}/templates/invite.html") - mailer_templates_magic_link_content = file("${path.module}/templates/magic_link.html") - mailer_templates_recovery_content = file("${path.module}/templates/recovery.html") - mailer_templates_reauthentication_content = "Enter the code: {{ .Token }}" - - # Notification templates (simple HTML) - mailer_templates_email_changed_notification_content = <<-EOT -

Your email address has been changed

-

The email address for your account has been changed from {{ .OldEmail }} to {{ .Email }}.

-

If you did not make this change, please contact support.

- EOT - mailer_templates_identity_linked_notification_content = <<-EOT -

A new identity has been linked

-

A new identity ({{ .Provider }}) has been linked to your account {{ .Email }}.

-

If you did not make this change, please contact support immediately.

- EOT - mailer_templates_identity_unlinked_notification_content = <<-EOT -

An identity has been unlinked

-

An identity ({{ .Provider }}) has been unlinked from your account {{ .Email }}.

-

If you did not make this change, please contact support immediately.

- EOT - mailer_templates_mfa_factor_enrolled_notification_content = <<-EOT -

A new MFA factor has been enrolled

-

A new factor ({{ .FactorType }}) has been enrolled for your account {{ .Email }}.

-

If you did not make this change, please contact support immediately.

- EOT - mailer_templates_mfa_factor_unenrolled_notification_content = <<-EOT -

An MFA factor has been unenrolled

-

A factor ({{ .FactorType }}) has been unenrolled for your account {{ .Email }}.

-

If you did not make this change, please contact support immediately.

- EOT - mailer_templates_password_changed_notification_content = <<-EOT -

Your password has been changed

-

This is a confirmation that the password for your account {{ .Email }} has just been changed.

-

If you did not make this change, please contact support.

- EOT - mailer_templates_phone_changed_notification_content = <<-EOT -

Your phone number has been changed

-

The phone number for your account {{ .Email }} has been changed from {{ .OldPhone }} to {{ .Phone }}.

-

If you did not make this change, please contact support immediately.

- EOT - - # SMS settings - sms_autoconfirm = false - sms_max_frequency = 5 - sms_otp_exp = 60 - sms_otp_length = 6 - sms_provider = "twilio" - sms_template = "Your code is {{ .Code }}" - - # SMTP settings (only for production - requires custom SMTP configured) - smtp_admin_email = local.is_production ? "team@send.sauci.app" : null - smtp_host = local.is_production ? "smtp.resend.com" : null - smtp_max_frequency = local.is_production ? 1 : null - smtp_port = local.is_production ? "465" : null - smtp_sender_name = local.is_production ? "Sauci App" : null - smtp_user = local.is_production ? "resend" : null - - # Hook settings (only include hooks available on current plan) - hook_after_user_created_enabled = false - hook_before_user_created_enabled = false - hook_custom_access_token_enabled = false - hook_send_email_enabled = false - hook_send_sms_enabled = false - # Note: hook_mfa_verification_attempt and hook_password_verification_attempt - # require Team plan or higher - omitted to avoid 402 errors - }) - - # Database Settings (empty - managed via migrations) - database = jsonencode({}) - - # Network Settings - network = jsonencode({ - restrictions = ["0.0.0.0/0", "::/0"] - }) - - # Storage Settings - storage = jsonencode({ - fileSizeLimit = 52428800 # 50MB - databasePoolMode = "recycled" - migrationVersion = "buckets-objects-grants-postgres" - capabilities = { - iceberg_catalog = true - list_v2 = true - } - features = { - imageTransformation = { enabled = true } - s3Protocol = { enabled = true } - icebergCatalog = { - enabled = true - maxCatalogs = 2 - maxNamespaces = 10 - maxTables = 10 - } - vectorBuckets = { - enabled = false - maxBuckets = 10 - maxIndexes = 5 - } - } - external = { - upstreamTarget = "canary" - } - }) -} diff --git a/terraform/modules/supabase/main.tf b/terraform/modules/supabase/main.tf index 08eb2d6..3be8c64 100644 --- a/terraform/modules/supabase/main.tf +++ b/terraform/modules/supabase/main.tf @@ -3,18 +3,9 @@ # This module manages Supabase project settings including API, Auth, Network, and Storage. # Environment-specific settings (SMTP, rate limits) are controlled via input variables. -resource "supabase_settings" "main" { - project_ref = var.project_ref - - # API Settings - api = jsonencode({ - db_schema = "public,graphql_public" - db_extra_search_path = "public, extensions" - max_rows = 1000 - }) - - # Auth Settings - auth = jsonencode({ +# Base auth settings (shared across all environments) +locals { + auth_base = { # Site URL and redirects site_url = "https://sauci.app" uri_allow_list = "app.sauci://**,app.sauci://(auth)/login" @@ -93,9 +84,8 @@ resource "supabase_settings" "main" { password_min_length = 6 password_hibp_enabled = false - # Rate limits (rate_limit_email_sent requires custom SMTP in production) + # Rate limits (NOT including rate_limit_email_sent - requires custom SMTP) rate_limit_anonymous_users = 30 - rate_limit_email_sent = var.is_production ? 25 : 3 rate_limit_otp = 30 rate_limit_sms_sent = 30 rate_limit_token_refresh = 150 @@ -207,14 +197,6 @@ resource "supabase_settings" "main" { sms_provider = "twilio" sms_template = "Your code is {{ .Code }}" - # SMTP settings (only for production - requires custom SMTP configured) - smtp_admin_email = var.is_production ? "team@send.sauci.app" : null - smtp_host = var.is_production ? "smtp.resend.com" : null - smtp_max_frequency = var.is_production ? 1 : null - smtp_port = var.is_production ? "465" : null - smtp_sender_name = var.is_production ? "Sauci App" : null - smtp_user = var.is_production ? "resend" : null - # Hook settings (only include hooks available on current plan) hook_after_user_created_enabled = false hook_before_user_created_enabled = false @@ -223,8 +205,36 @@ resource "supabase_settings" "main" { hook_send_sms_enabled = false # Note: hook_mfa_verification_attempt and hook_password_verification_attempt # require Team plan or higher - omitted to avoid 402 errors + } + + # Production-only SMTP settings (completely omitted for non-prod) + auth_smtp = var.is_production ? { + smtp_admin_email = "team@send.sauci.app" + smtp_host = "smtp.resend.com" + smtp_max_frequency = 1 + smtp_port = "465" + smtp_sender_name = "Sauci App" + smtp_user = "resend" + rate_limit_email_sent = 25 + } : {} + + # Final merged auth config + auth_config = merge(local.auth_base, local.auth_smtp) +} + +resource "supabase_settings" "main" { + project_ref = var.project_ref + + # API Settings + api = jsonencode({ + db_schema = "public,graphql_public" + db_extra_search_path = "public, extensions" + max_rows = 1000 }) + # Auth Settings (merged from base + production SMTP if applicable) + auth = jsonencode(local.auth_config) + # Database Settings (empty - managed via migrations) database = jsonencode({}) diff --git a/terraform/outputs.tf b/terraform/outputs.tf deleted file mode 100644 index 0d8cb42..0000000 --- a/terraform/outputs.tf +++ /dev/null @@ -1,14 +0,0 @@ -output "workspace" { - description = "Current Terraform workspace" - value = terraform.workspace -} - -output "project_ref" { - description = "Supabase project reference" - value = local.project_ref -} - -output "project_url" { - description = "Supabase project URL" - value = "https://${local.project_ref}.supabase.co" -} diff --git a/terraform/scripts/import-production.sh b/terraform/scripts/import-production.sh deleted file mode 100755 index 8a10c11..0000000 --- a/terraform/scripts/import-production.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash -set -e - -# Import existing Supabase production settings into Terraform state -# This script helps extract current configuration for IaC management -# -# Prerequisites: -# 1. Set SUPABASE_ACCESS_TOKEN environment variable -# 2. Run from the terraform directory - -PROJECT_REF="ckjcrkjpmhqhiucifukx" - -echo "=== Supabase Terraform Import Script ===" -echo "" - -# Check for access token -if [ -z "$SUPABASE_ACCESS_TOKEN" ]; then - echo "Error: SUPABASE_ACCESS_TOKEN environment variable is not set" - echo "" - echo "Get your token from: https://supabase.com/dashboard/account/tokens" - echo "Then run: export SUPABASE_ACCESS_TOKEN=sbp_xxxxx" - exit 1 -fi - -# Export for Terraform -export TF_VAR_supabase_access_token="$SUPABASE_ACCESS_TOKEN" - -echo "1. Initializing Terraform..." -terraform init - -echo "" -echo "2. Importing production settings..." -echo " Project: $PROJECT_REF" -echo "" - -# Import settings (will fail if already imported, that's OK) -terraform import supabase_settings.production "$PROJECT_REF" 2>/dev/null || echo " (Settings may already be imported)" - -echo "" -echo "3. Showing current state..." -echo "" -terraform show - -echo "" -echo "=== Import Complete ===" -echo "" -echo "Next steps:" -echo "1. Review the terraform show output above" -echo "2. Update main.tf to match your actual production settings" -echo "3. Run 'terraform plan' to verify no changes are needed" -echo "4. Commit the updated main.tf" diff --git a/terraform/templates/confirmation.html b/terraform/templates/confirmation.html deleted file mode 100644 index bbd33ec..0000000 --- a/terraform/templates/confirmation.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - - - - Confirm Your Email - Sauci - - - - -
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - diff --git a/terraform/templates/email_change.html b/terraform/templates/email_change.html deleted file mode 100644 index 109655d..0000000 --- a/terraform/templates/email_change.html +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - - - - Confirm Email Change - Sauci - - - - -
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - diff --git a/terraform/templates/invite.html b/terraform/templates/invite.html deleted file mode 100644 index 84eb6b5..0000000 --- a/terraform/templates/invite.html +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - - - - You're Invited to Sauci - - - - -
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - diff --git a/terraform/templates/magic_link.html b/terraform/templates/magic_link.html deleted file mode 100644 index ff84c7e..0000000 --- a/terraform/templates/magic_link.html +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - - - - Sign In to Sauci - - - - -
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - diff --git a/terraform/templates/recovery.html b/terraform/templates/recovery.html deleted file mode 100644 index 5f933aa..0000000 --- a/terraform/templates/recovery.html +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - - - - Reset Your Password - Sauci - - - - -
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - diff --git a/terraform/terraform.tfvars.example b/terraform/terraform.tfvars.example deleted file mode 100644 index e47a0c9..0000000 --- a/terraform/terraform.tfvars.example +++ /dev/null @@ -1,10 +0,0 @@ -# Copy this file to terraform.tfvars and fill in your values -# NEVER commit terraform.tfvars to git! - -supabase_access_token = "sbp_xxxxxxxxxxxxxxxxxxxx" - -# OAuth provider credentials (optional - can also be set in Supabase dashboard) -# google_client_id = "" -# google_client_secret = "" -# apple_client_id = "" -# apple_client_secret = "" diff --git a/terraform/variables.tf b/terraform/variables.tf deleted file mode 100644 index 512ca21..0000000 --- a/terraform/variables.tf +++ /dev/null @@ -1,68 +0,0 @@ -variable "supabase_access_token" { - description = "Supabase API access token" - type = string - sensitive = true -} - -# Project refs per environment (selected by workspace) -locals { - project_refs = { - production = "ckjcrkjpmhqhiucifukx" - non-production = "itbzhrvlgvdmzbnhzhyx" - default = "itbzhrvlgvdmzbnhzhyx" # Default workspace uses non-prod - } - - # Select project_ref based on current workspace - project_ref = lookup(local.project_refs, terraform.workspace, local.project_refs["default"]) - - # Environment detection - is_production = terraform.workspace == "production" - - # SMTP settings (only production has custom SMTP configured) - smtp_settings = local.is_production ? { - smtp_admin_email = "team@send.sauci.app" - smtp_host = "smtp.resend.com" - smtp_max_frequency = 1 - smtp_port = "465" - smtp_sender_name = "Sauci App" - smtp_user = "resend" - } : {} - - # Rate limit for email (requires custom SMTP in production) - rate_limit_email_sent = local.is_production ? 25 : 3 -} - -variable "project_ref" { - description = "Supabase project reference ID (overrides workspace-based selection)" - type = string - default = "" -} - -# Auth provider secrets (stored in Supabase dashboard, referenced here for documentation) -variable "google_client_id" { - description = "Google OAuth client ID" - type = string - sensitive = true - default = "" -} - -variable "google_client_secret" { - description = "Google OAuth client secret" - type = string - sensitive = true - default = "" -} - -variable "apple_client_id" { - description = "Apple OAuth client ID (Services ID)" - type = string - sensitive = true - default = "" -} - -variable "apple_client_secret" { - description = "Apple OAuth client secret (JWT)" - type = string - sensitive = true - default = "" -} diff --git a/terraform/versions.tf b/terraform/versions.tf deleted file mode 100644 index 7c58be0..0000000 --- a/terraform/versions.tf +++ /dev/null @@ -1,32 +0,0 @@ -terraform { - required_version = ">= 1.0" - - required_providers { - supabase = { - source = "supabase/supabase" - version = "~> 1.0" - } - } - - # Store state remotely (recommended for team environments) - # Uncomment and configure one of these backends: - - # Option 1: Terraform Cloud - # cloud { - # organization = "your-org" - # workspaces { - # name = "sauci-production" - # } - # } - - # Option 2: S3 backend - # backend "s3" { - # bucket = "your-terraform-state-bucket" - # key = "sauci/production/terraform.tfstate" - # region = "us-east-1" - # } -} - -provider "supabase" { - access_token = var.supabase_access_token -}