name: 03.1. V2 Metadata Engine on: workflow_dispatch: inputs: enrich_metadata: description: 'Enrich GitHub Metadata (fetch stars/license)' type: boolean default: true restore_cache: description: 'Restore inventory from cache (Warning: May overwrite recent manual changes)' required: false type: boolean default: false permissions: contents: write pull-requests: write concurrency: group: develop-git-write-lock cancel-in-progress: false jobs: run-metadata: runs-on: ubuntu-latest steps: - name: Repository Synchronization uses: actions/checkout@v7 with: ref: develop - name: Python 3.11 Environment Provisioning uses: actions/setup-python@v6 with: python-version: '3.11' cache: 'pip' - name: Restore Incremental Inventory Cache if: ${{ github.event.inputs.restore_cache == 'true' }} uses: actions/cache/restore@v6 with: path: data/inventory.yaml key: inventory-v2-${{ github.run_id }}-${{ github.run_attempt }} restore-keys: | inventory-v2- - name: Installation of Dependencies run: | pip install --no-cache-dir pydantic PyGithub httpx fake-useragent pytz python-dotenv pyyaml tenacity - name: Run V2 Metadata Engine env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} ENRICH_METADATA: ${{ github.event.inputs.enrich_metadata || 'true' }} PYTHONPATH: ${{ github.workspace }} PYTHONUNBUFFERED: "1" run: python -u -m src.v2_metadata - name: Commit and Push Metadata Updates run: | git config --global user.name "Nubenetes Bot" git config --global user.email "bot@nubenetes.com" git add data/inventory.yaml data/inventory.sql if git diff --staged --quiet; then echo "No changes in inventory to commit." else git commit -m "chore: update inventory stars and licenses [skip ci]" # Retry rebase+push to survive concurrent bot pushes to develop. for i in {1..5}; do git pull origin develop --rebase && git push origin develop && exit 0 echo "Push attempt $i/5 rejected — retrying..."; sleep $((i * 3)) done echo "::error::Inventory metadata push failed after 5 attempts."; exit 1 fi - name: Persist Incremental Inventory to Cache if: always() uses: actions/cache/save@v6 with: path: data/inventory.yaml key: inventory-v2-${{ github.run_id }}-${{ github.run_attempt }}