ci.yml 5.3 KB

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