ソースを参照

correctly parse build and pre-deploy events in activity feed

Feroze Mohideen 2 年 前
コミット
8c9eb0eb37

+ 5 - 1
dashboard/src/main/home/app-dashboard/app-view/AppDataContainer.tsx

@@ -168,7 +168,7 @@ const AppDataContainer: React.FC<AppDataContainerProps> = ({ tabParam }) => {
         latestSource.type === "github" &&
         dirtyFields.app?.build
       ) {
-        await api.reRunGHWorkflow(
+        const res = await api.reRunGHWorkflow(
           "<token>",
           {},
           {
@@ -182,6 +182,10 @@ const AppDataContainer: React.FC<AppDataContainerProps> = ({ tabParam }) => {
           }
         );
 
+        if (res.data != null) {
+          window.open(res.data, "_blank", "noreferrer");
+        }
+
         setRedeployOnSave(false);
       }
 

+ 6 - 5
dashboard/src/main/home/app-dashboard/app-view/tabs/activity-feed/ActivityFeed.tsx

@@ -30,7 +30,7 @@ const ActivityFeed: React.FC<Props> = ({ appName, deploymentTargetId, currentClu
 
     const [events, setEvents] = useState<PorterAppEvent[]>([]);
     const [loading, setLoading] = useState<boolean>(true);
-    const [error, setError] = useState<any>(null);
+    const [hasError, setHasError] = useState<boolean>(false);
     const [page, setPage] = useState<number>(1);
     const [numPages, setNumPages] = useState<number>(0);
     const [hasPorterAgent, setHasPorterAgent] = useState(false);
@@ -54,8 +54,9 @@ const ActivityFeed: React.FC<Props> = ({ appName, deploymentTargetId, currentClu
             setNumPages(res.data.num_pages);
             const events = z.array(porterAppEventValidator).optional().default([]).parse(res.data.events);
             setEvents(events);
+            setHasError(false)
         } catch (err) {
-            setError(err);
+            setHasError(true);
         } finally {
             setLoading(false);
             setShouldAnimate(false);
@@ -82,12 +83,12 @@ const ActivityFeed: React.FC<Props> = ({ appName, deploymentTargetId, currentClu
                     page,
                 }
             );
-            setError(undefined)
+            setHasError(false)
             setNumPages(res.data.num_pages);
             const events = z.array(porterAppEventValidator).optional().default([]).parse(res.data.events);
             setEvents(events);
         } catch (err) {
-            setError(err);
+            setHasError(true);
         }
     }
 
@@ -142,7 +143,7 @@ const ActivityFeed: React.FC<Props> = ({ appName, deploymentTargetId, currentClu
         );
     }
 
-    if (error) {
+    if (hasError) {
         return (
             <Fieldset>
                 <Text size={16}>Error retrieving events</Text>

+ 10 - 4
dashboard/src/main/home/app-dashboard/app-view/tabs/activity-feed/events/types.ts

@@ -27,12 +27,14 @@ const porterAppDeployEventMetadataValidator = z.object({
     })),
 });
 const porterAppBuildEventMetadataValidator = z.object({
-    org: z.string(),
     repo: z.string(),
-    branch: z.string(),
-    action_run_id: z.string(),
-    github_account_id: z.string(),
+    action_run_id: z.number(),
+    github_account_id: z.number(),
 })
+const porterAppPreDeployEventMetadataValidator = z.object({
+    start_time: z.string(),
+    end_time: z.string().optional(),
+});
 export const porterAppEventValidator = z.object({
     id: z.string(),
     created_at: z.string(),
@@ -45,6 +47,7 @@ export const porterAppEventValidator = z.object({
         porterAppAppEventMetadataValidator,
         porterAppDeployEventMetadataValidator,
         porterAppBuildEventMetadataValidator,
+        porterAppPreDeployEventMetadataValidator,
     ]).optional(),
 }).refine((data) => {
     if (data.type === PorterAppEventType.APP_EVENT) {
@@ -56,6 +59,9 @@ export const porterAppEventValidator = z.object({
     if (data.type === PorterAppEventType.BUILD) {
         return porterAppBuildEventMetadataValidator.safeParse(data.metadata).success;
     }
+    if (data.type === PorterAppEventType.PRE_DEPLOY) {
+        return porterAppPreDeployEventMetadataValidator.safeParse(data.metadata).success;
+    }
     return true;
 });