@@ -942,22 +942,26 @@ def purge_the_cdn(db: ReleaseShelf) -> None:
942942        "https://www.python.org/downloads/windows/" ,
943943        "https://www.python.org/downloads/macos/" ,
944944    ]
945-     # Purge the source URLs and their associated metadata files. 
946-     source_urls  =  [
947-         f"https://www.python.org/ftp/python/{ normalized_release }  /Python-{ db ['release' ]}  .tgz" ,
948-         f"https://www.python.org/ftp/python/{ normalized_release }  /Python-{ db ['release' ]}  .tar.xz" ,
949-     ]
950-     for  source_url  in  source_urls :
951-         urls .extend (
952-             [
953-                 f"{ source_url }  " ,
954-                 f"{ source_url }  .asc" ,
955-                 f"{ source_url }  .crt" ,
956-                 f"{ source_url }  .sig" ,
957-                 f"{ source_url }  .sigstore" ,
958-                 f"{ source_url }  .spdx.json" ,
959-             ]
945+ 
946+     # Recursively discover artifacts to purge. 
947+     ftp_download_pages  =  [f"https://www.python.org/ftp/python/{ normalized_release }  /" ]
948+     while  ftp_download_pages :
949+         ftp_download_page  =  ftp_download_pages .pop (0 )
950+         req  =  urllib .request .Request (
951+             method = "GET" , url = ftp_download_page , headers = headers 
960952        )
953+         resp  =  urllib .request .urlopen (req )
954+         if  resp .code  !=  200 :
955+             raise  RuntimeError ("Failed to purge the python.org/downloads CDN" )
956+         for  link  in  re .findall (r"<a href=\"([^\"]+)\">" , resp .read ().decode ()):
957+             if  link  in  ("../" , "./" ):  # Special value, ignore it. 
958+                 continue 
959+ 
960+             if  link .endswith ("/" ):  # Directory, recurse into it. 
961+                 ftp_download_pages .append (f"{ ftp_download_page } { link }  " )
962+ 
963+             # We want to purge both directories and files. 
964+             urls .append (f"{ ftp_download_page } { link }  " )
961965
962966    for  url  in  urls :
963967        req  =  urllib .request .Request (url = url , headers = headers , method = "PURGE" )
0 commit comments