Initial commit

This commit is contained in:
2025-10-22 00:50:46 -07:00
commit c378b6a813
34 changed files with 5938 additions and 0 deletions

539
.github/workflows/main.yaml vendored Normal file
View File

@@ -0,0 +1,539 @@
on:
push:
branches: [main, master, workflow_testing]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
ERC_JOB_NAME : "⚡ERC report⚡"
DRC_JOB_NAME : "📟 DRC report 📟"
jobs:
setup_new_project: # this job only exists for project creation
runs-on: ubuntu-latest
name: set up project
steps:
- name: Checkout
uses: actions/checkout@v4
# reads the project_setting.yaml file allowing you to access it with steps.id.outputs.[key]
- name: read yaml file
uses: juliojimenez/yamler@v1.1.0
id: yaml
with:
yaml-file: ${{ github.workspace }}/project_settings.yaml
- name: check setup
run: |
echo ${{steps.yaml.outputs.needs_setup}}
- name: Setting up Python and chevron to processes failed reports
# workflows really need some more work done on them
if: ${{ !cancelled() && steps.yaml.outputs.needs_setup == 'true' && github.repository != 'sirlilpanda/kicad-project-template'}}
uses: actions/setup-python@v5
with:
python-version: '3.10'
cache: 'pip'
- name: installing requirements
if: ${{ !cancelled() && steps.yaml.outputs.needs_setup == 'true' && github.repository != 'sirlilpanda/kicad-project-template'}}
run: pip install -r ${{ github.workspace }}/.github/report_processing/requirements.txt
- name: rename project if setup has not been completed
if: ${{ !cancelled() && steps.yaml.outputs.needs_setup == 'true' && github.repository != 'sirlilpanda/kicad-project-template'}}
run: python ${{ github.workspace }}/.github/rename.py ${{github.event.repository.name}}
- name: commit production files
if: ${{ !cancelled() && steps.yaml.outputs.needs_setup == 'true' && github.repository != 'sirlilpanda/kicad-project-template'}}
uses: EndBug/add-and-commit@v9
with:
default_author: github_actions
message: 'setup project'
push: true
add: "."
setup_matrixs:
outputs:
projects: ${{ steps.projects.outputs.projects }}
runs-on: ubuntu-latest
name: matrix setup 🗓️
needs: setup_new_project
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setting up Python
# workflows really need some more work done on them
uses: actions/setup-python@v5
with:
python-version: '3.10'
cache: 'pip'
- name: installing requirements
run: pip install pyyaml
- name: creating list start
run:
echo -n "projects=[" >> temp.txt
# this find commad outputs path1,path2,path3 with out the .kicad_pro ext
# .kicad_pro ext is removed because the erc and drc steps want either a
# .kicad_sch or .kicad_pcb file it also makes it easier to name files
# with the project name
# this output will look like
# projects=["path/projet_name", "path/projet_name2", ...]
- name: get kicad project names
run:
find . -type f -name "*.kicad_pro" -exec sh -c 'echo -n "\"${0%.kicad_pro}\","' {} \; | sed 's/.\{1\}$//' >> temp.txt
- name: creating list end
run:
echo "]" >> temp.txt
- name: list output
run:
cat temp.txt
- name: creating list end
id: projects
run:
cat temp.txt >> "$GITHUB_OUTPUT"
# basename is used here to remove the rest of the path from the find
#
DRC:
runs-on: ubuntu-latest
name: "📟 DRC report 📟"
needs: setup_matrixs
strategy:
matrix:
project_path: ${{ fromJSON(needs.setup_matrixs.outputs.projects) }}
steps:
- name: check matrix
run: basename ${{ matrix.project_path }}
- name: setting env
run:
echo "PROJECT_NAME=$(basename ${{ matrix.project_path }})" >> $GITHUB_ENV
- name: Checkout
uses: actions/checkout@v4
- name: read-yaml-file
uses: juliojimenez/yamler@v1.1.0
id: yaml
with:
yaml-file: ${{ github.workspace }}/project_settings.yaml
- name: Setting up Python and chevron to processes reports
# workflows really need some more work done on them
uses: actions/setup-python@v5
with:
python-version: '3.10'
cache: 'pip'
- name: installing requirements
run: pip install -r ${{ github.workspace }}/.github/report_processing/requirements.txt
- name: Run KiCad DRC
id: drc
uses: sparkengineering/kicad-action@v4
with:
kicad_pcb: ${{ matrix.project_path }}.kicad_pcb
pcb_drc: true
report_format: json
pcb_drc_file: drc.json
- name: checking files were created
run:
ls -R
- name: creating DRC report in markdown
if: ${{ always() }}
run: python
${{ github.workspace }}/.github/report_processing/process_json_reports.py
${{ github.workspace }}/$(dirname ${{matrix.project_path}})/drc.json
${{ github.workspace }}/${{steps.yaml.outputs.drc_report_template_path}}
${{ github.workspace }}/${{ env.PROJECT_NAME }}_drc.md
${{ env.PROJECT_NAME }}
- name: upload report summary
if: ${{ always() }}
run: cat ${{ github.workspace }}/${{ env.PROJECT_NAME }}_drc.md >> $GITHUB_STEP_SUMMARY
- name: get summary url
if: ${{always()}}
id: exp
uses: pl-strflt/job-summary-url-action@v1
with:
job: "${{env.DRC_JOB_NAME}} (${{matrix.project_path}})"
- name: create files to upload
if: ${{always()}}
run: |
echo "{\"passing_drc\":\"${{steps.drc.conclusion != 'failure'}}\",\"project_name\":\"${{env.PROJECT_NAME}}\", \"drc_summary_link\":\"${{ steps.exp.outputs.job_summary_url }}\"}" >> ${{env.PROJECT_NAME}}_drc.json
- name: upload data for readme updating
if: ${{always()}}
uses: actions/upload-artifact@v4
with:
name: ${{env.PROJECT_NAME}}_drc.json
path: ${{env.PROJECT_NAME}}_drc.json
ERC:
runs-on: ubuntu-latest
name: "⚡ERC report⚡"
needs: setup_matrixs
strategy:
matrix:
project_path: ${{ fromJSON(needs.setup_matrixs.outputs.projects) }}
steps:
- name: check matrix
run: basename ${{ matrix.project_path }}
- name: setting env
run:
echo "PROJECT_NAME=$(basename ${{ matrix.project_path }})" >> $GITHUB_ENV
- name: setting env
run:
echo "PROJECT_NAME=$(basename ${{ matrix.project_path }})" >> $GITHUB_ENV
- name: Checkout
uses: actions/checkout@v4
- name: read-yaml-file
uses: juliojimenez/yamler@v1.1.0
id: yaml
with:
yaml-file: ${{ github.workspace }}/project_settings.yaml
- name: Setting up Python and chevron to processes reports
# workflows really need some more work done on them
uses: actions/setup-python@v5
with:
python-version: '3.10'
cache: 'pip'
- name: installing requirements
run: pip install -r ${{ github.workspace }}/.github/report_processing/requirements.txt
- name: Run KiCad ERC
id: erc
uses: sparkengineering/kicad-action@v4
with:
kicad_sch: ${{ matrix.project_path }}.kicad_sch
sch_erc: true
report_format: json
sch_erc_file: erc.json
- name: checking files were created
run:
ls -R
- name: creating ERC report in markdown
if: ${{ always() }}
run: python
${{ github.workspace }}/.github/report_processing/process_json_reports.py
${{ github.workspace }}/$(dirname ${{matrix.project_path}})/erc.json
${{ github.workspace }}/${{steps.yaml.outputs.erc_report_template_path}}
${{ github.workspace }}/${{ env.PROJECT_NAME }}_erc.md
${{ env.PROJECT_NAME }}
- name: upload report summary
if: ${{ always() }}
run: cat ${{ github.workspace }}/${{ env.PROJECT_NAME }}_erc.md >> $GITHUB_STEP_SUMMARY
- name: get summary url
if: ${{always()}}
id: exp
uses: pl-strflt/job-summary-url-action@v1
with:
job: "${{env.ERC_JOB_NAME}} (${{matrix.project_path}})"
- name: print summary url
if: ${{always()}}
run: echo '${{ steps.exp.outputs.job_summary_url }}'
shell: bash
- name: create files to upload
if: ${{always()}}
run: |
echo "{\"passing_erc\":\"${{steps.erc.conclusion != 'failure'}}\",\"project_name\":\"${{env.PROJECT_NAME}}\", \"erc_summary_link\":\"${{ steps.exp.outputs.job_summary_url }}\"}" >> ${{env.PROJECT_NAME}}_erc.json
- name: upload data for readme updating
if: ${{always()}}
uses: actions/upload-artifact@v4
with:
name: ${{env.PROJECT_NAME}}_erc.json
path: ${{env.PROJECT_NAME}}_erc.json
production_job:
runs-on: ubuntu-latest
name: creating production files bom sch gerbers 📂
needs: setup_matrixs
strategy:
matrix:
project_path: ${{ fromJSON(needs.setup_matrixs.outputs.projects) }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: read-yaml-file
uses: juliojimenez/yamler@v1.1.0
id: yaml
with:
yaml-file: ${{ github.workspace }}/project_settings.yaml
- name: setting env
run:
echo "PROJECT_NAME=$(basename ${{ matrix.project_path }})" >> $GITHUB_ENV
- name: setting env
run: | # | the / here is defined in the project settings
echo "schematic_file=${{env.PROJECT_NAME}}${{steps.yaml.outputs.schematic_output_name}}.pdf" >> $GITHUB_ENV
echo "bill_of_materials_file=${{env.PROJECT_NAME}}${{steps.yaml.outputs.bom_csv_output_name}}.csv" >> $GITHUB_ENV
echo "production_format_file=${{env.PROJECT_NAME}}${{steps.yaml.outputs.production_file_output_name}}.zip" >> $GITHUB_ENV
echo "bom_report_file=${{env.PROJECT_NAME}}${{steps.yaml.outputs.bom_report_output_name}}.md" >> $GITHUB_ENV
- name: checking envs
run:
echo "${{env.schematic_file}}"
echo "${{env.bill_of_materials_file}}"
echo "${{env.production_format_file}}"
echo "${{env.bom_report_file}}"
- name: setting env
run:
echo "PROJECT_NAME=$(basename ${{ matrix.project_path }})" >> $GITHUB_ENV
- name: setting env
run: | # | the / here is defined in the project settings
echo "schematic_file=${{env.PROJECT_NAME}}${{steps.yaml.outputs.schematic_output_name}}.pdf" >> $GITHUB_ENV
echo "bill_of_materials_file=${{env.PROJECT_NAME}}${{steps.yaml.outputs.bom_csv_output_name}}.csv" >> $GITHUB_ENV
echo "production_format_file=${{env.PROJECT_NAME}}${{steps.yaml.outputs.production_file_output_name}}.zip" >> $GITHUB_ENV
echo "bom_report_file=${{env.PROJECT_NAME}}${{steps.yaml.outputs.bom_report_output_name}}.md" >> $GITHUB_ENV
- name: checking envs
run:
echo "${{env.schematic_file}}"
echo "${{env.bill_of_materials_file}}"
echo "${{env.production_format_file}}"
echo "${{env.bom_report_file}}"
- name: Setting up Python and chevron to processes reports
# workflows really need some more work done on them
if: ${{ !cancelled() }}
uses: actions/setup-python@v5
with:
python-version: '3.10'
cache: 'pip'
- name: installing requirements
if: ${{ !cancelled() }}
run: pip install -r ${{ github.workspace }}/.github/report_processing/requirements.txt
- name: Export production files
id: production
uses: sparkengineering/kicad-action@v4
if: '!cancelled()'
with:
kicad_sch: ${{ matrix.project_path }}.kicad_sch
sch_pdf: true # Generate PDF
sch_bom: true # Generate BOM
kicad_pcb: ${{ matrix.project_path }}.kicad_pcb
pcb_gerbers: true # Generate Gerbers
- name: Moving production files to correct location
if: ${{ !cancelled() && steps.production.conclusion == 'success' }}
run: |
mv ${{ github.workspace }}/$(dirname ${{matrix.project_path}})/sch.pdf ${{ github.workspace }}/${{env.schematic_file}}
mv ${{ github.workspace }}/$(dirname ${{matrix.project_path}})/bom.csv ${{ github.workspace }}/${{env.bill_of_materials_file}}
mv ${{ github.workspace }}/$(dirname ${{matrix.project_path}})/gbr.zip ${{ github.workspace }}/${{env.production_format_file}}
- name: creating BOM report in markdown
if: ${{ !cancelled() }}
run: python
${{ github.workspace }}/.github/report_processing/process_bom_files.py
${{ github.workspace }}/${{env.bill_of_materials_file}}
${{ github.workspace }}/${{steps.yaml.outputs.bom_template_path}}
${{ github.workspace }}/${{env.bom_report_file}}
- name: upload report'
uses: actions/upload-artifact@v4
with:
name: production-files-${{env.PROJECT_NAME}}.zip
path: |
${{ github.workspace }}/${{env.schematic_file}}
${{ github.workspace }}/${{env.bill_of_materials_file}}
${{ github.workspace }}/${{env.production_format_file}}
${{ github.workspace }}/${{env.bom_report_file}}
- name: data for readme updating
if: ${{always()}}
run: |
echo "{" >> ${{env.PROJECT_NAME}}_project.json
echo "\"schematic_link\":\"https://github.com/${{ github.repository }}/tree/${{ github.ref_name }}/${{env.schematic_file}}\"," >> ${{env.PROJECT_NAME}}_project.json
echo "\"bom_csv_link\":\"https://github.com/${{ github.repository }}/tree/${{ github.ref_name }}/${{env.bill_of_materials_file}}\"," >> ${{env.PROJECT_NAME}}_project.json
echo "\"bom_report_link\":\"https://github.com/${{ github.repository }}/tree/${{ github.ref_name }}/${{env.bom_report_file}}\"," >> ${{env.PROJECT_NAME}}_project.json
echo "\"gerber_link\":\"https://github.com/${{ github.repository }}/tree/${{ github.ref_name }}/${{env.production_format_file}}\"," >> ${{env.PROJECT_NAME}}_project.json
echo "\"project_link\":\"https://github.com/${{ github.repository }}/tree/${{ github.ref_name }}/$(dirname ${{matrix.project_path}})\"," >> ${{env.PROJECT_NAME}}_project.json
echo "\"project_name\":\"${{env.PROJECT_NAME}}\"" >> ${{env.PROJECT_NAME}}_project.json
echo "}" >> ${{env.PROJECT_NAME}}_project.json
- name: upload report
if: ${{always()}}
uses: actions/upload-artifact@v4
with:
name: ${{env.PROJECT_NAME}}_project.json
path: ${{env.PROJECT_NAME}}_project.json
readme_job:
runs-on: ubuntu-latest
name: update readme
if: ${{ always() }}
needs: [DRC, ERC, production_job]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: read-yaml-file
uses: juliojimenez/yamler@v1.1.0
id: yaml
with:
yaml-file: ${{ github.workspace }}/project_settings.yaml
- name: download ercs files
if: ${{ steps.yaml.outputs.dynamic_read_me == 'true' }}
uses: actions/download-artifact@v4
with:
pattern: "*_erc.json"
path: ${{ github.workspace }}
- name: download drcs files
if: ${{ steps.yaml.outputs.dynamic_read_me == 'true' }}
uses: actions/download-artifact@v4
with:
pattern: "*_drc.json"
path: ${{ github.workspace }}
- name: download production json files
if: ${{ steps.yaml.outputs.dynamic_read_me == 'true' }}
uses: actions/download-artifact@v4
with:
pattern: "*_project.json"
path: ${{ github.workspace }}
- name: Setting up Python
if: ${{ steps.yaml.outputs.dynamic_read_me == 'true' }}
uses: actions/setup-python@v5
with:
python-version: '3.10'
cache: 'pip'
- name: installing requirements
if: ${{ !cancelled() && steps.yaml.outputs.dynamic_read_me == 'true' }}
run: pip install -r ${{ github.workspace }}/.github/report_processing/requirements.txt
- name: create extra info for readme hash
if: ${{ steps.yaml.outputs.dynamic_read_me == 'true' }}
run: |
echo "{" >> readme_extras.json
echo "\"badge\" : \"[![.github/workflows/main.yaml](https://github.com/${{github.repository}}/actions/workflows/main.yaml/badge.svg?branch=${{github.ref_name}})](https://github.com/${{github.repository}}/actions/workflows/main.yaml)\"," >> readme_extras.json
echo "\"lastest_action_run_link\" : \"https://github.com/${{github.repository}}/actions/runs/${{ github.run_id }}\"," >> readme_extras.json
echo "\"title\" : \"${{steps.yaml.outputs.project_name}}\"" >> readme_extras.json
echo "}" >> readme_extras.json
- name: show extras
run:
cat readme_extras.json
- name: create new readme
if: ${{ steps.yaml.outputs.dynamic_read_me == 'true' }}
run:
python
${{ github.workspace }}/.github/report_processing/process_output_files.py
${{ github.workspace }}/${{steps.yaml.outputs.readme_template_path}} *.json
- name: upload data for readme updating
if: ${{ steps.yaml.outputs.dynamic_read_me == 'true' }}
uses: actions/upload-artifact@v4
with:
name: README.md
path: README.md
- name: list everything
if: ${{always()}}
run: ls -R
upload_job:
runs-on: ubuntu-latest
name: commit production files
if: ${{ always() }}
needs: [readme_job]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: read-yaml-file
uses: juliojimenez/yamler@v1.1.0
id: yaml
with:
yaml-file: ${{ github.workspace }}/project_settings.yaml
- name: download production files
uses: actions/download-artifact@v4
with:
pattern: production-files-*
path: ${{ github.workspace }}
- name: download readme
uses: actions/download-artifact@v4
with:
name: README.md
path: ${{ github.workspace }}
- name: check downloads
run: ls -R
- name: Moving files to correct location
run: |
mv ${{ github.workspace }}/production-files-*/*${{steps.yaml.outputs.schematic_output_name}}.pdf ${{ github.workspace }}/${{steps.yaml.outputs.schematic_output_path}}
mv ${{ github.workspace }}/production-files-*/*${{steps.yaml.outputs.bom_csv_output_name}}.csv ${{ github.workspace }}/${{steps.yaml.outputs.bom_csv_output_path}}
mv ${{ github.workspace }}/production-files-*/*${{steps.yaml.outputs.bom_report_output_name}}.md ${{ github.workspace }}/${{steps.yaml.outputs.bom_report_output_path}}
mv ${{ github.workspace }}/production-files-*/*${{steps.yaml.outputs.production_file_output_name}}.zip ${{ github.workspace }}/${{steps.yaml.outputs.production_file_output_path}}
- name: commit production files
uses: EndBug/add-and-commit@v9
with:
default_author: github_actions
message: 'production files'
push: true
pull: '--rebase --autostash'
tag_push: '--force' # just makes life easier
tag: 'v1.0.0 --force'
add: |
${{ github.workspace }}/*${{steps.yaml.outputs.schematic_output_name}}.pdf
${{ github.workspace }}/*${{steps.yaml.outputs.bom_csv_output_name}}.csv
${{ github.workspace }}/*${{steps.yaml.outputs.bom_report_output_name}}.md
${{ github.workspace }}/*${{steps.yaml.outputs.production_file_output_name}}.zip
${{ github.workspace }}/README.md
- name: list everything
if: ${{always()}}
run: ls -R