From 752d5acac3e9347f01d52d60b986f567cde2d6d3 Mon Sep 17 00:00:00 2001
From: Stephen D <webmaster@scd31.com>
Date: Wed, 14 Aug 2024 16:25:23 -0300
Subject: [PATCH] add CI

---
 .gitlab-ci.yml    |  22 +++++++
 output.kibot.yaml | 149 ++++++++++++++++++++++++++++++++++++++++++++++
 test.kibot.yaml   |  10 ++++
 3 files changed, 181 insertions(+)
 create mode 100644 .gitlab-ci.yml
 create mode 100644 output.kibot.yaml
 create mode 100644 test.kibot.yaml

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..1ff6db6
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,22 @@
+stages:
+  - testing
+  - gen_fab
+
+variables:
+  GIT_SUBMODULE_STRATEGY: recursive
+
+#tests:
+#  image: ghcr.io/inti-cmnb/kicad8_auto:1.6.5
+#  stage: testing
+#  script:
+#    - "[ -f *.kicad_pcb ] && kibot -c test.kibot.yaml"
+
+pcb_outputs:
+  image: ghcr.io/inti-cmnb/kicad8_auto:1.6.5
+  stage: gen_fab
+  script:
+    - "[ -f *.kicad_pcb ] && kibot -c output.kibot.yaml"
+  artifacts:
+    when: always
+    paths:
+      - Fabrication/
diff --git a/output.kibot.yaml b/output.kibot.yaml
new file mode 100644
index 0000000..a6c8876
--- /dev/null
+++ b/output.kibot.yaml
@@ -0,0 +1,149 @@
+# Gerber and drill files for JLCPCB, without stencil
+# URL: https://jlcpcb.com/
+kibot:
+  version: 1
+
+globals:
+  resources_dir: ci
+
+filters:
+  - name: only_jlc_parts
+    comment: "Only parts with JLC (LCSC) code"
+    type: generic
+    include_only:
+      - column: "LCSC"
+        regex: '^C\d+'
+
+variants:
+  - name: rotated
+    comment: "Just a place holder for the rotation filter"
+    type: kibom
+    variant: rotated
+    pre_transform: _rot_footprint
+
+# JLCPCB Gerber Output
+outputs:
+  - name: JLCPCB_gerbers
+    comment: Gerbers compatible with JLCPCB
+    type: gerber
+    dir: JLCPCB
+    options: &gerber_options
+      exclude_edge_layer: true
+      exclude_pads_from_silkscreen: true
+      plot_sheet_reference: false
+      plot_footprint_refs: true
+      plot_footprint_values: false
+      force_plot_invisible_refs_vals: false
+      tent_vias: true
+      use_protel_extensions: true
+      create_gerber_job_file: false
+      disable_aperture_macros: true
+      gerber_precision: 4.6
+      use_gerber_x2_attributes: false
+      use_gerber_net_attributes: false
+      line_width: 0.1
+      subtract_mask_from_silk: true
+    layers:
+      # Note: a more generic approach is to use 'copper' but then the filenames
+      # are slightly different.
+      - F.Cu
+      - B.Cu
+      - F.Paste
+      - B.Paste
+      - F.SilkS
+      - B.SilkS
+      - F.Mask
+      - B.Mask
+      - Edge.Cuts
+
+  # JLCPCB drill files
+  - name: JLCPCB_drill
+    comment: Drill files compatible with JLCPCB
+    type: excellon
+    dir: JLCPCB
+    options:
+      pth_and_npth_single_file: false
+      pth_id: "-PTH"
+      npth_id: "-NPTH"
+      metric_units: false
+      output: "%f%i.%x"
+
+  # zip all JLCPCB gerber and drill files together
+  - name: JLCPCB
+    comment: ZIP file for JLCPCB
+    type: compress
+    dir: Fabrication/JLCPCB
+    options:
+      files:
+        - from_output: JLCPCB_gerbers
+          dest: /
+        - from_output: JLCPCB_drill
+          dest: /
+
+  # html ibom
+  - name: ibom
+    comment: Interactive BOM
+    type: ibom
+    dir: Fabrication/ibom
+    options:
+      dark_mode: true
+      name_format: "index"
+
+  # JLCPCB assembly positions of components
+  - name: "JLCPCB_position"
+    comment: "Pick and place file, JLCPCB style"
+    type: position
+    dir: Fabrication/JLCPCB-BOM
+    options:
+      variant: rotated
+      output: "%f_cpl_jlc.%x"
+      format: CSV
+      units: millimeters
+      separate_files_for_front_and_back: false
+      only_smd: false
+      columns:
+        - id: Ref
+          name: Designator
+        - Val
+        - Package
+        - id: PosX
+          name: "Mid X"
+        - id: PosY
+          name: "Mid Y"
+        - id: Rot
+          name: Rotation
+        - id: Side
+          name: Layer
+
+  # JLCPCB Bom for assembly or for LCSC order
+  - name: "JLCPCB_bom"
+    comment: "BoM for JLCPCB"
+    type: bom
+    dir: Fabrication/JLCPCB-BOM
+    options:
+      output: "%f_%i_jlc.%x"
+      exclude_filter: "only_jlc_parts"
+      ref_separator: ","
+      columns:
+        - field: Value
+          name: Comment
+        - field: References
+          name: Designator
+        - Footprint
+        - field: "LCSC"
+          name: "LCSC part number"
+        - field: "Quantity Per PCB"
+          name: "QTY"
+      csv:
+        hide_pcb_info: true
+        hide_stats_info: true
+        quote_all: true
+
+  # PDF of Schematic with dracula theme
+  - name: "SchPrint"
+    comment: "Print schematic PDF"
+    type: pdf_sch_print
+    dir: Fabrication/PDFs
+    options:
+      color_theme: dracula
+      background_color: true
diff --git a/test.kibot.yaml b/test.kibot.yaml
new file mode 100644
index 0000000..e0baef8
--- /dev/null
+++ b/test.kibot.yaml
@@ -0,0 +1,10 @@
+kibot:
+  version: 1
+
+preflight:
+  run_erc: true
+  update_xml: false
+  run_drc: true
+  check_zone_fills: true
+  ignore_unconnected: false
+  drc_exclusions_workaround: true
-- 
GitLab