Compare commits

...
2 Commits
Author SHA1 Message Date
bermudalamb c9dccfe4a2 Merge pull request 'chore(qa): read the Google credentials from the stack, like every other secret' (#355) from chore/qa-google-credentials-from-stack into main
Linting / lint (push) Successful in 3m36s
SonarQube Analysis / sonarqube (push) Failing after 30m5s
Reviewed-on: #355
2026-09-11 14:19:20 -05:00
synAdminandClaude Opus 5 903a1d8b76 chore(qa): read the Google credentials from the stack, like every other secret
Linting / lint (pull_request) Successful in 3m28s
SonarQube Analysis / sonarqube (pull_request) Failing after 28m14s
QA_GOOGLE_CLIENT_ID and QA_GOOGLE_CLIENT_SECRET were set on the QA stack and went nowhere, because #340 hardcoded the container's values empty rather than reading anything. The button stayed missing, correctly, but for a reason the file gave no way to discover: every other secret in it is read from a QA_-prefixed stack variable, and these two were the odd ones out.

So they are wired the way the rest of the file works. The deploy that prompted this cost nothing except time, and the next one would have cost the same again.

Wiring them is not the same as enabling them, and the comment now leads with that. **Leave both stack variables unset until QA moves off *.bermudalamb.synology.me.** Google refuses a redirect URI whose host is not under a domain whose ownership has been proved by DNS, and nobody can prove ownership of that one, because Synology owns the registrable domain above it — the same wall #285 hit with Cloudflare. Setting them today produces a button that fails at Google with redirect_uri_mismatch, and there is no console entry that could satisfy it.

Once #313 moves QA to qa.redefined-designs.com it is three steps and no code: set the two variables, point PUBLIC_URL at the new host, and add the matching callback under Clients in the Google Auth Platform.

Production already read its pair from the stack and is unchanged. The QA variable documentation at the top of the file gains an entry, matching the style of the others.

Verified: both files still parse as YAML, both substitutions resolve to the intended stack variables, and the compose environment guard passes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-11 14:17:51 -05:00
+23 -12
View File
@@ -63,6 +63,14 @@
# in the notification email (#224). Absent, the email still # in the notification email (#224). Absent, the email still
# sends and simply carries no shortcuts. Its own value, not # sends and simply carries no shortcuts. Its own value, not
# production's: a link signed with it acts without a login. # production's: a link signed with it acts without a login.
# QA_GOOGLE_CLIENT_ID — optional, and all-or-nothing with the secret below:
# QA_GOOGLE_CLIENT_SECRET setting one without the other refuses to boot
# (#340). Both unset means the Google button is simply not
# offered, which is the right answer while QA lives on a
# *.synology.me hostname — Google will not accept a redirect
# URI whose domain nobody can prove they own, so a button
# there could only ever fail. Set them once QA moves to
# qa.redefined-designs.com (#313, #345).
# QA_REMBG_URL — optional. The background-removal sidecar, e.g. # QA_REMBG_URL — optional. The background-removal sidecar, e.g.
# http://rembg-syn:7000. Unset turns the feature off rather # http://rembg-syn:7000. Unset turns the feature off rather
# than breaking anything. The sidecar must be on the same # than breaking anything. The sidecar must be on the same
@@ -195,20 +203,23 @@ services:
# rotating it revokes every outstanding link, which is the intended way to # rotating it revokes every outstanding link, which is the intended way to
# deal with a leak. # deal with a leak.
- INTAKE_ACTION_SECRET=${QA_INTAKE_ACTION_SECRET:-} - INTAKE_ACTION_SECRET=${QA_INTAKE_ACTION_SECRET:-}
# Deliberately left empty, and it is not an oversight (#340, #345). # Read from the stack like every other QA secret, rather than hardcoded
# empty as they were in #340. Leaving them unreadable made this file the
# odd one out and cost a QA deploy: the variables were set on the stack,
# nothing read them, and the button stayed missing with no explanation.
# #
# Google refuses a redirect URI whose host is not under a domain whose # Leave them UNSET until QA moves off *.bermudalamb.synology.me. Google
# ownership has been proved by DNS, and nobody can prove ownership of # refuses a redirect URI whose host is not under a domain whose ownership
# *.bermudalamb.synology.me because Synology owns the registrable domain # has been proved by DNS, and nobody can prove ownership of that one,
# above it. Same wall as #285. So QA cannot run Google sign-in at all # because Synology owns the registrable domain above it — the same wall
# while it lives on this hostname, and setting these would only produce a # #285 hit. Setting them today produces a button that fails at Google with
# button that fails at Google. # redirect_uri_mismatch, and no console entry can satisfy it.
# #
# It becomes possible when #313 moves QA to qa.redefined-designs.com: # Once #313 moves QA to qa.redefined-designs.com: set these two, point
# set both here, set PUBLIC_URL to the new host, and add the matching # PUBLIC_URL at the new host, and add the matching callback under Clients
# callback in the Google Auth Platform. No code change either way. # in the Google Auth Platform. No code change either way (#345).
- GOOGLE_CLIENT_ID= - GOOGLE_CLIENT_ID=${QA_GOOGLE_CLIENT_ID:-}
- GOOGLE_CLIENT_SECRET= - GOOGLE_CLIENT_SECRET=${QA_GOOGLE_CLIENT_SECRET:-}
volumes: volumes:
# Separate uploads directory. Sharing production's would let a QA run # Separate uploads directory. Sharing production's would let a QA run
# write into, and a QA teardown delete, real product images. # write into, and a QA teardown delete, real product images.