ci.yml 6.1 KB

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