Skip to content

Commit 56f59d6

Browse files
authored
Merge pull request #668 from cmonr/multi-python-circleci
Update CircleCI to run parallel Python jobs
2 parents 6419122 + 9f2c53b commit 56f59d6

File tree

4 files changed

+195
-117
lines changed

4 files changed

+195
-117
lines changed

.circleci/config.yml

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
version: 2
2+
jobs:
3+
py2:
4+
machine: true
5+
steps:
6+
- run: sudo add-apt-repository -y ppa:terry.guo/gcc-arm-embedded
7+
- run: sudo apt-get -y update
8+
- run: sudo apt-get -y install gcc-arm-none-eabi=4.9.3.2015q3-1trusty1
9+
10+
- run: python --version
11+
- run: pip --version
12+
- run: pip install pytest future
13+
- run: git config --global user.email "[email protected]"
14+
- run: git config --global user.name "mbed Test"
15+
- run: echo -e "[ui]\nusername = mbed Test <[email protected]>\n" > ~/.hgrc
16+
- checkout
17+
- run: pip install -e ./
18+
19+
- run: mbed --version
20+
- run: py.test test
21+
- run: mbed toolchain -G GCC_ARM
22+
- run: mbed target -G K64F
23+
- run: mbed config -G protocol ssh
24+
- run: mkdir .tests
25+
- run: cd .tests && mbed new new-test
26+
- run: cd .tests/new-test && mbed ls
27+
- run: cd .tests/new-test && mbed releases -r
28+
- run: cd .tests/new-test && mbed compile --source=. --source=mbed-os/TESTS/integration/basic -j 0
29+
- run: cd .tests/new-test && mbed test --compile -n mbed-os-tests-integration-basic -j 0
30+
- run: cd .tests && mbed import https://developer.mbed.org/teams/Morpheus/code/mbed-Client-Morpheus-hg hg-test
31+
- run: cd .tests/hg-test && mbed ls
32+
- run: cd .tests/hg-test && mbed releases -r
33+
- run: cd .tests/hg-test && mbed update b02527cafcde8612ff051fea57e9975aca598807 --clean
34+
- run: cd .tests/hg-test && mbed update --clean
35+
- run: cd .tests/hg-test && mbed compile -j 0
36+
- run: cd .tests && mbed import https://developer.mbed.org/users/samux/code/USBSerial_HelloWorld bld-test
37+
- run: cd .tests/bld-test && mbed ls
38+
- run: cd .tests/bld-test && mbed releases -r
39+
- run: cd .tests/bld-test/mbed && mbed update 85 --clean
40+
- run: cd .tests/bld-test && mbed update --clean
41+
- run: cd .tests/bld-test && mbed compile -m LPC1768 -j 0
42+
- run: cd .tests && mbed new supported-tests
43+
- run: |-
44+
cd .tests/supported-tests
45+
echo "Testing mbed-os-5.6.0"
46+
mbed update --clean "mbed-os-5.6.0"
47+
mbed compile -S
48+
mbed toolchain -S
49+
mbed target -S
50+
mbed export -S
51+
- run: |-
52+
cd .tests/supported-tests
53+
echo "Testing mbed-os-5.5.0"
54+
mbed update --clean "mbed-os-5.5.0"
55+
mbed compile -S
56+
mbed toolchain -S
57+
mbed target -S
58+
mbed export -S
59+
- run: |-
60+
cd .tests/supported-tests
61+
echo "Testing mbed-os-5.4.0"
62+
mbed update --clean "mbed-os-5.4.0"
63+
mbed compile -S
64+
mbed toolchain -S
65+
mbed target -S
66+
mbed export -S
67+
- run: |-
68+
cd .tests/supported-tests
69+
echo "Testing mbed-os-5.3.0"
70+
mbed update --clean "mbed-os-5.3.0"
71+
mbed compile -S
72+
mbed toolchain -S
73+
mbed target -S
74+
mbed export -S
75+
- run: |-
76+
cd .tests/supported-tests
77+
echo "Testing mbed-os-5.2.0"
78+
mbed update --clean "mbed-os-5.2.0"
79+
mbed compile -S
80+
mbed toolchain -S
81+
mbed target -S
82+
mbed export -S
83+
- run: |-
84+
cd .tests/supported-tests
85+
echo "Testing mbed-os-5.1.0"
86+
mbed update --clean "mbed-os-5.1.0"
87+
mbed compile -S
88+
mbed toolchain -S
89+
mbed target -S
90+
mbed export -S
91+
92+
py3:
93+
machine: true
94+
steps:
95+
- run: sudo add-apt-repository -y ppa:terry.guo/gcc-arm-embedded
96+
- run: sudo apt-get -y update
97+
- run: sudo apt-get -y install gcc-arm-none-eabi=4.9.3.2015q3-1trusty1
98+
- run: pyenv install 3.6.0
99+
- run: pyenv global 3.6.0
100+
101+
- run: python --version
102+
- run: pip --version
103+
- run: pip install pytest future
104+
- run: git config --global user.email "[email protected]"
105+
- run: git config --global user.name "mbed Test"
106+
- run: echo -e "[ui]\nusername = mbed Test <[email protected]>\n" > ~/.hgrc
107+
- checkout
108+
- run: pip install -e ./
109+
110+
- run: mbed --version
111+
- run: py.test test
112+
- run: mbed toolchain -G GCC_ARM
113+
- run: mbed target -G K64F
114+
- run: mbed config -G protocol ssh
115+
116+
- run: mkdir .tests
117+
- run: cd .tests && mbed new new-test
118+
- run: |-
119+
cd .tests/new-test/mbed-os
120+
git checkout master
121+
- run: cd .tests/new-test && mbed ls
122+
- run: cd .tests/new-test && mbed releases -r
123+
- run: cd .tests/new-test && mbed compile --source=. --source=mbed-os/TESTS/integration/basic -j 0
124+
- run: cd .tests/new-test && mbed test --compile -n mbed-os-tests-integration-basic -j 0
125+
126+
- run: cd .tests && mbed import https://developer.mbed.org/teams/Morpheus/code/mbed-Client-Morpheus-hg hg-test
127+
- run: cd .tests/hg-test && mbed ls
128+
- run: cd .tests/hg-test && mbed releases -r
129+
- run: cd .tests/hg-test && mbed update b02527cafcde8612ff051fea57e9975aca598807 --clean
130+
- run: cd .tests/hg-test && mbed update --clean
131+
- run: cd .tests/hg-test && mbed compile -j 0
132+
133+
- run: cd .tests && mbed import https://developer.mbed.org/users/samux/code/USBSerial_HelloWorld bld-test
134+
- run: cd .tests/bld-test && mbed ls
135+
- run: cd .tests/bld-test && mbed releases -r
136+
- run: cd .tests/bld-test/mbed && mbed update 85 --clean
137+
- run: cd .tests/bld-test && mbed update --clean
138+
- run: cd .tests/bld-test && mbed compile -m LPC1768 -j 0
139+
140+
workflows:
141+
version: 2
142+
build:
143+
jobs:
144+
- py2
145+
#- py3

circle.yml

Lines changed: 0 additions & 91 deletions
This file was deleted.

circle_tests.py

Lines changed: 47 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -26,27 +26,51 @@ def remove_readonly(func, path, _):
2626

2727
shutil.rmtree(directory, onerror=remove_readonly)
2828

29+
# Source tests from yaml config
2930
tests = None
30-
with open("circle.yml", "r") as f:
31-
types = yaml.load_all(f)
32-
for t in types:
33-
for k,v in t.items():
34-
if k == 'test':
35-
tests = v['override']
36-
37-
if tests:
38-
cwd = os.path.abspath(os.path.dirname(__file__))
39-
40-
if os.path.exists(os.path.join(cwd, '.tests')):
41-
rmtree_readonly(os.path.join(cwd, '.tests'))
42-
os.mkdir(os.path.join(cwd, '.tests'))
43-
44-
for cmd in tests:
45-
os.chdir(cwd)
46-
print "\n----------\nEXEC: \"%s\" " % cmd
47-
proc = subprocess.Popen(cmd, shell=True)
48-
proc.communicate()
49-
50-
if proc.returncode != 0:
51-
print "\n------------\nERROR: \"%s\"" % cmd
52-
sys.exit(1)
31+
with open('.circleci/config.yml', 'r') as f:
32+
data = yaml.safe_load(f)
33+
34+
# Read yaml tree
35+
if sys.version_info[0] == 3:
36+
tests = data['jobs']['py3']['steps']
37+
else:
38+
tests = data['jobs']['py2']['steps']
39+
40+
# Filter command list to only contain commands
41+
tests = [item['run'] for item in list(filter(lambda x : type(x) is dict, tests))]
42+
43+
# ... and replace new lines with ampersands
44+
tests = [item.replace('\n', ' && ') for item in tests]
45+
46+
# Exit if no tests are found
47+
if tests == None:
48+
sys.exit(1)
49+
50+
# Ignore all tests found before `pip install -e`
51+
startIndex = -1
52+
for cmd in tests:
53+
if 'pip install -e' in cmd:
54+
startIndex = tests.index(cmd) + 1
55+
break
56+
57+
if startIndex == -1:
58+
sys.exit(1)
59+
60+
# Delete `.test` directory if it exists
61+
cwd = os.path.abspath(os.path.dirname(__file__))
62+
63+
if os.path.exists(os.path.join(cwd, '.tests')):
64+
rmtree_readonly(os.path.join(cwd, '.tests'))
65+
os.mkdir(os.path.join(cwd, '.tests'))
66+
67+
# Run tests
68+
for cmd in tests[startIndex:]:
69+
os.chdir(cwd)
70+
print("\n----------\nEXEC: \"%s\" " % cmd)
71+
proc = subprocess.Popen(cmd, shell=True)
72+
proc.communicate()
73+
74+
if proc.returncode != 0:
75+
print "\n------------\nERROR: \"%s\"" % cmd
76+
sys.exit(1)

setup.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
# Copyright (c) 2016 ARM Limited, All Rights Reserved
22
# SPDX-License-Identifier: Apache-2.0
33

4-
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# Licensed under the Apache License, Version 2.0 (the "License");
55
# you may not use this file except in compliance with the License.
66

77
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
88

9-
# Unless required by applicable law or agreed to in writing, software
10-
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
1111
# either express or implied.
1212

1313
import os

0 commit comments

Comments
 (0)