
    Ri              
       H   d Z ddlZddlZddlZddlZddlZddlmZ ddlmZ  eej                  j                  d e ee      j                         j                  j                                    Zedz  Zedz  Zg dZd	 Zd
 Zd Zd Zd Zd Zd Zedk(  r e        yy)zf
CI Report Generator
Reads CI results from JSON (ci.sh output) and generates a human-readable report.
    N)datetime)PathWORKSPACE_ROOTzmemory/logs/ci-latest.jsonzmemory/logs/ci-history.jsonl)syntax_checkpytestcoverage	pip_audit	run_testshealth_checkc                    	 t        | dd      5 }t        j                  |      }ddd       |S # 1 sw Y   S xY w# t        $ r6 t	        d|  t
        j                         t        j                  d       Y yt        j                  $ r@}t	        d|  d	| t
        j                         t        j                  d       Y d}~yd}~ww xY w)
zRead CI result from JSON file.rutf-8encodingNz!Error: CI result file not found: file   zError: Invalid JSON in z: )	openjsonloadFileNotFoundErrorprintsysstderrexitJSONDecodeError)	file_pathfdataes       B/home/jay/workspace/.worktrees/task-2117-dev1/scripts/ci-report.pyread_ci_resultr"      s    	)S73 	 q99Q<D	 	  1)=CJJO '	{"QC8szzJs/   = 0	= := = <C;C6CCc                 P   	 t         j                  j                  dd       t        t         dd      5 }|j	                  t        j                  | d      dz          d	d	d	       y	# 1 sw Y   y	xY w# t        $ r(}t        d
| t        j                         Y d	}~y	d	}~ww xY w)z0Append result to CI history file (JSONL format).T)parentsexist_okar   r   F)ensure_ascii
Nz&Warning: Could not append to history: r   )
CI_HISTORYparentmkdirr   writer   dumps	Exceptionr   r   r   )resultr   r    s      r!   append_to_historyr0   +   s    Mt<*cG4 	CGGDJJvE:TAB	C 	C 	C M6qc:LLMs4   3A4 *A(A4 (A1-A4 1A4 4	B%=B  B%c                     	 t        j                  | j                  dd            }|j                  d      S # t        $ r | cY S w xY w)zFormat timestamp for display.Zz+00:00z%Y-%m-%d %H:%M:%S)r   fromisoformatreplacestrftimer.   )timestamp_strdts     r!   format_timestampr8   5   sI    ##M$9$9#x$HI{{.// s   58 AAc                 J    | xs dj                         }|dv rd| dS d| dS )zReturn uppercase status label.unknown)PASSWARNFAILSKIP[])upper)statusss     r!   status_labelrD   >   s8    		9##%A,,1#Qxqc8O    c                    | j                  dt        j                         j                               }t	        |      }| j                  di       }| j                  dd      }| j                  dd      }t        d       t        d|        t        d       t        D ]{  }|j                  |i       }|j                  d	      xs dj                         }|j                  d
d      }	t        |      }
|	rt        |
 d|dd|	        lt        |
 d|        } t                t        d| d| d       t        d       |S )z%Print formatted CI report to console.	timestampstagesduration_secondsr:   verdictUNKNOWNuo   ═════════════════════════════════════u   CI REPORT — rB   detail  z<15u    — z	Verdict: z | Duration: rC   )	getr   now	isoformatr8   r   STAGE_ORDERrA   rD   )r/   rG   formatted_timerH   durationrJ   
stage_namestagerB   rL   labels              r!   print_reportrX   F   s.   

;(@(@(BCI%i0NZZ"%Fzz,i8HjjI.G	*	N>*
+,	*! +


:r*))H%299;8R(V$UG1Z,E&:;UG1ZL)*+ 
G	IgYmH:Q
78	*NrE   c                 8   | dk7  ryddddddt         j                  j                  d	d
      dt         j                  j                  dd      dg
}	 t        j                  |d       y# t
        $ r(}t        d| t        j                         Y d}~yd}~ww xY w)z2Send notification via cokacdir if verdict is FAIL.r=   Ncokacdirz--cronuV   CI 실패 감지. /home/jay/workspace/memory/logs/ci-latest.json 결과 확인 필요.z--at10sz--chatCOKACDIR_CHAT_ID
6937032012z--keyCOKACDIR_KEY_ANUc119085addb0f8b7z--onceF)checkz&Warning: Could not send notification: r   )	osenvironrO   
subprocessrunr.   r   r   r   )rJ   cmdr    s      r!   send_notification_on_failrf   c   s    & 	`


)<8


)+=>CMs%( M6qc:LLMs   A( (	B1BBc                     t        j                  dt         j                  d      } | j                  dt        d d       | j                         }|j                  rt        |j                        nt        }t        |      }t        |       t        |      }t        |       t        j                  |dv rd       y d	       y )
Nz2Generate CI report from JSON result (ci.sh output)zSExamples:
  python3 ci-report.py
  python3 ci-report.py --file /path/to/result.json)descriptionformatter_classepilogz--filezAPath to CI result JSON file (default: memory/logs/ci-latest.json))typedefaulthelp)r;   r<   r   r   )argparseArgumentParserRawDescriptionHelpFormatteradd_argumentstr
parse_argsr   r   	CI_LATESTr"   r0   rX   rf   r   r   )parserargsci_filer/   rJ   s        r!   mainrx   {   s    $$H <<lF P	   D!%d499o	GG$Ff6"Gg&HH'--Q515rE   __main__)__doc__rn   r   ra   rc   r   r   pathlibr   rb   rO   rr   __file__resolver*   	WORKSPACErt   r)   rR   r"   r0   r8   rD   rX   rf   rx   __name__ rE   r!   <module>r      s   
   	  
   0#d8n6L6L6N6U6U6\6\2]^_	44	77
M:M064 zF rE   