release-process_release-candidate.yml 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. name: Prepare Release Candidate
  2. run-name: Release Candidate for Cura ${{ inputs.cura_version }} by @${{ github.actor }}
  3. on:
  4. workflow_dispatch:
  5. inputs:
  6. cura_version:
  7. description: 'Cura version number, e.g. 5.7.0, 5.7.2 or 5.8.0-beta.2'
  8. required: true
  9. type: string
  10. jobs:
  11. parse-version:
  12. name: Parse input version string
  13. runs-on: ubuntu-latest
  14. outputs:
  15. version_major: ${{ steps.version_parser.outputs.major }}
  16. version_minor: ${{ steps.version_parser.outputs.minor }}
  17. version_patch: ${{ steps.version_parser.outputs.patch }}
  18. branch_name: ${{ steps.version_parser.outputs.major }}.${{ steps.version_parser.outputs.minor }}
  19. steps:
  20. - name: Parse version string
  21. id: version_parser
  22. uses: booxmedialtd/ws-action-parse-semver@v1.4.7
  23. with:
  24. input_string: ${{ inputs.cura_version }}
  25. freeze-packages-versions:
  26. name: Freeze packges versions
  27. uses: Ultimaker/Cura-workflows/.github/workflows/cura-set-packages-versions.yml@main
  28. needs: [parse-version]
  29. with:
  30. cura_version: ${{ inputs.cura_version }}
  31. create_feature_branch: false
  32. secrets: inherit
  33. find-rc-tag:
  34. name: Find RC tag name
  35. runs-on: ubuntu-latest
  36. needs: [freeze-packages-versions]
  37. outputs:
  38. tag_name: ${{ steps.find-available-tag-name.outputs.tag_name }}
  39. steps:
  40. - name: Checkout repo
  41. uses: actions/checkout@v4
  42. with:
  43. fetch-tags: true
  44. fetch-depth: 0
  45. - name: Find available tag name
  46. id: find-available-tag-name
  47. run: |
  48. VERSION=${{ inputs.cura_version }}
  49. RC_INDEX=0
  50. while
  51. RC_INDEX=$((RC_INDEX+1))
  52. TAG_NAME="$VERSION-RC$RC_INDEX"
  53. [[ $(git tag -l "$TAG_NAME") ]]
  54. do true; done
  55. echo "tag_name=$TAG_NAME" >> "$GITHUB_OUTPUT"
  56. create-tags:
  57. name: Create tags
  58. runs-on: ubuntu-latest
  59. needs: [parse-version, find-rc-tag]
  60. outputs:
  61. main_commit: ${{ steps.export-main-commit.outputs.main_commit }}
  62. strategy:
  63. matrix:
  64. repository: [Cura, Uranium, CuraEngine, cura-binary-data, fdm_materials]
  65. steps:
  66. - name: Checkout repo
  67. uses: actions/checkout@v4
  68. with:
  69. repository: Ultimaker/${{ matrix.repository }}
  70. ref: ${{ needs.parse-version.outputs.branch_name }}
  71. token: ${{ secrets.CURA_AUTORELEASE_PAT }}
  72. - name: Create RC tag
  73. run: |
  74. git tag ${{ needs.find-rc-tag.outputs.tag_name }}
  75. git push origin tag ${{ needs.find-rc-tag.outputs.tag_name }}
  76. - name: Create or update release tag
  77. run: |
  78. git tag -f ${{ inputs.cura_version }}
  79. git push -f origin tag ${{ inputs.cura_version }}
  80. - name: Export Cura tagged commit
  81. id: export-main-commit
  82. if: ${{ matrix.repository == 'Cura' }}
  83. run: |
  84. echo "main_commit=`git rev-parse HEAD`" >> "$GITHUB_OUTPUT"
  85. create-dependencies-packages:
  86. name: Create conan packages for dependencies
  87. uses: ultimaker/cura-workflows/.github/workflows/conan-package-release.yml@main
  88. needs: [parse-version, freeze-packages-versions]
  89. strategy:
  90. matrix:
  91. repository: [Cura, Uranium, CuraEngine, cura-binary-data, fdm_materials]
  92. include:
  93. - conan_recipe_root: "."
  94. - repository: Cura
  95. conan_recipe_root: "resources"
  96. with:
  97. repository: ${{ matrix.repository }}
  98. ref_name: ${{ needs.parse-version.outputs.branch_name }}
  99. version: ${{ inputs.cura_version }}
  100. conan_release: true
  101. conan_user_channel: ultimaker/stable
  102. conan_internal: false
  103. conan_latest: true
  104. conan_recipe_root: ${{ matrix.conan_recipe_root }}
  105. secrets: inherit
  106. create-cura-package:
  107. name: Create conan package for Cura
  108. uses: ultimaker/cura-workflows/.github/workflows/conan-package-release.yml@main
  109. needs: [parse-version, create-dependencies-packages]
  110. with:
  111. repository: Cura
  112. ref_name: ${{ needs.parse-version.outputs.branch_name }}
  113. version: ${{ inputs.cura_version }}
  114. conan_release: true
  115. conan_user_channel: ultimaker/stable
  116. conan_internal: false
  117. conan_latest: true
  118. secrets: inherit
  119. create-installers:
  120. name: Create installers
  121. uses: ./.github/workflows/installers.yml
  122. needs: [parse-version, create-cura-package]
  123. with:
  124. cura_conan_version: cura/${{ inputs.cura_version }}@/
  125. enterprise: false
  126. staging: false
  127. nightly: false
  128. secrets: inherit
  129. create-release-draft:
  130. name: Create the release draft
  131. runs-on: ubuntu-latest
  132. needs: [create-installers, parse-version, create-tags]
  133. steps:
  134. - name: Checkout Cura repo
  135. uses: actions/checkout@v4
  136. with:
  137. ref: ${{ needs.parse-version.outputs.branch_name }}
  138. - name: Extract changelog
  139. run: python ./scripts/extract_changelog.py --version ${{ needs.parse-version.outputs.version_major }}.${{ needs.parse-version.outputs.version_minor }}.${{ needs.parse-version.outputs.version_patch }} --changelog ./resources/texts/change_log.txt > formatted_changelog.txt
  140. - name: Create release
  141. uses: notpeelz/action-gh-create-release@v5.0.1
  142. with:
  143. target: ${{ needs.create-tags.outputs.main_commit }}
  144. tag: ${{ inputs.cura_version }}
  145. strategy: replace
  146. title: UltiMaker Cura ${{ inputs.cura_version }}
  147. draft: true
  148. body-source: file
  149. body: formatted_changelog.txt
  150. - name: Download artifacts
  151. uses: actions/download-artifact@v4.1.7
  152. with:
  153. path: artifacts
  154. merge-multiple: true
  155. - name: Upload artifacts
  156. working-directory: artifacts
  157. run: |
  158. gh release upload ${{ inputs.cura_version }} UltiMaker-Cura-${{ inputs.cura_version }}-linux-X64.AppImage --clobber
  159. gh release upload ${{ inputs.cura_version }} UltiMaker-Cura-${{ inputs.cura_version }}-linux-X64.AppImage.asc --clobber
  160. gh release upload ${{ inputs.cura_version }} UltiMaker-Cura-${{ inputs.cura_version }}-macos-ARM64.dmg --clobber
  161. gh release upload ${{ inputs.cura_version }} UltiMaker-Cura-${{ inputs.cura_version }}-macos-ARM64.pkg --clobber
  162. gh release upload ${{ inputs.cura_version }} UltiMaker-Cura-${{ inputs.cura_version }}-macos-X64.dmg --clobber
  163. gh release upload ${{ inputs.cura_version }} UltiMaker-Cura-${{ inputs.cura_version }}-macos-X64.pkg --clobber
  164. gh release upload ${{ inputs.cura_version }} UltiMaker-Cura-${{ inputs.cura_version }}-win64-X64.exe --clobber
  165. gh release upload ${{ inputs.cura_version }} UltiMaker-Cura-${{ inputs.cura_version }}-win64-X64.msi --clobber
  166. env:
  167. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}