Edit to update pypy links #50
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 }} |