Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit73f76d6

Browse files
authored
Merge pull request#1107 from fpistm/CLI_output
[CI] Update after arduino-cli change
2 parentsb12a554 +3e3cfb3 commit73f76d6

File tree

2 files changed

+77
-66
lines changed

2 files changed

+77
-66
lines changed

‎.github/workflows/Continuous-Integration.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,6 @@ jobs:
5353
-name:Compilation
5454
id:Compile
5555
uses:stm32duino/actions/compile-examples@master
56-
with:
57-
cli-version:'0.10.0'
5856

5957
# Use the output from the `Compile` step
6058
-name:Compilation Errors

‎CI/build/arduino-cli.py

Lines changed: 77 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
fromdatetimeimporttimedelta
55
importjson
66
importos
7+
frompackagingimportversion
78
importre
89
importshutil
910
importsubprocess
@@ -52,6 +53,8 @@
5253
arch=arch_default
5354
arduino_platform=arduino_platform_default
5455
arduino_cli=""
56+
arduino_cli_default_version="0.10.0"
57+
arduino_cli_version=arduino_cli_default_version
5558

5659
# List
5760
sketch_list= []
@@ -117,9 +120,8 @@ def create_output_log_tree():
117120
file.write(build_separator+"\n")
118121
# Folders
119122
forboardinboard_fqbn:
123+
createFolder(os.path.join(output_dir,board,bin_dir))
120124
createFolder(os.path.join(output_dir,board))
121-
ifargs.bin:
122-
createFolder(os.path.join(output_dir,board,bin_dir))
123125
createFolder(os.path.join(build_output_dir,board))
124126

125127

@@ -152,6 +154,7 @@ def create_config():
152154

153155
defcheck_config():
154156
globalarduino_cli
157+
globalarduino_cli_version
155158
globalarduino_cli_path
156159
globalsketches_path_list
157160
globalbuild_output_dir
@@ -193,37 +196,66 @@ def check_config():
193196
else:
194197
arduino_cli="arduino-cli"
195198

199+
try:
200+
output=subprocess.check_output(
201+
[arduino_cli,"version"],stderr=subprocess.DEVNULL,
202+
)
203+
exceptsubprocess.CalledProcessErrorase:
204+
print('"'+" ".join(e.cmd)+'" failed with code: {}!'.format(e.returncode))
205+
print(e.stdout)
206+
quit(e.returncode)
207+
else:
208+
res=re.match(r".*Version:\s+(\d+\.\d+\.\d+).*",output.decode("utf-8"))
209+
ifres:
210+
arduino_cli_version=res.group(1)
211+
print("Arduino CLI version used: "+arduino_cli_version)
212+
else:
213+
print(
214+
"Unable to define Arduino CLI version, use default: "
215+
+arduino_cli_default_version
216+
)
217+
196218
try:
197219
output=subprocess.check_output(
198220
[arduino_cli,"core","search","stm32","--additional-urls",stm32_url],
199221
stderr=subprocess.DEVNULL,
200222
)
223+
exceptsubprocess.CalledProcessErrorase:
224+
print('"'+" ".join(e.cmd)+'" failed with code: {}!'.format(e.returncode))
225+
print(e.stdout)
226+
quit(e.returncode)
227+
else:
201228
ifarduino_platformnotinoutput.decode("utf-8"):
202-
raisesubprocess.CalledProcessError(1,"re")
229+
print(arduino_platform+" is not installed!")
230+
quit(1)
203231
# Add core and library path to sketches_path_list
204232
try:
205233
output=subprocess.check_output(
206234
[arduino_cli,"config","dump","--format","json"],
207235
stderr=subprocess.DEVNULL,
208236
).decode("utf-8")
237+
exceptsubprocess.CalledProcessErrorase:
238+
print(
239+
'"'+" ".join(e.cmd)+'" failed with code: {}!'.format(e.returncode)
240+
)
241+
print(e.stdout)
242+
quit(e.returncode)
243+
else:
209244
cli_config=json.loads(output)
210245
ifcli_configisnotNone:
211246
ifcli_config["directories"]["data"]isnotNone:
212247
sketches_path_list.append(cli_config["directories"]["data"])
213248
else:
214-
raisesubprocess.CalledProcessError(3,"No data directory")
249+
print("No data directory")
250+
quit(1)
215251
ifcli_config["directories"]["user"]isnotNone:
216252
sketches_path_list.append(cli_config["directories"]["user"])
217253
else:
218-
raisesubprocess.CalledProcessError(2,"No user directory")
254+
print("No user directory!")
255+
quit(1)
219256
else:
220-
raisesubprocess.CalledProcessError(1,"No fqbn")
221-
exceptsubprocess.CalledProcessError:
222-
print("No arduino-cli config!")
223-
quit()
224-
exceptsubprocess.CalledProcessError:
225-
print(arduino_platform+" is not installed!")
226-
quit()
257+
print("No arduino-cli config!")
258+
quit(1)
227259

228260

229261
defload_core_config():
@@ -366,7 +398,7 @@ def manage_inos():
366398
break
367399
else:
368400
print("Sketch {} path does not exist!".format(args.ino))
369-
quit()
401+
quit(1)
370402
# Sketches listed in a file
371403
elifargs.file:
372404
assertos.path.exists(args.file),"Sketches list file does not exist"
@@ -397,7 +429,7 @@ def manage_inos():
397429
sketch_list.append(sketch_default)
398430
iflen(sketch_list)==0:
399431
print("No sketch to build for "+arduino_platform+"!")
400-
quit()
432+
quit(1)
401433

402434

403435
# Find all .ino files and save directory
@@ -429,32 +461,41 @@ def find_board():
429461
try:
430462
output=subprocess.check_output(
431463
[arduino_cli,"board","listall","--format","json"],
432-
stderr=subprocess.DEVNULL,
464+
stderr=subprocess.STDOUT,
433465
).decode("utf-8")
466+
exceptsubprocess.CalledProcessErrorase:
467+
print('"'+" ".join(e.cmd)+'" failed with code: {}!'.format(e.returncode))
468+
print(e.stdout)
469+
quit(e.returncode)
470+
else:
434471
boards_list=json.loads(output)
435472
ifboards_listisnotNone:
436473
forboardinboards_list["boards"]:
437474
ifarduino_platforminboard["FQBN"]:
438475
fqbn_list_tmp.append(board["FQBN"])
439-
ifnotlen(fqbn_list_tmp):
440-
raisesubprocess.CalledProcessError(2,"No fqbn")
441-
else:
442-
raisesubprocess.CalledProcessError(1,"No fqbn")
443-
exceptsubprocess.CalledProcessError:
444-
print("No fqbn found for "+arduino_platform+"!")
445-
quit()
476+
ifnotlen(fqbn_list_tmp):
477+
print("No boards found for "+arduino_platform)
478+
quit(1)
446479

447480
# For STM32 core, pnum is requested
448481
forfqbninfqbn_list_tmp:
449482
try:
450483
output=subprocess.check_output(
451484
[arduino_cli,"board","details","--format","json",fqbn],
452-
stderr=subprocess.DEVNULL,
485+
stderr=subprocess.STDOUT,
453486
).decode("utf-8")
487+
exceptsubprocess.CalledProcessErrorase:
488+
print(
489+
'"'+" ".join(e.cmd)+'" failed with code: {}!'.format(e.returncode)
490+
)
491+
print(e.stdout)
492+
quit(e.returncode)
493+
else:
454494
board_detail=json.loads(output)
455495
ifboard_detailisnotNone:
456496
if"config_options"notinboard_detail:
457-
raisesubprocess.CalledProcessError(3,"No config_options")
497+
print("No config_options found for "+fqbn)
498+
quit(1)
458499
foroptioninboard_detail["config_options"]:
459500
ifoption["option"]=="pnum":
460501
forvalueinoption["values"]:
@@ -466,14 +507,12 @@ def find_board():
466507
)
467508
break
468509
else:
469-
raisesubprocess.CalledProcessError(1,"No fqbn")
470-
exceptsubprocess.CalledProcessErrorase:
471-
print("No fqbn detail found for "+e.cmd+"!")
510+
print('No detail found for:"'+fqbn+'"!')
472511
ifboard_found:
473512
board_fqbn=collections.OrderedDict(sorted(board_found.items()))
474513
else:
475514
print("No board found for "+arduino_platform+"!")
476-
quit()
515+
quit(1)
477516

478517

479518
# Check the status
@@ -484,14 +523,12 @@ def check_status(status, build_conf, boardKo):
484523

485524
ifstatus[1]==0:
486525
result="\033[32msucceeded\033[0m"
487-
ifargs.bin:
488-
bin_copy(build_conf[0],sketch_name)
489526
nb_build_passed+=1
490527
elifstatus[1]==1:
491528
# Check if failed due to a region overflowed
492529
logFile=os.path.join(build_conf[3],sketch_name+".log")
493530
# error or fatal error
494-
error_pattern=re.compile(r":\d+:\d+:\s.*error:\s")
531+
error_pattern=re.compile(r":\d+:\d+:\s.*error:\s|^Error:")
495532
ld_pattern=re.compile("arm-none-eabi/bin/ld:")
496533
overflow_pattern=re.compile(
497534
r"(will not fit in |section .+ is not within )?region( .+ overflowed by [\d]+ bytes)?"
@@ -514,8 +551,6 @@ def check_status(status, build_conf, boardKo):
514551
else:
515552
# else consider it succeeded
516553
result="\033[32msucceeded*\033[0m"
517-
ifargs.bin:
518-
empty_bin(build_conf[0],sketch_name)
519554
nb_build_passed+=1
520555
else:
521556
result="\033[31merror\033[0m"
@@ -645,34 +680,6 @@ def log_final_result():
645680
print(output_dir)
646681

647682

648-
# Create an empty binary
649-
defempty_bin(board_name,sketch_name):
650-
empty_path=os.path.abspath(os.path.join(output_dir,board_name,bin_dir))
651-
createFolder(empty_path)
652-
empty_file=os.path.join(
653-
empty_path,sketch_name+"_COULD_NOT_FIT_IN_THIS_BOARD.bin"
654-
)
655-
try:
656-
f=open(empty_file,"w")
657-
exceptIOError:
658-
print("Cannot create empty binary: ",empty_file)
659-
else:
660-
f.close()
661-
662-
663-
# Create a "bin" directory for each board and copy all binary files
664-
# from the builder output directory into it
665-
defbin_copy(board_name,sketch_name):
666-
try:
667-
shutil.copy(
668-
os.path.join(build_output_dir,board_name,sketch_name+".bin"),
669-
os.path.abspath(os.path.join(output_dir,board_name,bin_dir)),
670-
)
671-
exceptOSErrorase:
672-
print("Cannot copy the binary from the arduino-cli output: "+e.strerror)
673-
raise
674-
675-
676683
# Set up specific options to customise arduino builder command
677684
defget_fqbn(b_name):
678685
ifb_nameinboard_custom_fqbnandboard_custom_fqbn[b_name]:
@@ -696,8 +703,12 @@ def genBasicCommand(b_name):
696703
cmd.append(build_output_cache_dir)
697704
ifargs.verbose:
698705
cmd.append("--verbose")
699-
cmd.append("-o")
700-
cmd.append(os.path.join(build_output_dir,b_name,"sketch"))
706+
ifversion.parse(arduino_cli_version)<=version.parse(arduino_cli_default_version):
707+
cmd.append("--output")
708+
cmd.append(os.path.join(output_dir,b_name,bin_dir,"dummy_sketch"))
709+
else:
710+
cmd.append("--output-dir")
711+
cmd.append(os.path.join(output_dir,b_name,bin_dir))
701712
cmd.append("--fqbn")
702713
cmd.append(get_fqbn(b_name))
703714
cmd.append("dummy_sketch")
@@ -727,6 +738,9 @@ def build_config(sketch, boardSkipped):
727738

728739
foridxinreversed(range(len(build_conf_list))):
729740
build_conf_list[idx][4][-1]=sketch
741+
build_conf_list[idx][4][-4]=build_conf_list[idx][4][-4].replace(
742+
"dummy_sketch",os.path.basename(sketch)
743+
)
730744
ifna_sketch_pattern:
731745
ifbuild_conf_list[idx][0]inna_sketch_pattern:
732746
forpatterninna_sketch_pattern[build_conf_list[idx][0]]:
@@ -865,7 +879,6 @@ def build(build_conf):
865879
)
866880

867881
g1=parser.add_mutually_exclusive_group()
868-
g1.add_argument("--bin",help="save binaries",action="store_true")
869882
g1.add_argument("--ci",help="custom configuration for CI build",action="store_true")
870883

871884
# Sketch options

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp