Skip to content

Commit

Permalink
Merge pull request #1 from PatrickBaus/add_CI
Browse files Browse the repository at this point in the history
Add CI
  • Loading branch information
PatrickBaus authored Nov 14, 2024
2 parents b6c4690 + 52a49c6 commit bfa53af
Show file tree
Hide file tree
Showing 8 changed files with 579 additions and 162 deletions.
16 changes: 16 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
version: 2
updates:
- package-ecosystem: "github-actions"
# Workflow files stored in the
# default location of `.github/workflows`
directory: "/"
schedule:
interval: "daily"
commit-message:
# Prefix all commit messages with "[gha] "
prefix: "[gha] "

- package-ecosystem: "gitsubmodule"
directory: "/"
schedule:
interval: "daily"
233 changes: 233 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,233 @@
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: 6632B_binding_posts.kicad_sch
PCB_FILE: 6632B_binding_posts.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

- name: Test for correct git tag
if: github.ref_type == 'tag' && github.ref_name != steps.extract_sch_revision.outputs.value
run: |
echo "::error::Revision number of the schematic/PCB (${{ steps.extract_sch_revision.outputs.value }}) does not match the Github tag (${{ github.ref_name }})."
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_dk8
with:
config: ${{ env.KIBOT_CONFIG }}
schema: ${{ env.SCHEMATIC_FILE }}
dir: generated
skip: run_drc
targets: __NONE__ # Only run preflights

- name: Upload results
uses: actions/upload-artifact@v4
with:
name: ERC_Output
path: generated
retention-days: 7

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_dk8
with:
config: ${{ env.KIBOT_CONFIG }}
board: ${{ env.PCB_FILE }}
dir: generated
skip: run_erc
targets: __NONE__ # Only run preflights

- name: Upload results
uses: actions/upload-artifact@v4
with:
name: DRC_Output
path: generated
retention-days: 7

fabrication_output:
name: 'Produce fabrication outputs'
runs-on: ubuntu-latest
needs: [ERC, DRC]
strategy:
matrix:
variant: [ 'default', ]
steps:
- name: Download repository
uses: actions/checkout@v4
with:
submodules: true

- uses: INTI-CMNB/KiBot@v2_dk8
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@v4
with:
name: manufacturing_files-bom-${{ matrix.variant }}
path: bom_files_compressed
retention-days: 7

- name: Upload schematic files as artifact
uses: actions/upload-artifact@v4
with:
name: manufacturing_files-schematics-${{ matrix.variant }}
path: schematics
retention-days: 7

- name: Upload Gerber files as artifact
uses: actions/upload-artifact@v4
with:
name: manufacturing_files-gerber-${{ matrix.variant }}
path: gerber_files_compressed
retention-days: 7

release:
name: 'Upload manufacturing files to release'
runs-on: ubuntu-latest
needs: [tests, fabrication_output]
if: github.event.action == 'published'
strategy:
matrix:
variant: [ 'default', ]
steps:
- name: Download manufacturing files artifact
uses: actions/download-artifact@v4
with:
path: manufacturing_files
pattern: manufacturing_files-*
merge-multiple: true

- 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_(${{ 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/$(basename ${{ env.SCHEMATIC_FILE }} .kicad_sch)_schematics_${{ needs.tests.outputs.revision }}_(${{ 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/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'
run: |
mv "./manufacturing_files/gerbers_(${{ matrix.variant }}).zip" ${{ needs.tests.outputs.basename }}_gerber_${{ needs.tests.outputs.revision }}_${{ matrix.variant }}.zip
gh release upload ${{ github.ref_name }} ${{ needs.tests.outputs.basename }}_gerber_${{ needs.tests.outputs.revision }}_${{ matrix.variant }}.zip#"Gerber files for the ${{ matrix.variant }} variant (zip)" --repo ${{ github.repository }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
shell: bash
3 changes: 0 additions & 3 deletions .gitmodules

This file was deleted.

Loading

0 comments on commit bfa53af

Please sign in to comment.