Skip to content

Commit bbfa954

Browse files
committed
Make update.py test compile examples prior to updating mbed-os version.
Changes: Refactor examples.py to add a new command line option to provide an update tag. Refactor examples.py to add new functionality to update the version of mbed-os in the examples to a supplied tag. Refactor examples.py to make cloning the example repos, updating their mbed-os version and compiling, into library functions and move to a new library module. Refactor the format of the examples.json file to make it compatible with both examples.py and update.py. Refactor update.py so that examples are test compiled prior to updating. Refactor update.py so that only examples tagged as auto-updatable and that fully compile are automatically updated.
1 parent 7bcc63b commit bbfa954

File tree

4 files changed

+629
-73
lines changed

4 files changed

+629
-73
lines changed

tools/test/examples/examples.json

Lines changed: 101 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,102 @@
11
{
2-
"https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-blinky" : {},
3-
"https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-mesh-minimal" :
4-
{"features": ["IPV6"]},
5-
"https://github.com/ARMmbed/mbed-os-example-client" : {"features": ["IPV6"]},
6-
"https://github.com/ARMmbed/mbed-os-example-sockets" : {"features": ["IPV6"]},
7-
"https://github.com/ARMmbed/mbed-os-example-uvisor" : {"targets": ["K64F"], "toolchains":["GCC_ARM"]}
8-
}
2+
"examples": [
3+
{
4+
"name": "mbed-os-example-blinky",
5+
"github": "https://github.com/ARMmbed/mbed-os-example-blinky",
6+
"mbed": [
7+
"https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-blinky"
8+
],
9+
"features" : [],
10+
"targets" : [],
11+
"toolchains" : [],
12+
"auto-update" : true
13+
},
14+
{
15+
"name": "mbed-os-example-tls",
16+
"github": "https://github.com/ARMmbed/mbed-os-example-tls",
17+
"mbed": [
18+
"https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-tls-benchmark",
19+
"https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-tls-tls-client",
20+
"https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-tls-hashing",
21+
"https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-tls-authcrypt"
22+
],
23+
"features" : [],
24+
"targets" : [],
25+
"toolchains" : [],
26+
"auto-update" : true
27+
},
28+
{
29+
"name": "mbed-os-example-mesh-minimal",
30+
"github":"https://github.com/ARMmbed/mbed-os-example-mesh-minimal",
31+
"mbed": [
32+
"https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-mesh-minimal"
33+
],
34+
"features" : ["IPV6"],
35+
"targets" : [],
36+
"toolchains" : [],
37+
"auto-update" : true
38+
},
39+
{
40+
"name": "mbed-os-example-ble",
41+
"github":"https://github.com/ARMmbed/mbed-os-example-ble",
42+
"mbed": [
43+
"https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-ble-Beacon",
44+
"https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-ble-HeartRate",
45+
"https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-ble-URIBeacon",
46+
"https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-ble-Thermometer",
47+
"https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-ble-LEDBlinker",
48+
"https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-ble-LED",
49+
"https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-ble-GAPButton",
50+
"https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-ble-EddystoneService",
51+
"https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-ble-EddystoneObserver",
52+
"https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-ble-Button",
53+
"https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-ble-BatteryLevel"
54+
],
55+
"features" : ["BLE"],
56+
"targets" : [],
57+
"toolchains" : [],
58+
"auto-update" : true
59+
},
60+
{
61+
"name": "mbed-os-example-client",
62+
"github":"https://github.com/ARMmbed/mbed-os-example-client",
63+
"mbed": [
64+
"https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-client"
65+
],
66+
"features" : ["IPV6"],
67+
"targets" : [],
68+
"toolchains" : [],
69+
"auto-update" : true
70+
},
71+
{
72+
"name": "mbed-os-example-sockets",
73+
"github":"https://github.com/ARMmbed/mbed-os-example-sockets",
74+
"mbed": [
75+
],
76+
"features" : ["IPV6"],
77+
"targets" : [],
78+
"toolchains" : [],
79+
"auto-update" : true
80+
},
81+
{
82+
"name": "mbed-os-example-wifi",
83+
"github":"https://github.com/ARMmbed/mbed-os-example-wifi",
84+
"mbed": [
85+
],
86+
"features" : [],
87+
"targets" : [],
88+
"toolchains" : [],
89+
"auto-update" : true
90+
},
91+
{
92+
"name": "mbed-os-example-uvisor",
93+
"github":"https://github.com/ARMmbed/mbed-os-example-uvisor",
94+
"mbed": [
95+
],
96+
"features" : [],
97+
"targets" : ["K64F"],
98+
"toolchains" : ["GCC_ARM"],
99+
"auto-update" : false
100+
}
101+
]
102+
}

tools/test/examples/examples.py

Lines changed: 25 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -11,95 +11,54 @@
1111
ROOT = abspath(dirname(dirname(dirname(dirname(__file__)))))
1212
sys.path.insert(0, ROOT)
1313

14-
from tools.build_api import get_mbed_official_release
15-
from tools.targets import TARGET_MAP
1614
from tools.utils import argparse_force_uppercase_type
17-
18-
19-
EXAMPLES = json.load(open(os.path.join(os.path.dirname(__file__),
20-
"examples.json")))
21-
22-
def print_stuff(name, lst):
23-
if lst:
24-
print("#"*80)
25-
print("# {} example combinations".format(name))
26-
print("#")
27-
for thing in lst:
28-
print(thing)
29-
30-
31-
SUPPORTED_TOOLCHAINS = ["ARM", "IAR", "GCC_ARM"]
32-
33-
34-
def target_cross_toolchain(allowed_toolchains,
35-
features=[], targets=TARGET_MAP.keys(),
36-
toolchains=SUPPORTED_TOOLCHAINS):
37-
"""Generate pairs of target and toolchains
38-
39-
Args:
40-
allowed_toolchains - a list of all possible toolchains
41-
42-
Kwargs:
43-
features - the features that must be in the features array of a
44-
target
45-
targets - a list of available targets
46-
toolchains - a list of available toolchains
47-
"""
48-
for release_target, release_toolchains in get_mbed_official_release("5"):
49-
for toolchain in release_toolchains:
50-
if (toolchain in allowed_toolchains and
51-
toolchain in toolchains and
52-
release_target in targets and
53-
all(feature in TARGET_MAP[release_target].features
54-
for feature in features)):
55-
yield release_target, toolchain
15+
import examples_lib as lib
16+
from examples_lib import SUPPORTED_TOOLCHAINS
5617

5718

5819
def main():
5920
"""Entry point"""
6021
parser = ArgumentParser()
22+
parser.add_argument("-c", dest="config", default="examples.json")
6123
subparsers = parser.add_subparsers()
6224
import_cmd = subparsers.add_parser("import")
6325
import_cmd.set_defaults(fn=do_import)
26+
version_cmd = subparsers.add_parser("tag")
27+
version_cmd.add_argument("tag")
28+
version_cmd.set_defaults(fn=do_versionning)
6429
compile_cmd = subparsers.add_parser("compile")
6530
compile_cmd.set_defaults(fn=do_compile)
6631
compile_cmd.add_argument(
6732
"toolchains", nargs="*", default=SUPPORTED_TOOLCHAINS,
6833
type=argparse_force_uppercase_type(SUPPORTED_TOOLCHAINS,
6934
"toolchain"))
7035
args = parser.parse_args()
71-
return args.fn(args)
36+
config = json.load(open(os.path.join(os.path.dirname(__file__),
37+
args.config)))
7238

39+
return args.fn(args, config)
7340

74-
def do_import(_):
41+
42+
def do_import(_, config):
7543
"""Do the import step of this process"""
76-
for example, _ in EXAMPLES.iteritems():
77-
subprocess.call(["mbed-cli", "import", example])
44+
lib.source_repos(config)
7845
return 0
7946

80-
81-
def do_compile(args):
47+
def do_compile(args, config):
8248
"""Do the compile step"""
83-
failures = []
84-
sucesses = []
85-
for example, requirements in EXAMPLES.iteritems():
86-
os.chdir(basename(example))
87-
for target, toolchain in target_cross_toolchain(args.toolchains,
88-
**requirements):
89-
proc = subprocess.Popen(["mbed-cli", "compile", "-t", toolchain,
90-
"-m", target, "--silent"])
91-
proc.wait()
92-
example_name = "{} {} {}".format(basename(example), target,
93-
toolchain)
94-
if proc.returncode:
95-
failures.append(example_name)
96-
else:
97-
sucesses.append(example_name)
98-
os.chdir("..")
49+
results = {}
50+
results = lib.compile_repos(config, args.toolchains)
51+
52+
lib.print_compilation_summary(results)
53+
failures = lib.get_num_failures(results)
54+
print("Number of failures = %d" % failures)
55+
return failures
56+
57+
def do_versionning(args, config):
58+
""" Test update the mbed-os to the version specified by the tag """
59+
lib.update_mbedos_version(config, args.tag)
60+
return 0
9961

100-
print_stuff("Passed", sucesses)
101-
print_stuff("Failed", failures)
102-
return len(failures)
10362

10463
if __name__ == "__main__":
10564
sys.exit(main())

0 commit comments

Comments
 (0)