INTI-CMNB / kicad_auto_test

KiCad on Debian + automation + test tools used to test kicad_auto
Apache License 2.0
1 stars 1 forks source link

[HOW] Missing mistune #2

Closed mundodisco8 closed 11 months ago

mundodisco8 commented 11 months ago

What do you want to achieve? I pushed some changes to project for the first time in over a year. When I pushed to Github, it failed because one of the packages required in my workflow is no longer installed (mistune, required in Populate3D).

My question is how can I run apt-get install python3-mistune in the Github Actions context?

/usr/bin/docker run --name b81[18](https://github.com/mundodisco8/Snowflake/actions/runs/6431124766/job/17463386892#step:4:19)86a2b4a348d0a8951a1a01c21adc_9b833e --label 94351b --workdir /github/workspace --rm -e "INPUT_CONFIG" -e "INPUT_DIR" -e "INPUT_SCHEMA" -e "INPUT_BOARD" -e "INPUT_QUICKSTART" -e "INPUT_SKIP" -e "INPUT_TARGETS" -e "INPUT_VARIANT" -e "INPUT_INSTALL3D" -e "INPUT_VERBOSE" -e "INPUT_ADDITIONAL_ARGS" -e "INPUT_CACHE3D" -e "HOME" -e "GITHUB_JOB" -e "GITHUB_REF" -e "GITHUB_SHA" -e "GITHUB_REPOSITORY" -e "GITHUB_REPOSITORY_OWNER" -e "GITHUB_REPOSITORY_OWNER_ID" -e "GITHUB_RUN_ID" -e "GITHUB_RUN_NUMBER" -e "GITHUB_RETENTION_DAYS" -e "GITHUB_RUN_ATTEMPT" -e "GITHUB_REPOSITORY_ID" -e "GITHUB_ACTOR_ID" -e "GITHUB_ACTOR" -e "GITHUB_TRIGGERING_ACTOR" -e "GITHUB_WORKFLOW" -e "GITHUB_HEAD_REF" -e "GITHUB_BASE_REF" -e "GITHUB_EVENT_NAME" -e "GITHUB_SERVER_URL" -e "GITHUB_API_URL" -e "GITHUB_GRAPHQL_URL" -e "GITHUB_REF_NAME" -e "GITHUB_REF_PROTECTED" -e "GITHUB_REF_TYPE" -e "GITHUB_WORKFLOW_REF" -e "GITHUB_WORKFLOW_SHA" -e "GITHUB_WORKSPACE" -e "GITHUB_ACTION" -e "GITHUB_EVENT_PATH" -e "GITHUB_ACTION_REPOSITORY" -e "GITHUB_ACTION_REF" -e "GITHUB_PATH" -e "GITHUB_ENV" -e "GITHUB_STEP_SUMMARY" -e "GITHUB_STATE" -e "GITHUB_OUTPUT" -e "RUNNER_OS" -e "RUNNER_ARCH" -e "RUNNER_NAME" -e "RUNNER_ENVIRONMENT" -e "RUNNER_TOOL_CACHE" -e "RUNNER_TEMP" -e "RUNNER_WORKSPACE" -e "ACTIONS_RUNTIME_URL" -e "ACTIONS_RUNTIME_TOKEN" -e "ACTIONS_CACHE_URL" -e GITHUB_ACTIONS=true -e CI=true -v "/var/run/docker.sock":"/var/run/docker.sock" -v "/home/runner/work/_temp/_github_home":"/github/home" -v "/home/runner/work/_temp/_github_workflow":"/github/workflow" -v "/home/runner/work/_temp/_runner_file_commands":"/github/file_commands" -v "/home/runner/work/Snowflake/Snowflake":"/github/workspace" 94351b:811886a2b4a348d0a8951a1a01c21adc  "-c ArtifactCreation.kibot.yaml" "-C NO" "-d Artifacts" "-b hardware/Snowflake.kicad_pcb" "-e hardware/Snowflake.kicad_sch" "-i NO" "-q NO" "-s __NONE__" "-t __ALL__" "-v 0" "-V __NONE__" "-x "
*****************************************************************************************
*****************************************************************************************

KKKKKKKKK    KKKKKKK  iiii  BBBBBBBBBBBBBBBBB                             tttt
K:::::::K    K:::::K i::::i B::::::::::::::::B                         ttt:::t
K:::::::K    K:::::K  iiii  B::::::BBBBBB:::::B                        t:::::t
K:::::::K   K::::::K        BB:::::B     B:::::B                       t:::::t
KK::::::K  K:::::KKKiiiiiii   B::::B     B:::::B   ooooooooooo   ttttttt:::::ttttttt
  K:::::K K:::::K   i:::::i   B::::B     B:::::B oo:::::::::::oo t:::::::::::::::::t
  K::::::K:::::K     i::::i   B::::BBBBBB:::::B o:::::::::::::::ot:::::::::::::::::t
  K:::::::::::K      i::::i   B:::::::::::::BB  o:::::ooooo:::::otttttt:::::::tttttt
  K:::::::::::K      i::::i   B::::BBBBBB:::::B o::::o     o::::o      t:::::t
  K::::::K:::::K     i::::i   B::::B     B:::::Bo::::o     o::::o      t:::::t
  K:::::K K:::::K    i::::i   B::::B     B:::::Bo::::o     o::::o      t:::::t
KK::::::K  K:::::KKK i::::i   B::::B     B:::::Bo::::o     o::::o      t:::::t    tttttt
K:::::::K   K::::::Ki::::::iBB:::::BBBBBB::::::Bo:::::ooooo:::::o      t::::::tttt:::::t
K:::::::K    K:::::Ki::::::iB:::::::::::::::::B o:::::::::::::::o      tt::::::::::::::t
K:::::::K    K:::::Ki::::::iB::::::::::::::::B   oo:::::::::::oo         tt:::::::::::tt
KKKKKKKKK    KKKKKKKiiiiiiiiBBBBBBBBBBBBBBBBB      ooooooooooo             ttttttttttt

🤖 KiBot GitHub Action v2 🚀

KiBot: 1.6.3
KiCad: 7.0.7~ubuntu23.04.1
Debian: 12.1
KiAuto: 2.2.7
KiCost 1.1.18
iBoM: 2.7.0

*****************************************************************************************
*****************************************************************************************
Options: -c 'ArtifactCreation.kibot.yaml' -d 'Artifacts' -b 'hardware/Snowflake.kicad_pcb' -e 'hardware/Snowflake.kicad_sch'
WARNING:(W008) Unable to find KiCad configuration file (/github/home/.config/kicad/7.0/kicad_common.json) (kibot - config.py:[19](https://github.com/mundodisco8/Snowflake/actions/runs/6431124766/job/17463386892#step:4:20)7)
WARNING:(W010) Unable to find KiCad user templates (kibot - config.py:431)
- Running the DRC
WARNING:(W058) Missing KiCad main config file /github/home/.config/kicad/7.0/kicad_common.json (pcbnew_do - misc.py:[20](https://github.com/mundodisco8/Snowflake/actions/runs/6431124766/job/17463386892#step:4:21)0) (kibot - kiplot.py:1[32](https://github.com/mundodisco8/Snowflake/actions/runs/6431124766/job/17463386892#step:4:33))
- Running the ERC
- Updating BoM in XML format
- 'Used to generate the BoM in CSV, HTML, TSV, TXT, XML or XLSX format using the internal BoM.' (BoM_In_CSV) [bom]
- 'Used to generate the BoM in CSV, HTML, TSV, TXT, XML or XLSX format using the internal BoM.' (BoM_In_XSLX) [bom]
- 'This is the information for the drilling machine in gerber format.' (Gerber_Drills) [gerb_drill]
- 'This is the main fabrication format for the PCB.' (Gerber_Generation) [gerber]
- 'Generates an interactive web page useful to identify the position of the components in the PCB.' (ibom_example) [ibom]
- 'Exports the PCB to the most common exchange format. Suitable for printing.' (pdf_sch_print_example) [pdf_sch_print]
- 'Creates a markdown file explaining how to assembly a PCB using KiCad 3D rendered.' (Populate3D) [populate]
- Trying to install mistune (from PyPi)
ERROR:Missing `mistune` python module (mistune), install it (kibot - dep_downloader.py:797)
ERROR:Debian package: python3-mistune (kibot - dep_downloader.py:797)
ERROR:Arch package: python-mistune (kibot - dep_downloader.py:797)
ERROR:Output that needs it: populate (kibot - dep_downloader.py:797)
ERROR:Try running the installation checker: kibot-check (kibot - dep_downloader.py:797)

Do you have some PCB/Schematic to use as example? The project is this one, on the CICD branch

Do you have some configuration file (.kibot.yaml) that you are using? You can attach it or paste the content in the following section:

Pasted in a comment

Environment (please complete the following information): Where are you running KiBot:

mundodisco8 commented 11 months ago
# 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: 9
      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'
    # S1 is the silkscreen with the text in the back (turn this...). It doesn't have a symbol associated in the schematic
    # - filter: 'S1 in board, but not in schematic'
    #   number: 13
    #   regex: 'S1'
    - filter: "Battery Internal connection"
      number: 58
      regex: 'BT1 on B.Cu\n.+BT1 on B.Cu'
    # Complaint about the resistor of the potentiometer being `0-50k`
    - filter: 'Pot value'
      number: 20
      regex: "Malformed value: `0-50k`"
  solder_mask_color: white
  silk_screen_color: black
  pcb_finish: ENIG

#### Filters for the Populate3D step
filters:
    - name: clock
      comment: "Clock Components: U1, RV1, C1, R1-5, BT1, SW1"
      type: generic
      include_only:
        - field: Reference
          regex: '\bR[1-5]\b'
        - field: Reference
          regex: 'U1|RV1|C1'
    - name: currentResistors
      comment: "Remaining current resistors: R7-10, R13-18"
      type: generic
      include_only:
        - field: Reference
          regex: 'R[7-9]|R1[0|3-8]'
    - name: LEDs
      type: generic
      include_only:
        - field: Reference
          regex: 'D[2-9]|D1[0-3]'

    - name: all_back
      type: generic
      exclude_top: true

    - name: all_tht
      type: generic
      exclude_tht: true
      invert: true

    - name: all_conn
      type: generic
      exclude_any:
        - field: Value
          regex: '.*CONN.*'
        - field: Value
          regex: 'SERVO.*'
        - field: Reference
          regex: 'JP.*'
        - field: Reference
          regex: 'U.*'
      invert: true

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:
    # # The courtyard from the battery holder and counter overlap slightly
    # - filter: "Courtyard from battery and counter overlap slightly"
    #   error: 'courtyards_overlap'
    #   regex: 'Footprint U2\n.+BT1'
    # The battery holder has an "internal" connection and kicad doesn't like it...
    - filter: "Battery Internal connection"
      error: 'unconnected_items'
      regex: 'BT1 on B.Cu\n.+BT1 on B.Cu'
    - filter: "Mismatch with library"
      error: 'lib_footprint_mismatch'
      regex: "Footprint '4014_LED_HandSolder_NoSilk' does not match copy in library"
  # [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

outputs:
  # # 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='%f-%i%I%v.%x'] Filename for the output (%i=boardview, %x=brd). Affected by global options
  #     output: '%f-%i%I%v.%x'
  # BoM (Bill of Materials):
  # This output can generate XYRS files (pick and place files).
  # Is compatible with KiBoM, but doesn't need to update the XML netlist because the components
  # are loaded from the schematic.
  # Important differences with KiBoM output:
  # - All options are in the main `options` section, not in `conf` subsection.
  # - The `Component` column is named `Row` and works just like any other column.
  # This output is what you get from the 'Tools/Generate Bill of Materials' menu in eeschema.
  - name: 'BoM_In_CSV'
    comment: 'Used to generate the BoM in CSV, HTML, TSV, TXT, XML or XLSX format using the internal BoM.'
    type: 'bom'
    dir: 'Artifacts/BoM'
    options:
      # # [list(dict)] Add components from other projects.
      # # You can use CSV files, the first row must contain the names of the fields.
      # # The `Reference` and `Value` are mandatory, in most cases `Part` is also needed.
      # # The `Part` column should contain the name/type of the component. This is important for
      # # passive components (R, L, C, etc.). If this information isn't available consider
      # # configuring the grouping to exclude the `Part`.
      # # aggregate:
      # #   # [string=','] Delimiter used for CSV files
      # #   - delimiter: ','
      # #     # [string=''] Name of the schematic to aggregate
      # #     file: ''
      # #     # [string=''] Name to identify this source. If empty we use the name of the schematic
      # #     name: ''
      # #     # [number=1] Number of boards to build (components multiplier). Use negative to subtract
      # #     number: 1
      # #     # [string=''] A prefix to add to all the references from this project
      # #     ref_id: ''
      # [boolean=true] Always use positive values for the footprint rotation
      angle_positive: true
      # [boolean=false] Use negative X coordinates for footprints on bottom layer (for XYRS)
      bottom_negative_x: false
      # [list(dict)|list(string)] List of columns to display.
      # Can be just the name of the field
      columns:
      #   # [string=''] Used as explanation for this column. The XLSX output uses it
      #   - comment: ''
      #     # [string=''] Name of the field to use for this column
      #     field: 'Row'
      #     # [list(dict)|list(string)|string=''] List of fields to join to this column
      #     join:
      #       # [string=''] Name of the field
      #       - field: 'Voltage'
      #         # [string=''] Text to use instead of a field. This option is incompatible with the `field` option.
      #         # Any space to separate it should be added in the text.
      #         # Use \n for newline and \t for tab
      #         text: ''
      #         # [string=''] Text to add after the field content. Will be added only if the field isn't empty.
      #         # Any space to separate it should be added in the text.
      #         # Use \n for newline and \t for tab
      #         text_after: ''
      #         # [string=''] Text to add before the field content. Will be added only if the field isn't empty.
      #         # Any space to separate it should be added in the text.
      #         # Use \n for newline and \t for tab
      #         text_before: ''
      #     # [number=0] Used to group columns. The XLSX output uses it to collapse columns
      #     level: 0
      #     # [string=''] Name to display in the header. The field is used when empty
      #     name: 'Line'
        - field: "Row"
        - field: "References"
        - field: "Value"
        - field: "Quantity Per PCB"
        - field: "Description"
        - comment: "A column joining all the ratings"
          field: "Tolerance"
          name: "Ratings"
          join:
            - field: "TempCoef"
              text_before : " / "
            - field: "Vrating"
              text_before : " / "
        - field: "Package"
        - field: "MPN"
        - field: "Manufacturer"
        - field: "Digikey PN"
        - field: "Farnell PN"
        - field: "Datasheet"
        - field: "Comments"
      # [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']]
      # # [list(dict)|list(string)] List of columns to add to the global section of the cost.
      # # Can be just the name of the field
      # cost_extra_columns:
      #   # [string=''] Used as explanation for this column. The XLSX output uses it
      #   - comment: ''
      #     # [string=''] Name of the field to use for this column
      #     field: 'Row'
      #     # [list(dict)|list(string)|string=''] List of fields to join to this column
      #     join:
      #       # [string=''] Name of the field
      #       - field: 'Voltage'
      #         # [string=''] Text to use instead of a field. This option is incompatible with the `field` option.
      #         # Any space to separate it should be added in the text.
      #         # Use \n for newline and \t for tab
      #         text: ''
      #         # [string=''] Text to add after the field content. Will be added only if the field isn't empty.
      #         # Any space to separate it should be added in the text.
      #         # Use \n for newline and \t for tab
      #         text_after: ''
      #         # [string=''] Text to add before the field content. Will be added only if the field isn't empty.
      #         # Any space to separate it should be added in the text.
      #         # Use \n for newline and \t for tab
      #         text_before: ''
      #     # [number=0] Used to group columns. The XLSX output uses it to collapse columns
      #     level: 0
      #     # [string=''] Name to display in the header. The field is used when empty
      #     name: 'Line'
      # [boolean=false] Show the stats about how many of the components are SMD/THT. You must provide the PCB
      count_smd_tht: false
      # [dict] Options for the CSV, TXT and TSV formats
      csv:
        # [boolean=false] Hide the header line (names of the columns)
        hide_header: false
        # [boolean=false] Hide project information
        hide_pcb_info: false
        # [boolean=false] Hide statistics information
        hide_stats_info: false
        # [boolean=false] Enclose all values using double quotes
        quote_all: false
        # [string=','] CSV Separator. TXT and TSV always use tab as delimiter.
        # Only one character can be specified
        separator: ','
      # [string|list(string)] Include this distributors list. Default is all the available
      # distributors:
      # [string|list(string)='_kibom_dnc'] Name of the filter to mark components as 'Do Not Change'.
      # The default filter marks components with a DNC value or DNC in the Config field.
      # This option is for simple cases, consider using a full variant for complex cases
      dnc_filter: '_kibom_dnc'
      # [string|list(string)='_kibom_dnf'] Name of the filter to mark components as 'Do Not Fit'.
      # The default filter marks components with a DNF value or DNF in the Config field.
      # This option is for simple cases, consider using a full variant for complex cases
      dnf_filter: '_kibom_dnf'
      # [string|list(string)='_mechanical'] Name of the filter to exclude components from BoM processing.
      # The default filter excludes test points, fiducial marks, mounting holes, etc.
      # This option is for simple cases, consider using a full variant for complex cases
      exclude_filter: '_mechanical'
      # [boolean=false] Exclude components marked with *Exclude from BOM* in the PCB.
      # This is a KiCad 6 option
      exclude_marked_in_pcb: false
      # [boolean=true] Exclude components marked with *Exclude from bill of materials* in the schematic.
      # This is a KiCad 6 option
      exclude_marked_in_sch: true
      # [boolean=true] Expand KiCad 6 text variables after applying all filters and variants.
      # This is done using a **_expand_text_vars** filter.
      # If you need to customize the filter, or apply it before, you can disable this option and
      # add a custom filter to the filter chain
      expand_text_vars: true
      # [string='Config'] Field name used for internal filters (not for variants)
      fit_field: 'Config'
      # [string|list(string)='no,yes'] Values for the `Footprint Populate` column
      footprint_populate_values: 'no,yes'
      # [string|list(string)='SMD,THT,VIRTUAL'] Values for the `Footprint Type` column
      footprint_type_values: 'SMD,THT,VIRTUAL'
      # [string=''] [HTML,CSV,TXT,TSV,XML,XLSX,HRTXT] format for the BoM.
      # Defaults to CSV or a guess according to the options.
      # HRTXT stands for Human Readable TeXT
      format: 'CSV'
      # [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',
      #            'Voltage', 'Tolerance', 'Current', 'Power'] is used
      group_fields: ['part', 'part lib', 'value', 'footprint', 'footprint lib', 'voltage', 'tolerance', 'current', 'power']
      # [list(string)] List of fields to be used when the fields in `group_fields` are empty.
      # The first field in this list is the fallback for the first in `group_fields`, and so on
      # group_fields_fallbacks:
      # [dict] Options for the HRTXT formats
      hrtxt:
        # [string='-'] Separator between the header and the data
        header_sep: '-'
        # [boolean=false] Hide the header line (names of the columns)
        hide_header: false
        # [boolean=false] Hide project information
        hide_pcb_info: false
        # [boolean=false] Hide statistics information
        hide_stats_info: false
        # [string='left'] [left,right,center] Text justification
        justify: 'left'
        # [string='I'] Column Separator
        separator: 'I'
      # [dict] Options for the HTML format
      # html:
      #   # [boolean=true] Use colors to show the field type
      #   col_colors: true
      #   # [string=''] Column with links to the datasheet
      #   datasheet_as_link: ''
      #   # [string|list(string)=''] Column/s containing Digi-Key part numbers, will be linked to web page
      #   digikey_link: ''
      #   # [string|list(string)=''] Information to put after the title and before the pcb and stats info
      #   extra_info: ''
      #   # [boolean=true] Generate a separated section for DNF (Do Not Fit) components
      #   generate_dnf: true
      #   # [boolean=false] Hide project information
      #   hide_pcb_info: false
      #   # [boolean=false] Hide statistics information
      #   hide_stats_info: false
      #   # [boolean=true] Use a color for empty cells. Applies only when `col_colors` is `true`
      #   highlight_empty: true
      #   # [string|boolean=''] PNG file to use as logo, use false to remove
      #   logo: ''
      #   # [string|list(string)=''] Column/s containing Mouser part numbers, will be linked to web page
      #   mouser_link: ''
      #   # [string='modern-blue'] Page style. Internal styles: modern-blue, modern-green, modern-red and classic.
      #   # Or you can provide a CSS file name. Please use .css as file extension.
      #   style: 'modern-blue'
      #   # [string='KiBot Bill of Materials'] BoM title
      #   title: 'KiBot Bill of Materials'
      # [boolean=true] Exclude DNF (Do Not Fit) components
      ignore_dnf: true
      # [boolean=true] Component quantities are always expressed as integers. Using the ceil() function
      int_qtys: true
      # [boolean=true] Component groups with blank fields will be merged into the most compatible group, where possible
      merge_blank_fields: true
      # [boolean=true] When creating groups two components with empty/missing field will be interpreted as with the same value
      merge_both_blank: true
      # [list(string)] List of fields where we tolerate conflicts.
      # Use it to avoid undesired warnings.
      # By default the field indicated in `fit_field`, the field used for variants and
      # the field `part` are excluded
      no_conflict: ['Config', 'Part']
      # [string|list(string)] Exclude this distributors list. They are removed after computing `distributors`
      # no_distributors:
      # [boolean=false] When normalizing values use the locale decimal point
      normalize_locale: false
      # [boolean=false] Try to normalize the R, L and C values, producing uniform units and prefixes
      normalize_values: false
      # [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|list(string)='_none'] Name of the filter to transform fields before applying other filters.
      # This option is for simple cases, consider using a full variant for complex cases
      pre_transform: '_none'
      # [string=''] A prefix to add to all the references from this project. Used for multiple projects
      ref_id: ''
      # [string=' '] Separator used for the list of references
      ref_separator: ' '
      # [string='type_value'] [type_value,type_value_ref,ref] Sorting criteria
      sort_style: 'type_value'
      # [boolean=false] Generate the `Source BoM` column using the reference ID instead of the project name
      source_by_id: false
      # [string='millimeters'] [millimeters,inches,mils] Units used for the positions ('Footprint X' and 'Footprint Y' columns).
      # Affected by global options
      units: 'millimeters'
      # [boolean=false] Print grouped references in the alternate compressed style eg: R1-R7,R18
      use_alt: false
      # [boolean=true] Use the auxiliary axis as origin for coordinates (KiCad default) (for XYRS)
      use_aux_axis_as_origin: true
      # [string=''] Board variant, used to determine which components
      # are output to the BoM.
      variant: ''
      # [dict] Options for the XLSX format
      xlsx:
        # [boolean=true] Use colors to show the field type
        col_colors: true
        # [string=''] Column with links to the datasheet
        datasheet_as_link: ''
        # [string|list(string)=''] Column/s containing Digi-Key part numbers, will be linked to web page
        digikey_link: ''
        # [string|list(string)=''] Information to put after the title and before the pcb and stats info
        extra_info: ''
        # [boolean=true] Generate a separated section for DNF (Do Not Fit) components
        generate_dnf: true
        # [boolean=false] Hide project information
        hide_pcb_info: false
        # [boolean=false] Hide statistics information
        hide_stats_info: false
        # [boolean=true] Use a color for empty cells. Applies only when `col_colors` is `true`
        highlight_empty: true
        # [boolean=false] Enable KiCost worksheet creation
        kicost: false
        # [string|list(string)=''] List of KiCost APIs to disable
        kicost_api_disable: ''
        # [string|list(string)=''] List of KiCost APIs to enable
        kicost_api_enable: ''
        # [string=''] KiCost configuration file. It contains the keys for the different distributors APIs.
        # The regular KiCost config is used when empty.
        # Important for CI/CD environments: avoid exposing your API secrets!
        # To understand how to achieve this, and also how to make use of the cache please visit the
        # [kicost_ci_test](https://github.com/set-soft/kicost_ci_test) repo
        kicost_config: ''
        # [boolean=false] Used to add a column with the distributor's description. So you can check this is the right component
        kicost_dist_desc: false
        # [string|boolean=''] PNG file to use as logo, use false to remove
        logo: ''
        # [number=2] Scaling factor for the logo. Note that this value isn't honored by all spreadsheet software
        logo_scale: 2
        # [number=60] [20,999] Maximum column width (characters)
        max_col_width: 60
        # [string|list(string)=''] Column/s containing Mouser part numbers, will be linked to web page
        mouser_link: ''
        # [boolean=false] Enable Specs worksheet creation. Contains specifications for the components.
        # Works with only some KiCost APIs
        specs: false
        # [list(dict)|list(string)] Which columns are included in the Specs worksheet. Use `References` for the references,
        # 'Row' for the order and 'Sep' to separate groups at the same level. By default all are included.
        # Column names are distributor specific, the following aren't: '_desc', '_value', '_tolerance', '_footprint',
        # '_power', '_current', '_voltage', '_frequency', '_temp_coeff', '_manf', '_size'
        specs_columns:
          # [string=''] Used as explanation for this column. The XLSX output uses it
          - comment: ''
            # [string=''] Name of the field to use for this column
            field: 'Row'
            # [list(dict)|list(string)|string=''] List of fields to join to this column
            join:
              # [string=''] Name of the field
              - field: 'Voltage'
                # [string=''] Text to use instead of a field. This option is incompatible with the `field` option.
                # Any space to separate it should be added in the text.
                # Use \n for newline and \t for tab
                text: ''
                # [string=''] Text to add after the field content. Will be added only if the field isn't empty.
                # Any space to separate it should be added in the text.
                # Use \n for newline and \t for tab
                text_after: ''
                # [string=''] Text to add before the field content. Will be added only if the field isn't empty.
                # Any space to separate it should be added in the text.
                # Use \n for newline and \t for tab
                text_before: ''
            # [number=0] Used to group columns. The XLSX output uses it to collapse columns
            level: 0
            # [string=''] Name to display in the header. The field is used when empty
            name: 'Line'
        # [string='modern-blue'] Head style: modern-blue, modern-green, modern-red and classic
        style: 'modern-blue'
        # [string='KiBot Bill of Materials'] BoM title
        title: 'KiBot Bill of Materials'
  - name: 'BoM_In_XSLX'
    comment: 'Used to generate the BoM in CSV, HTML, TSV, TXT, XML or XLSX format using the internal BoM.'
    type: 'bom'
    dir: 'Artifacts/BoM'
    options:
      # # [list(dict)] Add components from other projects.
      # # You can use CSV files, the first row must contain the names of the fields.
      # # The `Reference` and `Value` are mandatory, in most cases `Part` is also needed.
      # # The `Part` column should contain the name/type of the component. This is important for
      # # passive components (R, L, C, etc.). If this information isn't available consider
      # # configuring the grouping to exclude the `Part`.
      # # aggregate:
      # #   # [string=','] Delimiter used for CSV files
      # #   - delimiter: ','
      # #     # [string=''] Name of the schematic to aggregate
      # #     file: ''
      # #     # [string=''] Name to identify this source. If empty we use the name of the schematic
      # #     name: ''
      # #     # [number=1] Number of boards to build (components multiplier). Use negative to subtract
      # #     number: 1
      # #     # [string=''] A prefix to add to all the references from this project
      # #     ref_id: ''
      # [boolean=true] Always use positive values for the footprint rotation
      angle_positive: true
      # [boolean=false] Use negative X coordinates for footprints on bottom layer (for XYRS)
      bottom_negative_x: false
      # [list(dict)|list(string)] List of columns to display.
      # Can be just the name of the field
      columns:
      #   # [string=''] Used as explanation for this column. The XLSX output uses it
      #   - comment: ''
      #     # [string=''] Name of the field to use for this column
      #     field: 'Row'
      #     # [list(dict)|list(string)|string=''] List of fields to join to this column
      #     join:
      #       # [string=''] Name of the field
      #       - field: 'Voltage'
      #         # [string=''] Text to use instead of a field. This option is incompatible with the `field` option.
      #         # Any space to separate it should be added in the text.
      #         # Use \n for newline and \t for tab
      #         text: ''
      #         # [string=''] Text to add after the field content. Will be added only if the field isn't empty.
      #         # Any space to separate it should be added in the text.
      #         # Use \n for newline and \t for tab
      #         text_after: ''
      #         # [string=''] Text to add before the field content. Will be added only if the field isn't empty.
      #         # Any space to separate it should be added in the text.
      #         # Use \n for newline and \t for tab
      #         text_before: ''
      #     # [number=0] Used to group columns. The XLSX output uses it to collapse columns
      #     level: 0
      #     # [string=''] Name to display in the header. The field is used when empty
      #     name: 'Line'
        - field: "Row"
        - field: "References"
        - field: "Value"
        - field: "Quantity Per PCB"
        - field: "Description"
        - comment: "A column joining all the ratings"
          field: "Tolerance"
          name: "Ratings"
          join:
            - field: "TempCoef"
              text_before : " / "
            - field: "Vrating"
              text_before : " / "
        - field: "Package"
        - field: "MPN"
        - field: "Manufacturer"
        - field: "Digikey PN"
        - field: "Farnell PN"
        - field: "Datasheet"
        - field: "Comments"
      # [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']]
      # [list(dict)|list(string)] List of columns to add to the global section of the cost.
      # Can be just the name of the field
      cost_extra_columns:
        # [string=''] Used as explanation for this column. The XLSX output uses it
        - comment: ''
          # [string=''] Name of the field to use for this column
          field: 'Row'
          # [list(dict)|list(string)|string=''] List of fields to join to this column
          join:
            # [string=''] Name of the field
            - field: 'Voltage'
              # [string=''] Text to use instead of a field. This option is incompatible with the `field` option.
              # Any space to separate it should be added in the text.
              # Use \n for newline and \t for tab
              text: ''
              # [string=''] Text to add after the field content. Will be added only if the field isn't empty.
              # Any space to separate it should be added in the text.
              # Use \n for newline and \t for tab
              text_after: ''
              # [string=''] Text to add before the field content. Will be added only if the field isn't empty.
              # Any space to separate it should be added in the text.
              # Use \n for newline and \t for tab
              text_before: ''
          # [number=0] Used to group columns. The XLSX output uses it to collapse columns
          level: 0
          # [string=''] Name to display in the header. The field is used when empty
          name: 'Line'
      # [boolean=false] Show the stats about how many of the components are SMD/THT. You must provide the PCB
      count_smd_tht: false
      # [dict] Options for the CSV, TXT and TSV formats
      csv:
        # [boolean=false] Hide the header line (names of the columns)
        hide_header: false
        # [boolean=false] Hide project information
        hide_pcb_info: false
        # [boolean=false] Hide statistics information
        hide_stats_info: false
        # [boolean=false] Enclose all values using double quotes
        quote_all: false
        # [string=','] CSV Separator. TXT and TSV always use tab as delimiter.
        # Only one character can be specified
        separator: ','
      # [string|list(string)] Include this distributors list. Default is all the available
      # distributors:
      # [string|list(string)='_kibom_dnc'] Name of the filter to mark components as 'Do Not Change'.
      # The default filter marks components with a DNC value or DNC in the Config field.
      # This option is for simple cases, consider using a full variant for complex cases
      dnc_filter: '_kibom_dnc'
      # [string|list(string)='_kibom_dnf'] Name of the filter to mark components as 'Do Not Fit'.
      # The default filter marks components with a DNF value or DNF in the Config field.
      # This option is for simple cases, consider using a full variant for complex cases
      dnf_filter: '_kibom_dnf'
      # [string|list(string)='_mechanical'] Name of the filter to exclude components from BoM processing.
      # The default filter excludes test points, fiducial marks, mounting holes, etc.
      # This option is for simple cases, consider using a full variant for complex cases
      exclude_filter: '_mechanical'
      # [boolean=false] Exclude components marked with *Exclude from BOM* in the PCB.
      # This is a KiCad 6 option
      exclude_marked_in_pcb: false
      # [boolean=true] Exclude components marked with *Exclude from bill of materials* in the schematic.
      # This is a KiCad 6 option
      exclude_marked_in_sch: true
      # [boolean=true] Expand KiCad 6 text variables after applying all filters and variants.
      # This is done using a **_expand_text_vars** filter.
      # If you need to customize the filter, or apply it before, you can disable this option and
      # add a custom filter to the filter chain
      expand_text_vars: true
      # [string='Config'] Field name used for internal filters (not for variants)
      fit_field: 'Config'
      # [string|list(string)='no,yes'] Values for the `Footprint Populate` column
      footprint_populate_values: 'no,yes'
      # [string|list(string)='SMD,THT,VIRTUAL'] Values for the `Footprint Type` column
      footprint_type_values: 'SMD,THT,VIRTUAL'
      # [string=''] [HTML,CSV,TXT,TSV,XML,XLSX,HRTXT] format for the BoM.
      # Defaults to CSV or a guess according to the options.
      # HRTXT stands for Human Readable TeXT
      format: 'XLSX'
      # [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',
      #            'Voltage', 'Tolerance', 'Current', 'Power'] is used
      group_fields: ['part', 'part lib', 'value', 'footprint', 'footprint lib', 'voltage', 'tolerance', 'current', 'power']
      # [list(string)] List of fields to be used when the fields in `group_fields` are empty.
      # The first field in this list is the fallback for the first in `group_fields`, and so on
      # group_fields_fallbacks:
      # [dict] Options for the HRTXT formats
      hrtxt:
        # [string='-'] Separator between the header and the data
        header_sep: '-'
        # [boolean=false] Hide the header line (names of the columns)
        hide_header: false
        # [boolean=false] Hide project information
        hide_pcb_info: false
        # [boolean=false] Hide statistics information
        hide_stats_info: false
        # [string='left'] [left,right,center] Text justification
        justify: 'left'
        # [string='I'] Column Separator
        separator: 'I'
      # [dict] Options for the HTML format
      # html:
      #   # [boolean=true] Use colors to show the field type
      #   col_colors: true
      #   # [string=''] Column with links to the datasheet
      #   datasheet_as_link: ''
      #   # [string|list(string)=''] Column/s containing Digi-Key part numbers, will be linked to web page
      #   digikey_link: ''
      #   # [string|list(string)=''] Information to put after the title and before the pcb and stats info
      #   extra_info: ''
      #   # [boolean=true] Generate a separated section for DNF (Do Not Fit) components
      #   generate_dnf: true
      #   # [boolean=false] Hide project information
      #   hide_pcb_info: false
      #   # [boolean=false] Hide statistics information
      #   hide_stats_info: false
      #   # [boolean=true] Use a color for empty cells. Applies only when `col_colors` is `true`
      #   highlight_empty: true
      #   # [string|boolean=''] PNG file to use as logo, use false to remove
      #   logo: ''
      #   # [string|list(string)=''] Column/s containing Mouser part numbers, will be linked to web page
      #   mouser_link: ''
      #   # [string='modern-blue'] Page style. Internal styles: modern-blue, modern-green, modern-red and classic.
      #   # Or you can provide a CSS file name. Please use .css as file extension.
      #   style: 'modern-blue'
      #   # [string='KiBot Bill of Materials'] BoM title
      #   title: 'KiBot Bill of Materials'
      # [boolean=true] Exclude DNF (Do Not Fit) components
      ignore_dnf: true
      # [boolean=true] Component quantities are always expressed as integers. Using the ceil() function
      int_qtys: true
      # [boolean=true] Component groups with blank fields will be merged into the most compatible group, where possible
      merge_blank_fields: true
      # [boolean=true] When creating groups two components with empty/missing field will be interpreted as with the same value
      merge_both_blank: true
      # [list(string)] List of fields where we tolerate conflicts.
      # Use it to avoid undesired warnings.
      # By default the field indicated in `fit_field`, the field used for variants and
      # the field `part` are excluded
      no_conflict: ['Config', 'Part']
      # [string|list(string)] Exclude this distributors list. They are removed after computing `distributors`
      # no_distributors:
      # [boolean=false] When normalizing values use the locale decimal point
      normalize_locale: false
      # [boolean=false] Try to normalize the R, L and C values, producing uniform units and prefixes
      normalize_values: false
      # [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|list(string)='_none'] Name of the filter to transform fields before applying other filters.
      # This option is for simple cases, consider using a full variant for complex cases
      pre_transform: '_none'
      # [string=''] A prefix to add to all the references from this project. Used for multiple projects
      ref_id: ''
      # [string=' '] Separator used for the list of references
      ref_separator: ' '
      # [string='type_value'] [type_value,type_value_ref,ref] Sorting criteria
      sort_style: 'type_value'
      # [boolean=false] Generate the `Source BoM` column using the reference ID instead of the project name
      source_by_id: false
      # [string='millimeters'] [millimeters,inches,mils] Units used for the positions ('Footprint X' and 'Footprint Y' columns).
      # Affected by global options
      units: 'millimeters'
      # [boolean=false] Print grouped references in the alternate compressed style eg: R1-R7,R18
      use_alt: false
      # [boolean=true] Use the auxiliary axis as origin for coordinates (KiCad default) (for XYRS)
      use_aux_axis_as_origin: true
      # [string=''] Board variant, used to determine which components
      # are output to the BoM.
      variant: ''
      # [dict] Options for the XLSX format
      xlsx:
        # [boolean=true] Use colors to show the field type
        col_colors: true
        # [string=''] Column with links to the datasheet
        datasheet_as_link: 'Datasheet'
        # [string|list(string)=''] Column/s containing Digi-Key part numbers, will be linked to web page
        digikey_link: 'Digikey PN'
        # [string|list(string)=''] Information to put after the title and before the pcb and stats info
        extra_info: ''
        # [boolean=true] Generate a separated section for DNF (Do Not Fit) components
        generate_dnf: true
        # [boolean=false] Hide project information
        hide_pcb_info: false
        # [boolean=false] Hide statistics information
        hide_stats_info: false
        # [boolean=true] Use a color for empty cells. Applies only when `col_colors` is `true`
        highlight_empty: true
        # [boolean=false] Enable KiCost worksheet creation
        kicost: false
        # [string|list(string)=''] List of KiCost APIs to disable
        kicost_api_disable: ''
        # [string|list(string)=''] List of KiCost APIs to enable
        kicost_api_enable: ''
        # [string=''] KiCost configuration file. It contains the keys for the different distributors APIs.
        # The regular KiCost config is used when empty.
        # Important for CI/CD environments: avoid exposing your API secrets!
        # To understand how to achieve this, and also how to make use of the cache please visit the
        # [kicost_ci_test](https://github.com/set-soft/kicost_ci_test) repo
        kicost_config: ''
        # [boolean=false] Used to add a column with the distributor's description. So you can check this is the right component
        kicost_dist_desc: false
        # [string|boolean=''] PNG file to use as logo, use false to remove
        logo: ''
        # [number=2] Scaling factor for the logo. Note that this value isn't honored by all spreadsheet software
        logo_scale: 2
        # [number=60] [20,999] Maximum column width (characters)
        max_col_width: 60
        # [string|list(string)=''] Column/s containing Mouser part numbers, will be linked to web page
        mouser_link: ''
        # [boolean=false] Enable Specs worksheet creation. Contains specifications for the components.
        # Works with only some KiCost APIs
        specs: false
        # [list(dict)|list(string)] Which columns are included in the Specs worksheet. Use `References` for the references,
        # 'Row' for the order and 'Sep' to separate groups at the same level. By default all are included.
        # Column names are distributor specific, the following aren't: '_desc', '_value', '_tolerance', '_footprint',
        # '_power', '_current', '_voltage', '_frequency', '_temp_coeff', '_manf', '_size'
        specs_columns:
          # [string=''] Used as explanation for this column. The XLSX output uses it
          - comment: ''
            # [string=''] Name of the field to use for this column
            field: 'Row'
            # [list(dict)|list(string)|string=''] List of fields to join to this column
            join:
              # [string=''] Name of the field
              - field: 'Voltage'
                # [string=''] Text to use instead of a field. This option is incompatible with the `field` option.
                # Any space to separate it should be added in the text.
                # Use \n for newline and \t for tab
                text: ''
                # [string=''] Text to add after the field content. Will be added only if the field isn't empty.
                # Any space to separate it should be added in the text.
                # Use \n for newline and \t for tab
                text_after: ''
                # [string=''] Text to add before the field content. Will be added only if the field isn't empty.
                # Any space to separate it should be added in the text.
                # Use \n for newline and \t for tab
                text_before: ''
            # [number=0] Used to group columns. The XLSX output uses it to collapse columns
            level: 0
            # [string=''] Name to display in the header. The field is used when empty
            name: 'Line'
        # [string='modern-blue'] Head style: modern-blue, modern-green, modern-red and classic
        style: 'modern-green'
        # [string='KiBot Bill of Materials'] BoM title
        title: 'KiBot Bill of Materials'

  # Gerber 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: 'Gerber_Drills'
    comment: 'This is the information for the drilling machine in gerber format.'
    type: 'gerb_drill'
    dir: 'Artifacts/Gerbers'
    options:
      # [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'
      # [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] 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: ''
      # [boolean=false] Use the auxiliary axis as origin for coordinates
      use_aux_axis_as_origin: true
  # Gerber format:
  # This output is what you get from the File/Plot menu in pcbnew.
  - name: 'Gerber_Generation'
    comment: 'This is the main fabrication format for the PCB.'
    type: 'gerber'
    dir: 'Artifacts/Gerbers'
    options:
      # [boolean=true] Creates a file with information about all the generated gerbers.
      # You can use it in gerbview to load all gerbers at once
      create_gerber_job_file: true
      # [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'
      # [boolean=false] Disable aperture macros (workaround for buggy CAM software) (KiCad 6)
      disable_aperture_macros: 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=''] 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
      # [string='%f-%i%I%v.%x'] Name for the gerber job file (%i='job', %x='gbrjob'). Affected by global options
      gerber_job_file: '%f-%i%I%v.%x'
      # [number=4.6] This the gerber coordinate format, can be 4.5 or 4.6
      gerber_precision: 4.6
      # [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: ''
      # [number=0.1] [0.02,2] Line_width for objects without width [mm] (KiCad 5)
      line_width: 0.1
      # [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
      # [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] Subtract the solder mask from the silk screen
      subtract_mask_from_silk: 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: true
      # [boolean=true] Include netlist metadata
      use_gerber_net_attributes: true
      # [boolean=true] Use the extended X2 format (otherwise use X1 formerly RS-274X)
      use_gerber_x2_attributes: true
      # [boolean=false] Use legacy Protel file extensions
      use_protel_extensions: true
      # [string=''] Board variant to apply
      variant: ''
    layers:
      - 'copper'
      - F.Paste
      - B.Paste
      - F.Silkscreen
      - B.Silkscreen
      - F.Mask
      - B.Mask
      - Edge.Cuts

  # IBoM (Interactive HTML BoM):
  # For more information: https://github.com/INTI-CMNB/InteractiveHtmlBom
  # This output is what you get from the InteractiveHtmlBom plug-in (pcbnew).
  - name: 'ibom_example'
    comment: 'Generates an interactive web page useful to identify the position of the components in the PCB.'
    type: 'ibom'
    dir: 'Artifacts/InteractiveBoM'
    options:
      # [string=''] List of comma separated blacklisted components or prefixes with *. E.g. 'X1,MH*'.
      # IBoM option, avoid using in conjunction with KiBot variants/filters
      blacklist: ''
      # [boolean=false] Blacklist components with empty value.
      # IBoM option, avoid using in conjunction with KiBot variants/filters
      blacklist_empty_val: false
      # [number=0] Board rotation in degrees (-180 to 180). Will be rounded to multiple of 5
      board_rotation: 0
      # [string='left-right'] [bom-only,left-right,top-bottom] Default BOM view
      bom_view: 'left-right'
      # [string='Sourced,Placed'] Comma separated list of checkbox columns
      checkboxes: 'Sourced,Placed'
      # [boolean=false] Default to dark mode
      dark_mode: 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.
      # Avoid using it in conjunction with IBoM native filtering options
      dnf_filter: '_none'
      # [string=''] Name of the extra field that indicates do not populate status.
      # Components with this field not empty will be blacklisted.
      # IBoM option, avoid using in conjunction with KiBot variants/filters
      dnp_field: ''
      # [string=''] Path to netlist or xml file. You can use '%F.xml' to avoid specifying the project name.
      # Leave it blank for most uses, data will be extracted from the PCB
      extra_data_file: ''
      # [string=''] Comma separated list of extra fields to pull from netlist or xml file.
      # Using 'X,Y' is a shortcut for `show_fields` and `group_fields` with values 'Value,Footprint,X,Y'
      extra_fields: ''
      # [string=''] Comma separated list of fields that components will be grouped by.
      # Value and Footprint are used when nothing is specified
      group_fields: ''
      # [boolean=false] Hide footprint pads by default
      hide_pads: false
      # [boolean=false] Hide silkscreen by default
      hide_silkscreen: false
      # [boolean=false] Highlight pin1 by default
      highlight_pin1: false
      # [boolean=false] Include netlist information in output.
      include_nets: false
      # [boolean=false] Include track/zone information in output. F.Cu and B.Cu layers only
      include_tracks: false
      # [string='FB'] [F,FB,B] Default layer view
      layer_view: 'FB'
      # [string='ibom'] Output file name format supports substitutions:
      # %f : original pcb file name without extension.
      # %p : pcb/project title from pcb metadata.
      # %c : company from pcb metadata.
      # %r : revision from pcb metadata.
      # %d : pcb date from metadata if available, file modification date otherwise.
      # %D : bom generation date.
      # %T : bom generation time.
      # Extension .html will be added automatically.
      # Note that this name is used only when output is ''
      name_format: 'ibom'
      # `netlist_file` is an alias for `extra_data_file`
      # [boolean=false] Do not blacklist virtual components.
      # IBoM option, avoid using in conjunction with KiBot variants/filters
      no_blacklist_virtual: false
      # [boolean=false] Disable compression of pcb data
      no_compression: false
      # [boolean=false] Do not redraw pcb on drag by default
      no_redraw_on_drag: false
      # [boolean=false] Normalize extra field name case. E.g. 'MPN' and 'mpn' will be considered the same field
      normalize_field_case: false
      # [boolean=false] Offset the back of the pcb by 180 degrees
      offset_back_rotation: false
      # [string='%f-%i%I%v.%x'] Filename for the output, use '' to use the IBoM filename (%i=ibom, %x=html). 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] Show fabrication layer by default
      show_fabrication: false
      # [string=''] Comma separated list of fields to show in the BOM.
      # Value and Footprint are displayed when nothing is specified
      show_fields: ''
      # [string='C,R,L,D,U,Y,X,F,SW,A,~,HS,CNN,J,P,NT,MH'] Default sort order for components. Must contain '~' once
      sort_order: 'C,R,L,D,U,Y,X,F,SW,A,~,HS,CNN,J,P,NT,MH'
      # [string=''] Board variant to apply.
      # Avoid using it in conjunction with IBoM native filtering options
      variant: ''
      # [string=''] Name of the extra field that stores board variant for component.
      # IBoM option, avoid using in conjunction with KiBot variants/filters
      variant_field: ''
      # [string=''] List of board variants to exclude from the BOM.
      # IBoM option, avoid using in conjunction with KiBot variants/filters
      variants_blacklist: ''
      # [string=''] List of board variants to include in the BOM.
      # IBoM option, avoid using in conjunction with KiBot variants/filters
      variants_whitelist: ''
  # PDF Schematic Print (Portable Document Format):
  # This is the main format to document your schematic.
  # This output is what you get from the 'File/Print' menu in eeschema.
  - name: 'pdf_sch_print_example'
    comment: 'Exports the PCB to the most common exchange format. Suitable for printing.'
    type: 'pdf_sch_print'
    dir: 'Artifacts/Schematic'
    options:
      # [boolean=true] Generate with all hierarchical sheets
      all_pages: true
      # [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 PDF
      monochrome: false
      # [string='%f-%i%I%v.%x'] Filename for the output PDF (%i=schematic, %x=pdf). 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.
      # Not fitted components are crossed
      variant: ''
  # # PDF joiner:
  # # This is just a PDF joiner, using `pdfunite` from Poppler Utils.
  # - name: 'pdfunite_example'
  #   comment: 'Generates a new PDF from other outputs.'
  #   type: 'pdfunite'
  #   dir: 'Example/pdfunite_dir'
  #   options:
  #     # [string='%f-%i%I%v.%x'] Name for the generated PDF (%i=name of the output %x=pdf). Affected by global options
  #     output: '%f-%i%I%v.%x'
  #     # [list(dict)] Which files will be included
  #     outputs:
  #       # [string='.*\.pdf'] A regular expression that source files must match
  #       - filter: '.*\.pdf'
  #         # [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: ''
  #         # [string='*.pdf'] 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` option
  #         source: '*.pdf'
  #     # [boolean=false] Use the `pdfunite` tool instead of PyPDF2 Python module
  #     use_external_command: false
  # Populate - Assembly instructions builder:
  # Each step shows the already soldered components and the ones to add highlighted.
  # This is equivalent to the PcbDraw's Populate command, but integrated to KiBot.
  # For more information about the input markdown file please consult the
  # [documentation](docs/populate.md)
  - name: 'Populate3D'
    comment: 'Creates a markdown file explaining how to assembly a PCB using KiCad 3D rendered.'
    type: 'populate'
    dir: 'Artifacts/Assembly_Instructions'
    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='html'] [html,md] Format for the generated output
      format: 'md'
      # [string='img/populating_%d.%x'] Pattern used for the image names. The `%d` is replaced by the image number.
      # The `%x` is replaced by the extension. Note that the format is selected by the
      # `renderer`
      imgname: 'img/populating_%d.%x'
      # [string|list(string)=''] List of components soldered before the first step
      # initial_components: 'U1, RV1, R1, R2, R3, R4, R5'
      # [string=''] Name of the input file describing the assembly. Must be a markdown file.
      # Note that the YAML section of the file will be skipped, all the needed information
      # comes from this output and the `renderer` output
      input: 'Assembly_Instructions.md'
      # [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=''] Name of the output used to render the PCB steps.
      # Currently this must be a `pcbdraw` or `render_3d` output
      renderer: 'KiCad_3D'
      # [string] The name of the handlebars template used for the HTML output.
      # The extension must be `.handlebars`, it will be added when missing.
      # The `simple.handlebars` template is a built-in template
      template: 'simple'
      # [string=''] Board variant to apply
      # variant: ''
  # # 3D render of the PCB:
  - name: KiCad_3D
    comment: "How to draw a step"
    type: render_3d
    run_by_default: false
    options:
      # [boolean=false] When enabled the image will be post-processed to remove the empty space around the image.
      # In this mode the `background2` is changed to be the same as `background1`
      auto_crop: true
      # [string='#66667F'] First color for the background gradient
      background1: "#eff8ff"
      # [string='#CCCCE5'] Second color for the background gradient
      # background2: '#CCCCE5'
      # [string='#332B16'] Color for the board without copper or solder mask
      # board: '#332B16'
      # [boolean=true] Clip silkscreen at via annuli (KiCad 6)
      # clip_silk_on_via_annulus: true
      # [string='#8b898c'] Color for the copper
      # copper: '#8b898c'
      # [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] Downloads missing 3D models from KiCad git. Only applies to models in KISYS3DMOD
      download: true
      # [number=720] Image height (aprox.)
      height: 1280
      # [list(string)=[]] List of components to highlight
      # highlight: []
      # [boolean=false] Highlight over the component (not under)
      # highlight_on_top: false
      # [number=1.5] [0,1000] How much the highlight extends around the component [mm]
      # highlight_padding: 1.5
      # [string='https://gitlab.com/kicad/libraries/kicad-packages3D/-/raw/master/'] Base URL for the KiCad 3D models
      kicad_3d_url: 'https://gitlab.com/kicad/libraries/kicad-packages3D/-/raw/master/'
      # [number=0] Steps to move in the X axis, positive is to the right.
      # Just like pressing the right arrow in the 3D viewer
      # move_x: 0
      # [number=0] Steps to move in the Y axis, positive is up.
      # Just like pressing the up arrow in the 3D viewer
      # move_y: 0
      # [boolean=false] Used to exclude 3D models for surface mount components
      # no_smd: false
      # [boolean=false] Used to exclude 3D models for through hole components
      # no_tht: false
      # [boolean=false] Used to exclude 3D models for components with 'virtual' attribute
      # no_virtual: false
      # [boolean=false] Enable the orthographic projection mode (top view looks flat)
      orthographic: true
      # [string='%f-%i%I%v.%x'] Name for the generated image file (%i='3D_$VIEW' %x='png'). 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] Enable the ray tracing. Much better result, but slow, and you'll need to adjust `wait_rt`
      ray_tracing: true
      # [number=0] Steps to rotate around the X axis, positive is clockwise.
      # Each step is currently 10 degrees. Only for KiCad 6
      # rotate_x: 0
      # [number=0] Steps to rotate around the Y axis, positive is clockwise.
      # Each step is currently 10 degrees. Only for KiCad 6
      # rotate_y: 0
      # [number=0] Steps to rotate around the Z axis, positive is clockwise.
      # Each step is currently 10 degrees. Only for KiCad 6
      # rotate_z: 0
      # [list(string)|string=all] [none,all] List of components to draw, can be also a string for `none` or `all`.
      # Unlike the `pcbdraw` output, the default is `all`
      # show_components: all
      # [boolean=true] Show the silkscreen layers (KiCad 6)
      show_silkscreen: true
      # [boolean=true] Show the solder mask layers (KiCad 6)
      show_soldermask: true
      # [boolean=true] Show the solder paste layers (KiCad 6)
      show_solderpaste: false
      # [boolean=true] Show filled areas in zones (KiCad 6)
      show_zones: true
      # [string='#d5dce4'] Color for the silk screen
      # silk: '#d5dce4'
      # [string='#208b47'] Color for the solder mask
      # solder_mask: '#208b47'
      # [string='#808080'] Color for the solder paste
      # solder_paste: '#808080'
      # [boolean=true] Clip silkscreen at solder mask edges (KiCad 6)
      subtract_mask_from_silk: true
      # [boolean=false] When enabled the image will be post-processed to make the background transparent.
      # In this mode the `background1` and `background2` colors are ignored
      transparent_background: false
      # [string='#00ff00'] Color used for the chroma key. Adjust it if some regions of the board becomes transparent
      transparent_background_color: '#00ff00'
      # [number=15] [0,100] Chroma key tolerance (percent). Bigger values will remove more pixels
      transparent_background_fuzz: 15
      # [string=''] Board variant to apply
      # variant: ''
      # [string='top'] [top,bottom,front,rear,right,left,z,Z,y,Y,x,X] Point of view
      # view: 'top'
      # `wait_ray_tracing` is an alias for `wait_render`
      # [number=-600] How many seconds we must wait before capturing the render (ray tracing or normal).
      # Lamentably KiCad can save an unfinished image. Enlarge it if your image looks partially rendered.
      # Use negative values to enable the auto-detect using CPU load.
      # In this case the value is interpreted as a time-out.
      # wait_render: -60
      # [number=1280] Image width (aprox.)
      width: 1280
      # [number=0] Zoom steps. Use positive to enlarge, get closer, and negative to reduce.
      # Same result as using the mouse wheel in the 3D viewer
      zoom: 4
set-soft commented 11 months ago

Hi @mundodisco8 ! mistune should be there, this is a fault in the docker image, I'm moving this issue to the docker images project.

set-soft commented 11 months ago

Note: using GitHub actions you don't have much freedom. Is the easiest way to use KiBot on CI/CD, but also the less flexible. You can't install additional packages.

In this case it was an error because this package should be there.

set-soft commented 11 months ago

Ok, should be fixed now

mundodisco8 commented 11 months ago

thanks!