75 lines
2.2 KiB
Python
75 lines
2.2 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Generic Symbol Analysis Runner for GitHub Actions
|
|
Wrapper script to run symbol analysis with proper error handling for any platform
|
|
"""
|
|
|
|
import argparse
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
from ci.util.symbol_analysis import main as symbol_analysis
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(
|
|
description="Run symbol analysis for any platform with GitHub Actions support"
|
|
)
|
|
parser.add_argument("--board", required=True, help="Board name being analyzed")
|
|
parser.add_argument("--example", default="Blink", help="Example that was compiled")
|
|
parser.add_argument(
|
|
"--skip-on-failure",
|
|
action="store_true",
|
|
help="Don't fail the build if symbol analysis fails",
|
|
)
|
|
args = parser.parse_args()
|
|
|
|
print(f"Symbol Analysis Runner - Board: {args.board}, Example: {args.example}")
|
|
|
|
# Check if build_info.json exists
|
|
build_info_path = Path(".build") / args.board / "build_info.json"
|
|
if not build_info_path.exists():
|
|
# Fall back to nested pio structure
|
|
build_info_path = Path(".build") / "pio" / args.board / "build_info.json"
|
|
|
|
if not build_info_path.exists():
|
|
message = (
|
|
f"Build info not found at {build_info_path}. Skipping symbol analysis."
|
|
)
|
|
if args.skip_on_failure:
|
|
print(f"Warning: {message}")
|
|
return 0
|
|
else:
|
|
print(f"Error: {message}")
|
|
return 1
|
|
|
|
try:
|
|
# Import and run the generic symbol analysis
|
|
print("Running symbol analysis...")
|
|
|
|
# Override sys.argv to pass the board argument to the symbol analysis script
|
|
original_argv = sys.argv
|
|
sys.argv = ["symbol_analysis.py", "--board", args.board]
|
|
|
|
try:
|
|
symbol_analysis()
|
|
print("Symbol analysis completed successfully!")
|
|
return 0
|
|
finally:
|
|
sys.argv = original_argv
|
|
|
|
except ImportError as e:
|
|
print(f"Failed to import symbol_analysis module: {e}")
|
|
if args.skip_on_failure:
|
|
return 0
|
|
return 1
|
|
except Exception as e:
|
|
print(f"Symbol analysis failed: {e}")
|
|
if args.skip_on_failure:
|
|
return 0
|
|
return 1
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|