name: Tests on: push: paths-ignore: - 'docs/**' branches: - master pull_request: paths-ignore: - 'docs/**' branches: - '**' jobs: Linting: name: Linting runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: "3.11" - name: "Install pre-commit" run: pip install pre-commit - name: "Install Rust toolchain" run: rustup component add rustfmt clippy - run: pre-commit run --all-files Tests: name: ${{ matrix.os }} / ${{ matrix.python-version }} runs-on: ${{ matrix.os }}-latest strategy: matrix: os: [Ubuntu, MacOS, Windows] python-version: [3.8, 3.9, "3.10", "3.11", "3.12"] defaults: run: shell: bash steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} allow-prereleases: true - name: Get full Python version id: full-python-version run: | echo ::set-output name=version::$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") - name: Install poetry run: | curl -fsS https://install.python-poetry.org | python - --preview -y - name: Update PATH if: ${{ matrix.os != 'Windows' }} run: echo "$HOME/.local/bin" >> $GITHUB_PATH - name: Update Path for Windows if: ${{ matrix.os == 'Windows' }} run: echo "$APPDATA\Python\Scripts" >> $GITHUB_PATH - name: Configure poetry run: poetry config virtualenvs.in-project true - name: Set up cache uses: actions/cache@v3 id: cache with: path: .venv key: venv-${{ runner.os }}-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} - name: Ensure cache is healthy # MacOS does not come with `timeout` command out of the box if: steps.cache.outputs.cache-hit == 'true' && matrix.os != 'MacOS' run: timeout 10s poetry run pip --version || rm -rf .venv - name: Install runtime, testing, and typing dependencies run: poetry install --only main --only test --only typing --only build --no-root -vvv - name: Install project run: poetry run maturin develop - name: Run type checking run: poetry run mypy - name: Uninstall typing dependencies # This ensures pendulum runs without typing_extensions installed run: poetry install --only main --only test --only build --sync --no-root -vvv - name: Test Pure Python run: | PENDULUM_EXTENSIONS=0 poetry run pytest -q tests - name: Test run: | poetry run pytest -q tests