Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(abr-testing,opentrons): make file command to push desired folders to list of robot ips #16909

Merged
merged 12 commits into from
Nov 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,10 @@ push:
sleep 1
$(MAKE) -C $(UPDATE_SERVER_DIR) push

.PHONY: push-folder
PUSH_HELPER := abr-testing/abr_testing/tools/make_push.py
push-folder:
$(OT_PYTHON) $(PUSH_HELPER)

.PHONY: push-ot3
push-ot3:
Expand Down
95 changes: 95 additions & 0 deletions abr-testing/abr_testing/tools/make_push.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
"""Push one or more folders to one or more robots."""
import subprocess
import multiprocessing
import json

global folders
# Opentrons folders that can be pushed to robot
folders = [
"abr-testing",
"hardware-testing",
"abr-testing + hardware-testing",
"other",
]


def push_subroutine(cmd: str) -> None:
"""Pushes specified folder to specified robot."""
try:
subprocess.run(cmd)
except Exception:
print("failed to push folder")
raise


def main(folder_to_push: str, robot_to_push: str) -> int:
"""Main process!"""
cmd = "make -C {folder} push-ot3 host={ip}"
robot_ip_path = ""
push_cmd = ""
folder_int = int(folder_to_push)
if folders[folder_int].lower() == "abr-testing + hardware-testing":
if robot_to_push.lower() == "all":
robot_ip_path = input("Path to robot ips: ")
with open(robot_ip_path, "r") as ip_file:
robot_json = json.load(ip_file)
robot_ips_dict = robot_json.get("ip_address_list")
robot_ips = list(robot_ips_dict.keys())
ip_file.close()
else:
robot_ips = [robot_to_push]
for folder_name in folders[:-2]:
# Push abr-testing and hardware-testing folders to all robots
for robot in robot_ips:
print_proc = multiprocessing.Process(
target=print, args=(f"Pushing {folder_name} to {robot}!\n\n",)
)
print_proc.start()
print_proc.join()
push_cmd = cmd.format(folder=folder_name, ip=robot)
process = multiprocessing.Process(
target=push_subroutine, args=(push_cmd,)
)
process.start()
process.join()
print_proc = multiprocessing.Process(target=print, args=("Done!\n\n",))
print_proc.start()
print_proc.join()
else:

if folder_int == (len(folders) - 1):
folder_name = input("Which folder? ")
else:
folder_name = folders[folder_int]
if robot_to_push.lower() == "all":
robot_ip_path = input("Path to robot ips: ")
with open(robot_ip_path, "r") as ip_file:
robot_json = json.load(ip_file)
robot_ips = robot_json.get("ip_address_list")
ip_file.close()
else:
robot_ips = [robot_to_push]

# Push folder to robots
for robot in robot_ips:
print_proc = multiprocessing.Process(
target=print, args=(f"Pushing {folder_name} to {robot}!\n\n",)
)
print_proc.start()
print_proc.join()
push_cmd = cmd.format(folder=folder_name, ip=robot)
process = multiprocessing.Process(target=push_subroutine, args=(push_cmd,))
process.start()
process.join()
print_proc = multiprocessing.Process(target=print, args=("Done!\n\n",))
print_proc.start()
print_proc.join()
return 0


if __name__ == "__main__":
for i, folder in enumerate(folders):
print(f"{i}) {folder}")
folder_to_push = input("Please Select a Folder to Push: ")
robot_to_push = input("Type in robots ip (type all for all): ")
print(main(folder_to_push, robot_to_push))
Loading