-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathArtifactCreation.kibot.yaml
2281 lines (2227 loc) · 120 KB
/
ArtifactCreation.kibot.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# ATTENTION! THIS ISN'T A FULLY FUNCTIONAL EXAMPLE.
# You should take portions of this example and edit the options to make
# them suitable for your use.
# This file is useful to know all the available options.
kibot:
version: 1
global:
# Acknoledge some of the WARNINGS thrown in the process
# Errors in other areas, when filtered, will appear as warnings, and can be also be filtered here too
filters:
# When running KiBot in Github, it will complain that we have no kicad_common.json
- filter: "No kicad_common"
number: 8
regex: 'Unable to find KiCad configuration file'
# ... and again when doing the DRC
- filter: "No kicad_common while DRC"
number: 58
regex: 'Missing KiCad main config file'
# ... or user templates...
- filter: "No user templates"
number: 10
regex: 'Unable to find KiCad user templates'
# Even when passing a kicad_common.json, it has no environmental vars
- filter: "No Environmental Vars in Kicad Config"
number: 9
regex: 'KiCad config without environment.vars section'
# I "think" the image has no 3D models to reduce size...
- filter: 'No 3D Models'
number: 10
regex: 'Unable to find KiCad 3D models'
# Silkscreen on the Gruffalo
- filter: "Gruffalo Silk"
number: 58
regex: '(?s)Polygon on B.Silkscreen'
# solder_mask_color: white
# silk_screen_color: black
resources_dir: "./resources"
pcb_finish: ENIG
preflight:
# [dict] Annotates the PCB according to physical coordinates.
# This preflight modifies the PCB and schematic, use it only in revision control environments.
# Used to assign references according to footprint coordinates.
# The project must be fully annotated first.
# annotate_pcb:
# top_main_axis: y
# top_main_ascending: true
# top_sec ondary_ascending: true
# top_start: 1
# bottom_main_axis: y
# bottom_main_ascending: true
# bottom_secondary_ascending: true
# bottom_start: 101
# use_position_of: 'footprint'
# grid: 1.0
# [boolean=false] Annotates all power components.
# This preflight modifies the schematic, use it only in revision control environments.
# Used to solve ERC problems when using filters that remove power reference numbers.
# annotate_power: true
# [boolean=false] Zones are filled before doing any operation involving PCB layers.
# The original PCB remains unchanged.
check_zone_fills: true
# [boolean=false] Option for `run_erc`. ERC warnings are considered errors.
erc_warnings: false
# [boolean=false] Fill all zones again and save the PCB.
fill_zones: true
# [list(dict)] A list of entries to filter out ERC/DRC messages.
# Note that ignored errors will become KiBot warnings (i.e. `(W058) ...`).
# To farther ignore these warnings use the `filters` option in the `global` section.
# Acknowledge DRC errors
filters:
# Silkscreen on the Gruffalo
- filter: "Gruffalo Silk"
error: 'silk_over_copper'
regex: '(?s)Polygon on B.Silkscreen'
# [boolean=false] Option for `run_drc`. Ignores the unconnected nets. Useful if you didn't finish the routing.
ignore_unconnected: false
# [dict] Replaces tags in the PCB. I.e. to insert the git hash or last revision date.
# This is useful for KiCad 5, use `set_text_variables` when using KiCad 6.
# This preflight modifies the PCB. Even when a back-up is done use it carefully.
# pcb_replace:
# date_command: "git log -1 --format='%as' -- $KIBOT_PCB_NAME"
# replace_tags:
# - tag: '@git_hash@'
# command: 'git log -1 --format="%h" $KIBOT_PCB_NAME'
# before: 'Git hash: <'
# after: '>'
# [boolean=false] Runs the DRC (Distance Rules Check). To ensure we have a valid PCB.
# The report file name is controlled by the global output pattern (%i=drc %x=txt).
# Note that the KiCad 6 *Test for parity between PCB and schematic* option is not supported.
# If you need to check the parity use the `update_xml` preflight.
run_drc: true
# [boolean=false] Runs the ERC (Electrical Rules Check). To ensure the schematic is electrically correct.
# The report file name is controlled by the global output pattern (%i=erc %x=txt).
run_erc: true
# [dict] Replaces tags in the schematic. I.e. to insert the git hash or last revision date.
# This is useful for KiCad 5, use `set_text_variables` when using KiCad 6.
# This preflight modifies the schematics. Even when a back-up is done use it carefully.
# sch_replace:
# date_command: "git log -1 --format='%as' -- $KIBOT_SCH_NAME"
# replace_tags:
# - tag: '@git_hash@'
# command: 'git log -1 --format="%h" $KIBOT_SCH_NAME'
# before: 'Git hash: <'
# after: '>'
# [dict|list(dict)] Defines KiCad 6 variables.
# They are expanded using ${VARIABLE}, and stored in the project file.
# This preflight replaces `pcb_replace` and `sch_replace` when using KiCad 6.
# The KiCad project file is modified.
set_text_variables:
- name: 'GIT_HASH'
command: 'git log -1 --format="%h" $KIBOT_PCB_NAME'
before: '<'
after: '>'
- name: 'TODAY'
command: 'date +"%Y-%m-%d"'
# [boolean=false] Update the QR codes.
# Complements the `qr_lib` output.
# # The KiCad 6 files and the KiCad 5 PCB needs manual update, generating a new library isn't enough.
# update_qr: true
# [boolean=false|dict] Update the XML version of the BoM (Bill of Materials).
# To ensure our generated BoM is up to date.
# Note that this isn't needed when using the internal BoM generator (`bom`).
# You can compare the PCB and schematic netlists using it.
update_xml: true
import:
- file: config/bom.kibot.yaml
definitions:
BOMOUTPUTDIR: 'Artifacts/BoM'
BOMFORMAT: 'XLSX'
- file: config/ibom.kibot.yaml
- file: config/gerbers.kibot.yaml
- file: config/schematic.kibot.yaml
- file: config/blender.kibot.yaml
- file: config/stenciljig.kibot.yaml
- file: config/stepmodel.kibot.yaml
- file: config/archive.kibot.yaml
# outputs:
#======================================================
# LATER
# # Diff:
# # Recursive git submodules aren't supported (submodules inside submodules)
# - name: 'diff_example'
# comment: 'Generates a PDF with the differences between two PCBs or schematics.'
# type: 'diff'
# dir: 'Example/diff_dir'
# options:
# # [boolean=false] When enabled we create a symlink to the output file with a name that contains the
# # git hashes involved in the comparison. If you plan to compress the output don't
# # forget to disable the `follow_links` option
# add_link_id: false
# # [boolean=false] Always fail if the old/new file doesn't exist. Currently we don't fail if they are from a repo.
# # So if you refer to a repo point where the file wasn't created KiBot will use an empty file.
# # Enabling this option KiBot will report an error
# always_fail_if_missing: false
# # [string=''] Directory to cache the intermediate files. Leave it blank to disable the cache
# cache_dir: ''
# # [boolean=false] Modifies the behavior of `add_link_id` to create a copy of the file instead of a
# # symlink. Useful for some Windows setups
# copy_instead_of_link: false
# # [string='red_green'] [red_green,stats] In the `red_green` mode added stuff is green and red when removed.
# # The `stats` mode is used to meassure the amount of difference. In this mode all
# # changes are red, but you can abort if the difference is bigger than certain threshold
# diff_mode: 'red_green'
# # [boolean=false] When `old_type` and/or `new_type` are `git` KiBot will checkout the indicated point.
# # Before doing it KiBot will stash any change. Under some circumstances git could fail
# # to do a checkout, even after stashing, this option can workaround the problem.
# # Note that using it you could potentially lose modified files. For more information
# # read https://stackoverflow.com/questions/1248029/git-pull-error-entry-foo-not-uptodate-cannot-merge
# force_checkout: false
# # [number=5] [0,100] Color tolerance (fuzzyness) for the `stats` mode
# fuzz: 5
# # [string|list(string)] The file you want to compare. Leave it blank for the current PCB/SCH.
# # A list is accepted only for the `multivar` type. Consult the `old` option for more information
# new: ''
# # [string='current'] [git,file,output,multivar,current] How to interpret the `new` name. Use `git` for a git hash, branch, etc.
# # Use `current` for the currently loaded PCB/Schematic.
# # Use `file` for a file name. Use `output` to specify the name of a `pcb_variant`/`sch_variant` output.
# # Use `multivar` to compare a set of variants, in this mode `new` is the list of outputs for the variants.
# # This is an extension of the `output` mode.
# # If `old` is also `multivar` then it becomes the reference, otherwise we compare using pairs of variants
# new_type: 'current'
# # [string='HEAD'] Reference file. When using git use `HEAD` to refer to the last commit.
# # Use `HEAD~` to refer the previous to the last commit.
# # As `HEAD` is for the whole repo you can use `KIBOT_LAST-n` to make
# # reference to the changes in the PCB/SCH. The `n` value is how many
# # changes in the history you want to go back. A 0 is the same as `HEAD`,
# # a 1 means the last time the PCB/SCH was changed, etc.
# # Use `KIBOT_TAG-n` to search for the last tag skipping `n` tags.
# # Important: when using the `checkout` GitHub action you just get the
# # last commit. To clone the full repo use `fetch-depth: '0'`
# old: 'HEAD'
# # [string='git'] [git,file,output,multivar] How to interpret the `old` name. Use `git` for a git hash, branch, etc.
# # Use `file` for a file name. Use `output` to specify the name of a `pcb_variant`/`sch_variant` output.
# # Use `multivar` to specify a reference file when `new_type` is also `multivar`
# old_type: 'git'
# # [boolean=false] Only include the pages with differences in the output PDF.
# # Note that when no differeces are found we get a page saying *No diff*
# only_different: false
# # [boolean=false] Compare only the main schematic page (root page)
# only_first_sch_page: false
# # [string='%f-%i%I%v.%x'] Filename for the output (%i=diff_pcb/diff_sch, %x=pdf). Affected by global options
# output: '%f-%i%I%v.%x'
# # [boolean=true] Compare the PCB, otherwise compare the schematic
# pcb: true
# # [number=0] [0,1000000] Error threshold for the `stats` mode, 0 is no error. When specified a
# # difference bigger than the indicated value will make the diff fail.
# # KiBot will return error level 29 and the diff generation will be aborted
# threshold: 0
# # [boolean=false] When creating the link name of an output file related to a variant use the variant
# # `file_id` instead of its name
# use_file_id: false
# layers: all
# # KiCost (KiCad Cost calculator):
# # For more information: https://github.com/INTI-CMNB/KiCost
# # This output is what you get from the KiCost plug-in (eeschema).
# # You can get KiCost costs using the internal BoM output (`bom`).
# - name: 'kicost_example'
# comment: 'Generates a spreadsheet containing components costs.'
# type: 'kicost'
# dir: 'Example/kicost_dir'
# options:
# # [list(dict)] Add components from other projects
# aggregate:
# # `board_qty` is an alias for `number`
# # [string=''] Name of the XML to aggregate
# - file: ''
# # [number=100] Number of boards to build (components multiplier)
# number: 100
# # [string=' '] Variant for this project
# variant: ' '
# # `board_qty` is an alias for `number`
# # [string|list(string)=USD] Currency priority. Use ISO4217 codes (i.e. USD, EUR)
# currency: USD
# # [string|list(string)] Include this distributors list. Default is all the available
# distributors:
# # [string|list(string)='_none'] Name of the filter to mark components as not fitted.
# # A short-cut to use for simple cases where a variant is an overkill.
# # Don't use the `kicost_variant` when using internal variants/filters
# dnf_filter: '_none'
# # [string|list(string)] List of fields to be added to the global data section
# fields:
# # [string|list(string)] List of fields that can be different for a group.
# # Parts with differences in these fields are grouped together, but displayed individually
# group_fields:
# # [string|list(string)] List of fields to be ignored
# ignore_fields:
# # [string=''] Regular expression to match the variant field (KiCost option, not internal variants)
# kicost_variant: ''
# # [boolean=false] Do not collapse the part references (collapse=R1-R4)
# no_collapse: false
# # [string|list(string)] Exclude this distributors list. They are removed after computing `distributors`
# no_distributors:
# # [boolean=false] Do not look for components price. For testing purposes
# no_price: false
# # [number=100] Number of boards to build (components multiplier)
# number: 100
# # [string='%f-%i%I%v.%x'] Filename for the output (%i=kicost, %x=xlsx). Affected by global options
# output: '%f-%i%I%v.%x'
# # [string|list(string)='_none'] Name of the filter to transform fields before applying other filters.
# # A short-cut to use for simple cases where a variant is an overkill
# pre_transform: '_none'
# # [boolean=false] Include the catalogue links in the catalogue code
# show_cat_url: false
# # [string|list(string)] Declare part fields to include in multipart split process
# split_extra_fields:
# # [list(dict)] Fields to rename (KiCost option, not internal filters)
# translate_fields:
# # [string=''] Name of the field to rename
# - field: 'mpn'
# # [string=''] New name
# name: 'manf#'
# # [string=''] Board variant to apply.
# # Don't use the `kicost_variant` when using internal variants/filters
# variant: ''
# # Design report:
# # Mainly oriented to be sent to the manufacturer or check PCB details.
# # You can expand internal values, KiCad text variables and environment
# # variables using `${VARIABLE}`
# - name: 'report_example'
# comment: 'Generates a report about the design.'
# type: 'report'
# dir: 'Example/report_dir'
# options:
# # [string='markdown'] Original format for the report conversion. Current templates are `markdown`. See `do_convert`
# convert_from: 'markdown'
# # [string='pdf'] Target format for the report conversion. See `do_convert`
# convert_to: 'pdf'
# # [string='%f-%i%I%v.%x'] Converted output file name (%i='report', %x=`convert_to`).
# # Note that the extension should match the `convert_to` value. Affected by global options
# converted_output: '%f-%i%I%v.%x'
# # [boolean=false] Run `Pandoc` to convert the report. Note that Pandoc must be installed.
# # The conversion is done assuming the report is in `convert_from` format.
# # The output file will be in `convert_to` format.
# # The available formats depends on the `Pandoc` installation.
# # In CI/CD environments: the `kicad_auto_test` docker image contains it.
# # In Debian/Ubuntu environments: install `pandoc`, `texlive`, `texlive-latex-base` and `texlive-latex-recommended`
# do_convert: false
# # [string='10F'] Which Eurocircuits class are we aiming at
# eurocircuits_class_target: '10F'
# # [number=0.45] When computing the Eurocircuits category: Final holes sizes smaller or equal to this given
# # diameter can be reduced to accommodate the correct annular ring values.
# # Use 0 to disable it
# eurocircuits_reduce_holes: 0.45
# # [string='%f-%i%I%v.%x'] Output file name (%i='report', %x='txt'). Affected by global options
# output: '%f-%i%I%v.%x'
# # [string='full'] Name for one of the internal templates (full, full_svg, simple) or a custom template file.
# # Environment variables and ~ are allowed.
# # Note: when converting to PDF PanDoc can fail on some Unicode values (use `simple_ASCII`)
# template: 'full'
# ======================================================================================================================
#
# Archive files
#
# ======================================================================================================================
# # Archiver (files compressor):
# # This is used to generate groups of files in compressed file format.
# - name: 'compress_example'
# comment: 'Generates a compressed file containing output files.'
# type: 'compress'
# dir: 'Example/compress_dir'
# options:
# # [string='auto'] [auto,stored,deflated,bzip2,lzma] Compression algorithm. Use auto to let KiBot select a suitable one
# compression: 'auto'
# # [list(dict)] Which files will be included
# files:
# # [string=''] Destination directory inside the archive, empty means the same of the file
# - dest: ''
# # [string='.*'] A regular expression that source files must match
# filter: '.*'
# # [boolean=false] Use the current working directory instead of the dir specified by `-d`
# from_cwd: false
# # [string=''] Collect files from the selected output.
# # When used the `source` option is ignored
# from_output: ''
# # [boolean=false] Use the current directory specified by the output instead of the dir specified by `-d`.
# # Note that it only applies when using `from_output` and no `dest` is specified.
# # It has more prescedence than `from_cwd`
# from_output_dir: false
# # [string='*'] File names to add, wildcards allowed. Use ** for recursive match.
# # By default this pattern is applied to the output dir specified with `-d` command line option.
# # See the `from_cwd` and `from_output_dir` options
# source: '*'
# # [boolean=true] Store the file pointed by symlinks, not the symlink
# follow_links: true
# # [string='ZIP'] [ZIP,TAR,RAR] Output file format
# format: 'ZIP'
# # [boolean=false] Move the files to the archive. In other words: remove the files after adding them to the archive
# move_files: false
# # [string='%f-%i%I%v.%x'] Name for the generated archive (%i=name of the output %x=according to format). Affected by global options
# output: '%f-%i%I%v.%x'
# # `remove_files` is an alias for `move_files`
# ======================================================================================================================
#
# Don't think I'll need these ones...
#
# ======================================================================================================================
# # KiBoM (KiCad Bill of Materials):
# # For more information: https://github.com/INTI-CMNB/KiBoM
# # Note that this output is provided as a compatibility tool.
# # We recommend using the `bom` output instead.
# # This output is what you get from the 'Tools/Generate Bill of Materials' menu in eeschema.
# # Also note that here the KiBot concept of variants doesn't apply.
# - name: 'kibom_example'
# comment: 'Used to generate the BoM in HTML or CSV format using the KiBoM plug-in.'
# type: 'kibom'
# dir: 'Example/kibom_dir'
# options:
# # [string|dict] BoM configuration file, relative to PCB. Environment variables and ~ allowed.
# # You can also define the configuration here, will be stored in `config.kibom.ini`
# conf:
# # [list(dict)|list(string)] List of columns to display.
# # Can be just the name of the field
# columns:
# # [string=''] Name of the field to use for this column.
# # Use `_field_lcsc_part` to get the value defined in the global options
# - field: 'Row'
# # [list(string)|string=''] List of fields to join to this column
# join: ''
# # [string=''] Name to display in the header. The field is used when empty
# name: 'Line'
# # [list(list(string))] A series of values which are considered to be equivalent for the part name.
# # Each entry is a list of equivalen names. Example: ['c', 'c_small', 'cap' ]
# # will ensure the equivalent capacitor symbols can be grouped together.
# # If empty the following aliases are used:
# # - ['r', 'r_small', 'res', 'resistor']
# # - ['l', 'l_small', 'inductor']
# # - ['c', 'c_small', 'cap', 'capacitor']
# # - ['sw', 'switch']
# # - ['zener', 'zenersmall']
# # - ['d', 'diode', 'd_small']
# component_aliases: [['r', 'r_small', 'res', 'resistor'], ['l', 'l_small', 'inductor'], ['c', 'c_small', 'cap', 'capacitor'], ['sw', 'switch'], ['zener', 'zenersmall'], ['d', 'diode', 'd_small']]
# # [string=''] Column with links to the datasheet (HTML only)
# datasheet_as_link: ''
# # [string|list(string)=''] Column/s containing Digi-Key part numbers, will be linked to web page (HTML only)
# digikey_link: ''
# # [list(dict)] A series of regular expressions used to exclude parts.
# # If a component matches ANY of these, it will be excluded.
# # Column names are case-insensitive.
# # If empty the following list is used:
# # - column: References
# # regex: '^TP[0-9]*'
# # - column: References
# # regex: '^FID'
# # - column: Part
# # regex: 'mount.*hole'
# # - column: Part
# # regex: 'solder.*bridge'
# # - column: Part
# # regex: 'test.*point'
# # - column: Footprint
# # regex 'test.*point'
# # - column: Footprint
# # regex: 'mount.*hole'
# # - column: Footprint
# # regex: 'fiducial'
# exclude_any:
# # [string=''] Name of the column to apply the regular expression.
# # Use `_field_lcsc_part` to get the value defined in the global options
# - column: ''
# # `field` is an alias for `column`
# # [string=''] Regular expression to match
# regex: ''
# # `regexp` is an alias for `regex`
# # [string='Config'] Field name used to determine if a particular part is to be fitted (also DNC and variants)
# fit_field: 'Config'
# # [boolean=true] Connectors with the same footprints will be grouped together, independent of the name of the connector
# group_connectors: true
# # [list(string)] List of fields used for sorting individual components into groups.
# # Components which match (comparing *all* fields) will be grouped together.
# # Field names are case-insensitive.
# # If empty: ['Part', 'Part Lib', 'Value', 'Footprint', 'Footprint Lib'] is used
# group_fields: ['Part', 'Part Lib', 'Value', 'Footprint', 'Footprint Lib']
# # [boolean=false] Hide column headers
# hide_headers: false
# # [boolean=false] Hide project information
# hide_pcb_info: false
# # [boolean=true] Generate a separated section for DNF (Do Not Fit) components (HTML only)
# html_generate_dnf: true
# # [boolean=true] Exclude DNF (Do Not Fit) components
# ignore_dnf: true
# # [list(dict)] A series of regular expressions used to select included parts.
# # If there are any regex defined here, only components that match against ANY of them will be included.
# # Column names are case-insensitive.
# # If empty all the components are included
# include_only:
# # [string=''] Name of the column to apply the regular expression.
# # Use `_field_lcsc_part` to get the value defined in the global options
# - column: ''
# # `field` is an alias for `column`
# # [string=''] Regular expression to match
# regex: ''
# # `regexp` is an alias for `regex`
# # [boolean=true] Component groups with blank fields will be merged into the most compatible group, where possible
# merge_blank_fields: true
# # [string|list(string)=''] Column/s containing Mouser part numbers, will be linked to web page (HTML only)
# mouser_link: ''
# # [boolean=true] First column is the row number
# number_rows: true
# # [string=' '] Separator used for the list of references
# ref_separator: ' '
# # [boolean=true] Each component group will be tested against a number of regular-expressions (see ``).
# test_regex: true
# # [boolean=false] Print grouped references in the alternate compressed style eg: R1-R7,R18
# use_alt: false
# # [string='HTML'] [HTML,CSV,XML,XLSX] Format for the BoM
# format: 'HTML'
# # [number=1] Number of boards to build (components multiplier)
# number: 1
# # [string='%f-%i%I%v.%x'] Filename for the output (%i=bom). Affected by global options
# output: '%f-%i%I%v.%x'
# # [string=','] CSV Separator
# separator: ','
# # [string=''] Board variant(s), used to determine which components
# # are output to the BoM. To specify multiple variants,
# # with a BOM file exported for each variant, separate
# # variants with the ';' (semicolon) character.
# # This isn't related to the KiBot concept of variants
# variant: ''
# # BoardView:
# # This format allows simple pads and connections navigation, mainly for circuit debug.
# # The output can be loaded using Open Board View (https://openboardview.org/)
# - name: 'boardview_example'
# comment: 'Exports the PCB in board view format.'
# type: 'boardview'
# dir: 'Example/boardview_dir'
# options:
# # [string|list(string)='_none'] Name of the filter to mark components as not fitted.
# # A short-cut to use for simple cases where a variant is an overkill
# dnf_filter: '_none'
# # [string='%f-%i%I%v.%x'] Filename for the output (%i=boardview, %x=brd). Affected by global options
# output: '%f-%i%I%v.%x'
# # [string|list(string)='_none'] Name of the filter to transform fields before applying other filters.
# # A short-cut to use for simple cases where a variant is an overkill
# pre_transform: '_none'
# # [string=''] Board variant to apply.
# # Used for sub-PCBs
# variant: ''
# # Datasheets downloader:
# - name: 'download_datasheets_example'
# comment: 'Downloads the datasheets for the project'
# type: 'download_datasheets'
# dir: 'Example/download_datasheets_dir'
# options:
# # [boolean=false] Include the DNF components
# dnf: false
# # [string|list(string)='_none'] Name of the filter to mark components as not fitted.
# # A short-cut to use for simple cases where a variant is an overkill
# dnf_filter: '_none'
# # [string='Datasheet'] Name of the field containing the URL
# field: 'Datasheet'
# # [boolean=true] Instead of download things we already downloaded use symlinks
# link_repeated: true
# # [string='${VALUE}.pdf'] Name used for the downloaded datasheet.
# # ${FIELD} will be replaced by the FIELD content
# output: '${VALUE}.pdf'
# # [string|list(string)='_none'] Name of the filter to transform fields before applying other filters.
# # A short-cut to use for simple cases where a variant is an overkill
# pre_transform: '_none'
# # [boolean=false] Download URLs that we already downloaded.
# # It only makes sense if the `output` field makes their output different
# repeated: false
# # [string=''] Board variant to apply
# variant: ''
# # DXF (Drawing Exchange Format):
# # This output is what you get from the File/Plot menu in pcbnew.
# # If you use custom fonts and/or colors please consult the `resources_dir` global variable.
# - name: 'dxf_example'
# comment: 'Exports the PCB to 2D mechanical EDA tools (like AutoCAD).'
# type: 'dxf'
# dir: 'Example/dxf_dir'
# options:
# # [list(dict)] A list of customized reports for the manufacturer
# custom_reports:
# # [string=''] Content for the report. Use ${basename} for the project name without extension.
# # Use ${filename(LAYER)} for the file corresponding to LAYER
# - content: ''
# # [string='Custom_report.txt'] File name for the custom report
# output: 'Custom_report.txt'
# # [string|list(string)='_none'] Name of the filter to mark components as not fitted.
# # A short-cut to use for simple cases where a variant is an overkill
# dnf_filter: '_none'
# # [string='full'] [none,small,full] What to use to indicate the drill places, can be none, small or full (for real scale)
# drill_marks: 'full'
# # [string=''] Used to configure the edge cuts layer extension for Protel mode. Include the dot
# edge_cut_extension: ''
# # [boolean=true] Do not include the PCB edge layer
# exclude_edge_layer: true
# # [boolean=false] Do not plot the component pads in the silk screen (KiCad 5.x only)
# exclude_pads_from_silkscreen: false
# # [boolean=false] Include references and values even when they are marked as invisible
# force_plot_invisible_refs_vals: false
# # [boolean=true] Tell KiCad to apply the scaling for each layer as a separated entity.
# # Disabling it the pages are coherent and can be superposed
# individual_page_scaling: true
# # [string=''] Used to change the Protel style extensions for inner layers.
# # The replacement pattern can contain %n for the inner layer number and %N for the layer number.
# # Example '.g%n'
# inner_extension_pattern: ''
# # [boolean=false] Use mm instead of inches
# metric_units: false
# # [string='%f-%i%I%v.%x'] Output file name, the default KiCad name if empty.
# # IMPORTANT! KiCad will always create the file using its own name and then we can rename it.
# # For this reason you must avoid generating two variants at the same directory when one of
# # them uses the default KiCad name. Affected by global options
# output: '%f-%i%I%v.%x'
# # [boolean=true] Include the footprint references
# plot_footprint_refs: true
# # [boolean=true] Include the footprint values
# plot_footprint_values: true
# # [boolean=false] Include the frame and title block. Only available for KiCad 6+ and you get a poor result
# # (i.e. always the default worksheet style, also problems expanding text variables).
# # The `pcb_print` output can do a better job for PDF, SVG, PS, EPS and PNG outputs
# plot_sheet_reference: false
# # [boolean=true] Plot using the contour, instead of the center line.
# # You must disable it to get the dimensions (See https://gitlab.com/kicad/code/kicad/-/issues/11901)
# polygon_mode: true
# # [string|list(string)='_none'] Name of the filter to transform fields before applying other filters.
# # A short-cut to use for simple cases where a variant is an overkill
# pre_transform: '_none'
# # [number=1] Scale factor (0 means autoscaling)
# scaling: 1
# # [number=0.1] Line width for the sketched pads [mm], see `sketch_pads_on_fab_layers` (KiCad 6+)
# # Note that this value is currently ignored by KiCad (6.0.9)
# sketch_pad_line_width: 0.1
# # [boolean=false] Draw only the outline of the pads on the *.Fab layers (KiCad 6+)
# sketch_pads_on_fab_layers: false
# # [boolean=false] Don't fill objects, just draw the outline
# sketch_plot: false
# # [boolean=true] Cover the vias
# tent_vias: true
# # [boolean=false] Use uppercase names for the extensions
# uppercase_extensions: false
# # [boolean=false] Use the auxiliary axis as origin for coordinates
# use_aux_axis_as_origin: false
# # [string=''] Board variant to apply
# variant: ''
# layers: all
# # DXF Schematic Print (Drawing Exchange Format):
# # This output is what you get from the 'File/Plot' menu in eeschema.
# # If you use custom fonts and/or colors please consult the `resources_dir` global variable.
# - name: 'dxf_sch_print_example'
# comment: 'Exports the schematic to a format commonly used for CAD software.'
# type: 'dxf_sch_print'
# dir: 'Example/dxf_sch_print_dir'
# options:
# # [boolean=true] Generate with all hierarchical sheets
# all_pages: true
# # [boolean=false] Use the background color from the `color_theme` (KiCad 6)
# background_color: false
# # [string=''] Color theme used, this must exist in the KiCad config (KiCad 6)
# color_theme: ''
# # [string|list(string)='_none'] Name of the filter to mark components as not fitted.
# # A short-cut to use for simple cases where a variant is an overkill
# dnf_filter: '_none'
# # [boolean=true] Include the frame and title block
# frame: true
# # [boolean=false] Generate a monochromatic output
# monochrome: false
# # [string='%f-%i%I%v.%x'] Filename for the output DXF (%i=schematic, %x=dxf). Affected by global options
# output: '%f-%i%I%v.%x'
# # [string|list(string)='_none'] Name of the filter to transform fields before applying other filters.
# # A short-cut to use for simple cases where a variant is an overkill
# pre_transform: '_none'
# # [string=''] Text used to replace the sheet title. %VALUE expansions are allowed.
# # If it starts with `+` the text is concatenated
# title: ''
# # [string=''] Board variant to apply.
# # Not fitted components are crossed
# variant: ''
# # Excellon drill format:
# # You can create a map file for documentation purposes.
# # This output is what you get from the 'File/Fabrication output/Drill Files' menu in pcbnew.
# - name: 'excellon_example'
# comment: 'This is the main format for the drilling machine.'
# type: 'excellon'
# dir: 'Example/excellon_dir'
# options:
# # [string|list(string)='_none'] Name of the filter to mark components as not fitted.
# # A short-cut to use for simple cases where a variant is an overkill
# dnf_filter: '_none'
# # [number=0] number of digits for integer part of coordinates (0 is auto)
# left_digits: 0
# # [dict|string] [hpgl,ps,gerber,dxf,svg,pdf] Format for a graphical drill map.
# # Not generated unless a format is specified
# map:
# # [string='%f-%i%I%v.%x'] Name for the map file, KiCad defaults if empty (%i='PTH_drill_map'). Affected by global options
# output: '%f-%i%I%v.%x'
# # [string='pdf'] [hpgl,ps,gerber,dxf,svg,pdf] Format for a graphical drill map
# type: 'pdf'
# # [boolean=true] Use metric units instead of inches
# metric_units: true
# # [boolean=false] Use a minimal header in the file
# minimal_header: false
# # [boolean=false] Invert the Y axis
# mirror_y_axis: false
# # [string] Force this replacement for %i when generating NPTH files
# npth_id: null
# # [string='%f-%i%I%v.%x'] name for the drill file, KiCad defaults if empty (%i='PTH_drill'). Affected by global options
# output: '%f-%i%I%v.%x'
# # [string|list(string)='_none'] Name of the filter to transform fields before applying other filters.
# # A short-cut to use for simple cases where a variant is an overkill
# pre_transform: '_none'
# # [boolean=true] Generate one file for both, plated holes and non-plated holes, instead of two separated files
# pth_and_npth_single_file: true
# # [string] Force this replacement for %i when generating PTH and unified files
# pth_id: null
# # [dict|string] Name of the drill report. Not generated unless a name is specified
# report:
# # [string=''] Name of the drill report. Not generated unless a name is specified.
# # (%i='drill_report' %x='txt')
# filename: ''
# # [number=0] number of digits for mantissa part of coordinates (0 is auto)
# right_digits: 0
# # [boolean=true] Use route command for oval holes (G00), otherwise use G85
# route_mode_for_oval_holes: true
# # [boolean=false] Use the auxiliary axis as origin for coordinates
# use_aux_axis_as_origin: false
# # [string=''] Board variant to apply.
# # Used for sub-PCBs
# variant: ''
# # [string='DECIMAL_FORMAT'] [DECIMAL_FORMAT,SUPPRESS_LEADING,SUPPRESS_TRAILING,KEEP_ZEROS] How to handle the zeros
# zeros_format: 'DECIMAL_FORMAT'
# # GenCAD:
# # This format is interpreted by some CADCAM software and helps certain
# # manufacturers
# - name: 'gencad_example'
# comment: 'Exports the PCB in GENCAD format.'
# type: 'gencad'
# dir: 'Example/gencad_dir'
# options:
# # [boolean=false] Use auxiliary axis as origin
# aux_origin: false
# # [string|list(string)='_none'] Name of the filter to mark components as not fitted.
# # A short-cut to use for simple cases where a variant is an overkill
# dnf_filter: '_none'
# # [boolean=false] Flip bottom footprint padstacks
# flip_bottom_padstacks: false
# # [boolean=false] Generate a new shape for each footprint instance (Do not reuse shapes)
# no_reuse_shapes: false
# # [string='%f-%i%I%v.%x'] Filename for the output (%i=gencad, %x=cad). Affected by global options
# output: '%f-%i%I%v.%x'
# # [string|list(string)='_none'] Name of the filter to transform fields before applying other filters.
# # A short-cut to use for simple cases where a variant is an overkill
# pre_transform: '_none'
# # [boolean=false] Save the origin coordinates in the file
# save_origin: false
# # [boolean=false] Generate unique pin names
# unique_pin_names: false
# # [string=''] Board variant to apply.
# # Used for sub-PCBs
# variant: ''
# # HPGL (Hewlett & Packard Graphics Language):
# # This output is what you get from the File/Plot menu in pcbnew.
# # If you use custom fonts and/or colors please consult the `resources_dir` global variable.
# - name: 'hpgl_example'
# comment: 'Exports the PCB for plotters and laser printers.'
# type: 'hpgl'
# dir: 'Example/hpgl_dir'
# options:
# # [list(dict)] A list of customized reports for the manufacturer
# custom_reports:
# # [string=''] Content for the report. Use ${basename} for the project name without extension.
# # Use ${filename(LAYER)} for the file corresponding to LAYER
# - content: ''
# # [string='Custom_report.txt'] File name for the custom report
# output: 'Custom_report.txt'
# # [string|list(string)='_none'] Name of the filter to mark components as not fitted.
# # A short-cut to use for simple cases where a variant is an overkill
# dnf_filter: '_none'
# # [string='full'] [none,small,full] What to use to indicate the drill places, can be none, small or full (for real scale)
# drill_marks: 'full'
# # [string=''] Used to configure the edge cuts layer extension for Protel mode. Include the dot
# edge_cut_extension: ''
# # [boolean=true] Do not include the PCB edge layer
# exclude_edge_layer: true
# # [boolean=false] Do not plot the component pads in the silk screen (KiCad 5.x only)
# exclude_pads_from_silkscreen: false
# # [boolean=false] Include references and values even when they are marked as invisible
# force_plot_invisible_refs_vals: false
# # [boolean=true] Tell KiCad to apply the scaling for each layer as a separated entity.
# # Disabling it the pages are coherent and can be superposed
# individual_page_scaling: true
# # [string=''] Used to change the Protel style extensions for inner layers.
# # The replacement pattern can contain %n for the inner layer number and %N for the layer number.
# # Example '.g%n'
# inner_extension_pattern: ''
# # [boolean=false] Plot mirrored
# mirror_plot: false
# # [string='%f-%i%I%v.%x'] Output file name, the default KiCad name if empty.
# # IMPORTANT! KiCad will always create the file using its own name and then we can rename it.
# # For this reason you must avoid generating two variants at the same directory when one of
# # them uses the default KiCad name. Affected by global options
# output: '%f-%i%I%v.%x'
# # [number=1] [1,16] Pen number
# pen_number: 1
# # [number=20] [1,99] Pen speed
# pen_speed: 20
# # [number=15] [0,100] Pen diameter in MILS, useful to fill areas. However, it is in mm in HPGL files
# pen_width: 15
# # [boolean=true] Include the footprint references
# plot_footprint_refs: true
# # [boolean=true] Include the footprint values
# plot_footprint_values: true
# # [boolean=false] Include the frame and title block. Only available for KiCad 6+ and you get a poor result
# # (i.e. always the default worksheet style, also problems expanding text variables).
# # The `pcb_print` output can do a better job for PDF, SVG, PS, EPS and PNG outputs
# plot_sheet_reference: false
# # [string|list(string)='_none'] Name of the filter to transform fields before applying other filters.
# # A short-cut to use for simple cases where a variant is an overkill
# pre_transform: '_none'
# # [number=0] Scale factor (0 means autoscaling)
# scaling: 0
# # [number=0.1] Line width for the sketched pads [mm], see `sketch_pads_on_fab_layers` (KiCad 6+)
# # Note that this value is currently ignored by KiCad (6.0.9)
# sketch_pad_line_width: 0.1
# # [boolean=false] Draw only the outline of the pads on the *.Fab layers (KiCad 6+)
# sketch_pads_on_fab_layers: false
# # [boolean=false] Don't fill objects, just draw the outline
# sketch_plot: false
# # [boolean=true] Cover the vias
# tent_vias: true
# # [boolean=false] Use uppercase names for the extensions
# uppercase_extensions: false
# # [string=''] Board variant to apply
# variant: ''
# layers: all
# # HPGL Schematic Print (Hewlett & Packard Graphics Language):
# # This output is what you get from the 'File/Plot' menu in eeschema.
# # If you use custom fonts and/or colors please consult the `resources_dir` global variable.
# - name: 'hpgl_sch_print_example'
# comment: 'Exports the schematic to the most common plotter format.'
# type: 'hpgl_sch_print'
# dir: 'Example/hpgl_sch_print_dir'
# options:
# # [boolean=true] Generate with all hierarchical sheets
# all_pages: true
# # [boolean=false] Use the background color from the `color_theme` (KiCad 6)
# background_color: false
# # [string=''] Color theme used, this must exist in the KiCad config (KiCad 6)
# color_theme: ''
# # [string|list(string)='_none'] Name of the filter to mark components as not fitted.
# # A short-cut to use for simple cases where a variant is an overkill
# dnf_filter: '_none'
# # [boolean=true] Include the frame and title block
# frame: true
# # [boolean=false] Generate a monochromatic output
# monochrome: false
# # [string='bottom_left'] [bottom_left,centered,page_fit,content_fit] Origin and scale
# origin: 'bottom_left'
# # [string='%f-%i%I%v.%x'] Filename for the output HPGL (%i=schematic, %x=plt). Affected by global options
# output: '%f-%i%I%v.%x'
# # [number=0.4826] Pen size (diameter) [mm]
# pen_size: 0.4826
# # [string|list(string)='_none'] Name of the filter to transform fields before applying other filters.
# # A short-cut to use for simple cases where a variant is an overkill
# pre_transform: '_none'
# # [string=''] Text used to replace the sheet title. %VALUE expansions are allowed.
# # If it starts with `+` the text is concatenated
# title: ''
# # [string=''] Board variant to apply.
# # Not fitted components are crossed
# variant: ''
# # Info:
# # It can be used to know more about the environment used to generate the files.
# # Please don't rely on the way things are reported, its content could change,
# # adding or removing information
# - name: 'info_example'
# comment: 'Records information about the current run.'
# type: 'info'
# dir: 'Example/info_dir'
# options:
# # [string='names'] [names,none,full] List environment variables.
# # IMPORTANT: Don't use `full` unless you know you are not leaking sensitive information
# environment: 'names'
# # [string='%f-%i%I%v.%x'] Filename for the output (%i=info, %x=txt). Affected by global options
# output: '%f-%i%I%v.%x'
# # KiKit's Present - Project Presentation:
# # It can contain one or more PCBs, showing their top and bottom sides.
# # Also includes a download link and the gerbers.
# - name: 'kikit_present_example'
# comment: 'Creates an HTML file showing your project.'
# type: 'kikit_present'
# dir: 'Example/kikit_present_dir'
# options:
# # [dict|list(dict)] One or more boards that compose your project.
# # When empty we will use only the main PCB for the current project
# boards:
# # [string=''] How to obtain the back view of the PCB.
# # *local*: the name of an output to render it.
# # If empty we use the first renderer.
# # *file*: the name of the rendered image.
# # *external*: ignored, we use `extrenal_config`
# - back_image: ''
# # [string=''] A comment or description for this board.
# # Applies to all modes
# comment: ''
# # [string=''] Name of an external KiBot configuration.
# # Only used in the *external* mode
# external_config: ''
# # [string=''] How to obtain the front view of the PCB.
# # *local*: the name of an output to render it.
# # If empty we use the first renderer.
# # *file*: the name of the rendered image.
# # *external*: ignored, we use `extrenal_config`
# front_image: ''
# # [string=''] How to obtain an archive with the gerbers.
# # *local*: the name of a `gerber` output.
# # If empty we use the first `gerber` output.
# # *file*: the name of a compressed archive.
# # *external*: ignored, we use `extrenal_config`
# gerbers: ''
# # [string='local'] [local,file,external] How images and gerbers are obtained.
# # *local*: Only applies to the currently selected PCB.
# # You must provide the names of the outputs used to render
# # the images and compress the gerbers.
# # When empty KiBot will use the first render/gerber output
# # it finds.
# # To apply variants use `pcb_from_output` and a `pcb_variant`
# # output.
# # *file*: You must specify the file names used for the images and
# # the gerbers.
# # *external*: You must specify an external KiBot configuration.
# # It will be applied to the selected PCB to create the images and
# # the gerbers. The front image must be generated in a dir called
# # *front*, the back image in a dir called *back* and the gerbers
# # in a dir called *gerbers*
# mode: 'local'
# # [string=''] Name for this board. If empty we use the name of the PCB.
# # Applies to all modes
# name: ''
# # [string=''] Name of the KiCad PCB file. When empty we use the current PCB.
# # Is ignored for the *local* mode
# pcb_file: ''
# # [string=''] Use the PCB generated by another output.
# # Is ignored for the *file* mode
# pcb_from_output: ''
# # [string=''] Name for a markdown file containing the main part of the page to be generated.
# # This is mandatory and is the description of your project.
# # You can embed the markdown code. If the text doesn't map to a file and contains
# # more than one line KiBot will assume this is the markdown
# description: ''
# # [string=''] Name of the project. Will be passed to the template.
# # If empty we use the name of the KiCad project.
# # The default template uses it for things like the page title
# name: ''
# # [string=''] URL of the repository. Will be passed to the template.
# # If empty we will try to find it using `git remote get-url origin`.
# # The default template uses it to create an URL for the current commit
# repository: ''
# # [string|list(string)=''] A list of file name patterns for additional resources to be included.
# # I.e. images referenced in description.
# # They will be copied relative to the output dir
# resources: ''
# # [string='default'] Path to a template directory or a name of built-in one.
# # See KiKit's doc/present.md for template specification
# template: 'default'
# # Netlist:
# # The netlist can be generated in the classic format and in IPC-D-356 format,
# # useful for board testing
# - name: 'netlist_example'
# comment: 'Generates the list of connections for the project.'
# type: 'netlist'
# dir: 'Example/netlist_dir'
# options:
# # [string|list(string)='_none'] Name of the filter to mark components as not fitted.
# # A short-cut to use for simple cases where a variant is an overkill
# dnf_filter: '_none'
# # [string='classic'] [classic,ipc] The `classic` format is the KiCad internal format, and is generated
# # from the schematic. The `ipc` format is the IPC-D-356 format, useful for PCB
# # testing, is generated from the PCB
# format: 'classic'
# # [string='%f-%i%I%v.%x'] Filename for the output (%i=netlist/IPC-D-356, %x=net/d356). Affected by global options
# output: '%f-%i%I%v.%x'
# # [string|list(string)='_none'] Name of the filter to transform fields before applying other filters.
# # A short-cut to use for simple cases where a variant is an overkill
# pre_transform: '_none'
# # [string=''] Board variant to apply.
# # Used for sub-PCBs
# variant: ''
# # Panelize:
# # It currently uses the KiKit tool, which must be available.
# # Consult KiKit docs for detailed information.
# # [KiKit panelization docs](https://github.com/yaqwsx/KiKit/blob/master/doc/examples.md).
# # Current versions of KiKit only support KiCad 6 and my tests using
# # KiKit 1.0.5 (the last to support KiCad 5) shown some
# # incompatibilities.
# # Note that you don't need to specify the units for all distances.
# # If they are omitted they are assumed to be `units`.
# # The same is valid for angles, using `default_angles`
# - name: 'panelize_example'
# comment: 'Creates a panel to fabricate various copies of the PCB at once.'
# type: 'panelize'
# dir: 'Example/panelize_dir'
# options:
# # [list(dict)|list(string)|string] One or more configurations used to create the panel.
# # Use a string to include an external configuration, i.e. `myDefault.json`.
# # You can also include a preset using `:name`, i.e. `:vcuts`.
# # Use a dict to specify the options using the KiBot YAML file
# configs:
# # [dict] Fill non-board areas of the panel with copper
# - copperfill:
# # [number|string] Extra clearance from the board perimeters. Suitable for, e.g., not filling the tabs with
# # copper
# clearance: 0.5
# # [string|list(string)] List of layers to fill. Can be a comma-separated string.
# # Using *all* means all external copper layers
# layers: 'F.Cu,B.Cu'
# # [number|string] The orientation of the hatched strokes
# orientation: 45