ci.yml 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. name: 'CI'
  2. on: push
  3. env:
  4. TARGETS: f5 f6
  5. jobs:
  6. build:
  7. runs-on: [self-hosted]
  8. steps:
  9. - name: Cleanup workspace
  10. uses: AutoModality/action-clean@v1
  11. - name: Checkout code
  12. uses: actions/checkout@v2
  13. with:
  14. fetch-depth: 0
  15. - name: Checkout submodules
  16. run: git submodule update --init --recursive
  17. - name: Checkout submodules
  18. run: git submodule sync
  19. - uses: satackey/action-docker-layer-caching@v0.0.11
  20. continue-on-error: true
  21. with:
  22. key: docker-cache-${{ hashFiles('docker/**') }}-{hash}
  23. restore-keys: docker-cache-${{ hashFiles('docker/**') }}-
  24. - name: Build docker image
  25. uses: ./.github/actions/docker
  26. - name: Check syntax
  27. uses: ./.github/actions/docker
  28. continue-on-error: false
  29. with:
  30. run: /syntax_check.sh
  31. - name: Build bootloader in docker
  32. uses: ./.github/actions/docker
  33. with:
  34. run: for TARGET in ${TARGETS}; do make -j$(nproc) -C bootloader TARGET=${TARGET}; done
  35. - name: Generate dfu file for bootloader
  36. uses: ./.github/actions/docker
  37. with:
  38. run: for TARGET in ${TARGETS}; do hex2dfu -i bootloader/.obj/${TARGET}/bootloader.hex -o bootloader/.obj/${TARGET}/bootloader.dfu; done
  39. - name: Build firmware in docker
  40. uses: ./.github/actions/docker
  41. with:
  42. run: for TARGET in ${TARGETS}; do make -j$(nproc) -C firmware TARGET=${TARGET}; done
  43. - name: Generate dfu file for firmware
  44. uses: ./.github/actions/docker
  45. with:
  46. run: for TARGET in ${TARGETS}; do hex2dfu -i firmware/.obj/${TARGET}/firmware.hex -o firmware/.obj/${TARGET}/firmware.dfu; done
  47. - name: Generate full hex file
  48. uses: ./.github/actions/docker
  49. with:
  50. run: |
  51. for TARGET in ${TARGETS}; do
  52. srec_cat bootloader/.obj/${TARGET}/bootloader.hex -Intel firmware/.obj/${TARGET}/firmware.hex -Intel -o ${TARGET}_full.hex -Intel
  53. done
  54. - name: Move upload files
  55. uses: ./.github/actions/docker
  56. with:
  57. run: |
  58. for TARGET in ${TARGETS}; do
  59. mv bootloader/.obj/${TARGET}/bootloader.dfu ${TARGET}_bootloader.dfu
  60. mv bootloader/.obj/${TARGET}/bootloader.bin ${TARGET}_bootloader.bin
  61. mv bootloader/.obj/${TARGET}/bootloader.elf ${TARGET}_bootloader.elf
  62. mv firmware/.obj/${TARGET}/firmware.dfu ${TARGET}_firmware.dfu
  63. mv firmware/.obj/${TARGET}/firmware.bin ${TARGET}_firmware.bin
  64. mv firmware/.obj/${TARGET}/firmware.elf ${TARGET}_firmware.elf
  65. done
  66. - name: Generate full dfu file
  67. uses: ./.github/actions/docker
  68. with:
  69. run: for TARGET in ${TARGETS}; do hex2dfu -i ${TARGET}_full.hex -o ${TARGET}_full.dfu; done
  70. - name: Copy bootloader for full.bin
  71. run: for TARGET in ${TARGETS}; do cp ${TARGET}_bootloader.bin ${TARGET}_full.bin; done
  72. - name: Truncate full.bin
  73. run: for TARGET in ${TARGETS}; do truncate -s 32768 ${TARGET}_full.bin; done
  74. - name: Add firmware.bin at full.bin
  75. run: for TARGET in ${TARGETS}; do cat ${TARGET}_firmware.bin >> ${TARGET}_full.bin; done
  76. - name: Copy last target to full.dfu
  77. run: cp ${TARGETS##*" "}_full.dfu full.dfu
  78. - name: Publish artifacts
  79. uses: actions/upload-artifact@v2
  80. with:
  81. name: artifacts
  82. path: |
  83. *_bootloader.dfu
  84. *_bootloader.bin
  85. *_firmware.dfu
  86. *_firmware.bin
  87. *_full.dfu
  88. *_full.bin
  89. full.dfu
  90. if-no-files-found: error
  91. retention-days: 7
  92. upload:
  93. name: Upload artifacts to external storage
  94. needs: build
  95. runs-on: [self-hosted]
  96. steps:
  97. - name: Make empty dir
  98. run: mkdir -p empty
  99. - name: Clear upload dir
  100. uses: burnett01/rsync-deployments@4.1
  101. with:
  102. switches: -cvzr --delete
  103. path: empty/
  104. remote_path: "${{ secrets.RSYNC_DEPLOY_BASE_PATH }}${GITHUB_REF##*/}/"
  105. remote_host: ${{ secrets.RSYNC_DEPLOY_HOST }}
  106. remote_port: ${{ secrets.RSYNC_DEPLOY_PORT }}
  107. remote_user: ${{ secrets.RSYNC_DEPLOY_USER }}
  108. remote_key: ${{ secrets.RSYNC_DEPLOY_KEY }}
  109. - name: Generate files list
  110. run: ls *_bootloader.dfu *_firmware.dfu *_full.dfu *_bootloader.bin *_firmware.bin *_full.bin *_bootloader.elf *_firmware.elf full.dfu > uploadlist.txt
  111. - name: Upload artifacts
  112. uses: burnett01/rsync-deployments@4.1
  113. with:
  114. switches: -cvzr --delete --files-from=uploadlist.txt
  115. remote_path: "${{ secrets.RSYNC_DEPLOY_BASE_PATH }}${GITHUB_REF##*/}/"
  116. remote_host: ${{ secrets.RSYNC_DEPLOY_HOST }}
  117. remote_port: ${{ secrets.RSYNC_DEPLOY_PORT }}
  118. remote_user: ${{ secrets.RSYNC_DEPLOY_USER }}
  119. remote_key: ${{ secrets.RSYNC_DEPLOY_KEY }}
  120. genpic:
  121. name: Generate pic
  122. needs: upload
  123. if: github.ref == 'refs/heads/dev'
  124. runs-on: [self-hosted]
  125. steps:
  126. - name: Set test env
  127. run: echo "NUMBER_OF_COMMITS=$(git rev-list --count HEAD)" >> $GITHUB_ENV
  128. - name: Test output NUMBER_OF_COMMITS
  129. run: echo $NUMBER_OF_COMMITS
  130. - name: Test output date
  131. run: |
  132. GET_DATE=$(date +"%b %d")
  133. PREP_DATE=$(echo "${GET_DATE^^}")
  134. echo "PREP_DATE=$PREP_DATE" >> $GITHUB_ENV
  135. - name: Test output PREP_DATE
  136. run: echo $PREP_DATE
  137. - name: Gen pic
  138. uses: ./.github/actions/docker
  139. with:
  140. run: convert ./.github/assets/latest-firmware-template.png -font ./.github/assets/Born2bSportyV2.ttf -weight 700 -pointsize 140 -annotate +900+330 "$NUMBER_OF_COMMITS $PREP_DATE" latest-firmware-banner.png
  141. - name: Upload pic
  142. uses: burnett01/rsync-deployments@4.1
  143. with:
  144. switches: -avzp --delete
  145. path: latest-firmware-banner.png
  146. remote_path: "${{ secrets.RSYNC_DEPLOY_BASE_PATH }}/"
  147. remote_host: ${{ secrets.RSYNC_DEPLOY_HOST }}
  148. remote_port: ${{ secrets.RSYNC_DEPLOY_PORT }}
  149. remote_user: ${{ secrets.RSYNC_DEPLOY_USER }}
  150. remote_key: ${{ secrets.RSYNC_DEPLOY_KEY }}