release.yml 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. name: Release automation
  2. on:
  3. workflow_dispatch:
  4. inputs:
  5. commit_id:
  6. description: 'Commit ID to tag and create a release for'
  7. required: true
  8. version_number:
  9. description: 'Release Version Number (Eg, v1.0.0)'
  10. required: true
  11. delete_existing_tag_release:
  12. description: 'Is this a re-release of existing tag/release? (Default: false)'
  13. default: 'false'
  14. required: false
  15. jobs:
  16. clean-existing-tag-and-release:
  17. if: ${{ github.event.inputs.delete_existing_tag_release == 'true' }}
  18. runs-on: ubuntu-latest
  19. env:
  20. VERSION_NUM: ${{ github.event.inputs.version_number }}
  21. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  22. steps:
  23. - name: Checkout code
  24. uses: actions/checkout@v3
  25. - name: Check if tag exists
  26. run: |
  27. git fetch origin
  28. if git tag --list $VERSION_NUM
  29. then
  30. echo "Deleting existing tag for $VERSION_NUM"
  31. git push origin --delete tags/$VERSION_NUM
  32. fi
  33. - name: Check if release exists
  34. run: |
  35. sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key 23F3D4EA75716059
  36. sudo apt-add-repository https://cli.github.com/packages
  37. sudo apt update
  38. sudo apt-get install gh
  39. if gh release list | grep $VERSION_NUM
  40. then
  41. echo "Deleting existing release for $VERSION_NUM"
  42. gh release delete --yes $VERSION_NUM
  43. fi
  44. add-sbom-and-tag-commit:
  45. if: ${{ ( github.event.inputs.delete_existing_tag_release == 'true' && success() ) || ( github.event.inputs.delete_existing_tag_release == 'false' && always() ) }}
  46. needs: clean-existing-tag-and-release
  47. name: Tag commit
  48. runs-on: ubuntu-latest
  49. steps:
  50. - name: Checkout code
  51. uses: actions/checkout@v3
  52. with:
  53. ref: ${{ github.event.inputs.commit_id }}
  54. - name: Configure git identity
  55. run: |
  56. git config --global user.name ${{ github.actor }}
  57. git config --global user.email ${{ github.actor }}@users.noreply.github.com
  58. - name: create a new branch that references commit id
  59. run: git checkout -b ${{ github.event.inputs.version_number }} ${{ github.event.inputs.commit_id }}
  60. - name: Generate SBOM
  61. uses: FreeRTOS/CI-CD-Github-Actions/sbom-generator@main
  62. with:
  63. repo_path: ./
  64. source_path: ./source
  65. - name: commit SBOM file
  66. run: |
  67. git add .
  68. git commit -m 'Update SBOM'
  69. git push -u origin ${{ github.event.inputs.version_number }}
  70. - name: Tag Commit and Push to remote
  71. run: |
  72. git tag ${{ github.event.inputs.version_number }} -a -m "coreMQTT Library ${{ github.event.inputs.version_number }}"
  73. git push origin --tags
  74. - name: Verify tag on remote
  75. run: |
  76. git tag -d ${{ github.event.inputs.version_number }}
  77. git remote update
  78. git checkout tags/${{ github.event.inputs.version_number }}
  79. git diff ${{ github.event.inputs.commit_id }} tags/${{ github.event.inputs.version_number }}
  80. create-zip:
  81. if: ${{ ( github.event.inputs.delete_existing_tag_release == 'true' && success() ) || ( github.event.inputs.delete_existing_tag_release == 'false' && always() ) }}
  82. needs: add-sbom-and-tag-commit
  83. name: Create ZIP and verify package for release asset.
  84. runs-on: ubuntu-latest
  85. steps:
  86. - name: Install ZIP tools
  87. run: sudo apt-get install zip unzip
  88. - name: Checkout code
  89. uses: actions/checkout@v3
  90. with:
  91. ref: ${{ github.event.inputs.commit_id }}
  92. path: coreMQTT
  93. submodules: recursive
  94. - name: Checkout disabled submodules
  95. run: |
  96. cd coreMQTT
  97. git submodule update --init --checkout --recursive
  98. - name: Create ZIP
  99. run: |
  100. zip -r coreMQTT-${{ github.event.inputs.version_number }}.zip coreMQTT -x "*.git*"
  101. ls ./
  102. - name: Validate created ZIP
  103. run: |
  104. mkdir zip-check
  105. mv coreMQTT-${{ github.event.inputs.version_number }}.zip zip-check
  106. cd zip-check
  107. unzip coreMQTT-${{ github.event.inputs.version_number }}.zip -d coreMQTT-${{ github.event.inputs.version_number }}
  108. ls coreMQTT-${{ github.event.inputs.version_number }}
  109. diff -r -x "*.git*" coreMQTT-${{ github.event.inputs.version_number }}/coreMQTT/ ../coreMQTT/
  110. cd ../
  111. - name: Build
  112. run: |
  113. cd zip-check/coreMQTT-${{ github.event.inputs.version_number }}/coreMQTT
  114. sudo apt-get install -y lcov
  115. cmake -S test -B build/ \
  116. -G "Unix Makefiles" \
  117. -DCMAKE_BUILD_TYPE=Debug \
  118. -DBUILD_CLONE_SUBMODULES=ON \
  119. -DCMAKE_C_FLAGS='--coverage -Wall -Wextra -Werror -DNDEBUG'
  120. make -C build/ all
  121. - name: Test
  122. run: |
  123. cd zip-check/coreMQTT-${{ github.event.inputs.version_number }}/coreMQTT/build/
  124. ctest -E system --output-on-failure
  125. cd ..
  126. - name: Create artifact of ZIP
  127. uses: actions/upload-artifact@v2
  128. with:
  129. name: coreMQTT-${{ github.event.inputs.version_number }}.zip
  130. path: zip-check/coreMQTT-${{ github.event.inputs.version_number }}.zip
  131. deploy-doxygen:
  132. needs: add-sbom-and-tag-commit
  133. if: ${{ ( github.event.inputs.delete_existing_tag_release == 'true' && success() ) || ( github.event.inputs.delete_existing_tag_release == 'false' && always() ) }}
  134. name: Deploy doxygen documentation
  135. runs-on: ubuntu-latest
  136. steps:
  137. - name: Doxygen generation
  138. uses: FreeRTOS/CI-CD-Github-Actions/doxygen-generation@main
  139. with:
  140. ref: ${{ github.event.inputs.version_number }}
  141. add_release: "true"
  142. create-release:
  143. needs:
  144. - create-zip
  145. - deploy-doxygen
  146. if: ${{ ( github.event.inputs.delete_existing_tag_release == 'true' && success() ) || ( github.event.inputs.delete_existing_tag_release == 'false' && always() ) }}
  147. name: Create Release and Upload Release Asset
  148. runs-on: ubuntu-latest
  149. steps:
  150. - name: Create Release
  151. id: create_release
  152. uses: actions/create-release@v1
  153. env:
  154. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  155. with:
  156. tag_name: ${{ github.event.inputs.version_number }}
  157. release_name: ${{ github.event.inputs.version_number }}
  158. body: Release ${{ github.event.inputs.version_number }} of the coreMQTT Library.
  159. draft: false
  160. prerelease: false
  161. - name: Download ZIP artifact
  162. uses: actions/download-artifact@v2
  163. with:
  164. name: coreMQTT-${{ github.event.inputs.version_number }}.zip
  165. - name: Upload Release Asset
  166. id: upload-release-asset
  167. uses: actions/upload-release-asset@v1
  168. env:
  169. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  170. with:
  171. upload_url: ${{ steps.create_release.outputs.upload_url }}
  172. asset_path: ./coreMQTT-${{ github.event.inputs.version_number }}.zip
  173. asset_name: coreMQTT-${{ github.event.inputs.version_number }}.zip
  174. asset_content_type: application/zip