Skip to content

Fixed left bottom hole position to be correctly aligned #6

Fixed left bottom hole position to be correctly aligned

Fixed left bottom hole position to be correctly aligned #6

Workflow file for this run

name: KiCad CI
on:
push:
paths:
- 'pmod/**'
- '!pmod/assets/**'
- '!pmod/template/**'
pull_request:
paths:
- 'pmod/**'
- '!pmod/assets/**'
- '!pmod/template/**'
workflow_dispatch:
inputs:
project_filter:
description: 'Filter by specific project (optional)'
required: false
default: ''
type: string
jobs:
find-projects:
runs-on: ubuntu-latest
outputs:
projects: ${{ steps.find-projects.outputs.projects }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Find KiCad projects
id: find-projects
run: |
echo "Searching for KiCad projects in pmod directory..."
# If manual run with project filter, only look for that specific project
if [ -n "${{ github.event.inputs.project_filter }}" ]; then
echo "Filtering for project: ${{ github.event.inputs.project_filter }}"
PROJECTS=$(find pmod -name "*.kicad_pro" -path "*/${{ github.event.inputs.project_filter }}/KiCad/*" | sed 's|/KiCad/.*\.kicad_pro||' | sort -u)
else
PROJECTS=$(find pmod -name "*.kicad_pro" -path "*/KiCad/*" | sed 's|/KiCad/.*\.kicad_pro||' | sort -u)
fi
if [ -z "$PROJECTS" ]; then
echo "No KiCad projects found matching the filter"
echo 'projects=[]' >> $GITHUB_OUTPUT
else
# Convert to JSON array for matrix output
JSON_PROJECTS=$(echo "$PROJECTS" | jq -R -s -c 'split("\n") | map(select(. != ""))')
echo "Found projects: $JSON_PROJECTS"
echo "projects=$JSON_PROJECTS" >> $GITHUB_OUTPUT
fi
kicad-checks:
needs: find-projects
runs-on: ubuntu-latest
strategy:
matrix:
project: ${{ fromJson(needs.find-projects.outputs.projects) }}
name: KiCad DRC and 3D Export - ${{ matrix.project }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Extract project name
id: project-info
run: |
PROJECT_NAME=$(basename "${{ matrix.project }}")
echo "project_name=$PROJECT_NAME" >> $GITHUB_OUTPUT
echo "Processing project: ${{ matrix.project }}"
echo "Project name: $PROJECT_NAME"
- name: Find project file
id: project-file
run: |
KICAD_DIR="${{ matrix.project }}/KiCad"
PROJECT_FILE=$(find "$KICAD_DIR" -name "*.kicad_pro" -exec basename {} .kicad_pro \; | head -1)
if [ -n "$PROJECT_FILE" ]; then
echo "project_file=$PROJECT_FILE" >> $GITHUB_OUTPUT
echo "kicad_dir=$KICAD_DIR" >> $GITHUB_OUTPUT
else
echo "No KiCad project file found in $KICAD_DIR"
exit 1
fi
- name: Create assets directory
run: |
mkdir -p "${{ matrix.project }}/assets"
- name: Run KiCad DRC
uses: sparkengineering/kicad-action@v4
with:
kicad_pcb: "${{ steps.project-file.outputs.kicad_dir }}/${{ steps.project-file.outputs.project_file }}.kicad_pcb"
pcb_drc: true
- name: Generate 3D render
uses: sparkengineering/kicad-action@v4
with:
kicad_pcb: "${{ steps.project-file.outputs.kicad_dir }}/${{ steps.project-file.outputs.project_file }}.kicad_pcb"
pcb_image: true
pcb_image_path: "${{ matrix.project }}/assets/default.png"
- name: Upload DRC report if failed
uses: actions/upload-artifact@v4
if: ${{ failure() }}
with:
name: drc-report-${{ steps.project-info.outputs.project_name }}
path: ${{ steps.project-file.outputs.kicad_dir }}/drc.rpt
- name: Upload 3D render
uses: actions/upload-artifact@v4
if: ${{ !cancelled() }}
with:
name: 3d-render-${{ steps.project-info.outputs.project_name }}
path: ${{ matrix.project }}/assets/default.png