diff --git a/docker/Jenkinsfile-build-docker b/docker/Jenkinsfile-build-docker
index 61f541ee9575..c525ef3433b9 100644
--- a/docker/Jenkinsfile-build-docker
+++ b/docker/Jenkinsfile-build-docker
@@ -21,7 +21,8 @@ IMAGE_NAME_PREFIX = 'harbor.h2o.ai/opsh2oai/h2o-3'
JDK_VERSIONS = ['8', '10', '11', '12', '13', '14', '15', '16', '17']
JDK_VERSIONS_PY_R = ['8', '11', '17'] // stable, last-supported, latest
-PYTHON_VERSIONS = ['3.6', '3.7', '3.8', '3.9', '3.10', '3.11']
+//PYTHON_VERSIONS = ['3.6', '3.7', '3.8', '3.9', '3.10', '3.11', '3.12']
+PYTHON_VERSIONS = ['3.12']
R_VERSION = ['3.3.3', '3.4.1', '3.5.3', '3.6.2', '4.0.2', '4.4.0']
def pipelineContext
diff --git a/docker/Makefile b/docker/Makefile
index 9847d489c01c..385f05715ad1 100644
--- a/docker/Makefile
+++ b/docker/Makefile
@@ -167,6 +167,22 @@ ifeq ($(shell echo $(PUSH) | tr [:upper:] [:lower:] ),true)
docker push harbor.h2o.ai/opsh2oai/h2o-3/dev-python-3.11-jdk-$*:$(VERSION)
endif
+ifneq ($(CI), 1)
+dev-python-3.12-jdk-%: dev-python-3.12
+endif
+dev-python-3.12-jdk-%:
+ docker build -t harbor.h2o.ai/opsh2oai/h2o-3/dev-python-3.12-jdk-$*:$(VERSION) \
+ $(NO_CACHE) \
+ -f jenkins-images/Dockerfile-jdk-others \
+ --build-arg FROM_VERSION=$(VERSION) \
+ --build-arg FROM_IMAGE=harbor.h2o.ai/opsh2oai/h2o-3/dev-python-3.12 \
+ --build-arg INSTALL_JAVA_VERSION=$* \
+ --build-arg H2O_BRANCH=$(H2O_BRANCH) \
+ .
+ifeq ($(shell echo $(PUSH) | tr [:upper:] [:lower:] ),true)
+ docker push harbor.h2o.ai/opsh2oai/h2o-3/dev-python-3.12-jdk-$*:$(VERSION)
+endif
+
ifneq ($(CI), 1)
dev-mojocompat: dev-python-3.7
diff --git a/h2o-dist/index.html b/h2o-dist/index.html
index b2685765d2bf..d8d303c5597d 100644
--- a/h2o-dist/index.html
+++ b/h2o-dist/index.html
@@ -607,7 +607,7 @@
Use H2O directly from Python
-
1. Prerequisite: Python 3.6.x to 3.11.x
+
1. Prerequisite: Python 3.6.x to 3.12.x
2. Install dependencies (prepending with `sudo` if needed):
diff --git a/h2o-docs/src/product/welcome.rst b/h2o-docs/src/product/welcome.rst
index 391b0cdbb6bf..7cec10adc219 100644
--- a/h2o-docs/src/product/welcome.rst
+++ b/h2o-docs/src/product/welcome.rst
@@ -26,7 +26,7 @@ At a minimum, we recommend the following for compatibility with H2O:
- **Languages**: R and Python are not required to use H2O unless you want to use H2O in those environments, but Java is always required (see `below `__).
- R version 3 or later
- - Python 3.6.x, 3.7.x, 3.8.x, 3.9.x, 3.10.x, 3.11.x
+ - Python 3.6.x, 3.7.x, 3.8.x, 3.9.x, 3.10.x, 3.11.x, 3.12.x
- **Browser**: An internet browser is required to use H2O's web UI, Flow. Supported versions include the latest version of Chrome, Firefox, Safari, or Internet Explorer.
diff --git a/h2o-py/setup.py b/h2o-py/setup.py
index 15b45efd32e5..e007e057b610 100644
--- a/h2o-py/setup.py
+++ b/h2o-py/setup.py
@@ -72,7 +72,8 @@
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
- "Programming Language :: Python :: 3.11"
+ "Programming Language :: Python :: 3.11",
+ "Programming Language :: Python :: 3.12"
],
keywords='machine learning, data mining, statistical analysis, modeling, big data, distributed, parallel',
diff --git a/scripts/jenkins/groovy/buildConfig.groovy b/scripts/jenkins/groovy/buildConfig.groovy
index a212fe3b2150..b391890960ab 100644
--- a/scripts/jenkins/groovy/buildConfig.groovy
+++ b/scripts/jenkins/groovy/buildConfig.groovy
@@ -52,7 +52,7 @@ class BuildConfig {
public static final String RELEASE_BRANCH_PREFIX = 'rel-'
public static final String DEFAULT_PYTHON_VERSION = '3.6'
- public static final List PYTHON_VERSIONS = ['3.6', '3.7', '3.8', '3.9', '3.10', '3.11']
+ public static final List PYTHON_VERSIONS = ['3.6', '3.7', '3.8', '3.9', '3.10', '3.11', '3.12']
public static final List R_VERSIONS = ['3.3.3', '3.4.1']
public static final String MAKEFILE_PATH = 'scripts/jenkins/Makefile.jenkins'
diff --git a/scripts/jenkins/groovy/defineTestStages.groovy b/scripts/jenkins/groovy/defineTestStages.groovy
index d009bdb6905a..5a4b0c6646a8 100644
--- a/scripts/jenkins/groovy/defineTestStages.groovy
+++ b/scripts/jenkins/groovy/defineTestStages.groovy
@@ -42,7 +42,7 @@ def call(final pipelineContext) {
component: pipelineContext.getBuildConfig().COMPONENT_PY
],
[
- stageName: 'Py3.11 Smoke', target: 'test-py-smoke', pythonVersion: '3.11', timeoutValue: 8,
+ stageName: 'Py3.12 Smoke', target: 'test-py-smoke', pythonVersion: '3.12', timeoutValue: 8,
component: pipelineContext.getBuildConfig().COMPONENT_PY
],
[
@@ -558,6 +558,22 @@ def call(final pipelineContext) {
stageName: 'Py3.11 Medium-large', target: 'test-pyunit-medium-large', pythonVersion: '3.11',
timeoutValue: 600, component: pipelineContext.getBuildConfig().COMPONENT_PY
],
+ [
+ stageName: 'Py3.12 Single Node', target: 'test-pyunit-single-node', pythonVersion: '3.12',
+ timeoutValue: 40, component: pipelineContext.getBuildConfig().COMPONENT_PY
+ ],
+ [
+ stageName: 'Py3.12 Fault Tolerance', target: 'test-pyunit-fault-tolerance', pythonVersion: '3.12',
+ timeoutValue: 30, component: pipelineContext.getBuildConfig().COMPONENT_PY
+ ],
+ [
+ stageName: 'Py3.12 AutoML', target: 'test-pyunit-automl', pythonVersion: '3.12',
+ timeoutValue: 100, component: pipelineContext.getBuildConfig().COMPONENT_PY
+ ],
+ [
+ stageName: 'Py3.12 Medium-large', target: 'test-pyunit-medium-large', pythonVersion: '3.12',
+ timeoutValue: 600, component: pipelineContext.getBuildConfig().COMPONENT_PY
+ ],
[ // These run with reduced number of file descriptors for early detection of FD leaks
stageName: 'XGBoost Stress tests', target: 'test-pyunit-xgboost-stress', pythonVersion: '3.6', timeoutValue: 40,
component: pipelineContext.getBuildConfig().COMPONENT_PY, customDockerArgs: [ '--ulimit nofile=150:150' ]