name: CI Build on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build: runs-on: ubuntu-latest services: postgres: image: postgres env: POSTGRES_PASSWORD: postgres ports: - 5432:5432 options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 mysql: image: mysql:5.7 env: MYSQL_ALLOW_EMPTY_PASSWORD: yes ports: - 3306:3306 options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 strategy: matrix: python-version: ['3.7', '3.8', '3.9', '3.10'] name: Build with Python ${{ matrix.python-version }} steps: - name: Checkout code uses: actions/checkout@v2 # Fetch all tags and branches because tests rely on it with: fetch-depth: 0 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: python -m pip install tox tox-gh-actions - name: Test with tox ${{ matrix.python-version }} run: tox lint: name: Linting runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up Python 3.8 uses: actions/setup-python@v2 with: python-version: 3.8 - name: Install dependencies run: python -m pip install tox - name: Lint with tox run: tox env: TOXENV: lint coverage: name: Generate coverage runs-on: ubuntu-latest services: postgres: image: postgres env: POSTGRES_PASSWORD: postgres ports: - 5432:5432 options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 mysql: image: mysql:5.7 env: MYSQL_ALLOW_EMPTY_PASSWORD: yes ports: - 3306:3306 options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 steps: - name: Checkout code uses: actions/checkout@v2 # Fetch all tags and branches because tests rely on it with: fetch-depth: 0 - name: Set up Python 3.7 uses: actions/setup-python@v2 with: python-version: 3.7 - name: Install dependencies and coverage run: python -m pip install tox - name: Test with tox with coverage run: tox env: TOXENV: coverage - name: Upload coverage to Codecov uses: codecov/codecov-action@v2.1.0 with: token: ${{ secrets.CODECOV_TOKEN }} file: ./coverage.xml