@@ -54,13 +54,27 @@ jobs:
5454 --health-interval 10s
5555 --health-timeout 5s
5656 --health-retries 5
57+ catalog2 :
58+ image : imresamu/postgis:${{ matrix.db-version.pg }}-3.5-alpine
59+ ports :
60+ - 5437:5432
61+ env :
62+ PGUSER : postgres
63+ POSTGRES_PASSWORD : postgres
64+ POSTGRES_DB : postgres
65+ POSTGRES_INITDB_ARGS : --locale=C.UTF-8
66+ options : >-
67+ --health-cmd pg_isready
68+ --health-interval 10s
69+ --health-timeout 5s
70+ --health-retries 5
5771 redpanda :
5872 image : redpandadata/redpanda@sha256:12ddbd8e5572210a48d39afecac44db61503ce1cbdae50ee9b1ff5998a8d91e1
5973 ports :
6074 - 9092:9092
6175 - 9644:9644
6276 elasticsearch :
63- image : elasticsearch:9.3.2 @sha256:56282e41f1d9c8dc437e4c99d132cf9f154def73b6ea8a25ac969a28c2f529c6
77+ image : elasticsearch:9.3.3 @sha256:1d9ddbe28380c3305ef24c4364168030e4b8ce44834121f7c7dbdaedd2bb9cdf
6478 ports :
6579 - 9200:9200
6680 env :
87101 - 49002:49002
88102 - 49003:49003
89103 openssh :
90- image : linuxserver/openssh-server:latest@sha256:742f577d4100f5ad3b38f270d722931bbe98b997444c13b1a2a838df12a9971e
104+ image : linuxserver/openssh-server:latest@sha256:792bb9969a6751f9be2dcecdebd166f75c51187628f1be48ac9c9b3776561c16
91105 ports :
92106 - 2222:2222
93107 env :
@@ -111,11 +125,23 @@ jobs:
111125 go-version : ' 1.26.2'
112126 cache-dependency-path : flow/go.sum
113127
114- - name : install lib-geos
128+ - name : install lib-geos and pg_dump
115129 run : |
116130 # No need to update man pages on package install
117131 sudo apt-get remove --purge man-db
118- sudo apt-get install libgeos-dev
132+ # Add PGDG apt repo for latest PostgreSQL client packages
133+ sudo install -d /usr/share/postgresql-common/pgdg
134+ sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc \
135+ --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
136+ echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] \
137+ https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" \
138+ | sudo tee /etc/apt/sources.list.d/pgdg.list
139+ sudo apt-get update
140+ sudo apt-get install -y libgeos-dev
141+ # pg_dump must be >= the server major version; install v18 so it
142+ # can dump PG 16, 17, and 18 (backward compatible).
143+ sudo apt-get install -y postgresql-client-18
144+ echo /usr/lib/postgresql/18/bin >> $GITHUB_PATH
119145
120146 - name : install retry tool
121147 run : |
@@ -245,6 +271,21 @@ jobs:
245271 MINIO_ROOT_PASSWORD : miniosecret
246272 AWS_EC2_METADATA_DISABLED : true
247273
274+ - name : Generate ClickHouse TLS certificates
275+ run : |
276+ mkdir -p ch-certs
277+ # CA
278+ openssl genrsa -out ch-certs/ca.key 2048
279+ openssl req -new -x509 -key ch-certs/ca.key -out ch-certs/ca.crt -days 3650 -subj "/CN=ClickHouse-CA"
280+ # Server cert (CN=localhost, SAN for TLS 1.3)
281+ openssl genrsa -out ch-certs/server.key 2048
282+ openssl req -new -key ch-certs/server.key -out ch-certs/server.csr -subj "/CN=localhost" -addext "subjectAltName=DNS:localhost,IP:127.0.0.1"
283+ openssl x509 -req -days 3650 -in ch-certs/server.csr -CA ch-certs/ca.crt -CAkey ch-certs/ca.key -CAcreateserial -out ch-certs/server.crt -copy_extensions copyall
284+ # Client cert for mTLS (CN=peerdb-client), using cert-manager naming convention
285+ openssl genrsa -out ch-certs/tls.key 2048
286+ openssl req -new -key ch-certs/tls.key -out ch-certs/client.csr -subj "/CN=peerdb-client"
287+ openssl x509 -req -days 3650 -in ch-certs/client.csr -CA ch-certs/ca.crt -CAkey ch-certs/ca.key -CAcreateserial -out ch-certs/tls.crt
288+
248289 - name : create postgres extensions, increase logical replication limits, and setup catalog database
249290 run : >
250291 docker exec "${{ job.services.catalog.id }}" apk add --no-cache build-base git &&
@@ -260,6 +301,17 @@ jobs:
260301 env :
261302 PGPASSWORD : postgres
262303
304+ - name : prepare secondary postgres for cross-cluster schema-dump tests
305+ run : >
306+ docker exec "${{ job.services.catalog2.id }}" psql -U postgres
307+ -c "ALTER SYSTEM SET wal_level=logical;"
308+ -c "ALTER SYSTEM SET max_replication_slots=192;"
309+ -c "ALTER SYSTEM SET max_wal_senders=256;"
310+ -c "ALTER SYSTEM SET max_connections=2048;" &&
311+ docker restart "${{ job.services.catalog2.id }}"
312+ env :
313+ PGPASSWORD : postgres
314+
263315 - name : set ClickHouse version
264316 id : ch-version
265317 run : |
@@ -310,16 +362,39 @@ jobs:
310362 <access_management>1</access_management>
311363 <named_collection_control>1</named_collection_control>
312364 </default>
365+ <peerdb_tls>
366+ <ssl_certificates>
367+ <common_name>peerdb-client</common_name>
368+ </ssl_certificates>
369+ <networks>
370+ <ip>::/0</ip>
371+ </networks>
372+ <profile>default</profile>
373+ <quota>default</quota>
374+ <access_management>1</access_management>
375+ </peerdb_tls>
313376 </users>
314377 <logger><level>none</level></logger>
315378 <path>var/lib/clickhouse</path>
316379 <tmp_path>var/lib/clickhouse/tmp</tmp_path>
317380 <user_files_path>var/lib/clickhouse/user_files</user_files_path>
318381 <format_schema_path>var/lib/clickhouse/format_schemas</format_schema_path>
319382 <tcp_port>9000</tcp_port>
383+ <tcp_port_secure>9440</tcp_port_secure>
320384 <http_port remove="1"/>
321385 <postgresql_port remove="1"/>
322386 <mysql_port remove="1"/>
387+ <openSSL>
388+ <server>
389+ <certificateFile>../ch-certs/server.crt</certificateFile>
390+ <privateKeyFile>../ch-certs/server.key</privateKeyFile>
391+ <caConfig>../ch-certs/ca.crt</caConfig>
392+ <verificationMode>relaxed</verificationMode>
393+ <cacheSessions>true</cacheSessions>
394+ <disableProtocols>sslv2,sslv3</disableProtocols>
395+ <preferServerCiphers>true</preferServerCiphers>
396+ </server>
397+ </openSSL>
323398 <macros>
324399 <shard>1</shard>
325400 <replica>1</replica>
@@ -365,16 +440,39 @@ jobs:
365440 <access_management>1</access_management>
366441 <named_collection_control>1</named_collection_control>
367442 </default>
443+ <peerdb_tls>
444+ <ssl_certificates>
445+ <common_name>peerdb-client</common_name>
446+ </ssl_certificates>
447+ <networks>
448+ <ip>::/0</ip>
449+ </networks>
450+ <profile>default</profile>
451+ <quota>default</quota>
452+ <access_management>1</access_management>
453+ </peerdb_tls>
368454 </users>
369455 <logger><level>none</level></logger>
370456 <path>var/lib/clickhouse</path>
371457 <tmp_path>var/lib/clickhouse/tmp</tmp_path>
372458 <user_files_path>var/lib/clickhouse/user_files</user_files_path>
373459 <format_schema_path>var/lib/clickhouse/format_schemas</format_schema_path>
374460 <tcp_port>9001</tcp_port>
461+ <tcp_port_secure>9441</tcp_port_secure>
375462 <http_port remove="1"/>
376463 <postgresql_port remove="1"/>
377464 <mysql_port remove="1"/>
465+ <openSSL>
466+ <server>
467+ <certificateFile>../ch-certs/server.crt</certificateFile>
468+ <privateKeyFile>../ch-certs/server.key</privateKeyFile>
469+ <caConfig>../ch-certs/ca.crt</caConfig>
470+ <verificationMode>relaxed</verificationMode>
471+ <cacheSessions>true</cacheSessions>
472+ <disableProtocols>sslv2,sslv3</disableProtocols>
473+ <preferServerCiphers>true</preferServerCiphers>
474+ </server>
475+ </openSSL>
378476 <macros>
379477 <shard>2</shard>
380478 <replica>1</replica>
@@ -500,6 +598,11 @@ jobs:
500598 PG_USER : postgres
501599 PG_PASSWORD : postgres
502600 PG_DATABASE : postgres
601+ PG2_HOST : localhost
602+ PG2_PORT : 5437
603+ PG2_USER : postgres
604+ PG2_PASSWORD : postgres
605+ PG2_DATABASE : postgres
503606 PEERDB_SWITCHBOARD_ENABLED : " true"
504607 PEERDB_QUEUE_FORCE_TOPIC_CREATION : " true"
505608 ELASTICSEARCH_TEST_ADDRESS : http://localhost:9200
@@ -535,6 +638,9 @@ jobs:
535638 FLOW_TESTS_AWS_ACCESS_KEY_ID : ${{ steps.setup-aws.outputs.aws-access-key-id }}
536639 FLOW_TESTS_AWS_SECRET_ACCESS_KEY : ${{ steps.setup-aws.outputs.aws-secret-access-key }}
537640 FLOW_TESTS_AWS_SESSION_TOKEN : ${{ steps.setup-aws.outputs.aws-session-token }}
641+ # ClickHouse TLS/mTLS test certificates
642+ PEERDB_CLICKHOUSE_TLS_PORT : " 9440"
643+ PEERDB_CLICKHOUSE_TLS_CERT_DIR : ${{ github.workspace }}/ch-certs
538644
539645 - name : Upload peer-flow logs and test results
540646 if : always()
0 commit comments