diff --git a/apps/studio/components/interfaces/BranchManagement/BranchPanels.tsx b/apps/studio/components/interfaces/BranchManagement/BranchPanels.tsx index 41b2a1bcebe..4d1d23425a7 100644 --- a/apps/studio/components/interfaces/BranchManagement/BranchPanels.tsx +++ b/apps/studio/components/interfaces/BranchManagement/BranchPanels.tsx @@ -38,7 +38,6 @@ import { } from 'ui' import ConfirmationModal from 'ui-patterns/Dialogs/ConfirmationModal' import BranchStatusBadge from './BranchStatusBadge' -import WorkflowLogs from './WorkflowLogs' interface BranchManagementSectionProps { header: string @@ -234,7 +233,13 @@ export const BranchRow = ({ View Repository - {branchingWorkflowLogsEnabled && } + {branchingWorkflowLogsEnabled && ( + + )} ) : ( - + )} diff --git a/apps/studio/components/interfaces/BranchManagement/WorkflowLogs.tsx b/apps/studio/components/interfaces/BranchManagement/WorkflowLogs.tsx deleted file mode 100644 index f631d52c94b..00000000000 --- a/apps/studio/components/interfaces/BranchManagement/WorkflowLogs.tsx +++ /dev/null @@ -1,141 +0,0 @@ -import { useState } from 'react' - -import AlertError from 'components/ui/AlertError' -import { useWorkflowRunLogsQuery } from 'data/workflow-runs/workflow-run-logs-query' -import { useWorkflowRunsQuery } from 'data/workflow-runs/workflow-runs-query' -import dayjs from 'dayjs' -import { ArrowLeft, ArrowRight } from 'lucide-react' -import { - Button, - cn, - Dialog, - DialogContent, - DialogDescription, - DialogHeader, - DialogSection, - DialogSectionSeparator, - DialogTitle, - DialogTrigger, -} from 'ui' -import { GenericSkeletonLoader } from 'ui-patterns' -import BranchStatusBadge from './BranchStatusBadge' - -interface WorkflowLogsProps { - projectRef: string -} - -const WorkflowLogs = ({ projectRef }: WorkflowLogsProps) => { - const [isOpen, setIsOpen] = useState(false) - - const { - data: workflowRuns, - isSuccess: isWorkflowRunsSuccess, - isLoading: isWorkflowRunsLoading, - isError: isWorkflowRunsError, - error: workflowRunsError, - } = useWorkflowRunsQuery( - { - projectRef, - }, - { - enabled: isOpen, - } - ) - - const [selectedWorkflowRunId, setSelectedWorkflowRunId] = useState(undefined) - - const { - data: workflowRunLogs, - isSuccess: isWorkflowRunLogsSuccess, - isLoading: isWorkflowRunLogsLoading, - isError: isWorkflowRunLogsError, - error: workflowRunLogsError, - } = useWorkflowRunLogsQuery( - { - workflowRunId: selectedWorkflowRunId, - }, - { - enabled: isOpen && selectedWorkflowRunId !== undefined, - } - ) - - return ( - - - - - - - - Workflow Logs - - Select a workflow run to view logs - - - - - - {selectedWorkflowRunId === undefined ? ( - <> - {isWorkflowRunsLoading && } - {isWorkflowRunsError && } - {isWorkflowRunsSuccess && - (workflowRuns.length > 0 ? ( -
    - {workflowRuns.map((workflowRun) => ( -
  • - -
  • - ))} -
- ) : ( -

- No workflow runs found. -

- ))} - - ) : ( -
- - - {isWorkflowRunLogsLoading && } - {isWorkflowRunLogsError && ( - - )} - {isWorkflowRunLogsSuccess && ( -
-                  {workflowRunLogs}
-                
- )} -
- )} -
-
-
- ) -} - -export default WorkflowLogs diff --git a/apps/studio/components/interfaces/Settings/Logs/Logs.constants.ts b/apps/studio/components/interfaces/Settings/Logs/Logs.constants.ts index 4168bea354c..66c5fe3010f 100644 --- a/apps/studio/components/interfaces/Settings/Logs/Logs.constants.ts +++ b/apps/studio/components/interfaces/Settings/Logs/Logs.constants.ts @@ -363,6 +363,7 @@ export enum LogsTableName { POSTGREST = 'postgrest_logs', SUPAVISOR = 'supavisor_logs', WAREHOUSE = 'warehouse_logs', + WORKFLOW_RUN = 'workflow_run_logs', } export const LOGS_TABLES = { @@ -376,6 +377,7 @@ export const LOGS_TABLES = { postgrest: LogsTableName.POSTGREST, supavisor: LogsTableName.SUPAVISOR, warehouse: LogsTableName.WAREHOUSE, + workflow_run: LogsTableName.WORKFLOW_RUN, } export const LOGS_SOURCE_DESCRIPTION = { diff --git a/apps/studio/components/interfaces/Settings/Logs/Logs.types.ts b/apps/studio/components/interfaces/Settings/Logs/Logs.types.ts index f9c055618af..3111271b411 100644 --- a/apps/studio/components/interfaces/Settings/Logs/Logs.types.ts +++ b/apps/studio/components/interfaces/Settings/Logs/Logs.types.ts @@ -88,6 +88,7 @@ export type QueryType = | 'supavisor' | 'postgrest' | 'warehouse' + | 'workflow_run' export type Mode = 'simple' | 'custom' diff --git a/apps/studio/components/layouts/LogsLayout/LogsSidebarMenuV2.tsx b/apps/studio/components/layouts/LogsLayout/LogsSidebarMenuV2.tsx index 5f59f43224e..c3dae163bf9 100644 --- a/apps/studio/components/layouts/LogsLayout/LogsSidebarMenuV2.tsx +++ b/apps/studio/components/layouts/LogsLayout/LogsSidebarMenuV2.tsx @@ -163,6 +163,12 @@ export function LogsSidebarMenuV2() { url: `/project/${ref}/logs/edge-functions-logs`, items: [], }, + { + name: 'Workflow Run Logs', + key: 'workflow-run-logs', + url: `/project/${ref}/logs/workflow-run-logs`, + items: [], + }, ] const filteredLogs = BASE_COLLECTIONS.filter((collection) => { diff --git a/apps/studio/data/workflow-runs/keys.ts b/apps/studio/data/workflow-runs/keys.ts deleted file mode 100644 index dfb79399023..00000000000 --- a/apps/studio/data/workflow-runs/keys.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const workflowRunKeys = { - list: (projectRef: string | undefined) => ['projects', projectRef, 'workflow-runs'] as const, -} diff --git a/apps/studio/data/workflow-runs/workflow-run-logs-query.ts b/apps/studio/data/workflow-runs/workflow-run-logs-query.ts deleted file mode 100644 index 0e51abd0c8c..00000000000 --- a/apps/studio/data/workflow-runs/workflow-run-logs-query.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { useQuery, UseQueryOptions } from '@tanstack/react-query' - -import { get, handleError } from 'data/fetchers' -import type { ResponseError } from 'types' -import { workflowRunKeys } from './keys' - -export type WorkflowRunLogsVariables = { - workflowRunId?: string -} - -export async function getWorkflowRunLogs( - { workflowRunId }: WorkflowRunLogsVariables, - signal?: AbortSignal -) { - if (!workflowRunId) throw new Error('workflowRunId is required') - - const { data, error } = await get(`/platform/workflow-runs/{workflow_run_id}/logs`, { - params: { - path: { - workflow_run_id: workflowRunId, - }, - }, - parseAs: 'text', - headers: { - Accept: 'text/plain', - }, - signal, - }) - if (error) handleError(error) - return data - .split('\n') - .flatMap((line) => line.split('\r')) - .join('\n') - .trim() -} - -export type WorkflowRunLogsData = Awaited> -export type WorkflowRunLogsError = ResponseError - -export const useWorkflowRunLogsQuery = ( - { workflowRunId }: WorkflowRunLogsVariables, - { - enabled = true, - ...options - }: UseQueryOptions = {} -) => - useQuery( - workflowRunKeys.list(workflowRunId), - ({ signal }) => getWorkflowRunLogs({ workflowRunId }, signal), - { enabled: enabled && typeof workflowRunId !== 'undefined', staleTime: 0, ...options } - ) diff --git a/apps/studio/data/workflow-runs/workflow-runs-query.ts b/apps/studio/data/workflow-runs/workflow-runs-query.ts deleted file mode 100644 index 564dea7240a..00000000000 --- a/apps/studio/data/workflow-runs/workflow-runs-query.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { useQuery, UseQueryOptions } from '@tanstack/react-query' - -import { get, handleError } from 'data/fetchers' -import type { ResponseError } from 'types' -import { workflowRunKeys } from './keys' - -export type WorkflowRunsVariables = { - projectRef?: string -} - -export async function getWorkflowRuns({ projectRef }: WorkflowRunsVariables, signal?: AbortSignal) { - if (!projectRef) throw new Error('projectRef is required') - - const { data, error } = await get(`/platform/workflow-runs`, { - params: { - query: { - project_ref: projectRef, - }, - }, - signal, - }) - if (error) handleError(error) - return data -} - -export type WorkflowRunsData = Awaited> -export type WorkflowRunsError = ResponseError - -export const useWorkflowRunsQuery = ( - { projectRef }: WorkflowRunsVariables, - { enabled = true, ...options }: UseQueryOptions = {} -) => - useQuery( - workflowRunKeys.list(projectRef), - ({ signal }) => getWorkflowRuns({ projectRef }, signal), - { enabled: enabled && typeof projectRef !== 'undefined', staleTime: 0, ...options } - ) diff --git a/apps/studio/pages/project/[ref]/logs/workflow-run-logs.tsx b/apps/studio/pages/project/[ref]/logs/workflow-run-logs.tsx new file mode 100644 index 00000000000..0daa2787f5e --- /dev/null +++ b/apps/studio/pages/project/[ref]/logs/workflow-run-logs.tsx @@ -0,0 +1,22 @@ +import { useParams } from 'common' +import { LogsTableName } from 'components/interfaces/Settings/Logs/Logs.constants' +import LogsPreviewer from 'components/interfaces/Settings/Logs/LogsPreviewer' +import LogsLayout from 'components/layouts/LogsLayout/LogsLayout' +import type { NextPageWithLayout } from 'types' + +export const LogPage: NextPageWithLayout = () => { + const { ref } = useParams() + + return ( + + ) +} + +LogPage.getLayout = (page) => {page} + +export default LogPage