diff --git a/apps/webapp/app/components/integrations/VercelOnboardingModal.tsx b/apps/webapp/app/components/integrations/VercelOnboardingModal.tsx index 28bfe5672c..9b285db81e 100644 --- a/apps/webapp/app/components/integrations/VercelOnboardingModal.tsx +++ b/apps/webapp/app/components/integrations/VercelOnboardingModal.tsx @@ -541,6 +541,9 @@ export function VercelOnboardingModal({ formData.append("atomicBuilds", JSON.stringify(atomicBuilds)); formData.append("discoverEnvVars", JSON.stringify(discoverEnvVars)); formData.append("syncEnvVarsMapping", JSON.stringify(syncEnvVarsMapping)); + if (fromMarketplaceContext) { + formData.append("origin", "marketplace"); + } if (nextUrl && fromMarketplaceContext && isGitHubConnectedForOnboarding) { formData.append("next", nextUrl); } diff --git a/apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.github.tsx b/apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.github.tsx index 38ef50126c..c806381f1a 100644 --- a/apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.github.tsx +++ b/apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.github.tsx @@ -3,7 +3,8 @@ import { parse } from "@conform-to/zod"; import { CheckCircleIcon, LockClosedIcon, PlusIcon } from "@heroicons/react/20/solid"; import { Form, useActionData, useNavigation, useNavigate, useSearchParams, useLocation } from "@remix-run/react"; import { type ActionFunctionArgs, type LoaderFunctionArgs, json } from "@remix-run/server-runtime"; -import { typedjson, useTypedFetcher } from "remix-typedjson"; +import { redirect, +typedjson, useTypedFetcher } from "remix-typedjson"; import { z } from "zod"; import { OctoKitty } from "~/components/GitHubLoginButton"; import { Dialog, DialogContent, DialogHeader, DialogTrigger } from "~/components/primitives/Dialog"; @@ -39,6 +40,7 @@ import { findProjectBySlug } from "~/models/project.server"; import { findEnvironmentBySlug } from "~/models/runtimeEnvironment.server"; import { ProjectSettingsService } from "~/services/projectSettings.server"; import { logger } from "~/services/logger.server"; +import { triggerInitialDeployment } from "~/services/platform.v3.server"; import { requireUserId } from "~/services/session.server"; import { githubAppInstallPath, @@ -208,6 +210,18 @@ export async function action({ request, params }: ActionFunctionArgs) { ); if (resultOrFail.isOk()) { + // Trigger initial deployment for marketplace flows now that GitHub is connected + if (redirectUrl) { + try { + if (redirectUrl.includes("origin=marketplace")) { + await triggerInitialDeployment(projectId, { environment: "prod" }); + } + } catch (error) { + logger.error("Invalid redirect URL, skipping initial deployment trigger", { redirectUrl, error }); + // Invalid redirectUrl, skip initial deployment check + } + } + return redirectWithMessage( request, redirectUrl, diff --git a/apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.vercel.tsx b/apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.vercel.tsx index 1857a4abdf..9f5be039e4 100644 --- a/apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.vercel.tsx +++ b/apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.vercel.tsx @@ -113,6 +113,7 @@ const CompleteOnboardingFormSchema = z.object({ syncEnvVarsMapping: z.string().optional(), next: z.string().optional(), skipRedirect: z.string().optional().transform((val) => val === "true"), + origin: z.string().optional(), }); const SkipOnboardingFormSchema = z.object({ diff --git a/apps/webapp/app/services/vercelIntegration.server.ts b/apps/webapp/app/services/vercelIntegration.server.ts index e2c118ffd3..5e9155a6b2 100644 --- a/apps/webapp/app/services/vercelIntegration.server.ts +++ b/apps/webapp/app/services/vercelIntegration.server.ts @@ -413,7 +413,7 @@ export class VercelIntegrationService { }); if (upsertResult.isErr()) { - logger.error("Failed to sync staging TRIGGER_SECRET_KEY to custom environment", { + logger.warn("Failed to sync staging TRIGGER_SECRET_KEY to custom environment", { projectId, newCustomEnvironmentId, error: upsertResult.error.message,