feat: add FormData class for form and multipart requests (#3060) #4540
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: CI | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - release-* | |
| pull_request: | |
| branches: | |
| - main | |
| - release-* | |
| concurrency: | |
| # For pull requests, cancel all currently-running jobs for this workflow | |
| # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#concurrency | |
| group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
| cancel-in-progress: true | |
| jobs: | |
| infra: | |
| name: Lint | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.10" | |
| - name: Install dependencies & browsers | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -r local-requirements.txt | |
| pip install -r requirements.txt | |
| pip install -e . | |
| python -m build --wheel | |
| python -m playwright install --with-deps | |
| - name: Lint | |
| run: pre-commit run --show-diff-on-failure --color=always --all-files | |
| - name: Generate APIs | |
| run: bash scripts/update_api.sh | |
| - name: Verify generated API is up to date | |
| run: git diff --exit-code | |
| build: | |
| name: Build | |
| timeout-minutes: 45 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, windows-latest, macos-latest] | |
| python-version: ['3.9', '3.10'] | |
| browser: [chromium, firefox, webkit] | |
| exclude: | |
| # WebKit on standard macOS-latest (currently macos-15-arm64) is unstable; | |
| # upstream pins paid macos-15-xlarge for cross-browser webkit too. | |
| - os: macos-latest | |
| browser: webkit | |
| include: | |
| - os: macos-15-xlarge | |
| python-version: '3.9' | |
| browser: webkit | |
| - os: macos-15-xlarge | |
| python-version: '3.10' | |
| browser: webkit | |
| - os: windows-latest | |
| python-version: '3.11' | |
| browser: chromium | |
| - os: macos-latest | |
| python-version: '3.11' | |
| browser: chromium | |
| - os: ubuntu-latest | |
| python-version: '3.11' | |
| browser: chromium | |
| - os: windows-latest | |
| python-version: '3.12' | |
| browser: chromium | |
| - os: macos-latest | |
| python-version: '3.12' | |
| browser: chromium | |
| - os: ubuntu-latest | |
| python-version: '3.12' | |
| browser: chromium | |
| - os: windows-latest | |
| python-version: '3.13' | |
| browser: chromium | |
| - os: macos-latest | |
| python-version: '3.13' | |
| browser: chromium | |
| - os: ubuntu-latest | |
| python-version: '3.13' | |
| browser: chromium | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install dependencies & browsers | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -r local-requirements.txt | |
| pip install -r requirements.txt | |
| pip install -e . | |
| python -m build --wheel | |
| python -m playwright install --with-deps ${{ matrix.browser }} | |
| - name: Common Tests | |
| run: pytest tests/common --browser=${{ matrix.browser }} --timeout 90 | |
| - name: Test Reference count | |
| run: pytest tests/test_reference_count_async.py --browser=${{ matrix.browser }} | |
| - name: Test Wheel Installation | |
| run: pytest tests/test_installation.py --browser=${{ matrix.browser }} | |
| - name: Test Sync API | |
| if: matrix.os != 'ubuntu-latest' | |
| run: pytest tests/sync --browser=${{ matrix.browser }} --timeout 90 | |
| - name: Test Sync API | |
| if: matrix.os == 'ubuntu-latest' | |
| run: xvfb-run pytest tests/sync --browser=${{ matrix.browser }} --timeout 90 | |
| - name: Test Async API | |
| if: matrix.os != 'ubuntu-latest' | |
| run: pytest tests/async --browser=${{ matrix.browser }} --timeout 90 | |
| - name: Test Async API | |
| if: matrix.os == 'ubuntu-latest' | |
| run: xvfb-run pytest tests/async --browser=${{ matrix.browser }} --timeout 90 | |
| test-stable: | |
| name: Stable | |
| timeout-minutes: 45 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, windows-latest, macos-latest] | |
| browser-channel: [chrome] | |
| include: | |
| - os: windows-latest | |
| browser-channel: msedge | |
| - os: macos-latest | |
| browser-channel: msedge | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.10" | |
| - name: Install dependencies & browsers | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -r local-requirements.txt | |
| pip install -r requirements.txt | |
| pip install -e . | |
| python -m build --wheel | |
| python -m playwright install ${{ matrix.browser-channel }} --with-deps | |
| - name: Common Tests | |
| run: pytest tests/common --browser=chromium --browser-channel=${{ matrix.browser-channel }} --timeout 90 | |
| - name: Test Sync API | |
| if: matrix.os != 'ubuntu-latest' | |
| run: pytest tests/sync --browser=chromium --browser-channel=${{ matrix.browser-channel }} --timeout 90 | |
| - name: Test Sync API | |
| if: matrix.os == 'ubuntu-latest' | |
| run: xvfb-run pytest tests/sync --browser=chromium --browser-channel=${{ matrix.browser-channel }} --timeout 90 | |
| - name: Test Async API | |
| if: matrix.os != 'ubuntu-latest' | |
| run: pytest tests/async --browser=chromium --browser-channel=${{ matrix.browser-channel }} --timeout 90 | |
| - name: Test Async API | |
| if: matrix.os == 'ubuntu-latest' | |
| run: xvfb-run pytest tests/async --browser=chromium --browser-channel=${{ matrix.browser-channel }} --timeout 90 | |
| build-conda: | |
| name: Conda Build | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-22.04, macos-latest, windows-2022] | |
| runs-on: ${{ matrix.os }} | |
| defaults: | |
| run: | |
| # `setup-miniconda` activates the env only for login shells; using | |
| # `bash -el` (recommended by the action) ensures `conda` and the | |
| # installed `conda-build` are on PATH on every OS, including Windows | |
| # where the default shell is pwsh and skips the activation hooks. | |
| shell: bash -el {0} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| - name: Get conda | |
| uses: conda-incubator/setup-miniconda@v4 | |
| with: | |
| python-version: '3.12' | |
| channels: conda-forge | |
| miniconda-version: latest | |
| - name: Prepare | |
| run: conda install -n base "conda-build>=26" conda-verify | |
| - name: Build | |
| run: conda build . | |
| test_examples: | |
| name: Examples | |
| runs-on: ubuntu-22.04 | |
| defaults: | |
| run: | |
| working-directory: examples/todomvc/ | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.10' | |
| - name: Install dependencies & browsers | |
| run: | | |
| pip install -r requirements.txt | |
| python -m playwright install --with-deps chromium | |
| - name: Common Tests | |
| run: pytest |