Skip to content

Edit to update pypy links #50

Edit to update pypy links

Edit to update pypy links #50

name: Generate VicUtils Docs and Publish
on:
push:
paths:
- 'vicutils/**/*.py'
branches:
- main
permissions:
contents: write
id-token: write # Required for trusted publishing
packages: write # Required for GitHub Packages
jobs:
generate-docs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
fetch-depth: 0
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.x'
- name: Install dependencies
run: |
pip install pdoc3 build twine
# Install project dependencies from requirements.txt if it exists
if [ -f requirements.txt ]; then
echo "Installing dependencies from requirements.txt"
pip install -r requirements.txt
else
echo "No requirements.txt found at root"
fi
echo "pdoc3 version:"
pdoc --version
- name: Increment version
id: version
run: |
if [ ! -f .version ]; then
echo "0.1" > .version
echo "Created .version file with initial version 0.1"
fi
current_version=$(cat .version)
IFS='.' read -r major minor <<< "$current_version"
new_minor=$((minor + 1))
new_version="${major}.${new_minor}"
echo "$new_version" > .version
sed -i "s/version=\"[^\"]*\"/version=\"$new_version\"/" setup.py
echo "NEW_VERSION=$new_version" >> $GITHUB_ENV
echo "version=$new_version" >> $GITHUB_OUTPUT
- name: Update setup.py requirements
run: |
if [ -f requirements.txt ]; then
echo "Updating install_requires in setup.py from requirements.txt"
python3 << 'EOF'
import re
# Read requirements
with open('requirements.txt', 'r') as f:
reqs = [line.strip() for line in f if line.strip() and not line.startswith('#')]
# Format as Python list string
reqs_str = '[' + ', '.join(f'"{req}"' for req in reqs) + ']'
# Read setup.py
with open('setup.py', 'r') as f:
content = f.read()
# Replace install_requires
content = re.sub(r'install_requires=\[.*?\]', f'install_requires={reqs_str}', content, flags=re.DOTALL)
# Write back
with open('setup.py', 'w') as f:
f.write(content)
print(f"Updated install_requires: {reqs_str}")
EOF
else
echo "No requirements.txt found, skipping setup.py update"
fi
- name: Generate __init__.py files automatically
run: |
echo "Generating __init__.py files..."
find vicutils -type d | while read dir; do
init_file="$dir/__init__.py"
if [ ! -f "$init_file" ]; then
touch "$init_file"
fi
echo "" > "$init_file"
for py in "$dir"/*.py; do
[ -f "$py" ] || continue
base=$(basename "$py" .py)
if [ "$base" != "__init__" ]; then
echo "from .${base} import *" >> "$init_file"
fi
done
done
- name: Check vicutils directory
run: |
echo "=== Contents of vicutils directory ==="
ls -la vicutils/
echo "=== Python files found ==="
find vicutils/ -name "*.py" -not -name "__init__.py"
- name: Generate documentation
run: |
echo "=== Generating documentation ==="
find vicutils/ -mindepth 2 -name "*.py" -not -name "__init__.py" | while read file; do
dir=$(dirname "$file")
basename=$(basename "$file" .py)
cd "$dir"
python -m pdoc --html --force --output-dir . "$basename"
if [ -d "$basename" ]; then
mv "$basename"/index.html "$basename.html"
rm -rf "$basename"
fi
cd - > /dev/null
done
echo "=== Final vicutils contents ==="
find vicutils/ -type f
- name: Build package
run: |
echo "=== Building package ==="
python -m build
echo "=== Build artifacts ==="
ls -la dist/
- name: Publish to PyPI
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
run: |
python -m twine upload dist/* --skip-existing
- name: Publish to GitHub Packages
env:
TWINE_USERNAME: ${{ github.actor }}
TWINE_PASSWORD: ${{ secrets.GITHUB_TOKEN }}
run: |
# Configure pip for GitHub Packages
cat > ~/.pypirc << EOF
[distutils]
index-servers =
pypi
github
[pypi]
username = __token__
password = ${{ secrets.PYPI_API_TOKEN }}
[github]
repository = https://maven.pkg.github.com/${{ github.repository_owner }}
username = ${{ github.actor }}
password = ${{ secrets.GITHUB_TOKEN }}
EOF
# Upload to GitHub Packages (will show in Packages section)
python -m twine upload --repository github dist/* --skip-existing || echo "GitHub Packages upload skipped or failed"
- name: Commit and push if changes
run: |
git config --local user.name "Vic-Nas"
git config --local user.email "github-actions@github.com"
git add .version setup.py
git add vicutils/**/*.html || echo "No HTML files to add"
git add vicutils/**/*.py || echo "No Python files to add"
if git diff --staged --quiet; then
echo "No changes to commit"
else
git commit -m "Auto-generate docs and bump version ${{ steps.version.outputs.version }}"
git push
fi
- name: Create GitHub Release
uses: softprops/action-gh-release@v1
with:
tag_name: v${{ steps.version.outputs.version }}
name: Release v${{ steps.version.outputs.version }}
body: |
## 📦 vicutils v${{ steps.version.outputs.version }}
Auto-generated release from vicutils code changes.
### Installation
```bash
pip install vicutils==${{ steps.version.outputs.version }}
```
### Documentation
Visit [the documentation](https://vic-nas.github.io/PythonSolutions/#vicutils) for usage examples.
files: dist/*
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}