diff --git a/.github/scripts/find_modal_examples.py b/.github/scripts/find_modal_examples.py new file mode 100644 index 0000000..70b58fe --- /dev/null +++ b/.github/scripts/find_modal_examples.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import os +import json + + +def is_modal_script(path): + try: + with open(path, "r", encoding="utf-8") as f: + content = f.read() + return "@modal." in content or "modal.App()" in content + except Exception: + return False + + +def format_path(path): + return path.replace("/", ".").replace(".py", "") + + +modal_scripts = [] +for dirpath, _, filenames in os.walk("src"): + for file in filenames: + if file.endswith(".py"): + full_path = os.path.join(dirpath, file) + if is_modal_script(full_path): + modal_scripts.append(format_path(full_path)) + +print(json.dumps({"example": modal_scripts})) diff --git a/.github/workflows/deprecations.yml b/.github/workflows/deprecations.yml new file mode 100644 index 0000000..6f355ba --- /dev/null +++ b/.github/workflows/deprecations.yml @@ -0,0 +1,61 @@ +name: Detect and Check Modal Scripts + +on: + pull_request: + workflow_dispatch: + +jobs: + generate-matrix: + runs-on: ubuntu-24.04 + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 1 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.10" + + - name: Find Modal scripts + id: set-matrix + run: | + chmod +x .github/scripts/find_modal_examples.py + MATRIX=$(python .github/scripts/find_modal_examples.py) + echo "Found scripts ${MATRIX}" + echo "matrix=${MATRIX}" >> $GITHUB_OUTPUT + + test: + needs: generate-matrix + runs-on: ubuntu-24.04 + strategy: + fail-fast: false + matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix) }} + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 1 + + - uses: ./.github/actions/setup + + - name: Authenticate with Modal + env: + MODAL_TOKEN_ID: ${{ secrets.MODAL_TOKEN_ID }} + MODAL_TOKEN_SECRET: ${{ secrets.MODAL_TOKEN_SECRET }} + run: | + modal token set --token-id $MODAL_TOKEN_ID --token-secret $MODAL_TOKEN_SECRET + + - name: Run ${{ matrix.example }} with modal + run: | + set -o pipefail + modal serve ${{ matrix.example }} 2>&1 | tee output.log + + - name: Check for deprecation warnings + run: | + if grep -i "deprecationwarning" output.log; then + echo "❌ Deprecation warning found in ${{ matrix.example }}" + exit 1 + fi