11# This workflow runs when a version tag is pushed.
22#
33# - Get new tag.
4- # - Build new release.
54# - If release tag:
6- # - Build release.
7- # - Generate GitHub release if build succeeds.
8- # - Upload wheel to GitHub release if build succeeds.
9- # - Upload wheel to Test PyPi if build succeeds. (Future)
10- # - Test install from Test PyPi. (Future)
11- # - Upload wheel to PyPi if test install succeeds. (Future)
12- name : Push Version Tag Workflow
5+ # - Get next semantic version.
6+ # - Close old milestones.
7+ # - Create new minor version milestone.
8+ # - Create new major version milestone.
9+ name : Version Tag Workflow
1310
1411on :
1512 push :
1613 tags :
1714 - ' v*'
1815
1916jobs :
20- request-release :
21- name : Request Release PR
17+ manage_milestones :
18+ name : Manage Milestones
2219 runs-on : ubuntu-latest
2320 steps :
2421 - name : Checkout repository
@@ -30,68 +27,42 @@ jobs:
3027 - name : Get new tag
3128 id : newversion
3229 run : |
33- new_tag=${GITHUB_REF/refs\/tags\//}
34- new_version=$(echo $new_tag | sed 's/.rc[0-9]*//')
35- echo "new_tag=$(echo $new_tag)" >> $GITHUB_OUTPUT
36- echo "new_version=$(echo $new_version)" >> $GITHUB_OUTPUT
37- echo "New tag is: $new_tag"
38- echo "New version is: $new_version"
30+ tag=${GITHUB_REF/refs\/tags\//}
31+ version=$(echo $new_tag | sed 's/.rc[0-9]*//')
32+ if [[ $tag != *"-rc"* ]]; then
33+ echo "do_milestones=1" >> $GITHUB_ENV
34+ echo "tag=$(echo $tag)" >> $GITHUB_OUTPUT
35+ echo "version=$(echo $version)" >> $GITHUB_OUTPUT
36+ fi
37+ echo "New tag is: $tag"
38+ echo "New version is: $version"
3939 echo "GitHub ref: ${{ github.ref }}"
4040
41- - name : Build release
42- id : build
43- run : |
44- pip install -U pip poetry twine
45- poetry build && twine check dist/* && echo "build_ok=1" >> $GITHUB_ENV
41+ - name : Get next semantic version
42+ id : nextversion
43+ if : ${{ env.do_milestones == 1 }}
44+ uses : WyriHaximus/github-action-next-semvers@v1.2.1
45+ with :
46+ version : ${{ steps.newversion.outputs.version }}
47+
48+ - name : Close old milestone
49+ if : ${{ env.do_milestones == 1 }}
50+ uses : WyriHaximus/github-action-close-milestone@master
51+ with :
52+ number : ${{ steps.relversion.outputs.version }}
4653
47- - name : Cut the release
48- id : cutrelease
49- if : ${{ !contains( steps.newversion.output.new_tag, 'rc' ) && env.build_ok == 1 }}
50- uses : release-drafter/release-drafter@v5
54+ - name : Create new minor release milestone
55+ if : ${{ env.do_milestones == 1 }}
56+ uses : WyriHaximus/github-action-create-milestone@v1.2.0
5157 with :
52- name : " v${{ steps.newversion.outputs.new_tag }}"
53- tag : " v${{ steps.newversion.outputs.new_tag }}"
54- version : " ${{ steps.newversion.outputs.new_tag }}"
55- prerelease : false
56- publish : true
58+ title : " ${{ steps.nextversion.outputs.v_minor }}"
5759 env :
5860 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
5961
60- - name : Print release info
61- run : |
62- echo ${{ steps.cutrelease.outputs.id }}
63- echo ${{ steps.cutrelease.outputs.name }}
64- echo ${{ steps.cutrelease.outputs.tag_name }}
65- echo ${{ steps.cutrelease.outputs.html_url }}
66- echo ${{ steps.cutrelease.outputs.upload_url }}
67-
68- - name : Upload wheel to GitHub release
69- id : upload-wheel
70- if : ${{ env.build_ok == 1 }}
71- uses : shogo82148/actions-upload-release-asset@v1
62+ - name : Create new major release milestone
63+ if : ${{ env.do_milestones == 1 }}
64+ uses : WyriHaximus/github-action-create-milestone@v1.2.0
7265 with :
73- upload_url : ${{ steps.cutrelease.outputs.upload_url }}
74-
75- # - name: Publish to Test PyPi
76- # if: ${{ !contains( steps.newversion.output.new_tag, 'rc' ) && env.build_ok == 1 }}
77- # uses: pypa/gh-action-pypi-publish@release/v1
78- # with:
79- # user: __token__
80- # password: ${{ secrets.TEST_PYPI_API_TOKEN }}
81- # repository_url: https://test.pypi.org/legacy/
82-
83- # - name: Test install from Test PyPI
84- # if: ${{ !contains( steps.newversion.output.new_tag, 'rc' ) && env.build_ok == 1 }}
85- # run: |
86- # sudo apt-get update
87- # pip install \
88- # --index-url https://test.pypi.org/simple/ \
89- # --extra-index-url https://pypi.org/simple \
90- # docformatter==${{ steps.newversion.outputs.new_version }} && echo "install_ok=1" >> $GITHUB_ENV
91-
92- # - name: Publish to PyPi
93- # if: ${{ !contains( steps.newversion.output.new_tag, 'rc' ) && env.install_ok == 1 }}
94- # uses: pypa/gh-action-pypi-publish@release/v1
95- # with:
96- # user: __token__
97- # password: ${{ secrets.PYPI_API_TOKEN }}
66+ title : " ${{ steps.nextversion.outputs.v_major }}"
67+ env :
68+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
0 commit comments