@@ -201,6 +201,7 @@ def __init__(
201201 git_repo : str ,
202202 api_key : str ,
203203 ssh_user : str ,
204+ sign_gpg : bool ,
204205 first_state : Task | None = None ,
205206 ) -> None :
206207 self .tasks = tasks
@@ -223,6 +224,8 @@ def __init__(
223224 self .db ["auth_info" ] = api_key
224225 if not self .db .get ("ssh_user" ):
225226 self .db ["ssh_user" ] = ssh_user
227+ if not self .db .get ("sign_gpg" ):
228+ self .db ["sign_gpg" ] = sign_gpg
226229
227230 if not self .db .get ("release" ):
228231 self .db ["release" ] = release_tag
@@ -233,7 +236,8 @@ def __init__(
233236 print (f"- Normalized release tag: { release_tag .normalized ()} " )
234237 print (f"- Git repo: { self .db ['git_repo' ]} " )
235238 print (f"- SSH username: { self .db ['ssh_user' ]} " )
236- print (f"- python.org API key : { self .db ['auth_info' ]} " )
239+ print (f"- python.org API key: { self .db ['auth_info' ]} " )
240+ print (f"- Sign with GPG: { self .db ['sign_gpg' ]} " )
237241 print ()
238242
239243 def checkpoint (self ) -> None :
@@ -465,7 +469,7 @@ def bump_version(db: DbfilenameShelf) -> None:
465469
466470def create_tag (db : DbfilenameShelf ) -> None :
467471 with cd (db ["git_repo" ]):
468- if not release_mod .make_tag (db ["release" ]):
472+ if not release_mod .make_tag (db ["release" ], sign_gpg = db [ "sign_gpg" ] ):
469473 raise ReleaseException ("Error when creating tag" )
470474 subprocess .check_call (
471475 ["git" , "commit" , "-a" , "--amend" , "--no-edit" ], cwd = db ["git_repo" ]
@@ -810,7 +814,7 @@ def create_release_object_in_db(db: DbfilenameShelf) -> None:
810814 "Go to https://www.python.org/admin/downloads/release/add/ and create a new release"
811815 )
812816 if not ask_question (f"Have you already created a new release for { db ['release' ]} " ):
813- raise ReleaseException ("The django release object has not been created" )
817+ raise ReleaseException ("The Django release object has not been created" )
814818
815819
816820def wait_until_all_files_are_in_folder (db : DbfilenameShelf ) -> None :
@@ -1137,6 +1141,11 @@ def _api_key(api_key: str) -> str:
11371141 help = "Username to be used when authenticating via ssh" ,
11381142 type = str ,
11391143 )
1144+ parser .add_argument (
1145+ "--no-gpg" ,
1146+ action = "store_true" ,
1147+ help = "Skip GPG signing" ,
1148+ )
11401149 args = parser .parse_args ()
11411150
11421151 auth_key = args .auth_key or os .getenv ("AUTH_INFO" )
@@ -1164,7 +1173,7 @@ def _api_key(api_key: str) -> str:
11641173 Task (check_docker , "Checking Docker is available" ),
11651174 Task (check_docker_running , "Checking Docker is running" ),
11661175 Task (check_autoconf , "Checking autoconf is available" ),
1167- Task (check_gpg_keys , "Checking GPG keys" ),
1176+ None if args . no_gpg else Task (check_gpg_keys , "Checking GPG keys" ),
11681177 Task (
11691178 check_ssh_connection ,
11701179 f"Validating ssh connection to { DOWNLOADS_SERVER } and { DOCS_SERVER } " ,
@@ -1196,13 +1205,13 @@ def _api_key(api_key: str) -> str:
11961205 "Wait for source and docs artifacts to build" ,
11971206 ),
11981207 Task (build_sbom_artifacts , "Building SBOM artifacts" ),
1199- Task (sign_source_artifacts , "Sign source artifacts" ),
1208+ None if args . no_gpg else Task (sign_source_artifacts , "Sign source artifacts" ),
12001209 Task (upload_files_to_server , "Upload files to the PSF server" ),
12011210 Task (place_files_in_download_folder , "Place files in the download folder" ),
12021211 Task (upload_docs_to_the_docs_server , "Upload docs to the PSF docs server" ),
12031212 Task (unpack_docs_in_the_docs_server , "Place docs files in the docs folder" ),
12041213 Task (wait_until_all_files_are_in_folder , "Wait until all files are ready" ),
1205- Task (create_release_object_in_db , "The django release object has been created" ),
1214+ Task (create_release_object_in_db , "The Django release object has been created" ),
12061215 Task (post_release_merge , "Merge the tag into the release branch" ),
12071216 Task (branch_new_versions , "Branch out new versions and prepare main branch" ),
12081217 Task (post_release_tagging , "Final touches for the release" ),
@@ -1216,11 +1225,14 @@ def _api_key(api_key: str) -> str:
12161225 Task (purge_the_cdn , "Purge the CDN of python.org/downloads" ),
12171226 Task (modify_the_release_to_the_prerelease_pages , "Modify the pre-release page" ),
12181227 ]
1228+ # Remove any skipped tasks
1229+ tasks = [task for task in tasks if task ]
12191230 automata = ReleaseDriver (
12201231 git_repo = args .repo ,
12211232 release_tag = release_mod .Tag (args .release ),
12221233 api_key = auth_key ,
12231234 ssh_user = args .ssh_user ,
1235+ sign_gpg = not args .no_gpg ,
12241236 tasks = tasks ,
12251237 )
12261238 automata .run ()
0 commit comments