release.yml 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. name: release
  2. on:
  3. push:
  4. tags:
  5. - 'v*'
  6. permissions:
  7. contents: write
  8. jobs:
  9. release:
  10. if: startsWith(github.ref, 'refs/tags/')
  11. runs-on: ubuntu-latest
  12. steps:
  13. - name: Build Changelog
  14. id: github_release
  15. uses: mikepenz/release-changelog-builder-action@v3
  16. env:
  17. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  18. with:
  19. configurationJson: |
  20. {
  21. "template": "#{{CHANGELOG}}\n\n<details>\n<summary>",
  22. "pr_template": "- #{{TITLE}} ##{{NUMBER}} (Thanks @#{{AUTHOR}})",
  23. "categories": [
  24. {
  25. "title": "## 🚀 Features",
  26. "labels": ["feature"]
  27. },
  28. {
  29. "title": "## ✨ Enhancement",
  30. "labels": ["enhancement"]
  31. },
  32. {
  33. "title": "## 🐛 Fixes",
  34. "labels": ["fix"]
  35. },
  36. {
  37. "title": "## 💬 Other",
  38. "labels": ["other"]
  39. }
  40. ]
  41. }
  42. - name: Create Release
  43. id: create_release
  44. uses: mikepenz/action-gh-release@v0.2.0-a03
  45. with:
  46. body: ${{steps.github_release.outputs.changelog}}
  47. draft: true
  48. - name: Create release url file
  49. run: echo "${{ steps.create_release.outputs.upload_url }}" > release_url.txt
  50. - name: Save release url file for publish
  51. uses: actions/upload-artifact@v1
  52. with:
  53. name: release_url
  54. path: release_url.txt
  55. publish:
  56. needs: [release]
  57. strategy:
  58. matrix:
  59. os: [macos-latest, ubuntu-latest, windows-latest]
  60. runs-on: ${{ matrix.os }}
  61. steps:
  62. - uses: actions/checkout@v2
  63. with:
  64. submodules: true
  65. - uses: conda-incubator/setup-miniconda@v3
  66. with:
  67. auto-update-conda: true
  68. python-version: '3.7'
  69. - name: Install main
  70. shell: bash -l {0}
  71. run: |
  72. pip install .
  73. - name: Run pyinstaller
  74. shell: bash -l {0}
  75. run: |
  76. pip install pyinstaller
  77. pyinstaller labelme.spec
  78. - name: Load release url file from release job
  79. uses: actions/download-artifact@v1
  80. with:
  81. name: release_url
  82. - name: Get release file name & upload url
  83. id: get_release_info
  84. run: |
  85. echo "::set-output name=upload_url::$(cat release_url/release_url.txt)"
  86. - name: Upload release executable on macOS & Linux
  87. id: upload_release_executable_macos_linux
  88. uses: actions/upload-release-asset@v1
  89. env:
  90. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  91. with:
  92. upload_url: ${{ steps.get_release_info.outputs.upload_url }}
  93. asset_path: ./dist/labelme
  94. asset_name: labelme-${{ runner.os }}
  95. asset_content_type: application/octet-stream
  96. if: runner.os != 'Windows'
  97. - name: Upload release executable on Windows
  98. id: upload_release_executable_windows
  99. uses: actions/upload-release-asset@v1
  100. env:
  101. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  102. with:
  103. upload_url: ${{ steps.get_release_info.outputs.upload_url }}
  104. asset_path: ./dist/labelme.exe
  105. asset_name: Labelme.exe
  106. asset_content_type: application/octet-stream
  107. if: runner.os == 'Windows'
  108. - name: Create dmg for macOS
  109. run: |
  110. npm install -g create-dmg
  111. cd dist
  112. create-dmg Labelme.app || test -f Labelme\ 0.0.0.dmg
  113. mv Labelme\ 0.0.0.dmg Labelme.dmg
  114. if: runner.os == 'macOS'
  115. - name: Upload release app on macOS
  116. id: upload_release_app_macos
  117. uses: actions/upload-release-asset@v1
  118. env:
  119. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  120. with:
  121. upload_url: ${{ steps.get_release_info.outputs.upload_url }}
  122. asset_path: ./dist/Labelme.dmg
  123. asset_name: Labelme.dmg
  124. asset_content_type: application/octet-stream
  125. if: runner.os == 'macOS'