Skip to content

Commit 78d7f4a

Browse files
Refactor GitHub Actions workflow for KiCad projects
1 parent c0a35ef commit 78d7f4a

File tree

1 file changed

+58
-75
lines changed

1 file changed

+58
-75
lines changed

.github/workflows/drc-3d-render.yml

Lines changed: 58 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,16 @@ on:
2020
type: string
2121

2222
jobs:
23-
kicad_checks:
23+
find-projects:
2424
runs-on: ubuntu-latest
25-
name: KiCad DRC and 3D Export
25+
outputs:
26+
projects: ${{ steps.find-projects.outputs.projects }}
2627
steps:
2728
- name: Checkout
2829
uses: actions/checkout@v4
29-
30+
3031
- name: Find KiCad projects
31-
id: find_projects
32+
id: find-projects
3233
run: |
3334
echo "Searching for KiCad projects in pmod directory..."
3435
@@ -42,86 +43,68 @@ jobs:
4243
4344
if [ -z "$PROJECTS" ]; then
4445
echo "No KiCad projects found matching the filter"
45-
echo "projects=" >> $GITHUB_OUTPUT
46+
echo 'projects=[]' >> $GITHUB_OUTPUT
4647
else
47-
echo "Found projects: $PROJECTS"
48-
echo "projects=$PROJECTS" >> $GITHUB_OUTPUT
48+
# Convert to JSON array for matrix output
49+
JSON_PROJECTS=$(echo "$PROJECTS" | jq -R -s -c 'split("\n") | map(select(. != ""))')
50+
echo "Found projects: $JSON_PROJECTS"
51+
echo "projects=$JSON_PROJECTS" >> $GITHUB_OUTPUT
4952
fi
5053
51-
- name: Process each KiCad project
54+
kicad-checks:
55+
needs: find-projects
56+
runs-on: ubuntu-latest
57+
strategy:
58+
matrix:
59+
project: ${{ fromJson(needs.find-projects.outputs.projects) }}
60+
name: KiCad DRC and 3D Export - ${{ matrix.project }}
61+
steps:
62+
- name: Checkout
63+
uses: actions/checkout@v4
64+
65+
- name: Extract project name
66+
id: project-info
67+
run: |
68+
PROJECT_NAME=$(basename "${{ matrix.project }}")
69+
echo "project_name=$PROJECT_NAME" >> $GITHUB_OUTPUT
70+
echo "Processing project: ${{ matrix.project }}"
71+
echo "Project name: $PROJECT_NAME"
72+
73+
- name: Find project file
74+
id: project-file
5275
run: |
53-
# Check if any projects were found
54-
if [ -z "${{ steps.find_projects.outputs.projects }}" ]; then
55-
echo "No KiCad projects found to process"
56-
exit 0
76+
KICAD_DIR="${{ matrix.project }}/KiCad"
77+
PROJECT_FILE=$(find "$KICAD_DIR" -name "*.kicad_pro" -exec basename {} .kicad_pro \; | head -1)
78+
if [ -n "$PROJECT_FILE" ]; then
79+
echo "project_file=$PROJECT_FILE" >> $GITHUB_OUTPUT
80+
echo "kicad_dir=$KICAD_DIR" >> $GITHUB_OUTPUT
81+
else
82+
echo "No KiCad project file found in $KICAD_DIR"
83+
exit 1
5784
fi
5885
59-
for PROJECT_PATH in ${{ steps.find_projects.outputs.projects }}; do
60-
echo "Processing project: $PROJECT_PATH"
61-
PROJECT_NAME=$(basename "$PROJECT_PATH")
62-
KICAD_DIR="$PROJECT_PATH/KiCad"
63-
ASSETS_DIR="$PROJECT_PATH/assets"
64-
65-
# Find the main project file (without .kicad_pro extension)
66-
PROJECT_FILE=$(find "$KICAD_DIR" -name "*.kicad_pro" -exec basename {} .kicad_pro \; | head -1)
67-
68-
if [ -n "$PROJECT_FILE" ]; then
69-
echo "Found KiCad project: $PROJECT_FILE"
70-
71-
# Change to the KiCad directory for processing
72-
cd "$KICAD_DIR"
73-
74-
# Run DRC
75-
echo "Running DRC for $PROJECT_FILE..."
76-
pcb_drc_result=0
77-
/usr/bin/docker run --rm -v "$PWD:/workspace" sparkengineering/kicad-action:latest \
78-
--kicad_pcb "$PROJECT_FILE.kicad_pcb" --pcb_drc || pcb_drc_result=$?
79-
80-
# Generate 3D render
81-
echo "Generating 3D render for $PROJECT_FILE..."
82-
pcb_3d_result=0
83-
/usr/bin/docker run --rm -v "$PWD:/workspace" sparkengineering/kicad-action:latest \
84-
--kicad_pcb "$PROJECT_FILE.kicad_pcb" --pcb_3d --pcb_3d_output "temp_3d.png" || pcb_3d_result=$?
85-
86-
# Create assets directory and move 3D render
87-
if [ $pcb_3d_result -eq 0 ] && [ -f "temp_3d.png" ]; then
88-
echo "Moving 3D render to assets directory..."
89-
mkdir -p "../../assets"
90-
mv "temp_3d.png" "../../assets/default.png"
91-
echo "3D render saved to $PROJECT_PATH/assets/default.png"
92-
fi
93-
94-
# Go back to workspace root
95-
cd "$GITHUB_WORKSPACE"
96-
97-
# Upload artifacts for this project
98-
if [ $pcb_drc_result -ne 0 ] && [ -f "$KICAD_DIR/drc.rpt" ]; then
99-
echo "Uploading DRC report for $PROJECT_NAME"
100-
cp "$KICAD_DIR/drc.rpt" "drc_${PROJECT_NAME}.rpt"
101-
fi
102-
103-
if [ -f "$PROJECT_PATH/assets/default.png" ]; then
104-
echo "Uploading 3D render for $PROJECT_NAME"
105-
cp "$PROJECT_PATH/assets/default.png" "render_${PROJECT_NAME}.png"
106-
fi
107-
108-
else
109-
echo "No KiCad project file found in $KICAD_DIR"
110-
fi
111-
done
112-
113-
# Upload DRC reports only if DRC failed
114-
- name: Upload DRC reports
86+
- name: Create assets directory
87+
run: |
88+
mkdir -p "${{ matrix.project }}/assets"
89+
90+
- name: Run KiCad DRC and 3D render
91+
uses: sparkengineering/kicad-action@v4
92+
with:
93+
kicad_pcb: "${{ steps.project-file.outputs.kicad_dir }}/${{ steps.project-file.outputs.project_file }}.kicad_pcb"
94+
pcb_drc: true
95+
pcb_3d: true
96+
pcb_3d_output: "${{ matrix.project }}/assets/default.png"
97+
98+
- name: Upload DRC report if failed
11599
uses: actions/upload-artifact@v4
116100
if: ${{ failure() }}
117101
with:
118-
name: drc-reports
119-
path: drc_*.rpt
120-
121-
# Upload 3D renders if generation succeeded
122-
- name: Upload 3D renders
102+
name: drc-report-${{ steps.project-info.outputs.project_name }}
103+
path: ${{ steps.project-file.outputs.kicad_dir }}/drc.rpt
104+
105+
- name: Upload 3D render
123106
uses: actions/upload-artifact@v4
124107
if: ${{ !cancelled() }}
125108
with:
126-
name: 3d-renders
127-
path: render_*.png
109+
name: 3d-render-${{ steps.project-info.outputs.project_name }}
110+
path: ${{ matrix.project }}/assets/default.png

0 commit comments

Comments
 (0)