diff --git a/.changes/unreleased/Breaking Changes-20241016-184157.yaml b/.changes/unreleased/Breaking Changes-20241016-184157.yaml new file mode 100644 index 000000000..0a2104e60 --- /dev/null +++ b/.changes/unreleased/Breaking Changes-20241016-184157.yaml @@ -0,0 +1,6 @@ +kind: Breaking Changes +body: Drop support for Python 3.8 +time: 2024-10-16T18:41:57.721002-04:00 +custom: + Author: mikealfare + Issue: "1121" diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e011edc72..d700fa13f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -50,7 +50,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v4.3.0 with: - python-version: '3.8' + python-version: '3.9' - name: Install python dependencies run: | @@ -79,7 +79,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"] + python-version: ["3.9", "3.10", "3.11"] env: TOXENV: "unit" @@ -131,7 +131,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v4.3.0 with: - python-version: '3.8' + python-version: '3.9' - name: Install python dependencies run: | @@ -177,7 +177,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, macos-12, windows-latest] - python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"] + python-version: ["3.9", "3.10", "3.11"] steps: - name: Set up Python ${{ matrix.python-version }} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3d80b955c..261031671 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ # For more on configuring pre-commit hooks (see https://pre-commit.com/) -# Force all unspecified python hooks to run python 3.8 +# Force all unspecified python hooks to run python 3.9 default_language_version: python: python3 @@ -21,7 +21,7 @@ repos: additional_dependencies: ['click~=8.1'] args: - "--line-length=99" - - "--target-version=py38" + - "--target-version=py39" - id: black alias: black-check stages: [manual] diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 57d6ee474..6007ff1d1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -66,7 +66,7 @@ $EDITOR test.env There are a few methods for running tests locally. #### `tox` -`tox` takes care of managing Python virtualenvs and installing dependencies in order to run tests. You can also run tests in parallel, for example you can run unit tests for Python 3.7, Python 3.8, Python 3.9, and `flake8` checks in parallel with `tox -p`. Also, you can run unit tests for specific python versions with `tox -e py37`. The configuration of these tests are located in `tox.ini`. +`tox` takes care of managing Python virtualenvs and installing dependencies in order to run tests. You can also run tests in parallel, for example you can run unit tests for Python 3.9 and `flake8` checks in parallel with `tox -p`. Also, you can run unit tests for specific python versions with `tox -e py39`. The configuration of these tests are located in `tox.ini`. #### `pytest` Finally, you can also run a specific test or group of tests using `pytest` directly. With a Python virtualenv active and dev dependencies installed you can do things like: diff --git a/Makefile b/Makefile index 876440a01..fb251a1b1 100644 --- a/Makefile +++ b/Makefile @@ -37,14 +37,14 @@ linecheck: ## Checks for all Python lines 100 characters or more find dbt -type f -name "*.py" -exec grep -I -r -n '.\{100\}' {} \; .PHONY: unit -unit: ## Runs unit tests with py38. +unit: ## Runs unit tests with py39. @\ - tox -e py38 + tox -e py39 .PHONY: test -test: ## Runs unit tests with py38 and code checks against staged changes. +test: ## Runs unit tests with py39 and code checks against staged changes. @\ - tox -p -e py38; \ + tox -p -e py39; \ pre-commit run black-check --hook-stage manual | grep -v "INFO"; \ pre-commit run flake8-check --hook-stage manual | grep -v "INFO"; \ pre-commit run mypy-check --hook-stage manual | grep -v "INFO" diff --git a/setup.py b/setup.py index a6673f019..07d11d91f 100644 --- a/setup.py +++ b/setup.py @@ -4,9 +4,9 @@ import re # require python 3.7 or newer -if sys.version_info < (3, 7): +if sys.version_info < (3, 9): print("Error: dbt does not support this version of Python.") - print("Please upgrade to Python 3.7 or higher.") + print("Please upgrade to Python 3.9 or higher.") sys.exit(1) # require version of setuptools that supports find_namespace_packages @@ -89,11 +89,9 @@ def _get_dbt_core_version(): "Operating System :: Microsoft :: Windows", "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX :: Linux", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", ], - python_requires=">=3.7", + python_requires=">=3.9", ) diff --git a/tox.ini b/tox.ini index 0747b61f5..1e092db43 100644 --- a/tox.ini +++ b/tox.ini @@ -2,7 +2,7 @@ skipsdist = True envlist = unit, flake8, integration-spark-thrift -[testenv:{unit,py37,py38,py39,py310,py}] +[testenv:{unit,py39,py310,py}] allowlist_externals = /bin/bash commands = /bin/bash -c '{envpython} -m pytest -v {posargs} tests/unit' @@ -16,7 +16,7 @@ deps = [testenv:integration-spark-databricks-http] allowlist_externals = /bin/bash -basepython = python3.8 +basepython = python3.9 commands = /bin/bash -c '{envpython} -m pytest -v --profile databricks_http_cluster {posargs} -n4 tests/functional/adapter/*' passenv = DBT_* @@ -29,7 +29,7 @@ deps = [testenv:integration-spark-databricks-odbc-cluster] allowlist_externals = /bin/bash -basepython = python3.8 +basepython = python3.9 commands = /bin/bash -c '{envpython} -m pytest -v --profile databricks_cluster {posargs} -n4 tests/functional/adapter/*' passenv = DBT_* @@ -43,7 +43,7 @@ deps = [testenv:integration-spark-databricks-odbc-sql-endpoint] allowlist_externals = /bin/bash -basepython = python3.8 +basepython = python3.9 commands = /bin/bash -c '{envpython} -m pytest -v --profile databricks_sql_endpoint {posargs} -n4 tests/functional/adapter/*' passenv = DBT_* @@ -58,7 +58,7 @@ deps = [testenv:integration-spark-thrift] allowlist_externals = /bin/bash -basepython = python3.8 +basepython = python3.9 commands = /bin/bash -c '{envpython} -m pytest -v --profile apache_spark {posargs} -n4 tests/functional/adapter/*' passenv = DBT_*