Skip to content

Commit 5c3301e

Browse files
authored
Merge branch 'main' into add-vscode-remote-go-debugger-in-tilt
2 parents b9281f0 + 66f0b75 commit 5c3301e

72 files changed

Lines changed: 4565 additions & 3285 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.env.example

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,11 @@ PG_USER=postgres
2929
PG_PASSWORD=postgres
3030
PG_DATABASE=postgres
3131

32-
# Set to 1 for enabling go debugger in dockerfile and Tilt Setup
33-
DOCKER_GO_DEBUG_FLOW_API=
34-
DOCKER_GO_DEBUG_FLOW_WORKER=
35-
DOCKER_GO_DEBUG_FLOW_SNAPSHOT_WORKER=
32+
PG2_HOST=host.docker.internal
33+
PG2_PORT=5437
34+
PG2_USER=postgres
35+
PG2_PASSWORD=postgres
36+
PG2_DATABASE=postgres
3637

3738
PEERDB_CATALOG_HOST=host.docker.internal
3839
PEERDB_CATALOG_PORT=9901
@@ -49,6 +50,11 @@ AWS_EC2_METADATA_DISABLED="true"
4950
MINIO_ROOT_USER=_peerdb_minioadmin
5051
MINIO_ROOT_PASSWORD=_peerdb_minioadmin
5152

53+
# Set to 1 for enabling go debugger in dockerfile and Tilt Setup
54+
DOCKER_GO_DEBUG_FLOW_API=
55+
DOCKER_GO_DEBUG_FLOW_WORKER=
56+
DOCKER_GO_DEBUG_FLOW_SNAPSHOT_WORKER=
57+
5258
TZ='UTC'
5359

5460
## Port Overrides for parallel tilt and docker-compose runs.

.github/CODEOWNERS

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# Default owner
2+
* @PeerDB-io/db-integrations
3+
4+
# Non-CH, non-PG destinations
5+
flow/connectors/bigquery/ @PeerDB-io/eng
6+
flow/connectors/elasticsearch/ @PeerDB-io/eng
7+
flow/connectors/eventhub/ @PeerDB-io/eng
8+
flow/connectors/kafka/ @PeerDB-io/eng
9+
flow/connectors/pubsub/ @PeerDB-io/eng
10+
flow/connectors/s3/ @PeerDB-io/eng
11+
flow/connectors/snowflake/ @PeerDB-io/eng
12+
13+
ui/components/PeerForms/BigqueryConfig.tsx @PeerDB-io/eng
14+
ui/components/PeerForms/SnowflakeForm.tsx @PeerDB-io/eng
15+
ui/components/PeerForms/S3Form.tsx @PeerDB-io/eng
16+
ui/components/PeerForms/ElasticsearchConfigForm.tsx @PeerDB-io/eng
17+
ui/components/PeerForms/Eventhubs/ @PeerDB-io/eng
18+
ui/components/PeerForms/KafkaConfig.tsx @PeerDB-io/eng
19+
ui/components/PeerForms/PubSubConfig.tsx @PeerDB-io/eng
20+
ui/app/peers/create/[peerType]/helpers/bq.ts @PeerDB-io/eng
21+
ui/app/peers/create/[peerType]/helpers/sf.ts @PeerDB-io/eng
22+
ui/app/peers/create/[peerType]/helpers/s3.ts @PeerDB-io/eng
23+
ui/app/peers/create/[peerType]/helpers/es.ts @PeerDB-io/eng
24+
ui/app/peers/create/[peerType]/helpers/eh.ts @PeerDB-io/eng
25+
ui/app/peers/create/[peerType]/helpers/ka.ts @PeerDB-io/eng
26+
ui/app/peers/create/[peerType]/helpers/ps.ts @PeerDB-io/eng
27+
ui/app/mirrors/create/cdc/eventhubsCallout.tsx @PeerDB-io/eng
28+
29+
flow/e2e/bigquery.go @PeerDB-io/eng
30+
flow/e2e/bigquery_qrep_test.go @PeerDB-io/eng
31+
flow/e2e/bigquery_test.go @PeerDB-io/eng
32+
flow/e2e/elasticsearch*.go @PeerDB-io/eng
33+
flow/e2e/eventhub*.go @PeerDB-io/eng
34+
flow/e2e/kafka*.go @PeerDB-io/eng
35+
flow/e2e/pubsub*.go @PeerDB-io/eng
36+
flow/e2e/s3_*.go @PeerDB-io/eng
37+
flow/e2e/snowflake*.go @PeerDB-io/eng
38+
39+
# PG destination
40+
flow/connectors/postgres/postgres_destination.go @PeerDB-io/ch-postgres
41+
flow/connectors/postgres/qrep_destination.go @PeerDB-io/ch-postgres
42+
flow/connectors/postgres/normalize_stmt_generator.go @PeerDB-io/ch-postgres
43+
flow/connectors/postgres/sink_pg.go @PeerDB-io/ch-postgres
44+
flow/model/pg_items.go @PeerDB-io/ch-postgres
45+
flow/pkg/postgres/dest_validation.go @PeerDB-io/ch-postgres
46+
47+
flow/e2e/postgres*.go @PeerDB-io/ch-postgres

.github/workflows/auto-retry-flaky-tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727

2828
- name: Detect flaky test failures
2929
id: detect
30-
uses: anthropics/claude-code-action@567fe954a4527e81f132d87d1bdbcc94f7737434 # main
30+
uses: anthropics/claude-code-action@2cc1ac1331eac7a6a96d716dd204dd2888d0fcd2 # main
3131
with:
3232
allowed_bots: 'renovate'
3333
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

.github/workflows/claude-code-review.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ jobs:
2828

2929
- name: Run Claude Code Review
3030
id: claude-review
31-
uses: anthropics/claude-code-action@567fe954a4527e81f132d87d1bdbcc94f7737434 # v1
31+
uses: anthropics/claude-code-action@2cc1ac1331eac7a6a96d716dd204dd2888d0fcd2 # v1
3232
with:
3333
allowed_bots: 'renovate'
3434
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

.github/workflows/claude.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ jobs:
4040

4141
- name: Run Claude Code
4242
id: claude
43-
uses: anthropics/claude-code-action@567fe954a4527e81f132d87d1bdbcc94f7737434 # v1
43+
uses: anthropics/claude-code-action@2cc1ac1331eac7a6a96d716dd204dd2888d0fcd2 # v1
4444
with:
4545
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
4646

.github/workflows/codeql-analysis.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,12 @@ jobs:
4747
4848
# Initializes the CodeQL tools for scanning.
4949
- name: Initialize CodeQL
50-
uses: github/codeql-action/init@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4
50+
uses: github/codeql-action/init@e46ed2cbd01164d986452f91f178727624ae40d7 # v4
5151
with:
5252
languages: ${{ matrix.language }}
5353
build-mode: ${{ matrix.build-mode }}
5454

5555
- name: Perform CodeQL Analysis
56-
uses: github/codeql-action/analyze@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4
56+
uses: github/codeql-action/analyze@e46ed2cbd01164d986452f91f178727624ae40d7 # v4
5757
with:
5858
category: "/language:${{matrix.language}}"

.github/workflows/flow.yml

Lines changed: 110 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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:
@@ -87,7 +101,7 @@ jobs:
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()

.github/workflows/release-drafter.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ jobs:
1515
pull-requests: write
1616
runs-on: ubuntu-latest
1717
steps:
18-
- uses: release-drafter/release-drafter@5de93583980a40bd78603b6dfdcda5b4df377b32 # v7
18+
- uses: release-drafter/release-drafter@563bf132657a13ded0b01fcb723c5a58cdd824e2 # v7

Tiltfile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,13 @@ local_resource(
130130
resource_deps=['postgres']
131131
)
132132

133+
local_resource(
134+
'provision-postgres2',
135+
cmd='./local_provision_scripts/postgres.sh peerdb-postgres2',
136+
labels=['Ancillary-DB-Provisioning'],
137+
resource_deps=['postgres2']
138+
)
139+
133140
# This is not defined as a resource as we need the file to be present
134141
# when `docker_compose` loads the configuration (next line).
135142
local('./generate-test-environment.sh')
@@ -167,6 +174,10 @@ dc_resource('postgres', labels=['Ancillary-DB'], links=[
167174
link('http://localhost:5432', 'PostgreSQL'),
168175
], auto_init=False)
169176

177+
dc_resource('postgres2', labels=['Ancillary-DB'], links=[
178+
link('http://localhost:5437', 'PostgreSQL (secondary)'),
179+
], auto_init=False)
180+
170181
local_resource(
171182
'all-test-resources',
172183
cmd=' '.join([

ancillary-docker-compose.yml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,27 @@ services:
125125
timeout: 10s
126126
retries: 5
127127

128+
postgres2:
129+
container_name: peerdb-postgres2
130+
image: ${POSTGRES_IMAGE}
131+
restart: unless-stopped
132+
volumes:
133+
- postgres2_data:/var/lib/postgresql/data
134+
ports:
135+
- "${PG2_PORT}:5432"
136+
environment:
137+
PGUSER: ${PG2_USER}
138+
POSTGRES_PASSWORD: ${PG2_PASSWORD}
139+
POSTGRES_DB: ${PG2_DATABASE}
140+
POSTGRES_INITDB_ARGS: --locale=C.UTF-8
141+
extra_hosts:
142+
- "host.docker.internal:host-gateway"
143+
healthcheck:
144+
test: ["CMD", "pg_isready"]
145+
interval: 2s
146+
timeout: 10s
147+
retries: 5
148+
128149
dozzle:
129150
container_name: dozzle-compose-monitor
130151
image: amir20/dozzle:latest
@@ -185,6 +206,7 @@ services:
185206

186207
volumes:
187208
postgres_data:
209+
postgres2_data:
188210
clickhouse_data:
189211
mongo_data:
190212
mysql_gtid_data:

0 commit comments

Comments
 (0)