
    i                     4   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ZdZ	dZ
dZ ej                  d      Z ej                  d	      Z ej                  d
      Z ej                  d      ZdefdZdedededefdZdededefdZd Zedk(  r e        yy)u   
Extension manifest 버전 bump 강제 정책 (task-2447).

Usage:
  python3 scripts/extension_version_bump.py --check
  python3 scripts/extension_version_bump.py --sync
  python3 scripts/extension_version_bump.py --check --extension-dir /custom/path
    N)Pathz#/home/jay/projects/InsuRo/extensionz>/home/jay/projects/InsuRo/server/config/extension_version.jsonz./home/jay/projects/InsuRo/extension/popup.htmlzJonghyukJeon/InsuRoz^\d+\.\d+\.\d+$zv\d+\.\d+\.\d+zd^https://github\.com/.+/releases/download/extension-v\d+\.\d+\.\d+/insuro-helper-\d+\.\d+\.\d+\.zip$z/downloads/extension_dirc                 z   | dz  }|j                         s#t        d|        t        j                  d       t	        |d      5 }t        j                  |      }d d d        j                  dd      }t        j                  |      s$t        d| d	       t        j                  d       |S # 1 sw Y   VxY w)
Nmanifest.jsonu   FAIL: manifest.json 없음 —    utf-8encodingversion uT   FAIL: manifest.json의 version 키가 없거나 semver 형식(X.Y.Z) 불일치 — '')
existsprintsysexitopenjsonloadget	SEMVER_REmatch)r   manifest_pathfdatar   s        O/home/jay/workspace/.worktrees/task-2457-dev3/scripts/extension_version_bump.pyload_manifestr      s    !O3M!/?@	mg	. !yy|hhy"%G??7#deldmmnopN s   B11B:config_file
popup_filereturnc                    g }| dz  }|j                         s|j                  d|        d }nj	 t        |d      5 }t        j                  |      }d d d        j                  dd      }t        j                  |      s|j                  d| d       d }|j                         r9|j                  d      }	t        j                  |	      r&|j                  d
       n|j                  d|        |j                         rq|ro	 t        |d      5 }t        j                  |      }
d d d        
j                  d      xs |
j                  dd      }||k7  r|j                  d|d|d       n$|j                         s|j                  d|        |j                         r	 t        |d      5 }t        j                  |      }
d d d        
j                  dd      }t        j                  |      r|j                  d|d       n,|r*t        j                  |      s|j                  d|d       |r!t        d       |D ]  }t        d|         yt        d|d       y# 1 sw Y   "xY w# t        $ r!}|j                  d	|        d }Y d }~d }~ww xY w# 1 sw Y   xY w# t        $ r}|j                  d|        Y d }~Bd }~ww xY w# 1 sw Y   xY w# t        $ r Y w xY w)Nr   u   manifest.json 없음 — r   r	   r   r   u>   manifest.json version 키 없음 또는 semver 불일치 — 'r   u    manifest.json 파싱 오류 — uU   popup.html에 hardcoded version 발견 — chrome.runtime.getManifest() 사용 필요u   popup.html 없음 — latest_versionzextension_version.json version(u   ) ≠ manifest version()u)   extension_version.json 파싱 오류 — u"   extension_version.json 없음 — download_urluU   download_url에 legacy '/downloads/...' 경로 발견 — GitHub release URL 필요 (u9   download_url이 GitHub release URL 패턴 불일치 — (zFAIL:z  - r   zPASS: manifest version=u2   , extension_version.json 일치, popup.html 정상r   )r   appendr   r   r   r   r   r   	Exception	read_textHARDCODED_VERSION_REsearchLEGACY_URL_REGITHUB_RELEASE_URL_REr   )r   r   r   failuresr   manifest_versionr   manifest_dataepopup_contentconfig_dataconfig_versionr#   s                r   
check_moder2   ,   s   H "O3M!3M?CD		$mg6 -! $		!-,00B???#34"`aq`rrs tu#'  ",,g,>&&}5OOg 	0=>  0		MkG4 +"iil+(__Y7`;??K[]_;`N!115n5GG^_o^rrst
 !<[MJK 	kG4 +"iil+&??>2>L##L1klxk{{|} &;&A&A,&OOP\O__`a g 	AD*	'(8';;mnow- -  	$OO>qcBC#	$"+ +  	MOOGsKLL	M+ +  		s   J  I3AJ  	J: J-,A
J: ,K2 9K%A1K2 3I=8J   	J*	J%%J*-J72J: :	K"KK"%K/*K2 2	K>=K>c           	         t        |       }t        j                  j                  dt              }||d| d| d| dd| d| d| d}|j
                  j                  d	d	
       t        |dd      5 }t        j                  ||dd       |j                  d       d d d        t        d|d|       t        d|        y# 1 sw Y   )xY w)NINSURO_GITHUB_REPOzhttps://github.com/z/releases/download/extension-vz/insuro-helper-z.zipzExtension vz/releases/tag/extension-v)r!   r   r#   release_notesrelease_notes_urlT)parentsexist_okwr   r	      F)indentensure_ascii
u7   PASS: extension_version.json 갱신 완료 — version=z, repo=u
     파일: r   )r   osenvironr   DEFAULT_GITHUB_REPOparentmkdirr   r   dumpwriter   )r   r   r   github_repor0   r   s         r   	sync_moderF   t   s    M*G**..!57JKK "!+ /!/'$@ 'wi0!+.GyQK TD9	k3	1 Q		+q?	 
CG;gVaUd
ef	J{m
$% s   6+C		Cc                     t        j                  d      } | j                  d      }|j                  ddd       |j                  d	dd
       | j                  dt        dt         d       | j                  dt
        dt
         d       | j                  dt        dt         d       | j                         }t        |j                        }t        |j                        }t        |j                        }|j                  r!t        j                  t        |||             y |j                   r t        j                  t#        ||             y y )Nu8   Extension manifest 버전 bump 강제 정책 (task-2447))descriptionT)requiredz--check
store_trueu#   검증 모드: 불일치 시 exit 1)actionhelpz--syncuH   동기화 모드: extension_version.json을 manifest 기준으로 갱신z--extension-diru'   extension 디렉토리 경로 (기본: r"   )defaultrL   z--config-fileu'   extension_version.json 경로 (기본: z--popup-fileu   popup.html 경로 (기본: )argparseArgumentParseradd_mutually_exclusive_groupadd_argumentDEFAULT_EXTENSION_DIRDEFAULT_CONFIG_FILEDEFAULT_POPUP_FILE
parse_argsr   r   r   r   checkr   r   r2   syncrF   )parser
mode_groupargsr   r   r   s         r   mainr[      sX   $$NF 44d4CJ2  
 W  
 %67L6MQO  
 #67J6K1M  
 "*+=*>a@   D++,Mt''(Kdoo&JzzM;
CD	=+67 
    __main__)__doc__rN   r   r>   rer   pathlibr   rR   rS   rT   r@   compiler   r'   r*   r)   r   intr2   rF   r[   __name__ r\   r   <module>re      s      	 	 
 = V E + BJJ)*	!rzz"34 "

k  

>* Ed E E4 EC EPT   8(8V zF r\   