From d8da3c19e918538f452db7367a5e67b0a5852ec1 Mon Sep 17 00:00:00 2001 From: Sangjoon Bob Lee Date: Tue, 31 Dec 2024 23:08:27 -0500 Subject: [PATCH 1/7] Build docs as a part of the release workflow after github release --- .github/workflows/_build-wheel-release-upload.yml | 8 ++++++++ .github/workflows/_publish-docs-on-release.yml | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/workflows/_build-wheel-release-upload.yml b/.github/workflows/_build-wheel-release-upload.yml index 43c0373..8aaddea 100644 --- a/.github/workflows/_build-wheel-release-upload.yml +++ b/.github/workflows/_build-wheel-release-upload.yml @@ -123,6 +123,14 @@ jobs: body_path: CHANGELOG.txt token: ${{ secrets.GITHUB_TOKEN }} + docs: + needs: [github-pre-release, github-release] + if: always() + uses: ./.github/workflows/_publish-docs-on-release.yml + with: + project: ${{ inputs.project }} + c_extension: ${{ inputs.c_extension }} + pypi-publish: needs: [github-pre-release, github-release] runs-on: ubuntu-latest diff --git a/.github/workflows/_publish-docs-on-release.yml b/.github/workflows/_publish-docs-on-release.yml index e86300a..8af0b86 100644 --- a/.github/workflows/_publish-docs-on-release.yml +++ b/.github/workflows/_publish-docs-on-release.yml @@ -25,7 +25,7 @@ on: type: boolean jobs: - docs: + build-deploy: defaults: run: shell: bash -l {0} @@ -35,7 +35,7 @@ jobs: - name: Check out ${{ inputs.project }} uses: actions/checkout@v4 with: - fetch-depth: 0 # Fetches branches and tags + ref: main # Fetch the main branch with CHANGELOG.rst modified during full release - name: Initialize miniconda uses: conda-incubator/setup-miniconda@v3 From 02cf636f68ad4775a9e4edf11bd827b177ba8c42 Mon Sep 17 00:00:00 2001 From: Sangjoon Bob Lee Date: Wed, 1 Jan 2025 12:09:17 -0500 Subject: [PATCH 2/7] Add delete and create new tag --- .../workflows/_build-wheel-release-upload.yml | 72 +++++++++---------- 1 file changed, 34 insertions(+), 38 deletions(-) diff --git a/.github/workflows/_build-wheel-release-upload.yml b/.github/workflows/_build-wheel-release-upload.yml index 8aaddea..a5b003d 100644 --- a/.github/workflows/_build-wheel-release-upload.yml +++ b/.github/workflows/_build-wheel-release-upload.yml @@ -75,6 +75,37 @@ jobs: commit_message: update changelog branch: main + delete-create-new-tag: + # For a full release, we delete and create a new tag to reflect the latest changes in the CHANGELOG.rst. + # Recall that during the full release, the `main` branch's CHANGELOG.rst has been updated, and we want the + # tag to reflect the latest changes in the CHANGELOG.rst done by the update-changelog above. + # For more discussions, please read https://github.com/Billingegroup/release-scripts/pull/120 + needs: [update-changelog] + # Always run this job for a full release but fail if the update-changelog job previously failed. + if: "always() && !contains(github.ref, 'rc')" + runs-on: ubuntu-latest + steps: + - name: Fail delete-create-new-tag job if CHANGELOG update failed + run: | + if [ "${{ needs.update-changelog.result }}" == 'success' ]; then + echo "Ready to delete and create new tag containing the latest CHANGLEOG.rst update in the main branch..." + else + echo "Previous update-changelog job failed; exiting..." + exit 1 + fi + - name: Checkout the repository + uses: actions/checkout@v4 + with: + ref: main + - name: Delete the tag + run: | + git tag -d "${{ github.ref_name }}" + git push origin ":${{ github.ref_name }}" + - name: Create a new tag (Expect commit commit has to match with that of main branch) + run: | + git tag "${{ github.ref_name }}" + git push origin "${{ github.ref_name }}" + github-pre-release: needs: [build-pure-python-package, build-non-pure-python-package] if: "always() && contains(github.ref, 'rc')" @@ -94,10 +125,11 @@ jobs: with: prerelease: true generate_release_notes: true + draft: true token: ${{ secrets.GITHUB_TOKEN }} github-release: - needs: [update-changelog] + needs: [delete-create-new-tag] if: "always() && !contains(github.ref, 'rc')" runs-on: ubuntu-latest steps: @@ -122,6 +154,7 @@ jobs: with: body_path: CHANGELOG.txt token: ${{ secrets.GITHUB_TOKEN }} + draft: true docs: needs: [github-pre-release, github-release] @@ -130,40 +163,3 @@ jobs: with: project: ${{ inputs.project }} c_extension: ${{ inputs.c_extension }} - - pypi-publish: - needs: [github-pre-release, github-release] - runs-on: ubuntu-latest - if: always() # This job will always initiate regardless of the success or failure of the needed jobs - steps: - - name: Fail pypi-publish job if github-(pre)-release job failed - run: | - if [ "${{ needs.github-pre-release.result }}" == 'success' ] || [ "${{ needs.github-release.result }}" == 'success' ]; then - echo "Ready for PyPI release..." - else - echo "Previous github-(pre)-release job failed; exiting..." - exit 1 - fi - - - uses: actions/download-artifact@v4 - with: - pattern: '**/*' # Make sure all files are downloaded, including wheels - path: dist - merge-multiple: true - - - name: Setup Python for PyPI upload - uses: actions/setup-python@v5 - with: - python-version: '3.13' - - - name: Install Twine - run: | - python -m pip install --upgrade pip - pip install twine - - - name: Publish package to PyPI - env: - TWINE_USERNAME: __token__ - TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }} - run: | - twine upload dist/* --verbose From 0bffa6b48ac05435588e4a34f212cd651b0ab6e7 Mon Sep 17 00:00:00 2001 From: Sangjoon Bob Lee Date: Wed, 1 Jan 2025 12:17:28 -0500 Subject: [PATCH 3/7] Add better description --- .github/workflows/_build-wheel-release-upload.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/_build-wheel-release-upload.yml b/.github/workflows/_build-wheel-release-upload.yml index a5b003d..7875491 100644 --- a/.github/workflows/_build-wheel-release-upload.yml +++ b/.github/workflows/_build-wheel-release-upload.yml @@ -88,7 +88,7 @@ jobs: - name: Fail delete-create-new-tag job if CHANGELOG update failed run: | if [ "${{ needs.update-changelog.result }}" == 'success' ]; then - echo "Ready to delete and create new tag containing the latest CHANGLEOG.rst update in the main branch..." + echo "Ready to delete and create new tag containing the latest CHANGELOG.rst update in the main branch..." else echo "Previous update-changelog job failed; exiting..." exit 1 @@ -101,7 +101,7 @@ jobs: run: | git tag -d "${{ github.ref_name }}" git push origin ":${{ github.ref_name }}" - - name: Create a new tag (Expect commit commit has to match with that of main branch) + - name: Create a new tag (Expect commit SHA to match with that of main branch) run: | git tag "${{ github.ref_name }}" git push origin "${{ github.ref_name }}" From 8915dfe6fbc598bf95535882bb5f89a93f9af18b Mon Sep 17 00:00:00 2001 From: Sangjoon Bob Lee Date: Wed, 1 Jan 2025 12:24:18 -0500 Subject: [PATCH 4/7] fetch tags before delete --- .github/workflows/_build-wheel-release-upload.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/_build-wheel-release-upload.yml b/.github/workflows/_build-wheel-release-upload.yml index 7875491..e6e8f40 100644 --- a/.github/workflows/_build-wheel-release-upload.yml +++ b/.github/workflows/_build-wheel-release-upload.yml @@ -99,6 +99,7 @@ jobs: ref: main - name: Delete the tag run: | + git fetch --tags git tag -d "${{ github.ref_name }}" git push origin ":${{ github.ref_name }}" - name: Create a new tag (Expect commit SHA to match with that of main branch) From c523ee3ac8ef5d3e251043ae8090835120aafdfc Mon Sep 17 00:00:00 2001 From: Sangjoon Bob Lee Date: Wed, 1 Jan 2025 12:29:09 -0500 Subject: [PATCH 5/7] check out github ref and fix success for delete create tag --- .github/workflows/_build-wheel-release-upload.yml | 2 +- .github/workflows/_publish-docs-on-release.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/_build-wheel-release-upload.yml b/.github/workflows/_build-wheel-release-upload.yml index e6e8f40..937c5f8 100644 --- a/.github/workflows/_build-wheel-release-upload.yml +++ b/.github/workflows/_build-wheel-release-upload.yml @@ -136,7 +136,7 @@ jobs: steps: - name: Fail github-release job if CHANGELOG update failed run: | - if [ "${{ needs.update-changelog.result }}" == 'success' ]; then + if [ "${{ needs.delete-create-new-tag }}" == 'success' ]; then echo "Ready to release on GitHub..." else echo "Previous update-changelog job failed; exiting..." diff --git a/.github/workflows/_publish-docs-on-release.yml b/.github/workflows/_publish-docs-on-release.yml index 8af0b86..b77bcbb 100644 --- a/.github/workflows/_publish-docs-on-release.yml +++ b/.github/workflows/_publish-docs-on-release.yml @@ -35,7 +35,7 @@ jobs: - name: Check out ${{ inputs.project }} uses: actions/checkout@v4 with: - ref: main # Fetch the main branch with CHANGELOG.rst modified during full release + ref: ${{ github.ref }} - name: Initialize miniconda uses: conda-incubator/setup-miniconda@v3 From a14d7bf1d904e30090bbefd539074c8bdcd5f6a6 Mon Sep 17 00:00:00 2001 From: Sangjoon Bob Lee Date: Wed, 1 Jan 2025 12:38:07 -0500 Subject: [PATCH 6/7] fix: add result after needs to have success for github release --- .github/workflows/_build-wheel-release-upload.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/_build-wheel-release-upload.yml b/.github/workflows/_build-wheel-release-upload.yml index 937c5f8..6214035 100644 --- a/.github/workflows/_build-wheel-release-upload.yml +++ b/.github/workflows/_build-wheel-release-upload.yml @@ -136,7 +136,7 @@ jobs: steps: - name: Fail github-release job if CHANGELOG update failed run: | - if [ "${{ needs.delete-create-new-tag }}" == 'success' ]; then + if [ "${{ needs.delete-create-new-tag.result }}" == 'success' ]; then echo "Ready to release on GitHub..." else echo "Previous update-changelog job failed; exiting..." From 259522b230244048f577073e0b435abd1485f2f6 Mon Sep 17 00:00:00 2001 From: Sangjoon Bob Lee Date: Wed, 1 Jan 2025 13:37:07 -0500 Subject: [PATCH 7/7] fix: bring pypi publish back to original release workflow --- .../workflows/_build-wheel-release-upload.yml | 39 ++++++++++++++++++- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/.github/workflows/_build-wheel-release-upload.yml b/.github/workflows/_build-wheel-release-upload.yml index 6214035..83625d0 100644 --- a/.github/workflows/_build-wheel-release-upload.yml +++ b/.github/workflows/_build-wheel-release-upload.yml @@ -126,7 +126,6 @@ jobs: with: prerelease: true generate_release_notes: true - draft: true token: ${{ secrets.GITHUB_TOKEN }} github-release: @@ -155,7 +154,43 @@ jobs: with: body_path: CHANGELOG.txt token: ${{ secrets.GITHUB_TOKEN }} - draft: true + + pypi-publish: + needs: [github-pre-release, github-release] + runs-on: ubuntu-latest + if: always() # This job will always initiate regardless of the success or failure of the needed jobs + steps: + - name: Fail pypi-publish job if github-(pre)-release job failed + run: | + if [ "${{ needs.github-pre-release.result }}" == 'success' ] || [ "${{ needs.github-release.result }}" == 'success' ]; then + echo "Ready for PyPI release..." + else + echo "Previous github-(pre)-release job failed; exiting..." + exit 1 + fi + + - uses: actions/download-artifact@v4 + with: + pattern: '**/*' # Make sure all files are downloaded, including wheels + path: dist + merge-multiple: true + + - name: Setup Python for PyPI upload + uses: actions/setup-python@v5 + with: + python-version: '3.13' + + - name: Install Twine + run: | + python -m pip install --upgrade pip + pip install twine + + - name: Publish package to PyPI + env: + TWINE_USERNAME: __token__ + TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }} + run: | + twine upload dist/* --verbose docs: needs: [github-pre-release, github-release]