Skip to content

Update release.yml

Update release.yml #10

Workflow file for this run

name: release
on:
push:
branches:
- "main"
- "master"
jobs:
pypi_version:
runs-on: ubuntu-latest
outputs:
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/${{ 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_version="0.0.0"
fi
echo "Latest version on PyPI: $latest_version"
echo "latest_version=$latest_version" >> $GITHUB_OUTPUT
build_package:
needs: [pypi_version]
runs-on: ubuntu-latest
outputs:
new_version: ${{ steps.version.outputs.new_version }}
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 hatch
- name: Compare current version with PyPI version
id: version
run: |
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: |
hatch build
- name: Upload artifacts
uses: actions/upload-artifact@v3
with:
name: dist
path: dist/
# 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
steps:
- name: Create tag
uses: actions/github-script@v7
env:
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