Change firmware build workflow #19
This file contains hidden or 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: DIU Build Pipeline | |
| on: | |
| push: | |
| branches: | |
| - main | |
| pull_request: | |
| branches: | |
| - main | |
| jobs: | |
| export-kicad: | |
| env: | |
| BaseFileName: "DIU" | |
| SchematicFileExtension: "kicad_sch" | |
| PCBFileExtension: "kicad_pcb" | |
| OutputFolder: "./output" | |
| ConfigFilePath: ".kibot/build.kibot.yaml" | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Fetch repository | |
| uses: actions/checkout@v4 | |
| - name: Prepare output directory | |
| run: | | |
| mkdir -p ${{ env.OutputFolder }} | |
| cp -r ./pcb ${{ env.OutputFolder }}/kicad | |
| cp ./LICENSE ${{ env.OutputFolder }} | |
| - name: Run KiBOT | |
| uses: INTI-CMNB/KiBot@v2_dk7 | |
| with: | |
| config: ${{ env.ConfigFilePath }} | |
| dir: ${{ env.OutputFolder }} | |
| schema: "./pcb/${{ env.BaseFileName }}.${{ env.SchematicFileExtension }}" | |
| board: "./pcb/${{ env.BaseFileName }}.${{ env.PCBFileExtension }}" | |
| - name: Archive artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: kicad-export | |
| path: ${{ env.OutputFolder }} | |
| retention-days: 1 | |
| export-freecad: | |
| env: | |
| FREECADVERSION: "1.0.2" | |
| FreeCADFileName: "./mechanical/housing.FCStd" | |
| OutputFolder: "./output" | |
| PartType: "PartDesign::Body" | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Fetch repository | |
| uses: actions/checkout@v4 | |
| - name: Prepare output directory | |
| run: | | |
| mkdir -p ${{ env.OutputFolder }} | |
| cp -r ./mechanical ${{ env.OutputFolder }} | |
| cp ./LICENSE ${{ env.OutputFolder }} | |
| - name: Install FreeCAD | |
| run: | | |
| wget https://github.com/FreeCAD/FreeCAD/releases/download/${{ env.FREECADVERSION }}/FreeCAD_${{ env.FREECADVERSION }}-conda-Linux-x86_64-py311.AppImage | |
| chmod 0777 FreeCAD_${{ env.FREECADVERSION }}-conda-Linux-x86_64-py311.AppImage | |
| ./FreeCAD_${{ env.FREECADVERSION }}-conda-Linux-x86_64-py311.AppImage --appimage-extract | |
| - name: Get FreeCAD Export | |
| run: | | |
| git clone https://github.com/0x007E/pyfreecadexport.git | |
| - name: Export STEP Files | |
| run: | | |
| ./squashfs-root/usr/bin/python ./pyfreecadexport/src/pyfreecadexport.py -f "${{ env.FreeCADFileName }}" -p "${{ env.PartType }}" -d "${{ env.OutputFolder }}" -e "step" -l "squashfs-root/usr/lib/" | |
| ./squashfs-root/usr/bin/python ./pyfreecadexport/src/pyfreecadexport.py -f "${{ env.FreeCADFileName }}" -p "${{ env.PartType }}" -d "${{ env.OutputFolder }}" -e "stl" -l "squashfs-root/usr/lib/" | |
| - name: Archive artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: freecad-export | |
| path: ${{ env.OutputFolder }} | |
| retention-days: 1 | |
| build-firmware: | |
| env: | |
| TOOLCHAIN: "3.7.0.1796" | |
| DFP: "ATtiny_DFP.2.0.368" | |
| DEVICE: "attiny1606" | |
| OUTPUT_FOLDER: "./output" | |
| LIBRARY_PATH: "./firmware/lib" | |
| PROJECT_PATH: "./firmware/DIU_FW_1_0" | |
| FIRMWARE_NAME: "DIU_FW_1_0_t1606" | |
| PREPROCESSOR: "-DF_CPU=20000000UL" | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Fetch repository | |
| uses: actions/checkout@v5 | |
| - name: Copy License | |
| run: | | |
| mkdir -p ${{ env.OUTPUT_FOLDER }} | |
| cp ./LICENSE ${{ env.OUTPUT_FOLDER }} | |
| - name: Install zip | |
| run: sudo apt-get install -y zip | |
| - name: install-build-tools | |
| run: | | |
| wget https://ww1.microchip.com/downloads/aemDocuments/documents/DEV/ProductDocuments/SoftwareTools/avr8-gnu-toolchain-${{ env.TOOLCHAIN }}-linux.any.x86_64.tar.gz | |
| tar -xf *.tar.gz | |
| - name: install-dfp-package | |
| run: | | |
| wget http://packs.download.atmel.com/Atmel.${{ env.DFP }}.atpack | |
| unzip *.atpack -d ./DFP | |
| - name: build-firmware | |
| run: | | |
| mkdir -p temp | |
| rm -rf ./temp/* | |
| libraries="" | |
| while read -r file; do | |
| filename=$(basename -- "$file") | |
| filename="${filename%.*}" | |
| echo "Compiling: ${filename}.c from ${file}" | |
| ./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"./DFP/include" -Og -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=${{ env.DEVICE }} -B "./DFP/gcc/dev/${{ env.DEVICE }}" -c -std=gnu99 -MD -MP -MF "./temp/${filename}.d" -MT"./temp/${filename}.d" -MT"./temp/${filename}.o" -o "./temp/${filename}.o" "${file}" ${{ env.PREPROCESSOR }} | |
| libraries+="./temp/${filename}.o " | |
| done < <(find "${LIBRARY_PATH}" -type f -name '*.c') | |
| echo "Libraries: $libraries" | |
| ./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"./DFP/include" -Og -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=${{ env.DEVICE }} -B "./DFP/gcc/dev/${{ env.DEVICE }}" -c -std=gnu99 -MD -MP -MF "./temp/main.d" -MT"./temp/main.d" -MT"./temp/main.o" -o "./temp/main.o" "./${{ env.PROJECT_PATH }}/main.c" ${{ env.PREPROCESSOR }} | |
| ./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -o "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" ${libraries} ./temp/main.o -Wl,-Map="${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=${{ env.DEVICE }} -B "./DFP/gcc/dev/${{ env.DEVICE }}" | |
| ./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.hex" | |
| ./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.eep" || exit 0 | |
| ./avr8-gnu-toolchain-linux_x86_64/bin/avr-objdump -h -S "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" > "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.lss" | |
| ./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -O srec -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.srec" | |
| ./avr8-gnu-toolchain-linux_x86_64/bin/avr-size "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" | |
| tar -czvf build.tar.gz ${{ env.OUTPUT_FOLDER }} | |
| zip -r build.zip ${{ env.OUTPUT_FOLDER }} | |
| - name: upload-firmware | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: firmware-build | |
| path: ${{ env.OUTPUT_FOLDER }} | |
| retention-days: 1 | |
| build-test-firmware: | |
| env: | |
| TOOLCHAIN: "3.7.0.1796" | |
| DFP: "ATtiny_DFP.2.0.368" | |
| DEVICE: "attiny1606" | |
| OUTPUT_FOLDER: "./output" | |
| LIBRARY_PATH: "./firmware/lib" | |
| PROJECT_PATH: "./firmware/DIU_TEST" | |
| FIRMWARE_NAME: "DIU_TEST_t1606" | |
| PREPROCESSOR: "-DF_CPU=20000000UL" | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Fetch repository | |
| uses: actions/checkout@v5 | |
| - name: Copy License | |
| run: | | |
| mkdir -p ${{ env.OUTPUT_FOLDER }} | |
| cp ./LICENSE ${{ env.OUTPUT_FOLDER }} | |
| - name: Install zip | |
| run: sudo apt-get install -y zip | |
| - name: install-build-tools | |
| run: | | |
| wget https://ww1.microchip.com/downloads/aemDocuments/documents/DEV/ProductDocuments/SoftwareTools/avr8-gnu-toolchain-${{ env.TOOLCHAIN }}-linux.any.x86_64.tar.gz | |
| tar -xf *.tar.gz | |
| - name: install-dfp-package | |
| run: | | |
| wget http://packs.download.atmel.com/Atmel.${{ env.DFP }}.atpack | |
| unzip *.atpack -d ./DFP | |
| - name: build-firmware | |
| run: | | |
| mkdir -p temp | |
| rm -rf ./temp/* | |
| libraries="" | |
| while read -r file; do | |
| filename=$(basename -- "$file") | |
| filename="${filename%.*}" | |
| echo "Compiling: ${filename}.c from ${file}" | |
| ./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"./DFP/include" -Og -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=${{ env.DEVICE }} -B "./DFP/gcc/dev/${{ env.DEVICE }}" -c -std=gnu99 -MD -MP -MF "./temp/${filename}.d" -MT"./temp/${filename}.d" -MT"./temp/${filename}.o" -o "./temp/${filename}.o" "${file}" ${{ env.PREPROCESSOR }} | |
| libraries+="./temp/${filename}.o " | |
| done < <(find "${LIBRARY_PATH}" -type f -name '*.c') | |
| echo "Libraries: $libraries" | |
| ./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"./DFP/include" -Og -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=${{ env.DEVICE }} -B "./DFP/gcc/dev/${{ env.DEVICE }}" -c -std=gnu99 -MD -MP -MF "./temp/main.d" -MT"./temp/main.d" -MT"./temp/main.o" -o "./temp/main.o" "./${{ env.PROJECT_PATH }}/main.c" ${{ env.PREPROCESSOR }} | |
| ./avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc -o "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" ${libraries} ./temp/main.o -Wl,-Map="${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=${{ env.DEVICE }} -B "./DFP/gcc/dev/${{ env.DEVICE }}" | |
| ./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.hex" | |
| ./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.eep" || exit 0 | |
| ./avr8-gnu-toolchain-linux_x86_64/bin/avr-objdump -h -S "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" > "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.lss" | |
| ./avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy -O srec -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.srec" | |
| ./avr8-gnu-toolchain-linux_x86_64/bin/avr-size "${{ env.OUTPUT_FOLDER }}/${{ env.FIRMWARE_NAME }}.elf" | |
| tar -czvf build.tar.gz ${{ env.OUTPUT_FOLDER }} | |
| zip -r build.zip ${{ env.OUTPUT_FOLDER }} | |
| - name: upload-test-firmware | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: firmware-test-build | |
| path: ${{ env.OUTPUT_FOLDER }} | |
| retention-days: 1 |