This is an automated email from the ASF dual-hosted git repository.

yhu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git


The following commit(s) were added to refs/heads/master by this push:
     new 7db76df6936 Disable triggering most IO_Direct precommit on buildSrc 
and core change (#25612)
7db76df6936 is described below

commit 7db76df69361e1259f304e5781b299c83b78eab1
Author: Yi Hu <ya...@google.com>
AuthorDate: Mon Feb 27 18:00:42 2023 -0500

    Disable triggering most IO_Direct precommit on buildSrc and core change 
(#25612)
    
    * Disable triggering most IO_Direct precommit on buildSrc and core change
    
    * Add jobs to README
    
    * Create an umbrella IO job
    
    * Fix readme: IOs job does not have cron
---
 .test-infra/jenkins/PrecommitJobBuilder.groovy     |  18 ++-
 .test-infra/jenkins/README.md                      |  31 ++++-
 .../job_PreCommit_Java_Amqp_IO_Direct.groovy       |  41 ------
 .../job_PreCommit_Java_Cassandra_IO_Direct.groovy  |  42 ------
 .../job_PreCommit_Java_Cdap_IO_Direct.groovy       |  44 -------
 .../job_PreCommit_Java_Clickhouse_IO_Direct.groovy |  41 ------
 .../job_PreCommit_Java_Debezium_IO_Direct.groovy   |  45 -------
 ...b_PreCommit_Java_ElasticSearch_IO_Direct.groovy |  48 -------
 .../job_PreCommit_Java_HCatalog_IO_Direct.groovy   |  43 ------
 .../job_PreCommit_Java_Hbase_IO_Direct.groovy      |  43 ------
 .test-infra/jenkins/job_PreCommit_Java_IOs.groovy  | 146 +++++++++++++++++++++
 .../job_PreCommit_Java_InfluxDb_IO_Direct.groovy   |  42 ------
 .../job_PreCommit_Java_Jms_IO_Direct.groovy        |  41 ------
 .../job_PreCommit_Java_Kudu_IO_Direct.groovy       |  42 ------
 .../job_PreCommit_Java_Mqtt_IO_Direct.groovy       |  42 ------
 .../job_PreCommit_Java_Neo4j_IO_Direct.groovy      |  44 -------
 .../job_PreCommit_Java_RabbitMq_IO_Direct.groovy   |  42 ------
 .../job_PreCommit_Java_Redis_IO_Direct.groovy      |  42 ------
 ...job_PreCommit_Java_Singlestore_IO_Direct.groovy |  43 ------
 .../job_PreCommit_Java_Snowflake_IO_Direct.groovy  |  45 -------
 .../job_PreCommit_Java_Solr_IO_Direct.groovy       |  42 ------
 .../job_PreCommit_Java_Splunk_IO_Direct.groovy     |  41 ------
 .../job_PreCommit_Java_Thrift_IO_Direct.groovy     |  41 ------
 .../job_PreCommit_Java_Tika_IO_Direct.groovy       |  41 ------
 build.gradle.kts                                   |  30 +++++
 25 files changed, 221 insertions(+), 899 deletions(-)

diff --git a/.test-infra/jenkins/PrecommitJobBuilder.groovy 
b/.test-infra/jenkins/PrecommitJobBuilder.groovy
index 2d7ef1eee1f..844473114de 100644
--- a/.test-infra/jenkins/PrecommitJobBuilder.groovy
+++ b/.test-infra/jenkins/PrecommitJobBuilder.groovy
@@ -47,13 +47,27 @@ class PrecommitJobBuilder {
   /** Whether to trigger on new PR commits. Useful to set to false when 
testing new jobs. */
   boolean commitTriggering = true
 
+  /**
+   * Whether to trigger on cron run. Useful to set jobs that runs tasks 
covered by
+   * other test suites but are deemed to triggered on pull request only.
+   */
+  boolean cronTriggering = true
+
+  /**
+   * Whether to configure defaultPathTriggers.
+   * Set to false for PreCommit only runs on certain code path change.
+   */
+  boolean defaultPathTriggering = true
+
   /**
    * Define a set of pre-commit jobs.
    *
    * @param additionalCustomization Job DSL closure with additional 
customization to apply to the job.
    */
   void build(Closure additionalCustomization = {}) {
-    defineCronJob additionalCustomization
+    if (cronTriggering) {
+      defineCronJob additionalCustomization
+    }
     if (commitTriggering) {
       defineCommitJob additionalCustomization
     }
@@ -82,7 +96,7 @@ class PrecommitJobBuilder {
       '^gradle.bat$',
       '^settings.gradle.kts$'
     ]
-    if (triggerPathPatterns) {
+    if (defaultPathTriggering && triggerPathPatterns) {
       triggerPathPatterns.addAll defaultPathTriggers
     }
     job.with {
diff --git a/.test-infra/jenkins/README.md b/.test-infra/jenkins/README.md
index a99d4b0c9bd..9b01da4b5a9 100644
--- a/.test-infra/jenkins/README.md
+++ b/.test-infra/jenkins/README.md
@@ -30,15 +30,42 @@ Beam Jenkins overview page: 
[link](https://ci-beam.apache.org/)
 | beam_PreCommit_CommunityMetrics | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_CommunityMetrics_Commit/),
 [cron](https://ci-beam.apache.org/job/beam_PreCommit_CommunityMetrics_Cron/), 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_CommunityMetrics_Phrase/)
 | `Run CommunityMetrics PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_CommunityMetrics_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_CommunityMetrics_Cron)
 |
 | beam_PreCommit_Go | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Go_Commit/), 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Go_Cron/), 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Go_Phrase/) | `Run Go 
PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Go_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_Go_Cron)
 |
 | beam_PreCommit_Java | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Commit/), 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Cron/), 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Phrase/) | `Run 
Java PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_Java_Cron)
 |
-| beam_PreCommit_Java_Debezium_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Debezium_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Debezium_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Debezium_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Debezium_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_Pr
 [...]
 | beam_PreCommit_Java_Examples_Dataflow | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Examples_Dataflow_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Examples_Dataflow_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Examples_Dataflow_Phrase/)
 | `Run Java_Examples_Dataflow PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Examples_Dataflow_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommi
 [...]
 | beam_PreCommit_Java_Examples_Dataflow_Java11 | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Examples_Dataflow_Java11_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Examples_Dataflow_Java11_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Examples_Dataflow_Java11_Phrase/)
 | `Run Java_Examples_Dataflow_Java11 PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Examples_Dataflow_Java11_Cron/badge/icon)](ht
 [...]
+| beam_PreCommit_Java_Amazon-Web-Services_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Amazon-Web-Services_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Amazon-Web-Services_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Amazon-Web-Services_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Amazon-Web-Services_IO_Direct_C
 [...]
+| beam_PreCommit_Java_Amazon-Web-Services2_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Amazon-Web-Services2_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Amazon-Web-Services2_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Amazon-Web-Services2_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Amazon-Web-Services2_IO_Dir
 [...]
+| beam_PreCommit_Java_Amqp_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Amqp_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Amqp_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Amqp_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Amqp_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_Java_Amqp_IO
 [...]
+| beam_PreCommit_Java_Azure_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Azure_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Azure_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Azure_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Azure_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_Java_Az
 [...]
+| beam_PreCommit_Java_Cassandra_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Cassandra_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Cassandra_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Cassandra_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Cassandra_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/be
 [...]
+| beam_PreCommit_Java_Cdap_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Cdap_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Cdap_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Cdap_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Cdap_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_Java_Cdap_IO
 [...]
+| beam_PreCommit_Java_Clickhouse_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Clickhouse_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Clickhouse_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Clickhouse_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Clickhouse_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/j
 [...]
+| beam_PreCommit_Java_Debezium_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Debezium_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Debezium_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Debezium_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Debezium_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_Pr
 [...]
+| beam_PreCommit_Java_ElasticSearch_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_ElasticSearch_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_ElasticSearch_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_ElasticSearch_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_ElasticSearch_IO_Direct_Cron/badge/icon)](https://ci-be
 [...]
 | beam_PreCommit_Java_GCP_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_GCP_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_GCP_IO_Direct_Cron/), 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_GCP_IO_Direct_Phrase/)
 | `Run Java_GCP_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_GCP_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_Java_GCP_IO_Direct_Cron/)
 |
+| beam_PreCommit_Java_Hadoop_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Hadoop_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Hadoop_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Hadoop_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Hadoop_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_Ja
 [...]
+| beam_PreCommit_Java_HBase_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_HBase_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_HBase_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_HBase_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_HBase_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_Java_HB
 [...]
+| beam_PreCommit_Java_HCatalog_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_HCatalog_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_HCatalog_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_HCatalog_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_HCatalog_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_Pr
 [...]
+| beam_PreCommit_Java_InfluxDb_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_InfluxDb_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_InfluxDb_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_InfluxDb_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_InfluxDb_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_Pr
 [...]
 | beam_PreCommit_Java_JDBC_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_JDBC_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_JDBC_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_JDBC_IO_Direct_Phrase/)
 | `Run Java_JDBC_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_JDBC_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_Java_JDBC_IO_Dir
 [...]
+| beam_PreCommit_Java_Jms_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Jms_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Jms_IO_Direct_Cron/), 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Jms_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Jms_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_Java_Jms_IO_Direc
 [...]
 | beam_PreCommit_Java_Kafka_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Kafka_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Kafka_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Kafka_IO_Direct_Phrase/)
 | `Run Java_Kafka_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Kafka_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_Java_Kafka
 [...]
 | beam_PreCommit_Java_Kinesis_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Kinesis_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Kinesis_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Kinesis_IO_Direct_Phrase/)
 | `Run Java_Kinesis_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Kinesis_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommi
 [...]
+| beam_PreCommit_Java_Kudu_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Kudu_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Kudu_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Kudu_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Kudu_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_Java_Kudu_IO
 [...]
+| beam_PreCommit_Java_MongoDb_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_MongoDb_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_MongoDb_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_MongoDb_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_MongoDb_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreComm
 [...]
+| beam_PreCommit_Java_Mqtt_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Mqtt_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Mqtt_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Mqtt_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Mqtt_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_Java_Mqtt_IO
 [...]
+| beam_PreCommit_Java_Neo4j_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Neo4j_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Neo4j_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Neo4j_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Neo4j_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_Java_Ne
 [...]
 | beam_PreCommit_Java_Neo4j_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Neo4j_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Neo4j_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Neo4j_IO_Direct_Phrase/)
 | `Run Java_Neo4j_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Neo4j_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_Java_Neo4j
 [...]
+| beam_PreCommit_Java_Parquet_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Parquet_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Parquet_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Parquet_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Parquet_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreComm
 [...]
+| beam_PreCommit_Java_Pulsar_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Pulsar_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Pulsar_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Pulsar_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Pulsar_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_Ja
 [...]
+| beam_PreCommit_Java_RabbitMq_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_RabbitMq_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_RabbitMq_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_RabbitMq_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_RabbitMq_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_Pr
 [...]
+| beam_PreCommit_Java_Redis_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Redis_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Redis_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Redis_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Redis_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_Java_Re
 [...]
 | beam_PreCommit_Java_SingleStore_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_SingleStore_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_SingleStore_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_SingleStore_IO_Direct_Phrase/)
 | `Run Java_SingleStore_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_SingleStore_IO_Direct_Cron/badge/icon)](https://ci-beam.apac
 [...]
+| beam_PreCommit_Java_Snowflake_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Snowflake_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Snowflake_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Snowflake_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Snowflake_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/be
 [...]
+| beam_PreCommit_Java_Solr_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Solr_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Solr_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Solr_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Solr_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_Java_Solr_IO
 [...]
+| beam_PreCommit_Java_Splunk_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Splunk_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Splunk_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Splunk_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Splunk_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_Ja
 [...]
+| beam_PreCommit_Java_Thrift_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Thrift_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Thrift_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Thrift_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Thrift_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_Ja
 [...]
+| beam_PreCommit_Java_Tika_IO_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_Tika_IO_Direct_Commit/),
 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Java_Tika_IO_Direct_Cron/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_Tika_IO_Direct_Phrase/)
 | `Run Java_Debezium_IO_Direct PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Java_Tika_IO_Direct_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_Java_Tika_IO
 [...]
+| beam_PreCommit_Java_IOs_Direct | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Java_IOs_Direct_Commit/),
 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Java_IOs_Direct_Phrase/) 
| `Run Java_IOs_Direct PreCommit` | |
 | beam_PreCommit_Portable_Python | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Portable_Python_Commit/),
 [cron](https://ci-beam.apache.org/job/beam_PreCommit_Portable_Python_Cron/), 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Portable_Python_Phrase/) 
| `Run Portable_Python PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Portable_Python_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_Portable_Python_Cron)
 |
 | beam_PreCommit_PythonLint | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_PythonLint_Commit/), 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_PythonLint_Cron/), 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_PythonLint_Phrase/) | 
`Run PythonLint PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_PythonLint_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_PythonLint_Cron)
 |
 | beam_PreCommit_Python | 
[commit](https://ci-beam.apache.org/job/beam_PreCommit_Python_Commit/), 
[cron](https://ci-beam.apache.org/job/beam_PreCommit_Python_Cron/), 
[phrase](https://ci-beam.apache.org/job/beam_PreCommit_Python_Phrase/) | `Run 
Python PreCommit` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PreCommit_Python_Cron/badge/icon)](https://ci-beam.apache.org/job/beam_PreCommit_Python_Cron)
 |
@@ -156,7 +183,7 @@ Beam Jenkins overview page: 
[link](https://ci-beam.apache.org/)
 | beam_PerformanceTests_Compressed_TextIOIT | 
[cron](https://ci-beam.apache.org/job/beam_PerformanceTests_Compressed_TextIOIT/),
 
[hdfs_cron](https://ci-beam.apache.org/job/beam_PerformanceTests_Compressed_TextIOIT_HDFS/)
 | `Run Java CompressedTextIO Performance Test` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PerformanceTests_Compressed_TextIOIT/badge/icon)](https://ci-beam.apache.org/job/beam_PerformanceTests_Compressed_TextIOIT)
 [![Build Status](https://ci-beam.apache.org/j [...]
 | beam_PerformanceTests_HadoopFormat | 
[cron](https://ci-beam.apache.org/job/beam_PerformanceTests_HadoopFormat/) | 
`Run Java HadoopFormatIO Performance Test` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PerformanceTests_HadoopFormat/badge/icon)](https://ci-beam.apache.org/job/beam_PerformanceTests_HadoopFormat)
 |
 | beam_PerformanceTests_JDBC | 
[cron](https://ci-beam.apache.org/job/beam_PerformanceTests_JDBC/) | `Run Java 
JdbcIO Performance Test` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PerformanceTests_JDBC/badge/icon)](https://ci-beam.apache.org/job/beam_PerformanceTests_JDBC)
 |
-| beam_PerformanceTests_KafkaIOIT | 
[cron](https://ci-beam.apache.org/job/beam_PerformanceTests_Kafka_IO/) | `Run 
Java KafkaIO Performance Test` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PerformanceTests_Kafka_IO/badge/icon)](https://ci-beam.apache.org/job/beam_PerformanceTests_Kafka_IO)
 [![Build 
Status](https://ci-beam.apache.org/job/beam_PerformanceTests_Kafka_IO/badge/icon)](https://ci-beam.apache.org/job/beam_PerformanceTests_Kafka_IO)
 |
+| beam_PerformanceTests_KafkaIOIT | 
[cron](https://ci-beam.apache.org/job/beam_PerformanceTests_Kafka_IO/) | `Run 
Java KafkaIO Performance Test` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PerformanceTests_Kafka_IO/badge/icon)](https://ci-beam.apache.org/job/beam_PerformanceTests_Kafka_IO)
 |
 | beam_PerformanceTests_ManyFiles_TextIOIT | 
[cron](https://ci-beam.apache.org/job/beam_PerformanceTests_ManyFiles_TextIOIT/),
 
[hdfs_cron](https://ci-beam.apache.org/job/beam_PerformanceTests_ManyFiles_TextIOIT_HDFS/)
 | `Run Java ManyFilesTextIO Performance Test` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PerformanceTests_ManyFiles_TextIOIT/badge/icon)](https://ci-beam.apache.org/job/beam_PerformanceTests_ManyFiles_TextIOIT)
 [![Build Status](https://ci-beam.apache.org/job/bea [...]
 | beam_PerformanceTests_MongoDBIOIT | 
[cron](https://ci-beam.apache.org/job/beam_PerformanceTests_MongoDBIO_IT/) | 
`Run Java MongoDBIO Performance Test` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PerformanceTests_MongoDBIO_IT/badge/icon)](https://ci-beam.apache.org/job/beam_PerformanceTests_MongoDBIO_IT)
 |
 | beam_PerformanceTests_ParquetIOIT | 
[cron](https://ci-beam.apache.org/job/beam_PerformanceTests_ParquetIOIT/), 
[hdfs_cron](https://ci-beam.apache.org/job/beam_PerformanceTests_ParquetIOIT_HDFS/)
 | `Run Java ParquetIO Performance Test` | [![Build 
Status](https://ci-beam.apache.org/job/beam_PerformanceTests_ParquetIOIT/badge/icon)](https://ci-beam.apache.org/job/beam_PerformanceTests_ParquetIOIT)
 [![Build 
Status](https://ci-beam.apache.org/job/beam_PerformanceTests_ParquetIOIT_HDFS/badge
 [...]
diff --git a/.test-infra/jenkins/job_PreCommit_Java_Amqp_IO_Direct.groovy 
b/.test-infra/jenkins/job_PreCommit_Java_Amqp_IO_Direct.groovy
deleted file mode 100644
index 07225b2da1a..00000000000
--- a/.test-infra/jenkins/job_PreCommit_Java_Amqp_IO_Direct.groovy
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import PrecommitJobBuilder
-
-PrecommitJobBuilder builder = new PrecommitJobBuilder(
-    scope: this,
-    nameBase: 'Java_Amqp_IO_Direct',
-    gradleTasks: [
-      ':sdks:java:io:amqp:build',
-    ],
-    gradleSwitches: [
-      '-PdisableSpotlessCheck=true',
-      '-PdisableCheckStyle=true'
-    ], // spotless checked in separate pre-commit
-    triggerPathPatterns: [
-      '^sdks/java/core/src/main/.*$',
-      '^sdks/java/io/amqp/.*$',
-    ],
-    timeoutMins: 60,
-    )
-builder.build {
-  publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
-  }
-}
diff --git a/.test-infra/jenkins/job_PreCommit_Java_Cassandra_IO_Direct.groovy 
b/.test-infra/jenkins/job_PreCommit_Java_Cassandra_IO_Direct.groovy
deleted file mode 100644
index 2f081e011e5..00000000000
--- a/.test-infra/jenkins/job_PreCommit_Java_Cassandra_IO_Direct.groovy
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import PrecommitJobBuilder
-
-PrecommitJobBuilder builder = new PrecommitJobBuilder(
-    scope: this,
-    nameBase: 'Java_Cassandra_IO_Direct',
-    gradleTasks: [
-      ':sdks:java:io:cassandra:build',
-    ],
-    gradleSwitches: [
-      '-PdisableSpotlessCheck=true',
-      '-PdisableCheckStyle=true'
-    ], // spotless checked in separate pre-commit
-    triggerPathPatterns: [
-      '^sdks/java/core/src/main/.*$',
-      '^sdks/java/io/common/.*$',
-      '^sdks/java/io/cassandra/.*$',
-    ],
-    timeoutMins: 60,
-    )
-builder.build {
-  publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
-  }
-}
diff --git a/.test-infra/jenkins/job_PreCommit_Java_Cdap_IO_Direct.groovy 
b/.test-infra/jenkins/job_PreCommit_Java_Cdap_IO_Direct.groovy
deleted file mode 100644
index e6c88011ef0..00000000000
--- a/.test-infra/jenkins/job_PreCommit_Java_Cdap_IO_Direct.groovy
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import PrecommitJobBuilder
-
-PrecommitJobBuilder builder = new PrecommitJobBuilder(
-    scope: this,
-    nameBase: 'Java_Cdap_IO_Direct',
-    gradleTasks: [
-      ':sdks:java:io:cdap:build',
-    ],
-    gradleSwitches: [
-      '-PdisableSpotlessCheck=true',
-      '-PdisableCheckStyle=true'
-    ], // spotless checked in separate pre-commit
-    triggerPathPatterns: [
-      '^sdks/java/core/src/main/.*$',
-      '^sdks/java/io/common/.*$',
-      '^sdks/java/io/hadoop-common/.*$',
-      '^sdks/java/io/hadoop-format/.*$',
-      '^sdks/java/io/cdap/.*$',
-    ],
-    timeoutMins: 60,
-    )
-builder.build {
-  publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
-  }
-}
diff --git a/.test-infra/jenkins/job_PreCommit_Java_Clickhouse_IO_Direct.groovy 
b/.test-infra/jenkins/job_PreCommit_Java_Clickhouse_IO_Direct.groovy
deleted file mode 100644
index 1c5852cdfae..00000000000
--- a/.test-infra/jenkins/job_PreCommit_Java_Clickhouse_IO_Direct.groovy
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import PrecommitJobBuilder
-
-PrecommitJobBuilder builder = new PrecommitJobBuilder(
-    scope: this,
-    nameBase: 'Java_Clickhouse_IO_Direct',
-    gradleTasks: [
-      ':sdks:java:io:clickhouse:build',
-    ],
-    gradleSwitches: [
-      '-PdisableSpotlessCheck=true',
-      '-PdisableCheckStyle=true'
-    ], // spotless checked in separate pre-commit
-    triggerPathPatterns: [
-      '^sdks/java/core/src/main/.*$',
-      '^sdks/java/io/pulsar/.*$',
-    ],
-    timeoutMins: 60,
-    )
-builder.build {
-  publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
-  }
-}
diff --git a/.test-infra/jenkins/job_PreCommit_Java_Debezium_IO_Direct.groovy 
b/.test-infra/jenkins/job_PreCommit_Java_Debezium_IO_Direct.groovy
deleted file mode 100644
index ae404325a4f..00000000000
--- a/.test-infra/jenkins/job_PreCommit_Java_Debezium_IO_Direct.groovy
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import PrecommitJobBuilder
-
-PrecommitJobBuilder builder = new PrecommitJobBuilder(
-    scope: this,
-    nameBase: 'Java_Debezium_IO_Direct',
-    gradleTasks: [
-      ':sdks:java:io:debezium:build',
-      ':sdks:java:io:debezium:expansion-service:build',
-      ':sdks:java:io:debezium:integrationTest',
-    ],
-    gradleSwitches: [
-      '-PdisableSpotlessCheck=true',
-      '-PdisableCheckStyle=true'
-    ], // spotless checked in separate pre-commit
-    triggerPathPatterns: [
-      '^runners/google-cloud-dataflow-java/.*$',
-      '^sdks/java/core/src/main/.*$',
-      '^sdks/java/io/common/.*$',
-      '^sdks/java/io/debezium/.*$',
-    ],
-    timeoutMins: 60,
-    )
-builder.build {
-  publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
-  }
-}
diff --git 
a/.test-infra/jenkins/job_PreCommit_Java_ElasticSearch_IO_Direct.groovy 
b/.test-infra/jenkins/job_PreCommit_Java_ElasticSearch_IO_Direct.groovy
deleted file mode 100644
index ecc733f0f81..00000000000
--- a/.test-infra/jenkins/job_PreCommit_Java_ElasticSearch_IO_Direct.groovy
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import PrecommitJobBuilder
-
-PrecommitJobBuilder builder = new PrecommitJobBuilder(
-    scope: this,
-    nameBase: 'Java_ElasticSearch_IO_Direct',
-    gradleTasks: [
-      ':sdks:java:io:elasticsearch-tests:elasticsearch-tests-5:build',
-      ':sdks:java:io:elasticsearch-tests:elasticsearch-tests-6:build',
-      ':sdks:java:io:elasticsearch-tests:elasticsearch-tests-7:build',
-      ':sdks:java:io:elasticsearch-tests:elasticsearch-tests-8:build',
-      ':sdks:java:io:elasticsearch-tests:elasticsearch-tests-common:build',
-      ':sdks:java:io:elasticsearch:build',
-    ],
-    gradleSwitches: [
-      '-PdisableSpotlessCheck=true',
-      '-PdisableCheckStyle=true'
-    ], // spotless checked in separate pre-commit
-    triggerPathPatterns: [
-      '^sdks/java/core/src/main/.*$',
-      '^sdks/java/io/common/.*$',
-      '^sdks/java/io/elasticsearch/.*$',
-      '^sdks/java/io/elasticsearch-tests/.*$',
-    ],
-    timeoutMins: 60,
-    )
-builder.build {
-  publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
-  }
-}
diff --git a/.test-infra/jenkins/job_PreCommit_Java_HCatalog_IO_Direct.groovy 
b/.test-infra/jenkins/job_PreCommit_Java_HCatalog_IO_Direct.groovy
deleted file mode 100644
index a5c4c27a579..00000000000
--- a/.test-infra/jenkins/job_PreCommit_Java_HCatalog_IO_Direct.groovy
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import PrecommitJobBuilder
-
-PrecommitJobBuilder builder = new PrecommitJobBuilder(
-    scope: this,
-    nameBase: 'Java_HCatalog_IO_Direct',
-    gradleTasks: [
-      ':sdks:java:io:hcatalog:build',
-    ],
-    gradleSwitches: [
-      '-PdisableSpotlessCheck=true',
-      '-PdisableCheckStyle=true'
-    ], // spotless checked in separate pre-commit
-    triggerPathPatterns: [
-      '^sdks/java/core/src/main/.*$',
-      '^sdks/java/io/common/.*$',
-      '^sdks/java/io/hadoop-common/.*$',
-      '^sdks/java/io/hcatalog/.*$',
-    ],
-    timeoutMins: 60,
-    )
-builder.build {
-  publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
-  }
-}
diff --git a/.test-infra/jenkins/job_PreCommit_Java_Hbase_IO_Direct.groovy 
b/.test-infra/jenkins/job_PreCommit_Java_Hbase_IO_Direct.groovy
deleted file mode 100644
index 7c9231c191f..00000000000
--- a/.test-infra/jenkins/job_PreCommit_Java_Hbase_IO_Direct.groovy
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import PrecommitJobBuilder
-
-PrecommitJobBuilder builder = new PrecommitJobBuilder(
-    scope: this,
-    nameBase: 'Java_HBase_IO_Direct',
-    gradleTasks: [
-      ':sdks:java:io:hbase:build',
-    ],
-    gradleSwitches: [
-      '-PdisableSpotlessCheck=true',
-      '-PdisableCheckStyle=true'
-    ], // spotless checked in separate pre-commit
-    triggerPathPatterns: [
-      '^sdks/java/core/src/main/.*$',
-      '^sdks/java/io/common/.*$',
-      '^sdks/java/io/hadoop-common/.*$',
-      '^sdks/java/io/hbase/.*$',
-    ],
-    timeoutMins: 60,
-    )
-builder.build {
-  publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
-  }
-}
diff --git a/.test-infra/jenkins/job_PreCommit_Java_IOs.groovy 
b/.test-infra/jenkins/job_PreCommit_Java_IOs.groovy
new file mode 100644
index 00000000000..5555ac192e1
--- /dev/null
+++ b/.test-infra/jenkins/job_PreCommit_Java_IOs.groovy
@@ -0,0 +1,146 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import PrecommitJobBuilder
+
+// Define a PreCommit job running IO unit tests that were excluded in the 
default job_PreCommit_Java.groovy
+PrecommitJobBuilder builder = new PrecommitJobBuilder(
+    scope: this,
+    nameBase: 'Java_IOs_Direct',
+    gradleTasks: [
+      ':javaioPreCommit',
+    ],
+    gradleSwitches: [
+      '-PdisableSpotlessCheck=true',
+      '-PdisableCheckStyle=true'
+    ], // spotless checked in separate pre-commit
+    triggerPathPatterns: [
+      '^sdks/java/io/common/.*$',
+      '^sdks/java/core/src/main/.*$',
+    ],
+    // disable cron run because the tasks are covered by the single IO 
precommits below
+    cronTriggering: false,
+    timeoutMins: 120,
+    )
+builder.build {
+  publishers {
+    archiveJunit('**/build/test-results/**/*.xml')
+  }
+}
+
+// define precommit jobs for each of these IO only run on corresponding module 
code change
+def ioModules = [
+  'amqp',
+  'cassandra',
+  'cdap',
+  'clickhouse',
+  'debezium',
+  'elasticsearch',
+  'hbase',
+  'hcatalog',
+  'influxdb',
+  'jms',
+  'kudu',
+  'mqtt',
+  'neo4j',
+  'rabbitmq',
+  'redis',
+  'singlestore',
+  'snowflake',
+  'solr',
+  'splunk',
+  'thrift',
+  'tika'
+]
+
+// any additional trigger path besides the module path and 'sdk/io/common'
+def additionalTriggerPaths = [
+  cdap: [
+    '^sdks/java/io/hadoop-common/.*$',
+    '^sdks/java/io/hadoop-format/.*$',
+  ],
+  elasticsearch: [
+    '^sdks/java/io/elasticsearch-tests/.*$',
+  ],
+  hbase: [
+    '^sdks/java/io/hadoop-common/.*$',
+  ],
+  hcatalog: [
+    '^sdks/java/io/hadoop-common/.*$',
+  ],
+  neo4j: [
+    '^sdks/java/testing/test-utils/.*$',
+  ],
+  singlestore: [
+    '^sdks/java/testing/test-utils/.*$',
+  ],
+  snowflake: [
+    '^sdks/java/extensions/google-cloud-platform-core/.*$',
+    '^sdks/java/testing/test-utils/.*$',]
+]
+
+// any additional tasks besides 'build'.
+// Additional :build tasks should be made sync with build.gradle:kts's 
:javaioPreCommit task which will be triggered on commit to java core and 
buildSrc
+// While integration tasks (e.g. :integrationTest) does not need to add there.
+def additionalTasks = [
+  debezium: [
+    ':sdks:java:io:debezium:expansion-service:build',
+    ':sdks:java:io:debezium:integrationTest',
+  ],
+  elasticsearch: [
+    ':sdks:java:io:elasticsearch-tests:elasticsearch-tests-5:build',
+    ':sdks:java:io:elasticsearch-tests:elasticsearch-tests-6:build',
+    ':sdks:java:io:elasticsearch-tests:elasticsearch-tests-7:build',
+    ':sdks:java:io:elasticsearch-tests:elasticsearch-tests-8:build',
+    ':sdks:java:io:elasticsearch-tests:elasticsearch-tests-common:build',
+  ],
+  neo4j: [
+    ':sdks:java:io:kinesis:integrationTest',
+  ],
+  snowflake: [
+    ':sdks:java:io:snowflake:expansion-service:build',
+  ],
+]
+
+ioModules.forEach {
+  def triggerPaths = [
+    '^sdks/java/io/' + it + '/.*$',
+  ]
+  triggerPaths.addAll(additionalTriggerPaths.get(it, []))
+  def tasks = [
+    ':sdks:java:io:' + it + ':build'
+  ]
+  tasks.addAll(additionalTasks.get(it, []))
+  PrecommitJobBuilder builderSingle = new PrecommitJobBuilder(
+      scope: this,
+      nameBase: 'Java_' + it.capitalize() + '_IO_Direct',
+      gradleTasks: tasks,
+      gradleSwitches: [
+        '-PdisableSpotlessCheck=true',
+        '-PdisableCheckStyle=true'
+      ], // spotless checked in separate pre-commit
+      triggerPathPatterns: triggerPaths,
+      defaultPathTriggering: false,
+      timeoutMins: 60,
+      )
+  builderSingle.build {
+    publishers {
+      archiveJunit('**/build/test-results/**/*.xml')
+    }
+  }
+}
diff --git a/.test-infra/jenkins/job_PreCommit_Java_InfluxDb_IO_Direct.groovy 
b/.test-infra/jenkins/job_PreCommit_Java_InfluxDb_IO_Direct.groovy
deleted file mode 100644
index 3d962128dab..00000000000
--- a/.test-infra/jenkins/job_PreCommit_Java_InfluxDb_IO_Direct.groovy
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import PrecommitJobBuilder
-
-PrecommitJobBuilder builder = new PrecommitJobBuilder(
-    scope: this,
-    nameBase: 'Java_InfluxDb_IO_Direct',
-    gradleTasks: [
-      ':sdks:java:io:influxdb:build',
-    ],
-    gradleSwitches: [
-      '-PdisableSpotlessCheck=true',
-      '-PdisableCheckStyle=true'
-    ], // spotless checked in separate pre-commit
-    triggerPathPatterns: [
-      '^sdks/java/core/src/main/.*$',
-      '^sdks/java/io/common/.*$',
-      '^sdks/java/io/influxdb/.*$',
-    ],
-    timeoutMins: 60,
-    )
-builder.build {
-  publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
-  }
-}
diff --git a/.test-infra/jenkins/job_PreCommit_Java_Jms_IO_Direct.groovy 
b/.test-infra/jenkins/job_PreCommit_Java_Jms_IO_Direct.groovy
deleted file mode 100644
index 77931f346ec..00000000000
--- a/.test-infra/jenkins/job_PreCommit_Java_Jms_IO_Direct.groovy
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import PrecommitJobBuilder
-
-PrecommitJobBuilder builder = new PrecommitJobBuilder(
-    scope: this,
-    nameBase: 'Java_Jms_IO_Direct',
-    gradleTasks: [
-      ':sdks:java:io:jms:build',
-    ],
-    gradleSwitches: [
-      '-PdisableSpotlessCheck=true',
-      '-PdisableCheckStyle=true'
-    ], // spotless checked in separate pre-commit
-    triggerPathPatterns: [
-      '^sdks/java/core/src/main/.*$',
-      '^sdks/java/io/jms/.*$',
-    ],
-    timeoutMins: 60,
-    )
-builder.build {
-  publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
-  }
-}
diff --git a/.test-infra/jenkins/job_PreCommit_Java_Kudu_IO_Direct.groovy 
b/.test-infra/jenkins/job_PreCommit_Java_Kudu_IO_Direct.groovy
deleted file mode 100644
index d00b5b04bb7..00000000000
--- a/.test-infra/jenkins/job_PreCommit_Java_Kudu_IO_Direct.groovy
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import PrecommitJobBuilder
-
-PrecommitJobBuilder builder = new PrecommitJobBuilder(
-    scope: this,
-    nameBase: 'Java_Kudu_IO_Direct',
-    gradleTasks: [
-      ':sdks:java:io:kudu:build',
-    ],
-    gradleSwitches: [
-      '-PdisableSpotlessCheck=true',
-      '-PdisableCheckStyle=true'
-    ], // spotless checked in separate pre-commit
-    triggerPathPatterns: [
-      '^sdks/java/core/src/main/.*$',
-      '^sdks/java/io/common/.*$',
-      '^sdks/java/io/kudu/.*$',
-    ],
-    timeoutMins: 60,
-    )
-builder.build {
-  publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
-  }
-}
diff --git a/.test-infra/jenkins/job_PreCommit_Java_Mqtt_IO_Direct.groovy 
b/.test-infra/jenkins/job_PreCommit_Java_Mqtt_IO_Direct.groovy
deleted file mode 100644
index 71baed4af78..00000000000
--- a/.test-infra/jenkins/job_PreCommit_Java_Mqtt_IO_Direct.groovy
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import PrecommitJobBuilder
-
-PrecommitJobBuilder builder = new PrecommitJobBuilder(
-    scope: this,
-    nameBase: 'Java_Mqtt_IO_Direct',
-    gradleTasks: [
-      ':sdks:java:io:mqtt:build',
-    ],
-    gradleSwitches: [
-      '-PdisableSpotlessCheck=true',
-      '-PdisableCheckStyle=true'
-    ], // spotless checked in separate pre-commit
-    triggerPathPatterns: [
-      '^sdks/java/core/src/main/.*$',
-      '^sdks/java/io/common/.*$',
-      '^sdks/java/io/mqtt/.*$',
-    ],
-    timeoutMins: 60,
-    )
-builder.build {
-  publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
-  }
-}
diff --git a/.test-infra/jenkins/job_PreCommit_Java_Neo4j_IO_Direct.groovy 
b/.test-infra/jenkins/job_PreCommit_Java_Neo4j_IO_Direct.groovy
deleted file mode 100644
index 0d0374d013b..00000000000
--- a/.test-infra/jenkins/job_PreCommit_Java_Neo4j_IO_Direct.groovy
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import PrecommitJobBuilder
-
-PrecommitJobBuilder builder = new PrecommitJobBuilder(
-    scope: this,
-    nameBase: 'Java_Neo4j_IO_Direct',
-    gradleTasks: [
-      ':sdks:java:io:neo4j:build',
-      ':sdks:java:io:kinesis:integrationTest',
-    ],
-    gradleSwitches: [
-      '-PdisableSpotlessCheck=true',
-      '-PdisableCheckStyle=true'
-    ], // spotless checked in separate pre-commit
-    triggerPathPatterns: [
-      '^sdks/java/core/src/main/.*$',
-      '^sdks/java/testing/test-utils/.*$',
-      '^sdks/java/io/common/.*$',
-      '^sdks/java/io/neo4j/.*$',
-    ],
-    timeoutMins: 60,
-    )
-builder.build {
-  publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
-  }
-}
diff --git a/.test-infra/jenkins/job_PreCommit_Java_RabbitMq_IO_Direct.groovy 
b/.test-infra/jenkins/job_PreCommit_Java_RabbitMq_IO_Direct.groovy
deleted file mode 100644
index aa496d63655..00000000000
--- a/.test-infra/jenkins/job_PreCommit_Java_RabbitMq_IO_Direct.groovy
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import PrecommitJobBuilder
-
-PrecommitJobBuilder builder = new PrecommitJobBuilder(
-    scope: this,
-    nameBase: 'Java_RabbitMq_IO_Direct',
-    gradleTasks: [
-      ':sdks:java:io:rabbitmq:build',
-    ],
-    gradleSwitches: [
-      '-PdisableSpotlessCheck=true',
-      '-PdisableCheckStyle=true'
-    ], // spotless checked in separate pre-commit
-    triggerPathPatterns: [
-      '^sdks/java/core/src/main/.*$',
-      '^sdks/java/io/common/.*$',
-      '^sdks/java/io/rabbitmq/.*$',
-    ],
-    timeoutMins: 60,
-    )
-builder.build {
-  publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
-  }
-}
diff --git a/.test-infra/jenkins/job_PreCommit_Java_Redis_IO_Direct.groovy 
b/.test-infra/jenkins/job_PreCommit_Java_Redis_IO_Direct.groovy
deleted file mode 100644
index 267e5addc35..00000000000
--- a/.test-infra/jenkins/job_PreCommit_Java_Redis_IO_Direct.groovy
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import PrecommitJobBuilder
-
-PrecommitJobBuilder builder = new PrecommitJobBuilder(
-    scope: this,
-    nameBase: 'Java_Redis_IO_Direct',
-    gradleTasks: [
-      ':sdks:java:io:redis:build',
-    ],
-    gradleSwitches: [
-      '-PdisableSpotlessCheck=true',
-      '-PdisableCheckStyle=true'
-    ], // spotless checked in separate pre-commit
-    triggerPathPatterns: [
-      '^sdks/java/core/src/main/.*$',
-      '^sdks/java/io/common/.*$',
-      '^sdks/java/io/redis/.*$',
-    ],
-    timeoutMins: 60,
-    )
-builder.build {
-  publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
-  }
-}
diff --git 
a/.test-infra/jenkins/job_PreCommit_Java_Singlestore_IO_Direct.groovy 
b/.test-infra/jenkins/job_PreCommit_Java_Singlestore_IO_Direct.groovy
deleted file mode 100644
index 1dfbda362dd..00000000000
--- a/.test-infra/jenkins/job_PreCommit_Java_Singlestore_IO_Direct.groovy
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import PrecommitJobBuilder
-
-PrecommitJobBuilder builder = new PrecommitJobBuilder(
-    scope: this,
-    nameBase: 'Java_SingleStore_IO_Direct',
-    gradleTasks: [
-      ':sdks:java:io:singlestore:build',
-    ],
-    gradleSwitches: [
-      '-PdisableSpotlessCheck=true',
-      '-PdisableCheckStyle=true'
-    ], // spotless checked in separate pre-commit
-    triggerPathPatterns: [
-      '^sdks/java/core/src/main/.*$',
-      '^sdks/java/testing/test-utils/.*$',
-      '^sdks/java/io/common/.*$',
-      '^sdks/java/io/singlestore/.*$',
-    ],
-    timeoutMins: 60,
-    )
-builder.build {
-  publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
-  }
-}
diff --git a/.test-infra/jenkins/job_PreCommit_Java_Snowflake_IO_Direct.groovy 
b/.test-infra/jenkins/job_PreCommit_Java_Snowflake_IO_Direct.groovy
deleted file mode 100644
index d20c214910d..00000000000
--- a/.test-infra/jenkins/job_PreCommit_Java_Snowflake_IO_Direct.groovy
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import PrecommitJobBuilder
-
-PrecommitJobBuilder builder = new PrecommitJobBuilder(
-    scope: this,
-    nameBase: 'Java_Snowflake_IO_Direct',
-    gradleTasks: [
-      ':sdks:java:io:snowflake:build',
-      ':sdks:java:io:snowflake:expansion-service:build',
-    ],
-    gradleSwitches: [
-      '-PdisableSpotlessCheck=true',
-      '-PdisableCheckStyle=true'
-    ], // spotless checked in separate pre-commit
-    triggerPathPatterns: [
-      '^sdks/java/core/src/main/.*$',
-      '^sdks/java/extensions/google-cloud-platform-core/.*$',
-      '^sdks/java/testing/test-utils/.*$',
-      '^sdks/java/io/common/.*$',
-      '^sdks/java/io/snowflake/.*$',
-    ],
-    timeoutMins: 60,
-    )
-builder.build {
-  publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
-  }
-}
diff --git a/.test-infra/jenkins/job_PreCommit_Java_Solr_IO_Direct.groovy 
b/.test-infra/jenkins/job_PreCommit_Java_Solr_IO_Direct.groovy
deleted file mode 100644
index 0adc99cef63..00000000000
--- a/.test-infra/jenkins/job_PreCommit_Java_Solr_IO_Direct.groovy
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import PrecommitJobBuilder
-
-PrecommitJobBuilder builder = new PrecommitJobBuilder(
-    scope: this,
-    nameBase: 'Java_Solr_IO_Direct',
-    gradleTasks: [
-      ':sdks:java:io:solr:build',
-    ],
-    gradleSwitches: [
-      '-PdisableSpotlessCheck=true',
-      '-PdisableCheckStyle=true'
-    ], // spotless checked in separate pre-commit
-    triggerPathPatterns: [
-      '^sdks/java/core/src/main/.*$',
-      '^sdks/java/io/common/.*$',
-      '^sdks/java/io/solr/.*$',
-    ],
-    timeoutMins: 60,
-    )
-builder.build {
-  publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
-  }
-}
diff --git a/.test-infra/jenkins/job_PreCommit_Java_Splunk_IO_Direct.groovy 
b/.test-infra/jenkins/job_PreCommit_Java_Splunk_IO_Direct.groovy
deleted file mode 100644
index 606d8852a66..00000000000
--- a/.test-infra/jenkins/job_PreCommit_Java_Splunk_IO_Direct.groovy
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import PrecommitJobBuilder
-
-PrecommitJobBuilder builder = new PrecommitJobBuilder(
-    scope: this,
-    nameBase: 'Java_Splunk_IO_Direct',
-    gradleTasks: [
-      ':sdks:java:io:splunk:build',
-    ],
-    gradleSwitches: [
-      '-PdisableSpotlessCheck=true',
-      '-PdisableCheckStyle=true'
-    ], // spotless checked in separate pre-commit
-    triggerPathPatterns: [
-      '^sdks/java/core/src/main/.*$',
-      '^sdks/java/io/splunk/.*$',
-    ],
-    timeoutMins: 60,
-    )
-builder.build {
-  publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
-  }
-}
diff --git a/.test-infra/jenkins/job_PreCommit_Java_Thrift_IO_Direct.groovy 
b/.test-infra/jenkins/job_PreCommit_Java_Thrift_IO_Direct.groovy
deleted file mode 100644
index 2d455664261..00000000000
--- a/.test-infra/jenkins/job_PreCommit_Java_Thrift_IO_Direct.groovy
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import PrecommitJobBuilder
-
-PrecommitJobBuilder builder = new PrecommitJobBuilder(
-    scope: this,
-    nameBase: 'Java_Thrift_IO_Direct',
-    gradleTasks: [
-      ':sdks:java:io:thrift:build',
-    ],
-    gradleSwitches: [
-      '-PdisableSpotlessCheck=true',
-      '-PdisableCheckStyle=true'
-    ], // spotless checked in separate pre-commit
-    triggerPathPatterns: [
-      '^sdks/java/core/src/main/.*$',
-      '^sdks/java/io/thrift/.*$',
-    ],
-    timeoutMins: 60,
-    )
-builder.build {
-  publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
-  }
-}
diff --git a/.test-infra/jenkins/job_PreCommit_Java_Tika_IO_Direct.groovy 
b/.test-infra/jenkins/job_PreCommit_Java_Tika_IO_Direct.groovy
deleted file mode 100644
index 694ea38fccc..00000000000
--- a/.test-infra/jenkins/job_PreCommit_Java_Tika_IO_Direct.groovy
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import PrecommitJobBuilder
-
-PrecommitJobBuilder builder = new PrecommitJobBuilder(
-    scope: this,
-    nameBase: 'Java_Tika_IO_Direct',
-    gradleTasks: [
-      ':sdks:java:io:tika:build',
-    ],
-    gradleSwitches: [
-      '-PdisableSpotlessCheck=true',
-      '-PdisableCheckStyle=true'
-    ], // spotless checked in separate pre-commit
-    triggerPathPatterns: [
-      '^sdks/java/core/src/main/.*$',
-      '^sdks/java/io/tika/.*$',
-    ],
-    timeoutMins: 60,
-    )
-builder.build {
-  publishers {
-    archiveJunit('**/build/test-results/**/*.xml')
-  }
-}
diff --git a/build.gradle.kts b/build.gradle.kts
index 7512ee25604..727f6e1e1a4 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -318,6 +318,36 @@ tasks.register("javaPreCommit") {
   dependsOn(":sdks:java:container:java8:docker")
 }
 
+// a precommit task build multiple IOs (except those splitting into single 
jobs)
+tasks.register("javaioPreCommit") {
+  dependsOn(":sdks:java:io:amqp:build")
+  dependsOn(":sdks:java:io:cassandra:build")
+  dependsOn(":sdks:java:io:cdap:build")
+  dependsOn(":sdks:java:io:clickhouse:build")
+  dependsOn(":sdks:java:io:debezium:expansion-service:build")
+  dependsOn(":sdks:java:io:debezium:build")
+  dependsOn(":sdks:java:io:elasticsearch-tests:elasticsearch-tests-5:build")
+  dependsOn(":sdks:java:io:elasticsearch-tests:elasticsearch-tests-6:build")
+  dependsOn(":sdks:java:io:elasticsearch-tests:elasticsearch-tests-7:build")
+  dependsOn(":sdks:java:io:elasticsearch-tests:elasticsearch-tests-8:build")
+  
dependsOn(":sdks:java:io:elasticsearch-tests:elasticsearch-tests-common:build")
+  dependsOn(":sdks:java:io:elasticsearch:build")
+  dependsOn(":sdks:java:io:hbase:build")
+  dependsOn(":sdks:java:io:hcatalog:build")
+  dependsOn(":sdks:java:io:influxdb:build")
+  dependsOn(":sdks:java:io:jms:build")
+  dependsOn(":sdks:java:io:kudu:build")
+  dependsOn(":sdks:java:io:mqtt:build")
+  dependsOn(":sdks:java:io:neo4j:build")
+  dependsOn(":sdks:java:io:rabbitmq:build")
+  dependsOn(":sdks:java:io:redis:build")
+  dependsOn(":sdks:java:io:singlestore:build")
+  dependsOn(":sdks:java:io:solr:build")
+  dependsOn(":sdks:java:io:splunk:build")
+  dependsOn(":sdks:java:io:thrift:build")
+  dependsOn(":sdks:java:io:tika:build")
+}
+
 tasks.register("sqlPreCommit") {
   dependsOn(":sdks:java:extensions:sql:runBasicExample")
   dependsOn(":sdks:java:extensions:sql:runPojoExample")

Reply via email to