Updated license #7
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: "Build manufacturing files" | |
# Controls when the action will run. Triggers the workflow on push or pull request | |
# events but only for the master branch | |
on: | |
push: | |
branches: | |
- "**" | |
paths: | |
- '**.kicad_sch' | |
- '**.kicad_pcb' | |
- 'footprints.pretty/*' | |
- 'footprints_project_specific.pretty/*' | |
- 'libraries/*' | |
- '.github/workflows/ci.yml' | |
- 'config.kibot.yaml' | |
- 'bom.ini' | |
# Ignore the push event when creating tags | |
tags-ignore: | |
- 'v?[0-9]+.[0-9]+.[0-9]+' | |
release: | |
types: | |
- published | |
env: | |
SCHEMATIC_FILE: reference_board.kicad_sch | |
PCB_FILE: reference_board.kicad_pcb | |
KIBOT_CONFIG: config.kibot.yaml | |
jobs: | |
tests: | |
name: Run tests | |
runs-on: ubuntu-latest | |
outputs: | |
revision: ${{ steps.extract_sch_revision.outputs.value }} | |
basename: ${{ steps.repo-basename.outputs.value }} | |
steps: | |
- name: Download repository | |
uses: actions/checkout@v4 | |
- name: Parse repository name | |
id: repo-basename | |
run: | | |
echo "value=$(basename ${{ github.repository }})" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Extract schematic revision | |
id: extract_sch_revision | |
run: | | |
echo "value=$(perl -0777 -ne "print /\(title_block.+\(rev \"(.+?)\"\)/sg" ${{ env.SCHEMATIC_FILE }})" >>${GITHUB_OUTPUT} | |
shell: bash | |
- name: Extract PCB revision | |
id: extract_pcb_revision | |
run: | | |
echo "value=$(perl -0777 -ne "print /\(title_block.+\(rev \"(.+?)\"\)/sg" ${{ env.PCB_FILE }})" >>${GITHUB_OUTPUT} | |
shell: bash | |
- name: Test if the revision number was extracted | |
if: steps.extract_sch_revision.outputs.value == '' | |
run: | | |
echo "::error::Failed to extract revision number from schematic file: ${{ env.SCHEMATIC_FILE }}" | |
exit 1 | |
shell: bash | |
- name: Test schematic revision == pcb revision | |
if: steps.extract_sch_revision.outputs.value != steps.extract_pcb_revision.outputs.value | |
run: | | |
echo "::error::Revision number of the schematic (${{ steps.extract_sch_revision.outputs.value }}) does not match PCB (${{ steps.extract_pcb_revision.outputs.value }}) revision." | |
exit 1 | |
shell: bash | |
ERC: | |
name: Run ERC | |
runs-on: ubuntu-latest | |
needs: tests | |
steps: | |
- name: Download repository | |
uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Run ERC | |
uses: INTI-CMNB/KiBot@v2_k7 | |
with: | |
config: ${{ env.KIBOT_CONFIG }} | |
schema: ${{ env.SCHEMATIC_FILE }} | |
dir: generated | |
skip: run_drc | |
targets: __NONE__ # Only run preflights | |
- name: Retrieve results | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ERC_Output | |
path: generated | |
DRC: | |
name: Run DRC | |
runs-on: ubuntu-latest | |
needs: ERC | |
steps: | |
- name: Download repository | |
uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Run DRC | |
uses: INTI-CMNB/KiBot@v2_k7 | |
with: | |
config: ${{ env.KIBOT_CONFIG }} | |
board: ${{ env.PCB_FILE }} | |
dir: generated | |
skip: run_erc | |
targets: __NONE__ # Only run preflights | |
- name: Retrieve results | |
uses: actions/upload-artifact@v3 | |
with: | |
name: DRC_Output | |
path: generated | |
fabrication_output: | |
name: 'Produce fabrication outputs' | |
runs-on: ubuntu-latest | |
needs: [ERC, DRC] | |
strategy: | |
matrix: | |
variant: [ 'default', 'PCBA'] | |
steps: | |
- name: Download repository | |
uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- uses: INTI-CMNB/KiBot@v2_k7 | |
with: | |
config: ${{ env.KIBOT_CONFIG }} | |
schema: ${{ env.SCHEMATIC_FILE }} | |
board: ${{ env.PCB_FILE }} | |
skip: run_erc,run_drc | |
variant: ${{ matrix.variant }} | |
verbose: 0 # use 3 for debugging | |
- name: Upload bill of materials files as artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: bom | |
path: bom_files_compressed | |
- name: Upload schematic files as artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: schematics | |
path: schematics | |
- name: Upload schematic files as artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: gerber_files | |
path: gerber_files_compressed | |
release: | |
name: 'Upload manufacturing files to release' | |
runs-on: ubuntu-latest | |
needs: [tests, fabrication_output] | |
if: github.event.action == 'published' | |
strategy: | |
matrix: | |
variant: [ 'default', 'PCBA'] | |
steps: | |
- name: Download manufacturing files artifact | |
uses: actions/download-artifact@v3 | |
with: | |
path: ./manufacturing_files | |
- name: Display structure of downloaded files | |
run: ls -R | |
working-directory: ./manufacturing_files | |
shell: bash | |
- name: Append BOM (bill of materials) as asset | |
if: github.event.action == 'published' | |
run: | | |
mv "./manufacturing_files/bom/bom_(${{ matrix.variant }}).zip" ${{ needs.tests.outputs.basename }}_bom_${{ needs.tests.outputs.revision }}_${{ matrix.variant }}.zip | |
gh release upload ${{ github.ref_name }} ${{ needs.tests.outputs.basename }}_bom_${{ needs.tests.outputs.revision }}_${{ matrix.variant }}.zip#"Bill of materials for the ${{ matrix.variant }} variant (zip)" --repo ${{ github.repository }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
shell: bash | |
- name: Append schematics as asset | |
if: github.event.action == 'published' | |
run: | | |
mv "./manufacturing_files/schematics/schematics_(${{ matrix.variant }}).pdf" ${{ needs.tests.outputs.basename }}_schematics_${{ needs.tests.outputs.revision }}_${{ matrix.variant }}.pdf | |
gh release upload ${{ github.ref_name }} ${{ needs.tests.outputs.basename }}_schematics_${{ needs.tests.outputs.revision }}_${{ matrix.variant }}.pdf#"Schematics for the ${{ matrix.variant }} variant (pdf)" --repo ${{ github.repository }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
shell: bash | |
- name: Append position files as asset | |
if: github.event.action == 'published' | |
run: | | |
mv "./manufacturing_files/gerber_files/pos_(${{ matrix.variant }}).zip" ${{ needs.tests.outputs.basename }}_position_${{ needs.tests.outputs.revision }}_${{ matrix.variant }}.zip | |
gh release upload ${{ github.ref_name }} ${{ needs.tests.outputs.basename }}_position_${{ needs.tests.outputs.revision }}_${{ matrix.variant }}.zip#"Pick & Place position files for the ${{ matrix.variant }} variant (zip)" --repo ${{ github.repository }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
shell: bash | |
- name: Append Gerber files as asset | |
if: github.event.action == 'published' && matrix.variant == 'default' | |
run: | | |
mv "./manufacturing_files/gerber_files/gerbers.zip" ${{ needs.tests.outputs.basename }}_gerber_${{ needs.tests.outputs.revision }}_all.zip | |
gh release upload ${{ github.ref_name }} ${{ needs.tests.outputs.basename }}_gerber_${{ needs.tests.outputs.revision }}_all.zip#"Gerber files for all variants (zip)" --repo ${{ github.repository }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
shell: bash |