Last active
November 1, 2024 03:17
-
-
Save furushchev/a8d126aed8f160379665cafe632b74e1 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
import argparse | |
import subprocess | |
import sys | |
import requests | |
import yaml | |
def get_noetic_repos(targets, excludes=None): | |
cmd = [ | |
'rosinstall_generator', | |
'--rosdistro', 'noetic', | |
'--upstream', | |
'--deps', | |
'--format', 'repos', | |
*targets, | |
] | |
if excludes: | |
cmd += ['--exclude', *excludes] | |
rosinstall_generator = subprocess.run(cmd, check=True, capture_output=True) | |
repos = yaml.safe_load(rosinstall_generator.stdout) | |
return repos['repositories'] | |
def get_obese_repos(allowed_list=None): | |
all_data = [] | |
page = 0 | |
while True: | |
response = requests.get( | |
url='https://api.github.com/orgs/ros-o/repos', | |
params={ | |
'per_page': 100, | |
'page': page, | |
}, | |
headers={ | |
'Accept': 'application/vnd.github+json', | |
'X-GitHub-Api-Version': '2022-11-28', | |
}) | |
response.raise_for_status() | |
if data := response.json(): | |
all_data += data | |
page += 1 | |
else: | |
break | |
repositories = {} | |
for entry in all_data: | |
name = entry['name'] | |
if allowed_list and name not in allowed_list: | |
continue | |
repositories[entry['name']] = { | |
'type': 'git', | |
'url': entry['clone_url'], | |
'version': entry['default_branch'], | |
} | |
return repositories | |
def main(): | |
p = argparse.ArgumentParser() | |
p.add_argument('--output', type=str, default='-') | |
# NOTE: | |
# As of 2024/10/30, some dependencies of four_wheel_steering_controller are not listed | |
# in the desktop_full, including four_wheel_steering_msgs, urdf_geometry_parser. | |
# We need to set four_wheel_steering_controller explicitly. | |
p.add_argument('--target', type=str, nargs='+', | |
default=['desktop_full', 'four_wheel_steering_controller']) | |
p.add_argument('--exclude', type=str, nargs='*', | |
default=['stage', 'stage_ros']) | |
args = p.parse_args() | |
noetic_repos = get_noetic_repos(args.target, args.exclude) | |
obese_repos = get_obese_repos(allowed_list=noetic_repos) | |
repos = noetic_repos.copy() | |
repos.update(obese_repos) | |
if args.output == '-': | |
stream = sys.stdout | |
else: | |
stream = open(args.output, 'w') | |
yaml.safe_dump({'repositories': repos}, stream) | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment