name: Test & Docs on: push: branches: [ master ] pull_request: branches: [ master ] jobs: build: runs-on: ubuntu-latest # Use postgresql and MariaDB versions of Debian buster services: postgres: image: postgres:11 ports: - 5432:5432 env: POSTGRES_USER: postgres POSTGRES_PASSWORD: ihatemoney POSTGRES_DB: ihatemoney_ci options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 mariadb: image: mariadb:10.3 env: MARIADB_ROOT_PASSWORD: ihatemoney MARIADB_DATABASE: ihatemoney_ci options: >- --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 ports: - 3306:3306 strategy: fail-fast: false matrix: python-version: [3.7, 3.8, 3.9, "3.10", "3.11"] dependencies: [normal] database: [sqlite] # Test other databases only with one version of Python (Debian buster has 3.7) include: - python-version: 3.7 dependencies: normal database: postgresql - python-version: 3.7 dependencies: normal database: mariadb # Try a few variants with the minimal versions supported - python-version: 3.7 dependencies: minimal database: sqlite - python-version: 3.7 dependencies: minimal database: postgresql - python-version: 3.7 dependencies: minimal database: mariadb - python-version: 3.9 dependencies: minimal database: sqlite - python-version: "3.10" dependencies: minimal database: sqlite - python-version: "3.11" dependencies: minimal database: sqlite steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} cache: 'pip' cache-dependency-path: '**/setup.cfg' - name: Change dependencies to minimal supported versions run: sed -i -e 's/>=/==/g; s/~=.*==\(.*\)/==\1/g; s/~=/==/g;' setup.cfg if: matrix.dependencies == 'minimal' - name: Install dependencies run: | python -m pip install --upgrade pip python -m pip install tox # Run tox using the version of Python in `PATH` - name: Run Tox with sqlite run: tox -e py if: matrix.database == 'sqlite' env: TESTING_SQLALCHEMY_DATABASE_URI: 'sqlite:///budget.db' - name: Run Tox with postgresql run: tox -e py if: matrix.database == 'postgresql' env: TESTING_SQLALCHEMY_DATABASE_URI: 'postgresql+psycopg2://postgres:ihatemoney@localhost:5432/ihatemoney_ci' - name: Run Tox with mariadb run: tox -e py if: matrix.database == 'mariadb' env: TESTING_SQLALCHEMY_DATABASE_URI: 'mysql+pymysql://root:ihatemoney@localhost:3306/ihatemoney_ci' - name: Run Lint & Docs run: tox -e lint_docs if: matrix.python-version == '3.8' - name: Run vermin to check Python compat run: | python -m pip install vermin vermin --no-tips --violations -t=3.6 . if: matrix.python-version == '3.10'