ci.yml 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. name: 'CI'
  2. on:
  3. push:
  4. paths-ignore:
  5. - 'wiki/**'
  6. - 'wiki_static/**'
  7. env:
  8. TARGET_VERSION: f5
  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: make -j$(nproc) -C bootloader TARGET=${TARGET_VERSION}
  39. - name: Generate dfu file for bootloader
  40. uses: ./.github/actions/docker
  41. with:
  42. run: hex2dfu -i bootloader/.obj/${TARGET_VERSION}/bootloader.hex -o bootloader/.obj/${TARGET_VERSION}/bootloader.dfu
  43. - name: Build firmware in docker
  44. uses: ./.github/actions/docker
  45. with:
  46. run: make -j$(nproc) -C firmware TARGET=${TARGET_VERSION} APP_RELEASE=1
  47. - name: Generate dfu file for firmware
  48. uses: ./.github/actions/docker
  49. with:
  50. run: hex2dfu -i firmware/.obj/${TARGET_VERSION}/firmware.hex -o firmware/.obj/${TARGET_VERSION}/firmware.dfu
  51. - name: Generate full hex file
  52. uses: ./.github/actions/docker
  53. with:
  54. run: srec_cat bootloader/.obj/${TARGET_VERSION}/bootloader.hex -Intel firmware/.obj/${TARGET_VERSION}/firmware.hex -Intel -o full.hex -Intel
  55. - name: Move upload files
  56. uses: ./.github/actions/docker
  57. with:
  58. run: |
  59. mv bootloader/.obj/${TARGET_VERSION}/bootloader.dfu bootloader.dfu
  60. mv bootloader/.obj/${TARGET_VERSION}/bootloader.bin bootloader.bin
  61. mv firmware/.obj/${TARGET_VERSION}/firmware.dfu firmware.dfu
  62. mv firmware/.obj/${TARGET_VERSION}/firmware.bin firmware.bin
  63. - name: Generate full dfu file
  64. uses: ./.github/actions/docker
  65. with:
  66. run: hex2dfu -i full.hex -o full.dfu
  67. - name: Copy bootloader for full.bin
  68. run: cp bootloader.bin full.bin
  69. - name: Truncate full.bin
  70. run: truncate -s 32768 full.bin
  71. - name: Add firmware.bin at full.bin
  72. run: cat firmware.bin >> full.bin
  73. - name: Publish artifacts
  74. uses: actions/upload-artifact@v2
  75. with:
  76. name: artifacts
  77. path: |
  78. bootloader.dfu
  79. bootloader.bin
  80. firmware.dfu
  81. firmware.bin
  82. full.dfu
  83. full.bin
  84. if-no-files-found: error
  85. retention-days: 7
  86. upload:
  87. name: Upload artifacts to external storage
  88. needs: build
  89. runs-on: [self-hosted]
  90. steps:
  91. - name: Make empty dir
  92. run: mkdir -p empty
  93. - name: Clear upload dir
  94. uses: burnett01/rsync-deployments@4.1
  95. with:
  96. switches: -cvzr --delete
  97. path: empty/
  98. remote_path: "${{ secrets.RSYNC_DEPLOY_BASE_PATH }}${GITHUB_REF##*/}/"
  99. remote_host: ${{ secrets.RSYNC_DEPLOY_HOST }}
  100. remote_port: ${{ secrets.RSYNC_DEPLOY_PORT }}
  101. remote_user: ${{ secrets.RSYNC_DEPLOY_USER }}
  102. remote_key: ${{ secrets.RSYNC_DEPLOY_KEY }}
  103. - name: Generate files list
  104. run: ls bootloader.dfu firmware.dfu full.dfu bootloader.bin firmware.bin full.bin > uploadlist.txt
  105. - name: Upload artifacts
  106. uses: burnett01/rsync-deployments@4.1
  107. with:
  108. switches: -cvzr --delete --files-from=uploadlist.txt
  109. remote_path: "${{ secrets.RSYNC_DEPLOY_BASE_PATH }}${GITHUB_REF##*/}/"
  110. remote_host: ${{ secrets.RSYNC_DEPLOY_HOST }}
  111. remote_port: ${{ secrets.RSYNC_DEPLOY_PORT }}
  112. remote_user: ${{ secrets.RSYNC_DEPLOY_USER }}
  113. remote_key: ${{ secrets.RSYNC_DEPLOY_KEY }}
  114. genpic:
  115. name: Generate pic
  116. needs: upload
  117. if: github.ref == 'refs/heads/master'
  118. runs-on: [self-hosted]
  119. steps:
  120. - name: Set test env
  121. run: echo "NUMBER_OF_COMMITS=$(git rev-list --count HEAD)" >> $GITHUB_ENV
  122. - name: Test output NUMBER_OF_COMMITS
  123. run: echo $NUMBER_OF_COMMITS
  124. - name: Test output date
  125. run: |
  126. GET_DATE=$(date +"%b %d")
  127. PREP_DATE=$(echo "${GET_DATE^^}")
  128. echo "PREP_DATE=$PREP_DATE" >> $GITHUB_ENV
  129. - name: Test output PREP_DATE
  130. run: echo $PREP_DATE
  131. - name: Gen pic
  132. uses: ./.github/actions/docker
  133. with:
  134. 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
  135. - name: Upload pic
  136. uses: burnett01/rsync-deployments@4.1
  137. with:
  138. switches: -avzp --delete
  139. path: latest-firmware-banner.png
  140. remote_path: "${{ secrets.RSYNC_DEPLOY_BASE_PATH }}/"
  141. remote_host: ${{ secrets.RSYNC_DEPLOY_HOST }}
  142. remote_port: ${{ secrets.RSYNC_DEPLOY_PORT }}
  143. remote_user: ${{ secrets.RSYNC_DEPLOY_USER }}
  144. remote_key: ${{ secrets.RSYNC_DEPLOY_KEY }}