From f88f1d8e7dbe539c03dea252a27d9d5c1e7539da Mon Sep 17 00:00:00 2001 From: Brian Love Date: Wed, 2 Sep 2026 23:34:01 -0700 Subject: [PATCH] fix(ci): give the Website Vercel build its growth form policy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The deploy job's `npx vercel build` fails on main: Error: GROWTH_FORM_POLICY must be growth_v1 Error: Command "npx nx build website" exited with 1 so the Website preview is never built, every later step skips, and production has not promoted since the control-plane arc landed. #968 added the assertion in apps/website/src/lib/growth/form-policy.ts and set GROWTH_FORM_POLICY for the `website` job, but not for the deploy job's build. It cannot come from `vercel pull`: the project marks GROWTH_FORM_POLICY sensitive for preview and production, and Vercel never returns a sensitive value, so the pulled .env omits it. A Vercel-side cloud build would have it; our prebuilt-on-runner build does not. Set it on the build step, mirroring the `website` job. It is not a secret, and runtime is unaffected — Vercel still injects the sensitive value into the deployed function. Co-Authored-By: Claude Opus 5 --- .github/workflows/ci.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2ddf780b8..d1a5b54a9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1005,6 +1005,14 @@ jobs: - name: Deploy immutable Website preview if: steps.freshness.outputs.stale != 'true' && steps.affected.outputs.website == 'true' id: deploy_website + env: + # Server pages read the growth form policy while rendering, so this + # build needs it exactly as the `website` job does. It cannot come + # from `vercel pull`: the project marks GROWTH_FORM_POLICY sensitive + # for preview/production, and Vercel never returns a sensitive value, + # so the pulled .env omits it and `vercel build` throws + # "GROWTH_FORM_POLICY must be growth_v1". It is not a secret. + GROWTH_FORM_POLICY: growth_v1 run: | npx vercel build --prod --token=${{ secrets.VERCEL_TOKEN }} url=$(npx vercel deploy --prebuilt --archive=tgz --prod --skip-domain --yes --token=${{ secrets.VERCEL_TOKEN }} | tail -n 1)