build.yml 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. name: 'Build'
  2. on:
  3. push:
  4. branches:
  5. - dev
  6. - "release*"
  7. tags:
  8. - '*'
  9. pull_request:
  10. env:
  11. TARGETS: f6
  12. jobs:
  13. build:
  14. runs-on: [self-hosted]
  15. steps:
  16. - name: 'Cleanup workspace'
  17. uses: AutoModality/action-clean@v1
  18. - name: 'Decontaminate previous build leftovers'
  19. run: |
  20. if [ -d .git ]
  21. then
  22. git submodule status \
  23. || git checkout `git rev-list --max-parents=0 HEAD | tail -n 1`
  24. fi
  25. - name: 'Checkout code'
  26. uses: actions/checkout@v2
  27. with:
  28. fetch-depth: 0
  29. submodules: true
  30. - name: 'Docker cache'
  31. uses: satackey/action-docker-layer-caching@v0.0.11
  32. continue-on-error: true
  33. with:
  34. key: docker-cache-${{ hashFiles('docker/**') }}-{hash}
  35. restore-keys: docker-cache-${{ hashFiles('docker/**') }}-
  36. - name: 'Build docker image'
  37. uses: ./.github/actions/docker
  38. - name: 'Make artifacts directory'
  39. run: |
  40. test -d artifacts && rm -rf artifacts || true
  41. mkdir artifacts
  42. - name: 'Generate suffix and folder name'
  43. run: |
  44. REF=${{ github.ref }}
  45. if [[ ${{ github.event_name }} == 'pull_request' ]]; then
  46. REF=${{ github.head_ref }}
  47. fi
  48. REF=${REF##*/}
  49. if [[ "${{ github.ref }}" == "refs/tags/"* ]]; then
  50. SUFFIX=${REF}
  51. else
  52. SUFFIX=${REF}-$(date +'%d%m%Y')-$(echo ${GITHUB_SHA} | cut -c1-8)
  53. fi
  54. echo "SUFFIX=${SUFFIX}" >> $GITHUB_ENV
  55. echo "ARTIFACTS_PATH=${REF}" >> $GITHUB_ENV
  56. - name: 'Build bootloader in docker'
  57. uses: ./.github/actions/docker
  58. with:
  59. run: |
  60. for TARGET in ${TARGETS}
  61. do
  62. make -j$(nproc) -C bootloader TARGET=${TARGET}
  63. done
  64. - name: 'Build firmware in docker'
  65. uses: ./.github/actions/docker
  66. with:
  67. run: |
  68. for TARGET in ${TARGETS}
  69. do
  70. make -j$(nproc) -C firmware TARGET=${TARGET}
  71. done
  72. - name: 'Generate full hex file'
  73. if: ${{ !github.event.pull_request.head.repo.fork }}
  74. uses: ./.github/actions/docker
  75. with:
  76. run: |
  77. for TARGET in ${TARGETS}
  78. do
  79. srec_cat \
  80. bootloader/.obj/${TARGET}/bootloader.hex -Intel \
  81. firmware/.obj/${TARGET}/firmware.hex -Intel \
  82. -o firmware/.obj/${TARGET}/full.hex -Intel
  83. done
  84. - name: 'Move upload files'
  85. if: ${{ !github.event.pull_request.head.repo.fork }}
  86. uses: ./.github/actions/docker
  87. with:
  88. run: |
  89. for TARGET in ${TARGETS}
  90. do
  91. mv bootloader/.obj/${TARGET}/bootloader.dfu \
  92. artifacts/flipper-z-${TARGET}-bootloader-${SUFFIX}.dfu
  93. mv bootloader/.obj/${TARGET}/bootloader.bin \
  94. artifacts/flipper-z-${TARGET}-bootloader-${SUFFIX}.bin
  95. mv bootloader/.obj/${TARGET}/bootloader.elf \
  96. artifacts/flipper-z-${TARGET}-bootloader-${SUFFIX}.elf
  97. mv firmware/.obj/${TARGET}/firmware.dfu \
  98. artifacts/flipper-z-${TARGET}-firmware-${SUFFIX}.dfu
  99. mv firmware/.obj/${TARGET}/firmware.bin \
  100. artifacts/flipper-z-${TARGET}-firmware-${SUFFIX}.bin
  101. mv firmware/.obj/${TARGET}/firmware.elf \
  102. artifacts/flipper-z-${TARGET}-firmware-${SUFFIX}.elf
  103. done
  104. - name: 'Generate full dfu file'
  105. if: ${{ !github.event.pull_request.head.repo.fork }}
  106. uses: ./.github/actions/docker
  107. with:
  108. run: |
  109. for TARGET in ${TARGETS}
  110. do
  111. hex2dfu \
  112. -i firmware/.obj/${TARGET}/full.hex \
  113. -o artifacts/flipper-z-${TARGET}-full-${SUFFIX}.dfu \
  114. -l "Flipper Zero $(echo $TARGET | tr a-z A-Z)"
  115. done
  116. - name: 'Full flash asssembly: bootloader as base'
  117. if: ${{ !github.event.pull_request.head.repo.fork }}
  118. run: |
  119. for TARGET in ${TARGETS}
  120. do
  121. cp \
  122. artifacts/flipper-z-${TARGET}-bootloader-${SUFFIX}.bin \
  123. artifacts/flipper-z-${TARGET}-full-${SUFFIX}.bin
  124. done
  125. - name: 'Full flash asssembly: bootloader padding'
  126. if: ${{ !github.event.pull_request.head.repo.fork }}
  127. run: |
  128. for TARGET in ${TARGETS}
  129. do
  130. truncate -s 32768 artifacts/flipper-z-${TARGET}-full-${SUFFIX}.bin
  131. done
  132. - name: 'Full flash asssembly: append firmware'
  133. if: ${{ !github.event.pull_request.head.repo.fork }}
  134. run: |
  135. for TARGET in ${TARGETS}
  136. do
  137. cat \
  138. artifacts/flipper-z-${TARGET}-firmware-${SUFFIX}.bin \
  139. >> artifacts/flipper-z-${TARGET}-full-${SUFFIX}.bin
  140. done
  141. - name: 'Bundle core2 firmware'
  142. if: ${{ !github.event.pull_request.head.repo.fork }}
  143. run: |
  144. test -d core2_firmware && rm -rf core2_firmware || true
  145. mkdir core2_firmware
  146. cp \
  147. lib/STM32CubeWB/package.xml \
  148. lib/STM32CubeWB/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_FUS_fw.bin \
  149. lib/STM32CubeWB/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_FUS_fw_for_fus_0_5_3.bin \
  150. lib/STM32CubeWB/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_BLE_Stack_full_fw.bin \
  151. core2_firmware
  152. tar czpf artifacts/flipper-z-any-core2_firmware-${SUFFIX}.tgz core2_firmware
  153. - name: 'Bundle scripts'
  154. if: ${{ !github.event.pull_request.head.repo.fork }}
  155. run: |
  156. tar czpf artifacts/flipper-z-any-scripts-${SUFFIX}.tgz scripts
  157. - name: 'Bundle resources'
  158. if: ${{ !github.event.pull_request.head.repo.fork }}
  159. run: |
  160. tar czpf artifacts/flipper-z-any-resources-${SUFFIX}.tgz -C assets resources
  161. - name: 'Upload artifacts to update server'
  162. if: ${{ !github.event.pull_request.head.repo.fork }}
  163. uses: burnett01/rsync-deployments@4.1
  164. with:
  165. switches: -avzP --delete
  166. path: artifacts/
  167. remote_path: "${{ secrets.RSYNC_DEPLOY_BASE_PATH }}${ARTIFACTS_PATH}/"
  168. remote_host: ${{ secrets.RSYNC_DEPLOY_HOST }}
  169. remote_port: ${{ secrets.RSYNC_DEPLOY_PORT }}
  170. remote_user: ${{ secrets.RSYNC_DEPLOY_USER }}
  171. remote_key: ${{ secrets.RSYNC_DEPLOY_KEY }}
  172. - name: 'Trigger update server reindex'
  173. if: ${{ !github.event.pull_request.head.repo.fork }}
  174. uses: wei/curl@master
  175. with:
  176. args: -X POST -F 'key=${{ secrets.REINDEX_KEY }}' ${{ secrets.REINDEX_URL }}