Repository navigation
Point apex DNS at Render landing site - #634
Merged
Merged
Conversation
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes — Reviewed the apex DNS cutover, its Terraform state move, validation, verification script, and operator instructions.
- Apex record: Replaces the unproxied A record with a flattened CNAME to the Render landing hostname while preserving the Terraform instance through a
movedblock. - Cutover checks: Compares the apex A answers with the Render target, verifies the
appandwwwCNAMEs, and retains comparisons for mail and verification records. - Operator guidance: Documents the Render targets, required custom domains, plan review, and post-apply DNS and certificate checks.
GPT Sol | 𝕏
|
thomasluizon
added a commit
that referenced
this pull request
Sep 28, 2026
…) (#635) * Guard web service Terraform plans before apply (#631) * Guard Terraform web service updates before apply * Guard Terraform web service replacement and deletion (cherry picked from commit 7a1e26a) * Add manual API release workflow for production and staging (#632) (cherry picked from commit 498015a) * Add Amazon SES delivery and signed event handling (#628) * Add SES identities, DNS, and delivery infrastructure * Add SES sender and signed SNS event handling * Classify SES webhook and clarify email contract * Fix SES cutover controls and webhook verification * Extract shared email composition for SES and Resend * Isolate staging SES events and sender credentials * Escape interpolated names in the SES isolation test patterns CodeQL js/incomplete-hostname-regexp flagged the tuple values flowing into new RegExp; every interpolated value is now escaped as a literal. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit f770b47) * Keep staging awake and reseed its free database (#626) * Add staging keepalive and database reseed lifecycle * Document and strengthen staging seed command * Keep Terraform plan details out of workflow logs * Require successful health responses in staging workflows * Parse Render creation time portably * Isolate staging database state and gate reseed on deploy * Read the staging database id from the main state before moving it Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Correlate staging reseed deploy with live commit --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit ee40ae9) * fix: point apex DNS at Render landing site (#634) (cherry picked from commit 65d355f) * Move uploads to private S3 with stable read links (#625) * Add configurable S3 upload signing * Provision private S3 upload buckets and scoped credentials * Expose storage provider cutover as Terraform variables * Add stable read redirects for private S3 uploads * Map public upload reads in agent catalog * Fix upload read validation and S3 bucket safeguards * Keep S3 upload reads available across provider rollback * Bound anonymous upload reads per client IP (cherry picked from commit 395239f) * Fix Render database names in API connection strings (#633) * fix: derive Render database names from connection URLs * Generate the staging database name pattern with a match timeout SonarCloud S6444 and SYSLIB1045 on the seed target check: the pattern is now a GeneratedRegex with a one second timeout. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 0fd416f) * Complete carried error copy and generated gating matrix * Keep SES event notifications recoverable (#746) --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.




Closes thomasluizon/orbit-tickets#824
Change
The apex record in
infra/cloudflare.tfis now an unproxied CNAME todns_apex_target. A Terraformmovedblock carries the existingapex_astate entry toapex_cname, so the type change is one planned replacement.infra/variables.tfdefaults the target toorbit-landing-aaa7.onrender.comand validates it as a hostname. No other DNS record definitions changed.infra/check-dns-cutover.shverifies the flattened apex A answers against Render's target, checks the existing Render CNAMEs forappandwww, and compares the remaining records with Spaceship.infra/README.mdrecords the cutover domain values and verification steps. This keeps the current email and verification records under the existing comparison.Test evidence
terraform fmt -check -recursive infra,terraform -chdir=infra validate,bash -n infra/check-dns-cutover.sh, andgit diff --checkpassed.-refresh=falseand placeholder provider tokens showed onlycloudflare_dns_record.existing["apex_cname"]replacing the movedapex_aentry: 1 add, 0 change, 1 destroy.terraform -chdir=infra show -json local-apex.tfplan | node infra/check-web-plan.mjspassed.aws_sns_topic_subscription.ses_events_staging_apiand updates to Render resources. A refreshed live plan could not complete becauseRENDER_API_KEYandCLOUDFLARE_API_TOKENwere unavailable in this shell. The apex-only acceptance criterion still needs a clean refreshed plan before apply.bash infra/check-dns-cutover.sh tom.ns.cloudflare.comfailed only for the apex: Cloudflare returned216.198.79.1while the Render target returned216.24.57.16and216.24.57.18.node --test infra/check-web-plan.test.mjs infra/ses-isolation.test.mjspassed all 9 tests.dotnet build Orbit.slnxcompleted with 0 errors.dotnet test --no-buildpassed all 6,830 tests.dig orbit-landing-aaa7.onrender.com A +noall +answer: two CNAME lines followed byIN A 216.24.57.18andIN A 216.24.57.16lines.dig @tom.ns.cloudflare.com app.useorbit.org CNAME +shortreturnedorbit-web-3qmv.onrender.com.and the equivalentwwwquery returnedorbit-landing-aaa7.onrender.com.. Repeating those commands rechecks the parsed fields and trailing dot.Assumptions
landing_custom_domainslists onlyuseorbit.orgbecause Render addswww.useorbit.orgas a redirect automatically; listingwwwseparately was rejected. See Render custom domains.dns_app_targetanddns_www_targetfollow the current authoritative Cloudflare answers; retaining the Vercel defaults as cutover values was rejected.movedblock preserves the managed record address across the key rename; a manual state move was rejected.Manual steps
infra/local.tfvarsfile used for the cutover, setdns_apex_target = "orbit-landing-aaa7.onrender.com"and retaindns_app_target = "orbit-web-3qmv.onrender.com"anddns_www_target = "orbit-landing-aaa7.onrender.com". The intended domain values arelanding_custom_domains = ["useorbit.org"]andweb_custom_domains = ["app.useorbit.org"]; retain their already applied values for an apex-only plan. A refreshed Terraform plan with validRENDER_API_KEY,CLOUDFLARE_API_TOKEN, and AWS credentials must show only the apex replacement and passinfra/check-web-plan.mjsbefore applying the saved plan.infra, apply that reviewed saved plan.dig @tom.ns.cloudflare.com useorbit.org A +shortand the corresponding query tocandy.ns.cloudflare.commust return Render's flattened addresses, andbash infra/check-dns-cutover.sh <cloudflare-nameserver>must pass for each nameserver.orbit-landing> Settings > Custom Domains and verifyuseorbit.org. The domain and certificate status must show verified after the DNS change.