Ë
    €Éj  ã                   óf  — d Z ddlZddlZddlZddlZddlZej                  j                  ej                  j                  ej                  j                  e	«      «      «      Z
 ee
› d�d«      Zd„ Zd„ Zd„ Z edd	«      Zes ej"                  d«       ej%                  d
«      ej%                  d«      xs i cZZ eded   › de› ded   › de› �«       edk(  �r eded   dd«       ej%                  d«      rd eed   «      gng Z ej.                  ej0                  e
› d�ed   ge¢dd¬«      Z eej4                  dd ej6                  dd z   «       ej8                  dk(  r& eded   d ee«      «        ej"                  d«       ej8                  r& eded   d ee«      «        ej"                  d«       ej4                  j;                  «       j=                  «       d   Zde› d�Z näed k(  r¼ ej.                  ej0                  e
› d�d!ed    eed"   «      gdd¬«      Z eej4                  d#d ej6                  d#d z   «       ej8                  r& eded   d ee«      «        ej"                  d«       ej4                  j;                  «       j=                  «       d   Zde› d$�Z n# eded   dd%e› �«        ej"                  d«        eded   de «        ej.                  e
› d&�gdd¬«      Z! ee!j4                  d'd e!j6                  d'd z   «       e!j8                  r$ eded   dde› d(�«        ej"                  d«       ed   jE                  d)«      d*   Z#ed   jE                  d)«      d   jE                  d+«      Z$d,d)jK                  e$«      › d)e#› �d-gedk(  r	d.e#› d/e› �gng z   Z& ej.                  d0d1e
d2d3ge&¢d¬4«        ej.                  d0d1e
d5d6edk(  rd7nd8› ded   › d9e› �d3ge&¢d¬4«        eded   d:de› d;�ed k(  rd<nd=z   e«        eded   › d>e› �«       y)?a.  Cron (every minute, under its own flock): take the next QUICK job (lighter copy, use-in-games) from the spike API store
on prod, run tools/lighter.py, publish, report back. Astra re-runs have their own lane (tools/rerun_worker.py), so a quick
job never waits 40 minutes behind one. Log: jobs/worker.logé    Nz/jobs/worker.logÚac            	      ó²   — t        j                  ddddj                  d„ | D «       «      z   gddd¬«      }t        j                  |j
                  xs d	«      S )
NÚsshÚprodz.cd /home/forge/fal-feedback && python3 cli.py ú c              3   ó(   K  — | ]
  }d |› d �–— Œ y­w)ú'N© )Ú.0r   s     útools/lighter_worker.pyú	<genexpr>zprod.<locals>.<genexpr>
   s   è ø€ Òd|ÐrsÐghÐijÐhkÐklÔemÑd|ùs   ‚Té<   )Úcapture_outputÚtextÚtimeoutz{})Ú
subprocessÚrunÚjoinÚjsonÚloadsÚstdout)ÚargsÚouts     r   r   r   	   sR   € Ü
�.‰.˜% Ð)YÐ\_×\dÑ\dÑd|Ðw{Ôd|Ó\|Ñ)|Ð}Ø(,°4ÀôE€Cä�:‰:�c—j‘jÒ( DÓ)Ð)ó    c                 ó®   — t         j                  t        j                  dt        j                  «       «      | z   dz   «       t         j                  «        y )Nz%Y-%m-%dT%H:%M:%SZ ú
)ÚLOGÚwriteÚtimeÚstrftimeÚgmtimeÚflush)Úts    r   Úlogr$      s2   € Ü‡I�IŒd�m‰mÐ1´4·;±;³=ÓAÀAÑEÈÑLÔMÌsÏyÉyÍ{r   c                 ó�   — | j                   xs dj                  «       j                  «       xs dgd   d d j                  dd«      S )NÚ Úfailedéÿÿÿÿi,  r	   r   )ÚstderrÚstripÚ
splitlinesÚreplace)Úrs    r   Úlastr.      sD   € Ø�X‰XŠ^˜×"Ñ"Ó$×/Ñ/Ó1Ò?°h°ZÀÑDÀTÀcÐJ×RÑRÐSVÐX[Ó\Ð\r   ÚnextÚquickÚkindÚparamsz
quick job Úidr   ÚassetÚlighterÚupdateÚrunningz>making lighter tries and checking them on the GPU (1 to 3 min)Útargetz--targetz/tools/lighter.pyT)r   r   i$úÿÿé   Úleanr'   r(   Úvz lighter copy made; publishingÚactivatez
--activateÚversioniþÿÿz goes to games; publishingzunknown job kind z/tools/publish_all.shiüÿÿz) saved but publishing failed (worker.log)ú/é   ú.zcards/z
index.jsonzjobs/lighter-z-vÚgitz-CÚaddz--)r   Úcommitz-qmzlighter copyzuse in gamesz vÚdonez
 publishedz (in games now)z as a draftz done v)'Ú__doc__r   Úosr   Úsysr   ÚpathÚdirnameÚabspathÚ__file__ÚROOTÚopenr   r   r$   r.   ÚjÚexitÚgetr1   ÚprmÚstrr   r   Ú
executabler-   r   r)   Ú
returncoder*   r+   ÚverÚmsgÚpÚsplitÚslugÚclsr   Úpathsr
   r   r   ú<module>r\      s¥  ðñ?÷ '× &Ó &Ø	‡w�w‡��r—w‘w—‘ r§w¡w§¡°xÓ'@ÓAÓB€Ù
ˆdˆVÐ#Ð$ cÓ*€ò*ò[ò]ñ 	ˆ�Ó€ÙØ€C‡H�HˆQ„KØ�E‰E�&‹M˜1Ÿ5™5 ›?Ò0¨b€	€€cÙ €j��4‘�	˜˜4˜&  ! G¡* ¨Q¨s¨eÐ4Ô 5Øˆ9ÓÙˆ�1�T‘7˜IÐ'gÔhØ/2¯w©w°xÔ/@ˆJ™˜C ™MÓ*Ñ+Àb€DØˆ
�‰˜Ÿ™¨4¨&Ð0AÐ(BÀAÀgÁJÐVÐQUÐVÐgkÐrvÔw€AÙˆ�‰��Ð˜1Ÿ8™8 E FÐ+Ñ+Ô,Ø‡|�|�qÒÙˆX�q˜‘w ©¨Q«Ô0°(°#·(±(¸1´+Ø‡|‚|ÙˆX�q˜‘w ©$¨q«'Ô2°H°C·H±H¸Q´KØ
�(‰(�.‰.Ó
×
%Ñ
%Ó
'¨Ñ
+€CØˆcˆUÐ0Ð
1�CØ	ˆZÒØˆ
�‰˜Ÿ™¨4¨&Ð0AÐ(BÀLÐRSÐT[ÑR\Ñ^aÐbeÐfoÑbpÓ^qÐrð  DHð  OSô  	T€AÙˆ�‰��ˆ˜!Ÿ(™( 4 5˜/Ñ)Ô*Ø‡|‚|ÙˆX�q˜‘w ©$¨q«'Ô2°H°C·H±H¸Q´KØ
�(‰(�.‰.Ó
×
%Ñ
%Ó
'¨Ñ
+€CØˆcˆUÐ,Ð
-�Cáˆ�1�T‘7˜HÐ(9¸$¸Ð&@ÔAÀ8À3Ç8Á8ÈAÄ;Ù €Xˆq�‰w˜	 3Ô 'Ø€J‡N�N�t�fÐ1Ð2Ð3ÀDÈtÔT€Ù €A‡H�HˆUˆVÐ�q—x‘x  Ð'Ñ'Ô (Ø‡<‚<Ùˆ�1�T‘7˜H¨¨#¨Ð.WÐ&XÔYÐ[cÐ[^×[cÑ[cÐdeÔ[fØˆ�z×Ñ˜Ó˜QÑ€Øˆ�j×Ñ�sÓ˜AÑ×$Ñ$ SÓ)€Ø�#—(‘(˜3“-�  $ Ð	(¨,Ð7Ð^bÐfoÒ^o¸mÈDÈ6ÐQSÐTWÐSXÐ<YÑ;ZÐuwÑx€Ø €
‡���t˜T 5¨$Ð7°Ð7ÈÕ MØ €
‡���t˜T 8¨UÈÐQZÒIZ±~Ð`nÐ6oÐopÐqrÐszÑq{Ðp|Ð|~ð  @Cð  Dð  5EØðØðØ.2õ4á €Xˆq�‰w˜ ! C 5¨
Ð 3ÈDÐT^ÒL^Ñ7HÐdqÑ rÐtwÔ xÙ €j��4‘�	˜  Ð&Õ 'r   