From e2317929ea1ea257206b126e4b4999590c976ef2 Mon Sep 17 00:00:00 2001 From: Adrian <8658377+blubbsy@users.noreply.github.com> Date: Wed, 13 Nov 2024 09:44:41 +0100 Subject: [PATCH] Automation of production files This creates a github action that automatizes the generation of 3D Render, gerber files, BOM, etc. * Changed name of inner layers from InN --> InnerN * Created github action * Added Kibot yaml for every pcb --- .github/workflows/kicad_generation.yml | 52 ++++ .../racer-sensors/racer-sensors.kibot.yaml | 274 ++++++++++++++++++ hardware/racer-sensors/sensors.kicad_pcb | 4 +- hardware/racer/racer.kibot.yaml | 274 ++++++++++++++++++ hardware/racer/racer.kicad_pcb | 6 +- hardware/racer/racer.kicad_prl | 4 +- hardware/thumbtroller/controller.kicad_pcb | 4 +- hardware/thumbtroller/fp-info-cache | 1 + hardware/thumbtroller/thumbroller.kibot.yaml | 274 ++++++++++++++++++ 9 files changed, 884 insertions(+), 9 deletions(-) create mode 100644 .github/workflows/kicad_generation.yml create mode 100644 hardware/racer-sensors/racer-sensors.kibot.yaml create mode 100644 hardware/racer/racer.kibot.yaml create mode 100644 hardware/thumbtroller/fp-info-cache create mode 100644 hardware/thumbtroller/thumbroller.kibot.yaml diff --git a/.github/workflows/kicad_generation.yml b/.github/workflows/kicad_generation.yml new file mode 100644 index 0000000..2abe3d7 --- /dev/null +++ b/.github/workflows/kicad_generation.yml @@ -0,0 +1,52 @@ +name: Production_Electronics_Racer + +on: + pull_request: + workflow_dispatch: + pull_request_target: + types: + - closed + +jobs: + build: + runs-on: ubuntu-latest + container: ghcr.io/inti-cmnb/kicad8_auto_full:latest + + permissions: + contents: write + + strategy: + matrix: + device_type: [racer, racer-sensors, thumbtroller] + include: + - device_type: racer + NewImage: 1 + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + path: . + submodules: recursive + + - name: Extract branch name + shell: bash + run: echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT + id: extract_branch + + - name: Initialize + run: | + mkdir -p production + + - name: Generate files + run: | + cd hardware/${{ matrix.device_type }} + kibot -d ../../production/${{ matrix.device_type }} + + - name: Upload Results + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.device_type }} + path: | + production + if-no-files-found: ignore \ No newline at end of file diff --git a/hardware/racer-sensors/racer-sensors.kibot.yaml b/hardware/racer-sensors/racer-sensors.kibot.yaml new file mode 100644 index 0000000..475e87b --- /dev/null +++ b/hardware/racer-sensors/racer-sensors.kibot.yaml @@ -0,0 +1,274 @@ +kibot: + version: 1 + +variants: + - name: "Racer-sensors" + comment: "File Generation for racer" + type: kibom + +global: + out_dir: "../production/Export-%D" + date_format: "%Y-%m-%d" + +outputs: + - name: "Naviagation results" + comment: "Create navigation results page" + type: navigate_results + dir: "overview" + + - name: "Download datasheets" + comment: "Download component datasheets" + type: download_datasheets + dir: docs/datasheets + category: "documentation" + + - name: "Generate IBOM" + comment: "Interactive Bill of Materials" + type: ibom + dir: docs + category: "documentation" + + - name: "Print Schematics" + comment: "Print schematic (PDF)" + type: pdf_sch_print + dir: docs + category: "documentation" + options: + output: Schematic.%x + + - name: "Board Top" + comment: "Top layer view" + type: pcbdraw + dir: docs/images + category: "documentation" + options: + format: png + bottom: false + output: "PCB_Top.%x" + + - name: "Board Bottom" + comment: "Bottom layer view" + type: pcbdraw + dir: docs/images + category: "documentation" + options: + format: png + bottom: true + output: "PCB_Bottom.%x" + + - name: "Generate Drill" + comment: "Generate drill files" + type: excellon + dir: gerber + category: "production" + options: + metric_units: true + mirror_y_axis: false + pth_and_npth_single_file: false + left_digits: 0 + minimal_header: false + use_aux_axis_as_origin: true + route_mode_for_oval_holes: true + zeros_format: "DECIMAL_FORMAT" + + - name: "Generate Gerbers" + comment: "Generate Gerbers" + type: gerber + dir: gerber + category: "production" + options: + exclude_edge_layer: false + exclude_pads_from_silkscreen: false + plot_sheet_reference: false + plot_footprint_refs: true + plot_footprint_values: true + force_plot_invisible_refs_vals: false + tent_vias: true + line_width: 0.15 + + use_aux_axis_as_origin: false + subtract_mask_from_silk: true + use_protel_extensions: false + gerber_precision: 4.5 + create_gerber_job_file: true + use_gerber_x2_attributes: true + use_gerber_net_attributes: false + + layers: + - layer: F.Cu + suffix: F_Cu + description: Front copper + - layer: Inner1 + suffix: Inner1 + description: 'Inner cooper layer' + - layer: Inner2 + suffix: Inner2 + description: 'Inner copper layer' + - layer: B.Cu + suffix: B_Cu + description: Bottom copper + - layer: B.Paste + suffix: B_Paste + description: Bottom solder paste + - layer: F.Paste + suffix: F_Paste + description: Front solder paste + - layer: B.Silkscreen + suffix: B_Silkscreen + description: Bottom silkscreen (artwork) + - layer: F.Silkscreen + suffix: F_Silkscreen + description: Front silkscreen (artwork) + - layer: B.Mask + suffix: B_Mask + description: Bottom soldermask (negative) + - layer: F.Mask + suffix: F_Mask + description: Front soldermask (negative) + - layer: Edge.Cuts + suffix: Edge_Cuts + description: Board shape + - layer: B.Courtyard + suffix: B_Courtyard + description: Bottom courtyard area + - layer: F.Courtyard + suffix: F_Courtyard + description: Front courtyard area + - layer: B.Fab + suffix: B_Fab + description: Bottom documentation + - layer: F.Fab + suffix: F_Fab + description: Front documentation + - layer: User.1 + suffix: User_1 + description: User layer 1 + + - name: "Pick & Place" + comment: "Pick & Place" + type: position + dir: centroid + category: "production" + options: + format: ASCII + only_smd: false + + - name: "PCB Specifications" + comment: "PCB Specifications" + type: pcb_print + dir: docs + category: "production" + options: + output: "PCB.pdf" + format: PDF + pages: + - layers: + - layer: Edge.Cuts + - layer: User.1 + sheet: "PCB Specifications" + monochrome: true + + - name: "Ref Top" + comment: "Ref Top" + type: pcb_print + dir: docs + category: "purchasing" + options: + output: "Ref_Top.%x" + format: PDF + pages: + - layers: + - layer: Edge.Cuts + - layer: F.Fab + sheet: "Ref-Top" + monochrome: true + + - name: "Ref Bottom" + comment: "Ref Bottom" + type: pcb_print + dir: docs + category: "purchasing" + options: + output: "Ref_Bot.%x" + format: PDF + pages: + - layers: + - layer: Edge.Cuts + - layer: B.Fab + sheet: "Ref-Bottom" + monochrome: true + mirror: true + + - name: "BOM" + comment: "BOM" + type: bom + dir: docs + category: "purchasing" + options: + format: XLSX + count_smd_tht: true + output: "BOM.%x" + ref_separator: ',' + columns: + - field: Row + name: Item + - field: References + name: Ref Des + - field: Build Quantity + name: Quantity + - field: Mfr. + name: Manufacturer + - field: Mfr. No. + name: Mfg Part# + - field: Value + name: Description / Value + - field: Footprint + name: Package + - field: Footprint Type + name: Type + - field: Footprint Side + name: Side + xlsx: + title: "%f BOM" + hide_stats_info: false + quote_all: true + logo: false + + - name: "ZIP Gerber" + comment: "ZIP Gerber" + type: compress + dir: . + category: "purchasing" + options: + format: ZIP + files: + - source: gerber/** + output: "Gerber_%D.%x" + + - name: "ZIP Centroid" + comment: "ZIP Centroid" + type: compress + dir: . + category: "purchasing" + options: + format: ZIP + files: + - source: centroid/** + output: "Centroid_%D.%x" + + - name: "Step file" + comment: "STEP file generation" + type: step + dir: cad + category: "mechanical" + + - name: "3D rendering" + comment: "3D rendering" + type: render_3d + dir: docs/images + category: "documentation" + options: + ray_tracing: true + rotate_x: 3 + rotate_z: -2 + output: "PCB_Rendering.%x" diff --git a/hardware/racer-sensors/sensors.kicad_pcb b/hardware/racer-sensors/sensors.kicad_pcb index 3f7d0a1..0a5944d 100644 --- a/hardware/racer-sensors/sensors.kicad_pcb +++ b/hardware/racer-sensors/sensors.kicad_pcb @@ -9,8 +9,8 @@ (paper "A4") (layers (0 "F.Cu" signal) - (1 "In1.Cu" signal) - (2 "In2.Cu" signal) + (1 "In1.Cu" signal "Inner1") + (2 "In2.Cu" signal "Inner2") (31 "B.Cu" signal) (32 "B.Adhes" user "B.Adhesive") (33 "F.Adhes" user "F.Adhesive") diff --git a/hardware/racer/racer.kibot.yaml b/hardware/racer/racer.kibot.yaml new file mode 100644 index 0000000..d12fea0 --- /dev/null +++ b/hardware/racer/racer.kibot.yaml @@ -0,0 +1,274 @@ +kibot: + version: 1 + +variants: + - name: "Racer" + comment: "File Generation for racer" + type: kibom + +global: + out_dir: "../production/Export-%D" + date_format: "%Y-%m-%d" + +outputs: + - name: "Naviagation results" + comment: "Create navigation results page" + type: navigate_results + dir: "overview" + + - name: "Download datasheets" + comment: "Download component datasheets" + type: download_datasheets + dir: docs/datasheets + category: "documentation" + + - name: "Generate IBOM" + comment: "Interactive Bill of Materials" + type: ibom + dir: docs + category: "documentation" + + - name: "Print Schematics" + comment: "Print schematic (PDF)" + type: pdf_sch_print + dir: docs + category: "documentation" + options: + output: Schematic.%x + + - name: "Board Top" + comment: "Top layer view" + type: pcbdraw + dir: docs/images + category: "documentation" + options: + format: png + bottom: false + output: "PCB_Top.%x" + + - name: "Board Bottom" + comment: "Bottom layer view" + type: pcbdraw + dir: docs/images + category: "documentation" + options: + format: png + bottom: true + output: "PCB_Bottom.%x" + + - name: "Generate Drill" + comment: "Generate drill files" + type: excellon + dir: gerber + category: "production" + options: + metric_units: true + mirror_y_axis: false + pth_and_npth_single_file: false + left_digits: 0 + minimal_header: false + use_aux_axis_as_origin: true + route_mode_for_oval_holes: true + zeros_format: "DECIMAL_FORMAT" + + - name: "Generate Gerbers" + comment: "Generate Gerbers" + type: gerber + dir: gerber + category: "production" + options: + exclude_edge_layer: false + exclude_pads_from_silkscreen: false + plot_sheet_reference: false + plot_footprint_refs: true + plot_footprint_values: true + force_plot_invisible_refs_vals: false + tent_vias: true + line_width: 0.15 + + use_aux_axis_as_origin: false + subtract_mask_from_silk: true + use_protel_extensions: false + gerber_precision: 4.5 + create_gerber_job_file: true + use_gerber_x2_attributes: true + use_gerber_net_attributes: false + + layers: + - layer: F.Cu + suffix: F_Cu + description: Front copper + - layer: Inner1 + suffix: Inner1 + description: 'Inner cooper layer' + - layer: Inner2 + suffix: Inner2 + description: 'Inner copper layer' + - layer: B.Cu + suffix: B_Cu + description: Bottom copper + - layer: B.Paste + suffix: B_Paste + description: Bottom solder paste + - layer: F.Paste + suffix: F_Paste + description: Front solder paste + - layer: B.Silkscreen + suffix: B_Silkscreen + description: Bottom silkscreen (artwork) + - layer: F.Silkscreen + suffix: F_Silkscreen + description: Front silkscreen (artwork) + - layer: B.Mask + suffix: B_Mask + description: Bottom soldermask (negative) + - layer: F.Mask + suffix: F_Mask + description: Front soldermask (negative) + - layer: Edge.Cuts + suffix: Edge_Cuts + description: Board shape + - layer: B.Courtyard + suffix: B_Courtyard + description: Bottom courtyard area + - layer: F.Courtyard + suffix: F_Courtyard + description: Front courtyard area + - layer: B.Fab + suffix: B_Fab + description: Bottom documentation + - layer: F.Fab + suffix: F_Fab + description: Front documentation + - layer: User.1 + suffix: User_1 + description: User layer 1 + + - name: "Pick & Place" + comment: "Pick & Place" + type: position + dir: centroid + category: "production" + options: + format: ASCII + only_smd: false + + - name: "PCB Specifications" + comment: "PCB Specifications" + type: pcb_print + dir: docs + category: "production" + options: + output: "PCB.pdf" + format: PDF + pages: + - layers: + - layer: Edge.Cuts + - layer: User.1 + sheet: "PCB Specifications" + monochrome: true + + - name: "Ref Top" + comment: "Ref Top" + type: pcb_print + dir: docs + category: "purchasing" + options: + output: "Ref_Top.%x" + format: PDF + pages: + - layers: + - layer: Edge.Cuts + - layer: F.Fab + sheet: "Ref-Top" + monochrome: true + + - name: "Ref Bottom" + comment: "Ref Bottom" + type: pcb_print + dir: docs + category: "purchasing" + options: + output: "Ref_Bot.%x" + format: PDF + pages: + - layers: + - layer: Edge.Cuts + - layer: B.Fab + sheet: "Ref-Bottom" + monochrome: true + mirror: true + + - name: "BOM" + comment: "BOM" + type: bom + dir: docs + category: "purchasing" + options: + format: XLSX + count_smd_tht: true + output: "BOM.%x" + ref_separator: ',' + columns: + - field: Row + name: Item + - field: References + name: Ref Des + - field: Build Quantity + name: Quantity + - field: Mfr. + name: Manufacturer + - field: Mfr. No. + name: Mfg Part# + - field: Value + name: Description / Value + - field: Footprint + name: Package + - field: Footprint Type + name: Type + - field: Footprint Side + name: Side + xlsx: + title: "%f BOM" + hide_stats_info: false + quote_all: true + logo: false + + - name: "ZIP Gerber" + comment: "ZIP Gerber" + type: compress + dir: . + category: "purchasing" + options: + format: ZIP + files: + - source: gerber/** + output: "Gerber_%D.%x" + + - name: "ZIP Centroid" + comment: "ZIP Centroid" + type: compress + dir: . + category: "purchasing" + options: + format: ZIP + files: + - source: centroid/** + output: "Centroid_%D.%x" + + - name: "Step file" + comment: "STEP file generation" + type: step + dir: cad + category: "mechanical" + + - name: "3D rendering" + comment: "3D rendering" + type: render_3d + dir: docs/images + category: "documentation" + options: + ray_tracing: true + rotate_x: 3 + rotate_z: -2 + output: "PCB_Rendering.%x" diff --git a/hardware/racer/racer.kicad_pcb b/hardware/racer/racer.kicad_pcb index 35702a8..656726a 100644 --- a/hardware/racer/racer.kicad_pcb +++ b/hardware/racer/racer.kicad_pcb @@ -9,9 +9,9 @@ (paper "A4") (layers (0 "F.Cu" signal) - (1 "In1.Cu" signal) - (2 "In2.Cu" signal) - (31 "B.Cu" signal) + (1 "In1.Cu" signal "Inner1") + (2 "In2.Cu" signal "Inner2") + (31 "B.Cu" mixed) (32 "B.Adhes" user "B.Adhesive") (33 "F.Adhes" user "F.Adhesive") (34 "B.Paste" user) diff --git a/hardware/racer/racer.kicad_prl b/hardware/racer/racer.kicad_prl index 1e91c1d..0c005fd 100644 --- a/hardware/racer/racer.kicad_prl +++ b/hardware/racer/racer.kicad_prl @@ -1,6 +1,6 @@ { "board": { - "active_layer": 40, + "active_layer": 1, "active_layer_preset": "", "auto_track_width": true, "hidden_netclasses": [], @@ -74,7 +74,7 @@ "ssh_key": "" }, "meta": { - "filename": "tank.kicad_prl", + "filename": "racer.kicad_prl", "version": 3 }, "project": { diff --git a/hardware/thumbtroller/controller.kicad_pcb b/hardware/thumbtroller/controller.kicad_pcb index 1e85445..53d0a42 100644 --- a/hardware/thumbtroller/controller.kicad_pcb +++ b/hardware/thumbtroller/controller.kicad_pcb @@ -9,8 +9,8 @@ (paper "A4") (layers (0 "F.Cu" signal) - (1 "In1.Cu" signal) - (2 "In2.Cu" signal) + (1 "In1.Cu" signal "Inner1") + (2 "In2.Cu" signal "Inner2") (31 "B.Cu" signal) (32 "B.Adhes" user "B.Adhesive") (33 "F.Adhes" user "F.Adhesive") diff --git a/hardware/thumbtroller/fp-info-cache b/hardware/thumbtroller/fp-info-cache new file mode 100644 index 0000000..573541a --- /dev/null +++ b/hardware/thumbtroller/fp-info-cache @@ -0,0 +1 @@ +0 diff --git a/hardware/thumbtroller/thumbroller.kibot.yaml b/hardware/thumbtroller/thumbroller.kibot.yaml new file mode 100644 index 0000000..5da3b90 --- /dev/null +++ b/hardware/thumbtroller/thumbroller.kibot.yaml @@ -0,0 +1,274 @@ +kibot: + version: 1 + +variants: + - name: "Thumbroller" + comment: "File Generation for racer" + type: kibom + +global: + out_dir: "../production/Export-%D" + date_format: "%Y-%m-%d" + +outputs: + - name: "Naviagation results" + comment: "Create navigation results page" + type: navigate_results + dir: "overview" + + - name: "Download datasheets" + comment: "Download component datasheets" + type: download_datasheets + dir: docs/datasheets + category: "documentation" + + - name: "Generate IBOM" + comment: "Interactive Bill of Materials" + type: ibom + dir: docs + category: "documentation" + + - name: "Print Schematics" + comment: "Print schematic (PDF)" + type: pdf_sch_print + dir: docs + category: "documentation" + options: + output: Schematic.%x + + - name: "Board Top" + comment: "Top layer view" + type: pcbdraw + dir: docs/images + category: "documentation" + options: + format: png + bottom: false + output: "PCB_Top.%x" + + - name: "Board Bottom" + comment: "Bottom layer view" + type: pcbdraw + dir: docs/images + category: "documentation" + options: + format: png + bottom: true + output: "PCB_Bottom.%x" + + - name: "Generate Drill" + comment: "Generate drill files" + type: excellon + dir: gerber + category: "production" + options: + metric_units: true + mirror_y_axis: false + pth_and_npth_single_file: false + left_digits: 0 + minimal_header: false + use_aux_axis_as_origin: true + route_mode_for_oval_holes: true + zeros_format: "DECIMAL_FORMAT" + + - name: "Generate Gerbers" + comment: "Generate Gerbers" + type: gerber + dir: gerber + category: "production" + options: + exclude_edge_layer: false + exclude_pads_from_silkscreen: false + plot_sheet_reference: false + plot_footprint_refs: true + plot_footprint_values: true + force_plot_invisible_refs_vals: false + tent_vias: true + line_width: 0.15 + + use_aux_axis_as_origin: false + subtract_mask_from_silk: true + use_protel_extensions: false + gerber_precision: 4.5 + create_gerber_job_file: true + use_gerber_x2_attributes: true + use_gerber_net_attributes: false + + layers: + - layer: F.Cu + suffix: F_Cu + description: Front copper + - layer: Inner1 + suffix: Inner1 + description: 'Inner cooper layer' + - layer: Inner2 + suffix: Inner2 + description: 'Inner copper layer' + - layer: B.Cu + suffix: B_Cu + description: Bottom copper + - layer: B.Paste + suffix: B_Paste + description: Bottom solder paste + - layer: F.Paste + suffix: F_Paste + description: Front solder paste + - layer: B.Silkscreen + suffix: B_Silkscreen + description: Bottom silkscreen (artwork) + - layer: F.Silkscreen + suffix: F_Silkscreen + description: Front silkscreen (artwork) + - layer: B.Mask + suffix: B_Mask + description: Bottom soldermask (negative) + - layer: F.Mask + suffix: F_Mask + description: Front soldermask (negative) + - layer: Edge.Cuts + suffix: Edge_Cuts + description: Board shape + - layer: B.Courtyard + suffix: B_Courtyard + description: Bottom courtyard area + - layer: F.Courtyard + suffix: F_Courtyard + description: Front courtyard area + - layer: B.Fab + suffix: B_Fab + description: Bottom documentation + - layer: F.Fab + suffix: F_Fab + description: Front documentation + - layer: User.1 + suffix: User_1 + description: User layer 1 + + - name: "Pick & Place" + comment: "Pick & Place" + type: position + dir: centroid + category: "production" + options: + format: ASCII + only_smd: false + + - name: "PCB Specifications" + comment: "PCB Specifications" + type: pcb_print + dir: docs + category: "production" + options: + output: "PCB.pdf" + format: PDF + pages: + - layers: + - layer: Edge.Cuts + - layer: User.1 + sheet: "PCB Specifications" + monochrome: true + + - name: "Ref Top" + comment: "Ref Top" + type: pcb_print + dir: docs + category: "purchasing" + options: + output: "Ref_Top.%x" + format: PDF + pages: + - layers: + - layer: Edge.Cuts + - layer: F.Fab + sheet: "Ref-Top" + monochrome: true + + - name: "Ref Bottom" + comment: "Ref Bottom" + type: pcb_print + dir: docs + category: "purchasing" + options: + output: "Ref_Bot.%x" + format: PDF + pages: + - layers: + - layer: Edge.Cuts + - layer: B.Fab + sheet: "Ref-Bottom" + monochrome: true + mirror: true + + - name: "BOM" + comment: "BOM" + type: bom + dir: docs + category: "purchasing" + options: + format: XLSX + count_smd_tht: true + output: "BOM.%x" + ref_separator: ',' + columns: + - field: Row + name: Item + - field: References + name: Ref Des + - field: Build Quantity + name: Quantity + - field: Mfr. + name: Manufacturer + - field: Mfr. No. + name: Mfg Part# + - field: Value + name: Description / Value + - field: Footprint + name: Package + - field: Footprint Type + name: Type + - field: Footprint Side + name: Side + xlsx: + title: "%f BOM" + hide_stats_info: false + quote_all: true + logo: false + + - name: "ZIP Gerber" + comment: "ZIP Gerber" + type: compress + dir: . + category: "purchasing" + options: + format: ZIP + files: + - source: gerber/** + output: "Gerber_%D.%x" + + - name: "ZIP Centroid" + comment: "ZIP Centroid" + type: compress + dir: . + category: "purchasing" + options: + format: ZIP + files: + - source: centroid/** + output: "Centroid_%D.%x" + + - name: "Step file" + comment: "STEP file generation" + type: step + dir: cad + category: "mechanical" + + - name: "3D rendering" + comment: "3D rendering" + type: render_3d + dir: docs/images + category: "documentation" + options: + ray_tracing: true + rotate_x: 3 + rotate_z: -2 + output: "PCB_Rendering.%x"