cyrusyc's picture
add `fi`
36c27f3
name: Publish Release
on:
push:
branches:
- main # Trigger on push to main branch
permissions:
contents: write # Ensure write access to push tags
jobs:
release:
name: Create GitHub Release
runs-on: ubuntu-latest
steps:
# Step 1: Checkout the code
- name: Checkout code
uses: actions/checkout@v3
# Step 2: Set up Python
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.x'
# Step 3: Install dependencies
- name: Install dependencies
run: pip install toml
# Step 4: Extract version from pyproject.toml
- name: Extract version
id: get_version
run: |
VERSION=$(python -c "import toml; print(toml.load('pyproject.toml')['project']['version'])")
echo "VERSION=$VERSION" >> $GITHUB_ENV
# Step 5: Check if tag exists on remote
- name: Check if tag exists on remote
id: check_tag
run: |
if git ls-remote --tags origin | grep "refs/tags/v${{ env.VERSION }}"; then
echo "Tag v${{ env.VERSION }} already exists on remote."
echo "tag_exists=true" >> $GITHUB_ENV
else
echo "tag_exists=false" >> $GITHUB_ENV
fi
# Step 6: Create and push a new tag (if it doesn't exist)
- name: Create Git tag
if: env.tag_exists == 'false'
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git tag -a "v${{ env.VERSION }}" -m "Release v${{ env.VERSION }}"
git push origin "v${{ env.VERSION }}"
# Step 7: Create GitHub release (if tag didn't exist)
- name: Create GitHub Release
if: env.tag_exists == 'false'
uses: softprops/action-gh-release@v1
with:
tag_name: "v${{ env.VERSION }}"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
pypi:
name: Publish to PyPI
runs-on: ubuntu-latest
needs: release # This job runs after the release job
steps:
# Step 1: Checkout the code
- name: Checkout code
uses: actions/checkout@v3
# Step 2: Set up Python
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.x'
# Step 3: Install dependencies
- name: Install dependencies
run: pip install toml requests
# Step 4: Extract current version from pyproject.toml
- name: Extract current version
id: get_version
run: |
VERSION=$(python -c "import toml; print(toml.load('pyproject.toml')['project']['version'])")
echo "VERSION=$VERSION" >> $GITHUB_ENV
# Step 5: Get latest version from PyPI
- name: Get latest version from PyPI
id: get_pypi_version
run: |
LATEST_PYPI_VERSION=$(python -c "import toml; import requests; PACKAGE_NAME = toml.load('pyproject.toml')['project']['name']; response = requests.get(f'https://pypi.org/pypi/{PACKAGE_NAME}/json'); print(response.json()['info']['version'])")
echo "LATEST_PYPI_VERSION=$LATEST_PYPI_VERSION" >> $GITHUB_ENV
# Step 6: Compare current version with the latest tag
- name: Check if version is bumped
id: check_version
run: |
if [ "${{ env.VERSION }}" = "${{ env.LATEST_PYPI_VERSION }}" ]; then
echo "Version not bumped. Exiting."
echo "version_bumped=false" >> $GITHUB_ENV
else
echo "Version bumped. Proceeding."
echo "version_bumped=true" >> $GITHUB_ENV
fi
# Step 7: Install Flit (only if version bumped)
- name: Install Flit
if: env.version_bumped == 'true'
run: pip install flit
# Step 8: Create .pypirc file (only if version bumped)
- name: Create .pypirc file
if: env.version_bumped == 'true'
run: |
echo "[pypi]" > ~/.pypirc
echo "username = __token__" >> ~/.pypirc
echo "password = ${{ secrets.PYPI_API_TOKEN }}" >> ~/.pypirc
# Step 9: Build and publish package (only if version bumped)
- name: Build and Publish Package
if: env.version_bumped == 'true'
run: |
flit build
flit publish