1# See `.github/scripts/check_extras_sync.py` for the rationale.23name: "🔍 Check Extras Sync"45on:6 pull_request:7 paths:8 - "libs/**/pyproject.toml"9 - ".github/scripts/check_extras_sync.py"10 - ".github/workflows/check_extras_sync.yml"11 push:12 branches: [master]13 paths:14 - "libs/**/pyproject.toml"15 - ".github/scripts/check_extras_sync.py"16 - ".github/workflows/check_extras_sync.yml"1718concurrency:19 group: ${{ github.workflow }}-${{ github.ref }}20 cancel-in-progress: true2122permissions:23 contents: read2425jobs:26 check-extras-sync:27 if: github.repository_owner == 'langchain-ai'28 name: "Verify extras match required deps"29 runs-on: ubuntu-latest30 timeout-minutes: 231 steps:32 - name: "📋 Checkout Code"33 uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v63435 - name: "🐍 Set up Python and uv"36 uses: "./.github/actions/uv_setup"37 with:38 python-version: "3.13"39 enable-cache: "false"4041 - name: "🔍 Check extras sync"42 # Iterate every package pyproject.toml under libs/. The script43 # no-ops on packages without [project.optional-dependencies], so44 # this is harmless on packages without extras and automatically45 # picks up new partners as they're added. No `-maxdepth` cap so46 # deeper future restructures (e.g. `libs/partners/<group>/<pkg>/`)47 # are picked up automatically.48 run: |49 set -euo pipefail50 mapfile -t files < <(51 find libs -name pyproject.toml \52 -not -path "*/.venv/*" \53 -not -path "*/node_modules/*" \54 -not -path "*/build/*" \55 -not -path "*/dist/*" \56 -not -path "*/.tox/*" \57 | sort58 )59 if [ ${#files[@]} -eq 0 ]; then60 echo "::error::No pyproject.toml files found under libs/"61 exit 162 fi63 failed=()64 for f in "${files[@]}"; do65 if ! python .github/scripts/check_extras_sync.py "$f"; then66 failed+=("$f")67 fi68 done69 if [ ${#failed[@]} -gt 0 ]; then70 echo "::error::Extras-sync check failed for ${#failed[@]} package(s):"71 printf '::error:: %s\n' "${failed[@]}"72 exit 173 fi
Findings
✓ No findings reported for this file.