diff --git a/apps/webapp/app/components/SetupCommands.tsx b/apps/webapp/app/components/SetupCommands.tsx index 0a21bc54c..e68273a0d 100644 --- a/apps/webapp/app/components/SetupCommands.tsx +++ b/apps/webapp/app/components/SetupCommands.tsx @@ -1,6 +1,7 @@ import { createContext, useContext, useState } from "react"; import { useAppOrigin } from "~/hooks/useAppOrigin"; import { useProject } from "~/hooks/useProject"; +import { useTriggerCliTag } from "~/hooks/useTriggerCliTag"; import { ClientTabs, ClientTabsContent, @@ -35,8 +36,6 @@ function usePackageManager() { return context; } -const v3PackageTag = "latest"; - function getApiUrlArg() { const appOrigin = useAppOrigin(); @@ -69,8 +68,9 @@ export function InitCommandV3({ title }: TabsProps) { const project = useProject(); const projectRef = project.externalRef; const apiUrlArg = getApiUrlArg(); + const triggerCliTag = useTriggerCliTag(); - const initCommandParts = [`trigger.dev@${v3PackageTag}`, "init", `-p ${projectRef}`, apiUrlArg]; + const initCommandParts = [`trigger.dev@${triggerCliTag}`, "init", `-p ${projectRef}`, apiUrlArg]; const initCommand = initCommandParts.filter(Boolean).join(" "); const { activePackageManager, setActivePackageManager } = usePackageManager(); @@ -118,6 +118,7 @@ export function InitCommandV3({ title }: TabsProps) { } export function TriggerDevStepV3({ title }: TabsProps) { + const triggerCliTag = useTriggerCliTag(); const { activePackageManager, setActivePackageManager } = usePackageManager(); return ( @@ -139,7 +140,7 @@ export function TriggerDevStepV3({ title }: TabsProps) { variant="secondary/medium" iconButton className="mb-4" - value={`npx trigger.dev@${v3PackageTag} dev`} + value={`npx trigger.dev@${triggerCliTag} dev`} /> @@ -147,7 +148,7 @@ export function TriggerDevStepV3({ title }: TabsProps) { variant="secondary/medium" iconButton className="mb-4" - value={`pnpm dlx trigger.dev@${v3PackageTag} dev`} + value={`pnpm dlx trigger.dev@${triggerCliTag} dev`} /> @@ -155,7 +156,7 @@ export function TriggerDevStepV3({ title }: TabsProps) { variant="secondary/medium" iconButton className="mb-4" - value={`yarn dlx trigger.dev@${v3PackageTag} dev`} + value={`yarn dlx trigger.dev@${triggerCliTag} dev`} /> @@ -163,6 +164,7 @@ export function TriggerDevStepV3({ title }: TabsProps) { } export function TriggerLoginStepV3({ title }: TabsProps) { + const triggerCliTag = useTriggerCliTag(); const { activePackageManager, setActivePackageManager } = usePackageManager(); return ( @@ -184,7 +186,7 @@ export function TriggerLoginStepV3({ title }: TabsProps) { variant="secondary/medium" iconButton className="mb-4" - value={`npx trigger.dev@${v3PackageTag} login`} + value={`npx trigger.dev@${triggerCliTag} login`} /> @@ -192,7 +194,7 @@ export function TriggerLoginStepV3({ title }: TabsProps) { variant="secondary/medium" iconButton className="mb-4" - value={`pnpm dlx trigger.dev@${v3PackageTag} login`} + value={`pnpm dlx trigger.dev@${triggerCliTag} login`} /> @@ -200,7 +202,7 @@ export function TriggerLoginStepV3({ title }: TabsProps) { variant="secondary/medium" iconButton className="mb-4" - value={`yarn dlx trigger.dev@${v3PackageTag} login`} + value={`yarn dlx trigger.dev@${triggerCliTag} login`} /> diff --git a/apps/webapp/app/env.server.ts b/apps/webapp/app/env.server.ts index 9136e44a1..6f742faa2 100644 --- a/apps/webapp/app/env.server.ts +++ b/apps/webapp/app/env.server.ts @@ -856,6 +856,9 @@ const EnvironmentSchema = z.object({ // Machine presets MACHINE_PRESETS_OVERRIDE_PATH: z.string().optional(), + + // CLI package tag (e.g. "latest", "v4-beta", "4.0.0") - used for setup commands + TRIGGER_CLI_TAG: z.string().default("latest"), }); export type Environment = z.infer; diff --git a/apps/webapp/app/hooks/useTriggerCliTag.ts b/apps/webapp/app/hooks/useTriggerCliTag.ts new file mode 100644 index 000000000..190a28ef3 --- /dev/null +++ b/apps/webapp/app/hooks/useTriggerCliTag.ts @@ -0,0 +1,8 @@ +import { useTypedRouteLoaderData } from "remix-typedjson"; +import { type loader } from "~/root"; + +export function useTriggerCliTag() { + const routeMatch = useTypedRouteLoaderData("root"); + + return routeMatch!.triggerCliTag; +} diff --git a/apps/webapp/app/root.tsx b/apps/webapp/app/root.tsx index c6f0929eb..f46d3a65f 100644 --- a/apps/webapp/app/root.tsx +++ b/apps/webapp/app/root.tsx @@ -56,6 +56,7 @@ export const loader = async ({ request }: LoaderFunctionArgs) => { features, appEnv: env.APP_ENV, appOrigin: env.APP_ORIGIN, + triggerCliTag: env.TRIGGER_CLI_TAG, kapa, }, { headers: { "Set-Cookie": await commitSession(session) } }