ardupilot/Tools/scripts/check_firmware_version.py

68 lines
2.0 KiB
Python
Executable File

#!/usr/bin/env python
'''
check firmware-version.txt in binaries directory
'''
import os
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("-")
(_, _, _) = 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)