changed dl and diff
This commit is contained in:
729
kibot.yaml
729
kibot.yaml
@@ -1,480 +1,297 @@
|
|||||||
# KiBot configuration for 2/4/6 layer boards
|
- name: Download component datasheets
|
||||||
# Works with Gitea CI/CD pipeline
|
if: steps.config_check.outputs.found == 'true'
|
||||||
|
continue-on-error: true
|
||||||
|
run: |
|
||||||
|
echo "Datasheets will be downloaded by KiBot's download_datasheets output"
|
||||||
|
echo "They will be saved in Generated/BoM/Datasheets/"
|
||||||
|
|
||||||
|
# Create a README for the datasheets folder if KiBot creates it
|
||||||
|
if [ -d "${GITHUB_WORKSPACE}/Generated/BoM/Datasheets" ]; then
|
||||||
|
cat > "${GITHUB_WORKSPACE}/Generated/BoM/Datasheets/README.md" << EOF
|
||||||
|
# Component Datasheets
|
||||||
|
|
||||||
|
This folder contains downloaded datasheets for components used in the project.
|
||||||
|
|
||||||
|
- Datasheets are downloaded automatically from URLs in the schematic
|
||||||
|
- Files are named based on the component reference and original filename
|
||||||
|
- Only unique datasheets are downloaded (duplicates are linked)
|
||||||
|
|
||||||
|
Generated on: $(date)
|
||||||
|
Project: ${{ steps.find_project.outputs.project_name }}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo "Datasheet folder contents:"
|
||||||
|
ls -la "${GITHUB_WORKSPACE}/Generated/BoM/Datasheets/" || true
|
||||||
|
else
|
||||||
|
echo "Note: Datasheet folder not created yet - will be created by KiBot"
|
||||||
|
finame: "KiBot PCB Generation"
|
||||||
|
|
||||||
kibot:
|
# Controls when the action will run
|
||||||
version: 1
|
on:
|
||||||
|
push:
|
||||||
|
paths:
|
||||||
|
- '**/*.kicad_sch'
|
||||||
|
- '**/*.kicad_pcb'
|
||||||
|
- '**/*.kicad_pro'
|
||||||
|
- 'kibot.yaml'
|
||||||
|
- '.gitea/workflows/*.yml'
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- '**/*.kicad_sch'
|
||||||
|
- '**/*.kicad_pcb'
|
||||||
|
- '**/*.kicad_pro'
|
||||||
|
- 'kibot.yaml'
|
||||||
|
- '.gitea/workflows/*.yml'
|
||||||
|
repository_dispatch:
|
||||||
|
types: [run_qs]
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
board_layers:
|
||||||
|
description: 'Number of PCB layers'
|
||||||
|
required: false
|
||||||
|
default: '2'
|
||||||
|
type: choice
|
||||||
|
options:
|
||||||
|
- '2'
|
||||||
|
- '4'
|
||||||
|
- '6'
|
||||||
|
|
||||||
global:
|
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||||
# Filters for ERC/DRC warnings
|
jobs:
|
||||||
filters:
|
generate:
|
||||||
- number: 1007
|
runs-on: kicad-kibot-runner
|
||||||
- number: 1015
|
|
||||||
- number: 58
|
|
||||||
- number: 61
|
|
||||||
|
|
||||||
# Default output directory - will be overridden by command line
|
|
||||||
# output: 'Fabrication' # Commented out to use command line option
|
|
||||||
|
|
||||||
# Variant for assembly if needed
|
|
||||||
variant: ''
|
|
||||||
|
|
||||||
# Date format for filenames
|
|
||||||
date_format: '%Y-%m-%d_%H-%M-%S'
|
|
||||||
|
|
||||||
preflight:
|
steps:
|
||||||
run_erc: true
|
- uses: actions/checkout@v3
|
||||||
run_drc: true
|
with:
|
||||||
check_zone_fills: true
|
# So we can run a diff between last 2 changes
|
||||||
ignore_unconnected: false
|
fetch-depth: '0'
|
||||||
update_xml: true
|
|
||||||
erc:
|
|
||||||
warnings_as_errors: false
|
|
||||||
# Continue even if ERC fails
|
|
||||||
dont_stop: true
|
|
||||||
drc:
|
|
||||||
warnings_as_errors: false
|
|
||||||
# Continue even if DRC fails
|
|
||||||
dont_stop: true
|
|
||||||
|
|
||||||
outputs:
|
- name: Find KiCad project
|
||||||
# Schematic outputs
|
id: find_project
|
||||||
- name: 'print_sch'
|
run: |
|
||||||
comment: "Schematic PDF"
|
# Find all .kicad_pcb files in the repository
|
||||||
type: pdf_sch_print
|
PCB_FILES=$(find . -name "*.kicad_pcb" -type f | grep -v -E '/(backups?|backup|old|archive|deprecated)/' | head -5)
|
||||||
dir: Schematic
|
|
||||||
options:
|
if [ -z "$PCB_FILES" ]; then
|
||||||
output: '%f-schematic.%x'
|
echo "Error: No KiCad PCB files found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Use the first PCB file found
|
||||||
|
PCB_FILE=$(echo "$PCB_FILES" | head -1)
|
||||||
|
PROJECT_DIR=$(dirname "$PCB_FILE")
|
||||||
|
PROJECT_NAME=$(basename "$PCB_FILE" .kicad_pcb)
|
||||||
|
|
||||||
|
echo "Found KiCad project: $PROJECT_NAME"
|
||||||
|
echo "Project directory: $PROJECT_DIR"
|
||||||
|
echo "PCB file: $PCB_FILE"
|
||||||
|
|
||||||
|
# Find schematic file
|
||||||
|
SCH_FILE=$(find "$PROJECT_DIR" -name "*.kicad_sch" -o -name "*.sch" | head -1)
|
||||||
|
|
||||||
|
echo "pcb_file=$PCB_FILE" >> $GITHUB_OUTPUT
|
||||||
|
echo "project_dir=$PROJECT_DIR" >> $GITHUB_OUTPUT
|
||||||
|
echo "project_name=$PROJECT_NAME" >> $GITHUB_OUTPUT
|
||||||
|
echo "sch_file=$SCH_FILE" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
# List all found projects for debugging
|
||||||
|
echo "All PCB files found:"
|
||||||
|
echo "$PCB_FILES"
|
||||||
|
|
||||||
- name: 'print_sch_svg'
|
- name: Set layer count
|
||||||
comment: "Schematic SVG"
|
id: layers
|
||||||
type: svg_sch_print
|
run: |
|
||||||
dir: Schematic
|
# Use workflow input or default to 4 layers
|
||||||
options:
|
LAYERS="${{ github.event.inputs.board_layers }}"
|
||||||
output: '%f-schematic.%x'
|
if [ -z "$LAYERS" ]; then
|
||||||
|
LAYERS="4" # Change this default if needed
|
||||||
|
fi
|
||||||
|
echo "layers=$LAYERS" >> $GITHUB_OUTPUT
|
||||||
|
echo "Using $LAYERS layer configuration"
|
||||||
|
|
||||||
# PCB 2D renders
|
- name: Check for KiBot config
|
||||||
- name: 'pcb_top'
|
id: config_check
|
||||||
comment: "PCB render top"
|
run: |
|
||||||
type: pcbdraw
|
# Check if kibot.yaml exists in repository root
|
||||||
dir: PCB/2D_render
|
if [ -f "kibot.yaml" ]; then
|
||||||
options:
|
echo "found=true" >> $GITHUB_OUTPUT
|
||||||
output: '%f-top.%x'
|
echo "Using kibot.yaml configuration from repository root"
|
||||||
format: svg
|
else
|
||||||
show_components: all
|
echo "found=false" >> $GITHUB_OUTPUT
|
||||||
dpi: 300
|
echo "No kibot.yaml found in repository root - will use --quick-start mode"
|
||||||
|
fi
|
||||||
|
|
||||||
- name: 'pcb_bottom'
|
- name: Run ERC
|
||||||
comment: "PCB render bottom"
|
if: steps.config_check.outputs.found == 'true'
|
||||||
type: pcbdraw
|
run: |
|
||||||
dir: PCB/2D_render
|
cd "${{ steps.find_project.outputs.project_dir }}"
|
||||||
options:
|
|
||||||
output: '%f-bottom.%x'
|
if [ -n "${{ steps.find_project.outputs.sch_file }}" ]; then
|
||||||
format: svg
|
echo "Running ERC on schematic files..."
|
||||||
bottom: true
|
# Use absolute path to config file in repo root
|
||||||
show_components: all
|
kibot -c "${GITHUB_WORKSPACE}/kibot.yaml" -s run_erc -v || true
|
||||||
dpi: 300
|
else
|
||||||
|
echo "No schematic files found, skipping ERC"
|
||||||
|
fi
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
# PCB PDF documentation
|
- name: Run DRC
|
||||||
- name: 'print_pcb'
|
if: steps.config_check.outputs.found == 'true'
|
||||||
comment: "PCB PDF"
|
run: |
|
||||||
type: pdf_pcb_print
|
cd "${{ steps.find_project.outputs.project_dir }}"
|
||||||
dir: PCB/PDF
|
|
||||||
options:
|
echo "Running DRC on PCB..."
|
||||||
output: '%f-pcb.%x'
|
# Use absolute path to config file in repo root
|
||||||
plot_sheet_reference: true
|
kibot -c "${GITHUB_WORKSPACE}/kibot.yaml" -s run_drc -v || true
|
||||||
monochrome: false
|
continue-on-error: true
|
||||||
pages:
|
|
||||||
- layers:
|
|
||||||
- F.Cu
|
|
||||||
- F.Paste
|
|
||||||
- F.Silkscreen
|
|
||||||
- Edge.Cuts
|
|
||||||
sheet: 'Front copper'
|
|
||||||
- layers:
|
|
||||||
- B.Cu
|
|
||||||
- B.Paste
|
|
||||||
- B.Silkscreen
|
|
||||||
- Edge.Cuts
|
|
||||||
mirror: true
|
|
||||||
sheet: 'Bottom copper'
|
|
||||||
- layers:
|
|
||||||
- In1.Cu
|
|
||||||
- Edge.Cuts
|
|
||||||
sheet: 'Inner layer 1'
|
|
||||||
skip_if_no_layer: true
|
|
||||||
- layers:
|
|
||||||
- In2.Cu
|
|
||||||
- Edge.Cuts
|
|
||||||
sheet: 'Inner layer 2'
|
|
||||||
skip_if_no_layer: true
|
|
||||||
- layers:
|
|
||||||
- In3.Cu
|
|
||||||
- Edge.Cuts
|
|
||||||
sheet: 'Inner layer 3'
|
|
||||||
skip_if_no_layer: true
|
|
||||||
- layers:
|
|
||||||
- In4.Cu
|
|
||||||
- Edge.Cuts
|
|
||||||
sheet: 'Inner layer 4'
|
|
||||||
skip_if_no_layer: true
|
|
||||||
|
|
||||||
# Gerber files - automatically handles 2/4/6 layers
|
- name: Generate outputs with custom config
|
||||||
- name: 'gerbers'
|
if: steps.config_check.outputs.found == 'true'
|
||||||
comment: "Gerber files"
|
run: |
|
||||||
type: gerber
|
cd "${{ steps.find_project.outputs.project_dir }}"
|
||||||
dir: Gerbers
|
|
||||||
options:
|
echo "Generating outputs for ${{ steps.layers.outputs.layers }} layer board"
|
||||||
output: '%f%i.%x'
|
echo "Project: ${{ steps.find_project.outputs.project_name }}"
|
||||||
exclude_edge_layer: true
|
echo "Using config: ${GITHUB_WORKSPACE}/kibot.yaml"
|
||||||
exclude_pads_from_silkscreen: true
|
|
||||||
plot_sheet_reference: false
|
# Run KiBot with the configuration from repo root
|
||||||
plot_footprint_refs: true
|
# Skip ERC/DRC preflight checks to avoid stopping on errors
|
||||||
plot_footprint_values: false
|
kibot -c "${GITHUB_WORKSPACE}/kibot.yaml" -s run_erc,run_drc -d Fabrication -v
|
||||||
force_plot_invisible_refs_vals: false
|
|
||||||
tent_vias: true
|
# Move outputs to root Generated folder
|
||||||
use_protel_extensions: false
|
mkdir -p "${GITHUB_WORKSPACE}/Generated"
|
||||||
create_gerber_job_file: true
|
if [ -d "Fabrication" ]; then
|
||||||
disable_aperture_macros: true
|
cp -r Fabrication/* "${GITHUB_WORKSPACE}/Generated/"
|
||||||
gerber_precision: 4.6
|
fi
|
||||||
use_gerber_x2_attributes: false
|
|
||||||
use_gerber_net_attributes: false
|
|
||||||
line_width: 0.1
|
|
||||||
subtract_mask_from_silk: true
|
|
||||||
layers:
|
|
||||||
# Copper layers - automatically included if present
|
|
||||||
- F.Cu
|
|
||||||
- B.Cu
|
|
||||||
- In1.Cu
|
|
||||||
- In2.Cu
|
|
||||||
- In3.Cu
|
|
||||||
- In4.Cu
|
|
||||||
# Technical layers
|
|
||||||
- F.Paste
|
|
||||||
- B.Paste
|
|
||||||
- F.Silkscreen
|
|
||||||
- B.Silkscreen
|
|
||||||
- F.Mask
|
|
||||||
- B.Mask
|
|
||||||
- Edge.Cuts
|
|
||||||
- User.Comments
|
|
||||||
- F.Fab
|
|
||||||
- B.Fab
|
|
||||||
|
|
||||||
# Excellon drill files
|
- name: Quick Start fallback
|
||||||
- name: 'drill'
|
if: steps.config_check.outputs.found == 'false'
|
||||||
comment: "Drill files"
|
run: |
|
||||||
type: excellon
|
cd "${{ steps.find_project.outputs.project_dir }}"
|
||||||
dir: Gerbers
|
echo "Running KiBot in quick-start mode"
|
||||||
options:
|
kibot --quick-start
|
||||||
output: '%f%i.%x'
|
|
||||||
metric_units: true
|
# Move outputs to root Generated folder
|
||||||
minimal_header: false
|
mkdir -p "${GITHUB_WORKSPACE}/Generated"
|
||||||
mirror_y_axis: false
|
if [ -d "Generated" ]; then
|
||||||
report:
|
cp -r Generated/* "${GITHUB_WORKSPACE}/Generated/"
|
||||||
filename: '%f-drill_report.txt'
|
fi
|
||||||
pth_and_npth_single_file: false
|
|
||||||
|
|
||||||
# Drill map
|
- name: Add board information to outputs
|
||||||
- name: 'drill_map'
|
run: |
|
||||||
comment: "Drill map"
|
echo "Board configuration: ${{ steps.layers.outputs.layers }} layers" > Generated/board_info.txt
|
||||||
type: gerb_drill
|
echo "Project: ${{ steps.find_project.outputs.project_name }}" >> Generated/board_info.txt
|
||||||
dir: Gerbers
|
echo "Project path: ${{ steps.find_project.outputs.project_dir }}" >> Generated/board_info.txt
|
||||||
options:
|
echo "Generated on: $(date)" >> Generated/board_info.txt
|
||||||
output: '%f-drill_map.%x'
|
echo "Commit: ${{ github.sha }}" >> Generated/board_info.txt
|
||||||
|
|
||||||
# Pick and place files
|
- name: Fix file permissions
|
||||||
- name: 'position'
|
run: |
|
||||||
comment: "Pick and place file"
|
chmod -R a+rw Generated || true
|
||||||
type: position
|
|
||||||
dir: Assembly
|
|
||||||
options:
|
|
||||||
output: '%f-position-%i.%x' # Added %i to differentiate front/back files
|
|
||||||
format: CSV
|
|
||||||
units: millimeters
|
|
||||||
separate_files_for_front_and_back: true
|
|
||||||
only_smd: false
|
|
||||||
|
|
||||||
# Interactive BOM
|
- name: Retrieve results - All outputs
|
||||||
- name: 'ibom'
|
uses: actions/upload-artifact@v3
|
||||||
comment: "Interactive BOM"
|
with:
|
||||||
type: ibom
|
name: Automatic_outputs
|
||||||
dir: Assembly
|
path: Generated
|
||||||
options:
|
|
||||||
output: '%f-ibom.%x'
|
|
||||||
dark_mode: false
|
|
||||||
hide_pads: false
|
|
||||||
show_fabrication: false
|
|
||||||
hide_silkscreen: false
|
|
||||||
highlight_pin1: true
|
|
||||||
no_redraw_on_drag: false
|
|
||||||
board_rotation: 0
|
|
||||||
check_extra_fields: false
|
|
||||||
include_tracks: false
|
|
||||||
include_nets: false
|
|
||||||
|
|
||||||
# Generic BOM in CSV format
|
- name: Retrieve results - Gerbers
|
||||||
- name: 'bom_csv'
|
if: steps.config_check.outputs.found == 'true'
|
||||||
comment: "Bill of Materials in CSV format"
|
uses: actions/upload-artifact@v3
|
||||||
type: bom
|
with:
|
||||||
dir: BoM/Generic
|
name: Gerbers-${{ steps.layers.outputs.layers }}layer
|
||||||
options:
|
path: Generated/Gerbers
|
||||||
output: '%f_bom.%x'
|
|
||||||
format: CSV
|
|
||||||
separator: ','
|
|
||||||
ref_separator: ','
|
|
||||||
group_fields: ['Value', 'Footprint', 'Tolerance', 'Voltage']
|
|
||||||
columns:
|
|
||||||
- field: 'References'
|
|
||||||
name: 'Reference'
|
|
||||||
- field: 'Value'
|
|
||||||
name: 'Value'
|
|
||||||
- field: 'Quantity Per PCB'
|
|
||||||
name: 'Qty'
|
|
||||||
- field: 'Footprint'
|
|
||||||
name: 'Package'
|
|
||||||
- field: 'Description'
|
|
||||||
name: 'Description'
|
|
||||||
- field: 'Manufacturer'
|
|
||||||
name: 'Manufacturer'
|
|
||||||
- field: 'MPN'
|
|
||||||
name: 'Part Number'
|
|
||||||
- field: 'LCSC'
|
|
||||||
name: 'LCSC Part'
|
|
||||||
- field: 'Digikey'
|
|
||||||
name: 'Digikey Part'
|
|
||||||
- field: 'Mouser'
|
|
||||||
name: 'Mouser Part'
|
|
||||||
|
|
||||||
# Generic BOM in HTML format
|
- name: Retrieve results - Assembly
|
||||||
- name: 'bom_html'
|
if: steps.config_check.outputs.found == 'true'
|
||||||
comment: "Bill of Materials in HTML format"
|
uses: actions/upload-artifact@v3
|
||||||
type: bom
|
with:
|
||||||
dir: BoM/Generic
|
name: Assembly-${{ steps.layers.outputs.layers }}layer
|
||||||
options:
|
path: Generated/Assembly
|
||||||
output: '%f_bom.%x'
|
|
||||||
format: HTML
|
|
||||||
html:
|
|
||||||
style: 'modern-blue' # Style for HTML output
|
|
||||||
datasheet_as_link: 'Datasheet' # Column name for datasheet links
|
|
||||||
generate_dnf: true
|
|
||||||
logo: false
|
|
||||||
title: 'Bill of Materials - %f'
|
|
||||||
group_fields: ['Value', 'Footprint', 'Tolerance', 'Voltage']
|
|
||||||
columns:
|
|
||||||
- field: 'References'
|
|
||||||
name: 'Reference'
|
|
||||||
- field: 'Value'
|
|
||||||
name: 'Value'
|
|
||||||
- field: 'Quantity Per PCB'
|
|
||||||
name: 'Qty'
|
|
||||||
- field: 'Footprint'
|
|
||||||
name: 'Package'
|
|
||||||
- field: 'Description'
|
|
||||||
name: 'Description'
|
|
||||||
- field: 'Manufacturer'
|
|
||||||
name: 'Manufacturer'
|
|
||||||
- field: 'MPN'
|
|
||||||
name: 'Part Number'
|
|
||||||
- field: 'LCSC'
|
|
||||||
name: 'LCSC Part'
|
|
||||||
- field: 'Digikey'
|
|
||||||
name: 'Digikey Part'
|
|
||||||
- field: 'Mouser'
|
|
||||||
name: 'Mouser Part'
|
|
||||||
|
|
||||||
# Generic BOM in XLSX format
|
- name: Retrieve results - BOM
|
||||||
- name: 'bom_xlsx'
|
if: steps.config_check.outputs.found == 'true'
|
||||||
comment: "Bill of Materials in Excel format"
|
uses: actions/upload-artifact@v3
|
||||||
type: bom
|
with:
|
||||||
dir: BoM/Generic
|
name: BOM-${{ steps.layers.outputs.layers }}layer
|
||||||
options:
|
path: Generated/BoM
|
||||||
output: '%f_bom.%x'
|
|
||||||
format: XLSX
|
|
||||||
xlsx:
|
|
||||||
datasheet_as_link: 'Datasheet' # Column name for datasheet links
|
|
||||||
generate_dnf: true
|
|
||||||
logo: false
|
|
||||||
title: 'Bill of Materials'
|
|
||||||
max_col_width: 50
|
|
||||||
highlight_empty: true
|
|
||||||
group_fields: ['Value', 'Footprint', 'Tolerance', 'Voltage']
|
|
||||||
columns:
|
|
||||||
- field: 'References'
|
|
||||||
name: 'Reference'
|
|
||||||
- field: 'Value'
|
|
||||||
name: 'Value'
|
|
||||||
- field: 'Quantity Per PCB'
|
|
||||||
name: 'Qty'
|
|
||||||
- field: 'Footprint'
|
|
||||||
name: 'Package'
|
|
||||||
- field: 'Description'
|
|
||||||
name: 'Description'
|
|
||||||
- field: 'Manufacturer'
|
|
||||||
name: 'Manufacturer'
|
|
||||||
- field: 'MPN'
|
|
||||||
name: 'Part Number'
|
|
||||||
- field: 'LCSC'
|
|
||||||
name: 'LCSC Part'
|
|
||||||
- field: 'Digikey'
|
|
||||||
name: 'Digikey Part'
|
|
||||||
- field: 'Mouser'
|
|
||||||
name: 'Mouser Part'
|
|
||||||
- field: 'Datasheet'
|
|
||||||
name: 'Datasheet'
|
|
||||||
|
|
||||||
# Download datasheets
|
- name: Retrieve results - 3D Model
|
||||||
- name: 'download_datasheets'
|
if: steps.config_check.outputs.found == 'true'
|
||||||
comment: "Download component datasheets"
|
uses: actions/upload-artifact@v3
|
||||||
type: download_datasheets
|
with:
|
||||||
dir: BoM/Datasheets
|
name: 3D-Model
|
||||||
run_by_default: true # Changed to run by default
|
path: Generated/3D
|
||||||
options:
|
|
||||||
output: '%f_datasheets.csv' # CSV list of downloaded files
|
|
||||||
field: 'Datasheet' # Field containing datasheet URLs
|
|
||||||
dnf: false # Don't download for DNF parts
|
|
||||||
repeated: false # Don't download the same datasheet twice
|
|
||||||
|
|
||||||
# 3D model
|
- name: Retrieve results - Fabrication Package
|
||||||
- name: 'step'
|
if: steps.config_check.outputs.found == 'true'
|
||||||
comment: "3D STEP model"
|
uses: actions/upload-artifact@v3
|
||||||
type: step
|
with:
|
||||||
dir: 3D
|
name: Fabrication-Package-${{ steps.layers.outputs.layers }}layer
|
||||||
options:
|
path: Generated/*.zip
|
||||||
output: '%f-3D.%x'
|
|
||||||
metric_units: true
|
|
||||||
origin: grid
|
|
||||||
no_virtual: true
|
|
||||||
|
|
||||||
# Board characteristics report
|
- name: Retrieve results - JLCPCB Package
|
||||||
- name: 'report'
|
if: steps.config_check.outputs.found == 'true'
|
||||||
comment: "Board report"
|
uses: actions/upload-artifact@v3
|
||||||
type: report
|
with:
|
||||||
dir: .
|
name: JLCPCB-${{ steps.layers.outputs.layers }}layer
|
||||||
options:
|
path: Generated/*_JLCPCB_compress.zip
|
||||||
output: '%f-report.%x'
|
|
||||||
do_convert: true
|
|
||||||
|
|
||||||
# Schematic diff
|
- name: Retrieve results - Diff Report
|
||||||
- name: 'sch_diff'
|
if: steps.generate_diff.outputs.has_diff == 'true'
|
||||||
comment: "Schematic diff PDF"
|
uses: actions/upload-artifact@v3
|
||||||
type: diff
|
with:
|
||||||
dir: DIFF
|
name: Schematic-PCB-Diff
|
||||||
run_by_default: false # Only run when explicitly requested
|
path: Generated/DIFF
|
||||||
options:
|
|
||||||
output: '%f-schematic-diff.%x'
|
|
||||||
format: PDF
|
|
||||||
diff_mode: 'red_green'
|
|
||||||
old: 'HEAD~1'
|
|
||||||
new: 'HEAD'
|
|
||||||
cache_dir: '.cache'
|
|
||||||
add_link_id: true
|
|
||||||
only_different: true
|
|
||||||
|
|
||||||
# PCB diff
|
|
||||||
- name: 'pcb_diff'
|
|
||||||
comment: "PCB diff PDF"
|
|
||||||
type: diff
|
|
||||||
dir: DIFF
|
|
||||||
run_by_default: false # Only run when explicitly requested
|
|
||||||
options:
|
|
||||||
output: '%f-pcb-diff.%x'
|
|
||||||
format: PDF
|
|
||||||
diff_mode: 'red_green'
|
|
||||||
old: 'HEAD~1'
|
|
||||||
new: 'HEAD'
|
|
||||||
cache_dir: '.cache'
|
|
||||||
pcb: true
|
|
||||||
only_different: true
|
|
||||||
|
|
||||||
# JLCPCB fabrication package
|
# Deploy to documentation branch
|
||||||
- name: 'jlcpcb_gerbers'
|
deploy:
|
||||||
comment: "Gerbers for JLCPCB"
|
runs-on: kicad-kibot-runner
|
||||||
type: gerber
|
needs: generate
|
||||||
dir: JLCPCB
|
|
||||||
options:
|
|
||||||
output: '%f%i.%x'
|
|
||||||
exclude_edge_layer: false
|
|
||||||
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 # JLCPCB prefers Protel extensions
|
|
||||||
create_gerber_job_file: false # JLCPCB doesn't need this
|
|
||||||
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:
|
|
||||||
- F.Cu
|
|
||||||
- B.Cu
|
|
||||||
- In1.Cu
|
|
||||||
- In2.Cu
|
|
||||||
- In3.Cu
|
|
||||||
- In4.Cu
|
|
||||||
- F.Paste
|
|
||||||
- B.Paste
|
|
||||||
- F.Silkscreen
|
|
||||||
- B.Silkscreen
|
|
||||||
- F.Mask
|
|
||||||
- B.Mask
|
|
||||||
- Edge.Cuts
|
|
||||||
|
|
||||||
# JLCPCB drill files
|
steps:
|
||||||
- name: 'jlcpcb_drill'
|
- uses: actions/checkout@v4
|
||||||
comment: "Drill files for JLCPCB"
|
|
||||||
type: excellon
|
|
||||||
dir: JLCPCB
|
|
||||||
options:
|
|
||||||
output: '%f%i.%x'
|
|
||||||
metric_units: true
|
|
||||||
minimal_header: false
|
|
||||||
mirror_y_axis: false
|
|
||||||
pth_and_npth_single_file: false # JLCPCB prefers separate files
|
|
||||||
|
|
||||||
# JLCPCB ZIP file
|
|
||||||
- name: 'jlcpcb_zip'
|
|
||||||
comment: "JLCPCB fabrication ZIP"
|
|
||||||
type: compress
|
|
||||||
dir: .
|
|
||||||
options:
|
|
||||||
output: '%f_JLCPCB_compress.%x'
|
|
||||||
format: ZIP
|
|
||||||
files:
|
|
||||||
- source: JLCPCB/*
|
|
||||||
dest: /
|
|
||||||
|
|
||||||
# Fabrication package (ZIP)
|
- name: Retrieve results
|
||||||
- name: 'fabrication'
|
uses: actions/download-artifact@v3
|
||||||
comment: "Fabrication package"
|
with:
|
||||||
type: compress
|
name: Automatic_outputs
|
||||||
dir: .
|
path: Generated
|
||||||
options:
|
|
||||||
output: '%f-fabrication.%x'
|
|
||||||
format: ZIP
|
|
||||||
files:
|
|
||||||
- source: Gerbers/*
|
|
||||||
dest: /
|
|
||||||
- source: PCB/PDF/*
|
|
||||||
dest: /Documentation
|
|
||||||
- source: Assembly/*
|
|
||||||
dest: /Assembly
|
|
||||||
- source: 3D/*
|
|
||||||
dest: /3D
|
|
||||||
|
|
||||||
# Variants for different layer counts (optional)
|
- name: Disable Jekyll
|
||||||
variants:
|
# Jekyll will filter the KiRi folders
|
||||||
- name: 2layer
|
run: |
|
||||||
comment: "2 layer board variant"
|
touch Generated/.nojekyll
|
||||||
type: kibom
|
|
||||||
|
- name: Push to docu branch
|
||||||
- name: 4layer
|
env:
|
||||||
comment: "4 layer board variant"
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
type: kibom
|
run: |
|
||||||
|
# Set up git identity
|
||||||
- name: 6layer
|
git config --global user.email "${{ gitea.actor }}@noreply.localhost"
|
||||||
comment: "6 layer board variant"
|
git config --global user.name "${{ gitea.actor }}"
|
||||||
type: kibom
|
|
||||||
|
# Get the repository URL and add authentication
|
||||||
|
REPO_URL=$(git config --get remote.origin.url)
|
||||||
|
AUTHED_URL=${REPO_URL/https:\/\//https:\/\/${GITEA_TOKEN}@}
|
||||||
|
|
||||||
|
# Clone the docu branch into a separate folder
|
||||||
|
git clone --depth 1 --branch docu "$AUTHED_URL" docu-branch || \
|
||||||
|
git clone --depth 1 "$AUTHED_URL" docu-branch
|
||||||
|
|
||||||
|
cd docu-branch
|
||||||
|
git checkout -B docu
|
||||||
|
|
||||||
|
# Clean old contents and copy new files
|
||||||
|
rm -rf ./*
|
||||||
|
cp -r ../Generated/* ./
|
||||||
|
|
||||||
|
# Commit and push if there are changes
|
||||||
|
git add .
|
||||||
|
if ! git diff --cached --quiet; then
|
||||||
|
git commit -m "chore: update deployed documentation"
|
||||||
|
git push --force "$AUTHED_URL" docu
|
||||||
|
else
|
||||||
|
echo "No changes to deploy"
|
||||||
|
fi
|
||||||
Reference in New Issue
Block a user