From 2423eadd0b6fd0eb4d92c8ddd0f605a6b1075b09 Mon Sep 17 00:00:00 2001 From: Raghuram Subramani Date: Tue, 21 Jun 2022 16:54:16 +0530 Subject: some progress --- picoducky.py | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 picoducky.py (limited to 'picoducky.py') diff --git a/picoducky.py b/picoducky.py new file mode 100644 index 0000000..a82ece0 --- /dev/null +++ b/picoducky.py @@ -0,0 +1,63 @@ +import os +import subprocess +from shutil import which +from termcolor import colored +import sys + +# Dependancy check +def depcheck(): + checklist = {} + # Returns None if docker is not present + checklist['docker'] = which('docker') + checklist['circuitpython'] = os.path.isdir('circuitpython') + return checklist + +# Build image +def buildimage(): + # Get ready to build + os.chdir('circuitpython') + # Build the image + print(colored('[+]> Building image, this may take a few minutes..', 'green')) + subprocess.call('docker build -t picoducky .', shell=True) + print("Done!") + +# Check if image already exists +def imagecheck(): + if subprocess.check_output('docker images -q picoducky 2> /dev/null', shell=True): + return True + else: + return False + +def main(): + dockerpresent = depcheck()['docker'] + circuitpythonpresent = depcheck()['circuitpython'] + + # Check if docker is present + if dockerpresent: + print(colored('[+]> Docker is present, script can continue..', 'green')) + else: + print(colored('[!]> Please make sure Docker is installed and is in your PATH.', 'red')) + + # Build image, skip build if image is already built + if imagecheck(): + print(colored("[+]> Looks like the Docker image is already built, I will skip that step.", 'green')) + else: + if circuitpythonpresent: + print(colored('[+]> Circuitpython directory is present, build can continue.', 'green')) + else: + print(colored('[-]> Circuitpython directory is absent, build cannot continue. Exitting...', 'red')) + sys.exit(1) + buildimage() + + # Run container and start build + subprocess.call("docker rm picoduckyrun >/dev/null 2>/dev/null", shell=True) + + print(colored('[+]> Everything went fine, starting firmware build..', 'green')) + subprocess.call('docker run --name picoduckyrun --mount type=bind,source="$(pwd)/generated",dst="/mounted" picoducky', shell=True) + + # Copy UF2 file + print(colored('Looks like the build succeeded, copying the file here...','green')) + subprocess.call("docker cp picoduckyrun:/circuitpython/firmware.uf2 firmware.uf2", shell=True) + +if __name__ == "__main__": + main() \ No newline at end of file -- cgit v1.2.3