Skip to content

Commit fa314e2

Browse files
authored
Merge pull request #3048 from adbridge/master
Make update.py test compile examples prior to updating mbed-os version.
2 parents fcfc7b4 + 479e203 commit fa314e2

File tree

4 files changed

+645
-73
lines changed

4 files changed

+645
-73
lines changed

tools/test/examples/examples.json

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

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)