diff --git a/Tools/scripts/check_firmware_version.py b/Tools/scripts/check_firmware_version.py new file mode 100755 index 0000000000..2162dc56d7 --- /dev/null +++ b/Tools/scripts/check_firmware_version.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python +''' +check firmware-version.txt in binaries directory +''' + +import os, shutil, subprocess + +VEHICLES = ['AntennaTracker', 'Copter', 'Plane', 'Rover', 'Sub'] + +def parse_git_version(gfile): + '''parse git-version.txt, producing a firmware-version.txt''' + gv = open(gfile).readlines() + vline = gv[-1] + if not vline.startswith("APMVERSION:"): + print("Bad version %s in %s" % (vline, gfile)) + return None + vline = vline[11:] + a = vline.split('V') + if len(a) != 2: + return None + vers = a[1].strip() + if vers[-1].isdigit(): + return vers+"-FIRMWARE_VERSION_TYPE_OFFICIAL" + print("Bad vers %s in %s" % (vers, gfile)) + return None + +def check_fw_version(version): + try: + (version_numbers, release_type) = version.split("-") + (major, minor, patch) = version_numbers.split(".") + except Exception: + return False + return True + +def check_version(vehicle): + '''check firmware-version.txt version for a vehicle''' + for d in os.listdir(vehicle): + if not d.startswith("stable"): + continue + stable_dir = '%s/%s' % (vehicle, d) + for b in sorted(os.listdir(stable_dir)): + if not os.path.isdir(os.path.join(stable_dir, b)): + continue + vfile = os.path.join(stable_dir, b, "firmware-version.txt") + if os.path.exists(vfile): + v = open(vfile).read() + if check_fw_version(v): + continue + gfile = os.path.join(stable_dir, b, "git-version.txt") + if not os.path.exists(gfile): + print("Missing %s" % gfile) + continue + v = parse_git_version(gfile) + if v is not None: + open(vfile, "w").write(v) + print("Added %s" % vfile) + continue + print("Failed for %s" % gfile) + +if __name__ == "__main__": + import argparse + parser = argparse.ArgumentParser(description='check_firmware_version.py') + + args = parser.parse_args() + + for v in VEHICLES: + check_version(v)