mirror of
https://github.com/kennethreitz/pydantic.git
synced 2026-06-05 23:00:18 +00:00
418 lines
10 KiB
YAML
418 lines
10 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
tags:
|
|
- '**'
|
|
pull_request: {}
|
|
|
|
jobs:
|
|
lint:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: set up python
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: 3.9
|
|
|
|
- uses: actions/cache@v3
|
|
id: cache
|
|
with:
|
|
path: |
|
|
${{ env.pythonLocation }}
|
|
.mypy_cache
|
|
key: >
|
|
lint
|
|
${{ runner.os }}
|
|
${{ env.pythonLocation }}
|
|
${{ hashFiles('tests/requirements-linting.txt') }}
|
|
|
|
- name: install
|
|
if: steps.cache.outputs.cache-hit != 'true'
|
|
run: |
|
|
make install-linting
|
|
pip freeze
|
|
|
|
- name: lint
|
|
run: make lint
|
|
|
|
- name: pyupgrade
|
|
run: make pyupgrade
|
|
|
|
- name: mypy
|
|
run: make mypy
|
|
|
|
- name: make history
|
|
run: python3 ./changes/make_history.py
|
|
|
|
- name: check dist
|
|
run: make check-dist
|
|
|
|
- name: install node for pyright
|
|
uses: actions/setup-node@v3
|
|
with:
|
|
node-version: '14'
|
|
|
|
- run: npm install -g pyright
|
|
|
|
- run: make pyright
|
|
|
|
docs-build:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: set up python
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: 3.9
|
|
|
|
- uses: actions/cache@v3
|
|
id: cache
|
|
with:
|
|
path: ${{ env.pythonLocation }}
|
|
key: >
|
|
docs-build
|
|
${{ runner.os }}
|
|
${{ env.pythonLocation }}
|
|
${{ hashFiles('setup.py') }}
|
|
${{ hashFiles('requirements.txt') }}
|
|
${{ hashFiles('docs/requirements.txt') }}
|
|
|
|
- name: install
|
|
if: steps.cache.outputs.cache-hit != 'true'
|
|
run: make install-docs
|
|
|
|
- name: build site
|
|
run: make docs
|
|
|
|
- name: Store docs site
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: docs
|
|
path: site
|
|
|
|
test-linux-compiled:
|
|
name: test py${{ matrix.python-version }} on linux compiled
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
python-version: ['3.7', '3.8', '3.9', '3.10', '3.11.0-beta.5']
|
|
env:
|
|
PYTHON: ${{ matrix.python-version }}
|
|
OS: ubuntu
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: set up python
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
|
|
- uses: actions/cache@v3
|
|
id: cache
|
|
with:
|
|
path: ${{ env.pythonLocation }}
|
|
key: >
|
|
test-linux-compiled
|
|
${{ runner.os }}
|
|
${{ env.pythonLocation }}
|
|
${{ hashFiles('setup.py') }}
|
|
${{ hashFiles('requirements.txt') }}
|
|
${{ hashFiles('tests/requirements-testing.txt') }}
|
|
|
|
- name: install
|
|
run: make install-testing
|
|
|
|
- name: compile
|
|
run: |
|
|
make build-trace
|
|
python -c "import sys, pydantic; print('compiled:', pydantic.compiled); sys.exit(0 if pydantic.compiled else 1)"
|
|
ls -alh
|
|
ls -alh pydantic/
|
|
|
|
- run: mkdir coverage
|
|
|
|
- name: test
|
|
run: make test
|
|
env:
|
|
COVERAGE_FILE: coverage/.coverage.linux-py${{ matrix.python-version }}-compiled
|
|
CONTEXT: linux-py${{ matrix.python-version }}-compiled
|
|
|
|
- name: store coverage files
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: coverage
|
|
path: coverage
|
|
|
|
test-not-compiled:
|
|
name: test py${{ matrix.python-version }} on ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [ubuntu, macos, windows]
|
|
python-version: ['3.7', '3.8', '3.9', '3.10']
|
|
include:
|
|
- os: ubuntu
|
|
|
|
env:
|
|
PYTHON: ${{ matrix.python-version }}
|
|
OS: ${{ matrix.os }}
|
|
COMPILED: no
|
|
DEPS: yes
|
|
|
|
runs-on: ${{ matrix.os }}-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: set up python
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
|
|
- uses: actions/cache@v3
|
|
id: cache
|
|
with:
|
|
path: ${{ env.pythonLocation }}
|
|
key: >
|
|
test-not-compiled
|
|
${{ runner.os }}
|
|
${{ env.pythonLocation }}
|
|
${{ hashFiles('setup.py') }}
|
|
${{ hashFiles('requirements.txt') }}
|
|
${{ hashFiles('tests/requirements-testing.txt') }}
|
|
|
|
- name: install
|
|
run: make install-testing
|
|
|
|
- run: pip freeze
|
|
|
|
- run: mkdir coverage
|
|
|
|
- name: test with deps
|
|
run: make test
|
|
env:
|
|
COVERAGE_FILE: coverage/.coverage.${{ runner.os }}-py${{ matrix.python-version }}-with-deps
|
|
CONTEXT: ${{ runner.os }}-py${{ matrix.python-version }}-with-deps
|
|
|
|
- name: uninstall deps
|
|
run: pip uninstall -y cython email-validator devtools python-dotenv
|
|
|
|
- name: test without deps
|
|
run: make test
|
|
env:
|
|
COVERAGE_FILE: coverage/.coverage.${{ runner.os }}-py${{ matrix.python-version }}-without-deps
|
|
CONTEXT: ${{ runner.os }}-py${{ matrix.python-version }}-without-deps
|
|
|
|
- name: store coverage files
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: coverage
|
|
path: coverage
|
|
|
|
test-old-mypy:
|
|
name: test mypy v${{ matrix.mypy-version }}
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
mypy-version: ['0.910', '0.921', '0.931', '0.942', '0.950', '0.960']
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: set up python
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: '3.10'
|
|
|
|
- name: install
|
|
run: |
|
|
make install-testing
|
|
pip freeze
|
|
|
|
- name: uninstall deps
|
|
run: pip uninstall -y mypy tomli toml
|
|
|
|
- name: install specific mypy version
|
|
run: pip install mypy==${{ matrix.mypy-version }}
|
|
|
|
- run: mkdir coverage
|
|
|
|
- name: run tests
|
|
run: pytest --cov=pydantic tests/mypy
|
|
env:
|
|
COVERAGE_FILE: coverage/.coverage.linux-py3.10-mypy${{ matrix.mypy-version }}
|
|
CONTEXT: linux-py3.10-mypy${{ matrix.mypy-version }}
|
|
|
|
- name: store coverage files
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: coverage
|
|
path: coverage
|
|
|
|
coverage-combine:
|
|
needs: [test-linux-compiled, test-not-compiled, test-old-mypy]
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- uses: actions/setup-python@v4
|
|
with:
|
|
python-version: '3.8'
|
|
|
|
- name: get coverage files
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: coverage
|
|
path: coverage
|
|
|
|
- run: pip install coverage
|
|
|
|
- run: ls -la coverage
|
|
- run: coverage combine coverage
|
|
- run: coverage report
|
|
- run: coverage html --show-contexts
|
|
|
|
- name: Store coverage html
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: coverage-html
|
|
path: htmlcov
|
|
|
|
test-fastapi:
|
|
name: test fastAPI
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: set up python
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: '3.10'
|
|
|
|
- name: install
|
|
run: make install-testing
|
|
|
|
- name: test
|
|
run: make test-fastapi
|
|
|
|
build:
|
|
name: build py3.${{ matrix.python-version }} on ${{ matrix.platform || matrix.os }}
|
|
needs: [lint, test-linux-compiled, test-not-compiled, test-old-mypy, test-fastapi]
|
|
if: "success() && (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master')"
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [ubuntu , macos , windows]
|
|
python-version: ['7', '8', '9', '10']
|
|
include:
|
|
- os: ubuntu
|
|
platform: linux
|
|
- os: windows
|
|
ls: dir
|
|
|
|
runs-on: ${{ matrix.os }}-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: set up python
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: '3.8'
|
|
|
|
- name: install
|
|
run: pip install -U twine setuptools wheel cibuildwheel
|
|
|
|
- name: build sdist
|
|
if: matrix.os == 'ubuntu' && matrix.python-version == '9'
|
|
run: python setup.py sdist bdist_wheel
|
|
env:
|
|
SKIP_CYTHON: 1
|
|
|
|
- name: build ${{ matrix.platform || matrix.os }} binaries
|
|
run: cibuildwheel --output-dir dist
|
|
env:
|
|
PIP: 'pip'
|
|
CIBW_BUILD: 'cp3${{ matrix.python-version }}-*'
|
|
CIBW_SKIP: '*-win32'
|
|
CIBW_PLATFORM: '${{ matrix.platform || matrix.os }}'
|
|
CIBW_BEFORE_BUILD: 'pip install -U cython'
|
|
CIBW_TEST_REQUIRES: 'pytest==6.2.5 pytest-mock==3.6.1'
|
|
CIBW_TEST_COMMAND: 'pytest {project}/tests'
|
|
CIBW_MANYLINUX_X86_64_IMAGE: 'manylinux2014'
|
|
CIBW_MANYLINUX_I686_IMAGE: 'manylinux2014'
|
|
CIBW_ARCHS_MACOS: 'x86_64 arm64'
|
|
CIBW_TEST_SKIP: '*-macosx_arm64' # see https://cibuildwheel.readthedocs.io/en/stable/faq/#universal2
|
|
|
|
# TODO build windows 32bit binaries
|
|
|
|
- name: list dist files
|
|
run: |
|
|
${{ matrix.ls || 'ls -lh' }} dist/
|
|
twine check dist/*
|
|
|
|
- name: Store dist artifacts
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: pypi_files
|
|
path: dist
|
|
|
|
deploy:
|
|
name: Deploy
|
|
needs: build
|
|
if: "success() && startsWith(github.ref, 'refs/tags/')"
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: set up python
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: '3.8'
|
|
|
|
- name: get dist artifacts
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: pypi_files
|
|
path: dist
|
|
|
|
- name: get docs
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: docs
|
|
path: site
|
|
|
|
- name: install
|
|
run: |
|
|
make install-docs
|
|
pip install -U twine
|
|
|
|
- name: twine check
|
|
run: |
|
|
twine check dist/*
|
|
ls -lh dist
|
|
|
|
- name: check tag
|
|
run: ./tests/check_tag.py
|
|
|
|
- name: upload to pypi
|
|
run: twine upload dist/*
|
|
env:
|
|
TWINE_USERNAME: __token__
|
|
TWINE_PASSWORD: ${{ secrets.pypi_token }}
|
|
|
|
- name: publish docs
|
|
run: make publish-docs
|
|
env:
|
|
NETLIFY: ${{ secrets.netlify_token }}
|