diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8b766f0..f625202 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -2,73 +2,33 @@ name: release on: push: - tags: - - "[0-9]+.[0-9]+.[0-9]+" - - "[0-9]+.[0-9]+.[0-9]+a[0-9]+" - - "[0-9]+.[0-9]+.[0-9]+b[0-9]+" - - "[0-9]+.[0-9]+.[0-9]+rc[0-9]+" - -env: - PACKAGE_NAME: "SlipLib" - OWNER: "rhjdjong" + branches: + - "main" + - "master" jobs: - details: + pypi_version: runs-on: ubuntu-latest outputs: - new_version: ${{ steps.release.outputs.new_version }} - suffix: ${{ steps.release.outputs.suffix }} - tag_name: ${{ steps.release.outputs.tag_name }} - steps: - - uses: actions/checkout@v2 - - - name: Extract tag and Details - id: release - run: | - if [ "${{ github.ref_type }}" = "tag" ]; then - TAG_NAME=${GITHUB_REF#refs/tags/} - NEW_VERSION=$(echo $TAG_NAME | awk -F'-' '{print $1}') - SUFFIX=$(echo $TAG_NAME | grep -oP '[a-z]+[0-9]+' || echo "") - echo "new_version=$NEW_VERSION" >> "$GITHUB_OUTPUT" - echo "suffix=$SUFFIX" >> "$GITHUB_OUTPUT" - echo "tag_name=$TAG_NAME" >> "$GITHUB_OUTPUT" - echo "Version is $NEW_VERSION" - echo "Suffix is $SUFFIX" - echo "Tag name is $TAG_NAME" - else - echo "No tag found" - exit 1 - fi - - check_pypi: - needs: details - runs-on: ubuntu-latest + latest_version: ${{ steps.get_pypi_version.outputs.latest_version }} steps: - name: Fetch information from PyPI + id: get_pypi_version run: | - response=$(curl -s https://pypi.org/pypi/${{ env.PACKAGE_NAME }}/json || echo "{}") - latest_previous_version=$(echo $response | jq --raw-output "select(.releases != null) | .releases | keys_unsorted | last") - if [ -z "$latest_previous_version" ]; then + response=$(curl -s https://pypi.org/pypi/${{ github.event.repository.name }}/json || echo "{}") + latest_version=$(echo $response | jq --raw-output "select(.releases != null) | .releases | keys_unsorted | last") + if [ -z "$latest_version" ]; then echo "Package not found on PyPI." - latest_previous_version="0.0.0" + latest_version="0.0.0" fi - echo "Latest version on PyPI: $latest_previous_version" - echo "latest_previous_version=$latest_previous_version" >> $GITHUB_ENV + echo "Latest version on PyPI: $latest_version" + echo "latest_version=$latest_version" >> $GITHUB_ENV - - name: Compare versions and exit if not newer - run: | - NEW_VERSION=${{ needs.details.outputs.new_version }} - LATEST_VERSION=$latest_previous_version - if [ "$(printf '%s\n' "$LATEST_VERSION" "$NEW_VERSION" | sort -rV | head -n 1)" != "$NEW_VERSION" ] || [ "$NEW_VERSION" == "$LATEST_VERSION" ]; then - echo "The new version $NEW_VERSION is not greater than the latest version $LATEST_VERSION on PyPI." - exit 1 - else - echo "The new version $NEW_VERSION is greater than the latest version $LATEST_VERSION on PyPI." - fi - - setup_and_build: - needs: [details, check_pypi] + build_package: + needs: [pypi_version] runs-on: ubuntu-latest + outputs: + new_version: ${{ steps.version.outputs.new_version }} steps: - uses: actions/checkout@v2 @@ -79,11 +39,25 @@ jobs: - name: Install Hatch run: | - pip install hatch + python -m pip install --upgrade pip setuptools wheel hatch - - name: Set project version with Hatch + - name: Compare current version with PyPI version + id: version run: | - hatch version ${{ needs.details.outputs.new_version }} + new_version=$(hatch version) + prev_version=${{ needs.pypi_version.outputs.latest_version }} + if [ "$new_version" == "prev_version" ]; then + echo "No version update. Terminating workflow". + exit 1 + fi + higher_version=$(printf '%s\n' "$new_version" "$prev_version" | sort -rV | head -n 1) + if [ "$higher_version" != "$new_version" ]; then + echo "Error! Version ${new_version} is lower than latest version ${prev_version} on PyPI" + exit 2 + else + echo "The new version ${new_version} is greater than the latest version ${prev_version} on PyPI." + echo "new_version=${new_version}" >> "$GITHUB_OUTPUT" + fi - name: Build source and wheel distribution run: | @@ -95,46 +69,141 @@ jobs: name: dist path: dist/ - pypi_publish: - name: Upload release to PyPI - needs: [setup_and_build, details] - runs-on: ubuntu-latest - environment: - name: release - url: https://pypi.org/p/sliplib - permissions: - id-token: write - steps: - - name: Download artifacts - uses: actions/download-artifact@v3 - with: - name: dist - path: dist/ - - - name: Publish distribution to PyPI - uses: pypa/gh-action-pypi-publish@release/v1 - - github_release: - name: Create GitHub Release - needs: [setup_and_build, details] +# details: +# runs-on: ubuntu-latest +# outputs: +# new_version: ${{ steps.release.outputs.latest_version }} +# suffix: ${{ steps.release.outputs.suffix }} +# tag_name: ${{ steps.release.outputs.tag_name }} +# steps: +# - uses: actions/checkout@v2 +# +# - name: Extract tag and Details +# id: release +# run: | +# if [ "${{ github.ref_type }}" = "tag" ]; then +# TAG_NAME=${GITHUB_REF#refs/tags/} +# NEW_VERSION=$(echo $TAG_NAME | awk -F'-' '{print $1}') +# SUFFIX=$(echo $TAG_NAME | grep -oP '[a-z]+[0-9]+' || echo "") +# echo "new_version=$NEW_VERSION" >> "$GITHUB_OUTPUT" +# echo "suffix=$SUFFIX" >> "$GITHUB_OUTPUT" +# echo "tag_name=$TAG_NAME" >> "$GITHUB_OUTPUT" +# echo "Version is $NEW_VERSION" +# echo "Suffix is $SUFFIX" +# echo "Tag name is $TAG_NAME" +# else +# echo "No tag found" +# exit 1 +# fi +# +# check_pypi: +# needs: details +# +# - name: Compare versions and exit if not newer +# run: | +# NEW_VERSION=${{ needs.details.outputs.new_version }} +# LATEST_VERSION=$latest_previous_version +# if [ "$(printf '%s\n' "$LATEST_VERSION" "$NEW_VERSION" | sort -rV | head -n 1)" != "$NEW_VERSION" ] || [ "$NEW_VERSION" == "$LATEST_VERSION" ]; then +# echo "The new version $NEW_VERSION is not greater than the latest version $LATEST_VERSION on PyPI." +# exit 1 +# else +# echo "The new version $NEW_VERSION is greater than the latest version $LATEST_VERSION on PyPI." +# fi +# +# setup_and_build: +# needs: [details, check_pypi] +# runs-on: ubuntu-latest +# steps: +# - uses: actions/checkout@v2 +# +# - name: Set up Python +# uses: actions/setup-python@v4 +# with: +# python-version: "3.12" +# +# - name: Install Hatch +# run: | +# python -m pip install --upgrade pip setuptools wheel +# pip install hatch +# +# - name: Set project version with Hatch +# run: | +# hatch version ${{ needs.details.outputs.new_version }} +# +# - name: Build source and wheel distribution +# run: | +# hatch build +# +# - name: Upload artifacts +# uses: actions/upload-artifact@v3 +# with: +# name: dist +# path: dist/ +# + + +# pypi_publish: +# name: Upload release to PyPI +# needs: [build_package] +# if: needs.build_package.outputs.new_version +# runs-on: ubuntu-latest +# environment: +# name: release +# url: https://pypi.org/p/${{ env.PACKAGE_NAME }} +# permissions: +# id-token: write +# steps: +# - name: Download artifacts +# uses: actions/download-artifact@v3 +# with: +# name: dist +# path: dist/ +# +# - name: Publish distribution to PyPI +# uses: pypa/gh-action-pypi-publish@release/v1 +# + github_tag: + name: Create GitHub tag + needs: [build_package] + if: needs.build_package.outputs.new_version runs-on: ubuntu-latest - permissions: - contents: write steps: - - name: Checkout Code - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Download artifacts - uses: actions/download-artifact@v3 - with: - name: dist - path: dist/ - - - name: Create GitHub Release - id: create_release + - name: Create tag + uses: actions/github-script@v7 env: - GH_TOKEN: ${{ github.token }} - run: | - gh release create ${{ needs.details.outputs.tag_name }} dist/* --title ${{ needs.details.outputs.tag_name }} --generate-notes + NEW_TAG: ${{ needs.build_package.outputs.new_version }} + with: + script: | + const { NEW_TAG } = process.env + github.rest.git.createRef({ + owner: context.repo.owner, + repo: context.repo.repo, + ref: "refs/tags/${NEW_TAG}", + sha: context.sha + }) + +# github_release: +# name: Create GitHub Tag aRelease +# needs: [build_package] +# runs-on: ubuntu-latest +# permissions: +# contents: write +# steps: +# - name: Checkout Code +# uses: actions/checkout@v3 +# with: +# fetch-depth: 0 +# +# - name: Download artifacts +# uses: actions/download-artifact@v3 +# with: +# name: dist +# path: dist/ +# +# - name: Create GitHub Release +# id: create_release +# env: +# GH_TOKEN: ${{ github.token }} +# run: | +# tag_name = ${{ needs.build_package.outputs.new_version }} +# gh release create ${tag_name} dist/* --title ${tag_name} --generate-notes