28
28
import logging
29
29
import logging .handlers
30
30
from functools import total_ordering
31
- from os import readlink
31
+ from os import readlink , EX_OK , EX_SOFTWARE
32
32
import re
33
33
import shlex
34
34
import shutil
@@ -1044,7 +1044,7 @@ def purge_path(www_root: Path, path: Path):
1044
1044
run (["curl" , "-XPURGE" , f"https://docs.python.org/{{{ ',' .join (to_purge )} }}" ])
1045
1045
1046
1046
1047
- def main () -> None :
1047
+ def main () -> bool :
1048
1048
"""Script entry point."""
1049
1049
args = parse_args ()
1050
1050
setup_logging (args .log_directory )
@@ -1054,6 +1054,7 @@ def main() -> None:
1054
1054
del args .languages
1055
1055
del args .branch
1056
1056
todo = list (product (versions , languages ))
1057
+ all_built_successfully = True
1057
1058
while todo :
1058
1059
version , language = todo .pop ()
1059
1060
if sentry_sdk :
@@ -1063,7 +1064,7 @@ def main() -> None:
1063
1064
try :
1064
1065
lock = zc .lockfile .LockFile (HERE / "build_docs.lock" )
1065
1066
builder = DocBuilder (version , language , ** vars (args ))
1066
- builder .run ()
1067
+ all_built_successfully &= builder .run ()
1067
1068
except zc .lockfile .LockError :
1068
1069
logging .info ("Another builder is running... waiting..." )
1069
1070
time .sleep (10 )
@@ -1078,6 +1079,9 @@ def main() -> None:
1078
1079
dev_symlink (args .www_root , args .group )
1079
1080
proofread_canonicals (args .www_root , args .skip_cache_invalidation )
1080
1081
1082
+ return all_built_successfully
1083
+
1081
1084
1082
1085
if __name__ == "__main__" :
1083
- main ()
1086
+ all_built_successfully = main ()
1087
+ sys .exit (EX_OK if all_built_successfully else EX_SOFTWARE )
0 commit comments