(out: IO[str])
| 261 | |
| 262 | |
| 263 | def main(out: IO[str]) -> str | int | None: |
| 264 | parser = argparse.ArgumentParser() |
| 265 | parser.add_argument("-d", "--dest-dir", type=Path, default=PACKAGE_DIR / "complete-platforms") |
| 266 | parser.add_argument("--pbs-release") |
| 267 | parser.add_argument("--python-version") |
| 268 | parser.add_argument("--encoded-scie-config") |
| 269 | parser.add_argument("--all", action="store_true") |
| 270 | parser.add_argument("-f", "--force", action="store_true") |
| 271 | parser.add_argument("--lock-file", type=Path, default=PACKAGE_DIR / "pex-scie.lock") |
| 272 | sync_lock_options = parser.add_mutually_exclusive_group() |
| 273 | sync_lock_options.add_argument("-L", "--only-sync-lock", default=False, action="store_true") |
| 274 | sync_lock_options.add_argument( |
| 275 | "--no-sync-lock", dest="sync_lock", default=True, action="store_false" |
| 276 | ) |
| 277 | parser.add_argument("-v", "--verbose", action="store_true") |
| 278 | try: |
| 279 | options = parser.parse_args() |
| 280 | except (ArgumentError, ArgumentTypeError) as e: |
| 281 | return str(e) |
| 282 | |
| 283 | scie_config = ScieConfig.load( |
| 284 | pbs_release=options.pbs_release, |
| 285 | python_version=options.python_version, |
| 286 | encoded_config=options.encoded_scie_config, |
| 287 | ) |
| 288 | |
| 289 | logging.basicConfig(level=logging.INFO if options.verbose else logging.WARNING) |
| 290 | |
| 291 | generated_files: list[Path] = [] |
| 292 | if not options.only_sync_lock: |
| 293 | if options.all: |
| 294 | try: |
| 295 | generated_files.extend( |
| 296 | ensure_all_complete_platforms( |
| 297 | dest_dir=options.dest_dir, scie_config=scie_config, force=options.force |
| 298 | ) |
| 299 | ) |
| 300 | except ( |
| 301 | GitHubError, |
| 302 | github.GithubException, |
| 303 | github.BadAttributeException, |
| 304 | httpx.HTTPError, |
| 305 | ) as e: |
| 306 | return str(e) |
| 307 | else: |
| 308 | current_platform = scie_config.current_platform() |
| 309 | complete_platform_file = options.dest_dir / f"{current_platform.name}.json" |
| 310 | try: |
| 311 | create_complete_platform( |
| 312 | complete_platform_file=complete_platform_file, platform=current_platform |
| 313 | ) |
| 314 | except subprocess.CalledProcessError as e: |
| 315 | return str(e) |
| 316 | generated_files.append(complete_platform_file) |
| 317 | |
| 318 | if options.only_sync_lock or options.sync_lock: |
| 319 | try: |
| 320 | create_lock( |
no test coverage detected