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 | |
| 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 | |
| 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 | |
| - 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: 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 $NEW_VERSION" | |
| git push | |
| fi |