From 6f8246a7fe1297bb7271899ccdd5de94d49ef378 Mon Sep 17 00:00:00 2001 From: waleedlatif1 Date: Sat, 6 Sep 2025 13:27:40 -0700 Subject: [PATCH 1/6] update infra and remove railway --- .github/workflows/build.yml | 39 ++++++++++++++++++++++++++++++++----- .github/workflows/ci.yml | 22 --------------------- railway.json | 21 -------------------- 3 files changed, 34 insertions(+), 48 deletions(-) delete mode 100644 railway.json diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 30d2eb2608..518add6b14 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -55,7 +55,7 @@ jobs: uses: docker/setup-buildx-action@v3 - name: Log in to the Container registry - if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main' + if: github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging') uses: docker/login-action@v3 with: registry: ghcr.io @@ -69,7 +69,7 @@ jobs: images: ${{ matrix.image }} tags: | type=raw,value=latest-${{ matrix.arch }},enable=${{ github.ref == 'refs/heads/main' }} - type=raw,value=staging-${{ github.sha }}-${{ matrix.arch }},enable=${{ github.ref == 'refs/heads/staging' }} + type=raw,value=staging-${{ matrix.arch }},enable=${{ github.ref == 'refs/heads/staging' }} type=sha,format=long,suffix=-${{ matrix.arch }} - name: Build and push Docker image @@ -78,7 +78,7 @@ jobs: context: . file: ${{ matrix.dockerfile }} platforms: ${{ matrix.platform }} - push: ${{ github.event_name != 'pull_request' && github.ref == 'refs/heads/main' }} + push: ${{ github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging') }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha,scope=build-v3 @@ -89,7 +89,7 @@ jobs: create-manifests: runs-on: ubuntu-latest needs: build-and-push - if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main' + if: github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging') strategy: matrix: include: @@ -115,6 +115,7 @@ jobs: images: ${{ matrix.image }} tags: | type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }} + type=raw,value=staging,enable=${{ github.ref == 'refs/heads/staging' }} type=sha,format=long - name: Create and push manifest @@ -148,4 +149,32 @@ jobs: docker manifest inspect "$arm64_image" || echo "ARM64 image not found" exit 1 fi - done \ No newline at end of file + done + + trigger-infrastructure-deploy: + runs-on: ubuntu-latest + needs: create-manifests + if: github.ref == 'refs/heads/staging' || github.ref == 'refs/heads/main' + permissions: + contents: read + + steps: + - name: Trigger staging deployment + if: github.ref == 'refs/heads/staging' + run: | + curl -X POST \ + -H "Accept: application/vnd.github.v3+json" \ + -H "Authorization: token ${{ secrets.INFRA_DEPLOY_TOKEN }}" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/${{ secrets.INFRA_REPO }}/dispatches \ + -d '{"event_type":"staging-deploy","client_payload":{"sha":"${{ github.sha }}","ref":"${{ github.ref }}"}}' + + - name: Trigger production deployment + if: github.ref == 'refs/heads/main' + run: | + curl -X POST \ + -H "Accept: application/vnd.github.v3+json" \ + -H "Authorization: token ${{ secrets.INFRA_DEPLOY_TOKEN }}" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/${{ secrets.INFRA_REPO }}/dispatches \ + -d '{"event_type":"production-deploy","client_payload":{"sha":"${{ github.sha }}","ref":"${{ github.ref }}"}}' \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ffd68d8b87..0f64e4f960 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -53,25 +53,3 @@ jobs: fail_ci_if_error: false verbose: true - migrations: - name: Apply Database Migrations - runs-on: ubuntu-latest - if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging') - needs: test - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup Bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest - - - name: Install dependencies - run: bun install - - - name: Apply migrations - working-directory: ./apps/sim - env: - DATABASE_URL: ${{ github.ref == 'refs/heads/main' && secrets.DATABASE_URL || secrets.STAGING_DATABASE_URL }} - run: bunx drizzle-kit migrate diff --git a/railway.json b/railway.json deleted file mode 100644 index 62d6da767e..0000000000 --- a/railway.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://railway.app/railway.schema.json", - "build": { - "builder": "NIXPACKS", - "buildCommand": "cd apps/sim && bun install --frozen-lockfile && bun run build" - }, - "deploy": { - "startCommand": "cd apps/sim && NODE_ENV=production bun run socket-server/index.ts", - "healthcheckPath": "/health", - "healthcheckTimeout": 300, - "restartPolicyType": "ON_FAILURE", - "restartPolicyMaxRetries": 10 - }, - "environments": { - "production": { - "variables": { - "NODE_ENV": "production" - } - } - } -} From 7833500418e60e69687b7800a6cd5506dae3668b Mon Sep 17 00:00:00 2001 From: waleedlatif1 Date: Wed, 17 Sep 2025 11:24:01 -0700 Subject: [PATCH 2/6] improvement(landing): insert prompt into copilot panel from landing, open panel on entry --- .../app/(landing)/components/hero/hero.tsx | 3 + .../copilot/components/welcome/welcome.tsx | 3 +- .../panel/components/copilot/copilot.tsx | 33 ++- .../w/[workflowId]/components/panel/panel.tsx | 12 +- apps/sim/lib/browser-storage.ts | 189 ++++++++++++++++++ apps/sim/stores/panel/store.ts | 4 + apps/sim/stores/panel/types.ts | 1 + 7 files changed, 236 insertions(+), 9 deletions(-) create mode 100644 apps/sim/lib/browser-storage.ts diff --git a/apps/sim/app/(landing)/components/hero/hero.tsx b/apps/sim/app/(landing)/components/hero/hero.tsx index 154edbe7fa..d74b2d0b31 100644 --- a/apps/sim/app/(landing)/components/hero/hero.tsx +++ b/apps/sim/app/(landing)/components/hero/hero.tsx @@ -32,6 +32,7 @@ import { StripeIcon, SupabaseIcon, } from '@/components/icons' +import { LandingPromptStorage } from '@/lib/browser-storage' import { soehne } from '@/app/fonts/soehne/soehne' import { CARD_WIDTH, @@ -271,6 +272,8 @@ export default function Hero() { */ const handleSubmit = () => { if (!isEmpty) { + // Store the prompt in localStorage before navigating + LandingPromptStorage.store(textValue) router.push('/signup') } } diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/welcome/welcome.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/welcome/welcome.tsx index 79415b13ad..84aafbbd03 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/welcome/welcome.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/welcome/welcome.tsx @@ -1,6 +1,6 @@ 'use client' -import { Blocks, Bot, LibraryBig, Workflow } from 'lucide-react' +import { Blocks, LibraryBig, Workflow } from 'lucide-react' interface CopilotWelcomeProps { onQuestionClick?: (question: string) => void @@ -59,7 +59,6 @@ export function CopilotWelcome({ onQuestionClick, mode = 'ask' }: CopilotWelcome
{/* Header */}
-

{subtitle}

diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/copilot.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/copilot.tsx index 8bfa7a0e6e..bc471bc37a 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/copilot.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/copilot.tsx @@ -5,6 +5,7 @@ import { ArrowDown } from 'lucide-react' import { Button } from '@/components/ui/button' import { LoadingAgent } from '@/components/ui/loading-agent' import { ScrollArea } from '@/components/ui/scroll-area' +import { LandingPromptStorage } from '@/lib/browser-storage' import { createLogger } from '@/lib/logs/console/logger' import { CheckpointPanel, @@ -20,6 +21,7 @@ import type { import { COPILOT_TOOL_IDS } from '@/stores/copilot/constants' import { usePreviewStore } from '@/stores/copilot/preview-store' import { useCopilotStore } from '@/stores/copilot/store' +import { usePanelStore } from '@/stores/panel/store' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' const logger = createLogger('Copilot') @@ -49,6 +51,7 @@ export const Copilot = forwardRef(({ panelWidth }, ref const isUserScrollingRef = useRef(false) // Track if scroll event is user-initiated const { activeWorkflowId } = useWorkflowRegistry() + const { openCopilotPanel } = usePanelStore() // Use preview store to track seen previews const { isToolCallSeen, markToolCallAsSeen } = usePreviewStore() @@ -107,8 +110,36 @@ export const Copilot = forwardRef(({ panelWidth }, ref !isInitialized ) { setIsInitialized(true) + + // Check for stored landing page prompt and populate it + // Only do this if there are no existing messages (new chat) + if (messages.length === 0) { + const storedPrompt = LandingPromptStorage.consume() + if (storedPrompt && storedPrompt.trim().length > 0) { + logger.info('Found stored landing page prompt, auto-opening copilot and populating input') + + // Automatically open the copilot panel + openCopilotPanel() + + // Populate the input with the stored prompt + setInputValue(storedPrompt) + + // Focus the input after a brief delay to ensure DOM is ready + setTimeout(() => { + userInputRef.current?.focus() + }, 150) + } + } } - }, [activeWorkflowId, isLoadingChats, chatsLoadedForWorkflow, isInitialized]) + }, [ + activeWorkflowId, + isLoadingChats, + chatsLoadedForWorkflow, + isInitialized, + messages.length, + setInputValue, + openCopilotPanel, + ]) // Clear any existing preview when component mounts or workflow changes useEffect(() => { diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/panel.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/panel.tsx index 6c26be1b9b..513bb90760 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/panel.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/panel.tsx @@ -294,12 +294,12 @@ export function Panel() { {/* Tab Selector - Always visible */}