name: CI on: push: branches: [ 'master', 'stable-*' ] pull_request: branches: [ 'master', 'stable-*' ] jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: "3.11" - name: Install uv run: pip install uv - name: Run Lint run: | make lint test: needs: lint runs-on: ubuntu-latest services: postgres: image: postgres:15 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.11 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", "3.12"] dependencies: [normal] database: [sqlite] include: - python-version: 3.9 dependencies: normal database: postgresql - python-version: 3.9 dependencies: normal database: mariadb - python-version: 3.11 dependencies: normal database: postgresql - python-version: 3.11 dependencies: normal database: mariadb - python-version: 3.7 dependencies: minimal database: sqlite - python-version: 3.9 dependencies: minimal database: sqlite - python-version: "3.10" dependencies: minimal database: sqlite - python-version: "3.11" dependencies: minimal database: sqlite - python-version: "3.11" dependencies: minimal database: postgresql - python-version: "3.11" dependencies: minimal database: mariadb - python-version: "3.12" dependencies: minimal database: sqlite steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 - name: Install uv run: pip install uv - name: install python from uv run: | uv python install ${{ matrix.python-version }} uv venv --python ${{ matrix.python-version }} .venv - name: Change dependencies to minimal supported versions run: sed -i -e 's/>=/==/g; s/~=.*==\(.*\)/==\1/g; s/~=/==/g;' pyproject.toml if: matrix.dependencies == 'minimal' - name: Run tests run: | python --version make test env: TESTING_SQLALCHEMY_DATABASE_URI: ${{ matrix.database == 'sqlite' && 'sqlite:///budget.db' || matrix.database == 'postgresql' && 'postgresql+psycopg2://postgres:ihatemoney@localhost:5432/ihatemoney_ci' || 'mysql+pymysql://root:ihatemoney@localhost:3306/ihatemoney_ci' }} docs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: "3.11" - name: Install uv run: pip install uv - name: Build docs run: make build-docs