name: Publish Release on: workflow_dispatch: permissions: contents: write # Ensure write access to push tags jobs: pypi: name: Publish to PyPI 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 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 5: Remove problematic optional dependencies - name: Strip problematic optional dependencies run: | python - < ~/.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