Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
e0ba2fc
fix(security): phase 1 govulncheck remediation and dependency hardening
bvt123 Feb 26, 2026
d37e99a
fix(ci): phase 1 stabilize tests and query safety
bvt123 Feb 26, 2026
b4f1346
fix(cleanup): phase1 remove stale providers and stabilize tests
bvt123 Feb 26, 2026
83899d1
refactor(testing): rebuild core/optional CDC test system and stabiliz…
bvt123 Feb 26, 2026
b152ecc
feat(aws): migrate runtime integrations to AWS SDK v2
bvt123 Feb 26, 2026
92b153c
test(clickhouse): bump test image to 25.12.7 and align recipe auth
bvt123 Feb 26, 2026
48529c1
fix(ci): stabilize ClickHouse 25.12 CDC and optional lanes
bvt123 Feb 27, 2026
dd403c0
ci: add isolated prod/dev streams with GHCR dev publishing
bvt123 Feb 27, 2026
560b183
ci: align Docker builder Go version with go.mod
bvt123 Feb 27, 2026
b316038
ci: make dev GHCR publish single-arch and bounded
bvt123 Feb 27, 2026
d1d7eed
chore: remove stale YDB, YTSaurus, Greenplum, OpenSearch, S3 provider…
bvt123 Feb 27, 2026
920d5b7
ci: publish dev GHCR as amd64+arm64 without attest artifacts
bvt123 Feb 27, 2026
4123b20
fix(mysql): Fix IPv6 in MySQL connector
bvt123 Feb 27, 2026
a751584
fix(clickhouse): Fix clickhouse toasts logging
bvt123 Feb 27, 2026
5e7da8a
fix(postgres): Fill columnValues for toast updates
bvt123 Feb 27, 2026
0f2a1e0
feat(clickhouse): Async CH sink tmp table error retries + 5min timeout
bvt123 Feb 27, 2026
c552163
feat(clickhouse): Use nil for unknown required columns (insert_null_a…
bvt123 Feb 27, 2026
50c6f33
fix(mysql): Fix datetime timezone snapshot vs replication
bvt123 Feb 27, 2026
4e6f536
feat(clickhouse): Alter column types on CH schema migration
bvt123 Feb 27, 2026
5397559
refactor(clickhouse): Remove CH destination AddNewColumns (use IsSche…
bvt123 Feb 27, 2026
de780b1
feat(postgres): Inline bulk INSERT for PG destination (major perf)
bvt123 Feb 27, 2026
cbf0b71
feat(postgres): Save pg_dump items order
bvt123 Feb 27, 2026
5fbd04b
fix(postgres): Fix pg_dump tables filter
bvt123 Feb 27, 2026
3f25ab6
feat(kafka): Kafka one partition source (reader refactor)
bvt123 Feb 27, 2026
f1fdb0e
feat(kafka): Improve per partition kafka source
bvt123 Feb 27, 2026
ddff800
feat(clickhouse): Add CH async streamer logging
bvt123 Feb 27, 2026
868ad8f
feat(debezium): Sanitize debezium parameters
bvt123 Feb 27, 2026
cadc69b
chore(mysql): Remove debug log line
bvt123 Feb 27, 2026
adbc9db
refactor(serializer): Serializers refactor and optimize batch
bvt123 Feb 27, 2026
3f36d2c
refactor(abstract): Separate sampleable and checksumable interfaces
bvt123 Feb 27, 2026
30d252f
fix(security): Address GitHub Advanced Security findings
bvt123 Feb 27, 2026
5316c72
fix(ci): Add job timeouts and limit test retries to prevent runaway jobs
bvt123 Feb 27, 2026
01e3d92
fix(ci): Grant contents:read permission to CI callers and add timeouts
bvt123 Feb 27, 2026
ce6e761
refactor(tests): Unify e2e-core and e2e-optional into tests/e2e
bvt123 Feb 27, 2026
5b009dc
fix(model): Add MigrationOptions field to ChDestination
bvt123 Feb 27, 2026
2b9b56e
refactor(tests): Rename storage/pg to storage/postgres for consistency
bvt123 Feb 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
91 changes: 34 additions & 57 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,6 @@ on:
push:
branches:
- "altinity"
pull_request:
branches:
- "*"
workflow_dispatch:

concurrency:
Expand All @@ -23,7 +20,7 @@ jobs:
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: "1.22.0"
go-version: "1.24.13"
- shell: bash
run: |
make build
Expand All @@ -39,10 +36,15 @@ jobs:
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: "1.22.0"
go-version: "1.24.13"
- shell: bash
run: |
go test ./cmd/... -timeout=20m
packages=$(go list ./cmd/... | grep -v '/tests$' || true)
if [ -z "$packages" ]; then
echo "No cmd packages selected"
exit 1
fi
go test $packages -timeout=20m

e2e-tests:
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch'
Expand All @@ -53,36 +55,25 @@ jobs:
fail-fast: false
matrix:
suite: [
# CLI test suites
{ group: "cmd", name: "cmd", path: "" },
# providers suites, some of the providers are too heavy to run as single test
{
group: "pkg/providers",
name: "container",
path: "container",
container: true,
},
{ group: "pkg/providers", name: "yt", path: "yt", yt: true },
{
group: "pkg/providers",
name: "providers-postgres",
path: "postgres",
},
# e2e test suites
{ group: "tests/e2e", name: "kafka2ch", path: "kafka2ch" },
{ group: "tests/e2e", name: "pg2pg", path: "pg2pg" },
# core e2e suites
{ group: "tests/e2e", name: "pg2ch", path: "pg2ch" },
{ group: "tests/e2e", name: "mysql2ch", path: "mysql2ch" },
{ group: "tests/e2e", name: "mongo2ch", path: "mongo2ch" },
{ group: "tests/e2e", name: "kafka2ch", path: "kafka2ch" },
# optional e2e suites
{ group: "tests/e2e", name: "airbyte2ch", path: "airbyte2ch" },
{ group: "tests/e2e", name: "ch2ch", path: "ch2ch" },
{ group: "tests/e2e", name: "eventhub2ch", path: "eventhub2ch" },
{ group: "tests/e2e", name: "kinesis2ch", path: "kinesis2ch" },
{ group: "tests/e2e", name: "ch2s3", path: "ch2s3" },
{ group: "tests/e2e", name: "oracle2ch", path: "oracle2ch" },
]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: "1.22.0"
go-version: "1.24.13"
- shell: bash
run: |
go install gotest.tools/gotestsum@latest
Expand All @@ -97,27 +88,9 @@ jobs:
- shell: bash
run: |
pg_dump --version
- uses: engineerd/setup-kind@v0.6.2
if: matrix.suite.container
with:
version: "v0.26.0"
# Handled by the test code
skipClusterCreation: true
skipClusterDeletion: true
skipClusterLogsExport: true
- shell: bash
if: matrix.suite.yt
name: prepare local YT
run: |
go build -o binaries/lightexe ./pkg/providers/yt/lightexe/*.go
docker compose -f "pkg/providers/yt/recipe/docker-compose.yml" up -d --build
export YT_PROXY=localhost:8180
export TEST_DEPS_BINARY_PATH=binaries
- shell: bash
run: |
make run-tests SUITE_GROUP="${{ matrix.suite.group }}" SUITE_PATH="${{ matrix.suite.path }}" SUITE_NAME="${{ matrix.suite.name }}"
env:
TEST_KUBERNETES_INTEGRATION: ${{ matrix.suite.container == true && '1' || '' }}
- name: Upload Test Results
uses: actions/upload-artifact@v4
if: always()
Expand All @@ -141,7 +114,7 @@ jobs:
{ group: "tests/canon", name: "canon-parser", path: "parser" },
{ group: "tests/storage", name: "storage-pg", path: "pg" },
# internal test suites
{ group: "internal", name: "internal", path: "..." },
{ group: "internal", name: "internal", path: "" },
# provider test suites
{ group: "pkg/providers", name: "providers-mongo", path: "mongo" },
{ group: "pkg/providers", name: "providers-mysql", path: "mysql" },
Expand All @@ -150,27 +123,25 @@ jobs:
name: "providers-sample",
path: "sample",
},
{ group: "pkg/providers", name: "providers-kafka", path: "kafka" },
{
group: "pkg/providers",
name: "providers-kinesis",
path: "kinesis",
name: "providers-stdout",
path: "stdout",
},
{ group: "pkg/providers", name: "providers-kafka", path: "kafka" },
{
group: "pkg/providers",
name: "providers-greenplum",
path: "greenplum",
name: "providers-kinesis",
path: "kinesis",
},
{
group: "pkg/providers",
name: "providers-clickhouse",
path: "clickhouse",
},
{
group: "pkg/providers",
name: "providers-elastic",
path: "elastic",
},
{ group: "pkg/providers", name: "providers-airbyte", path: "airbyte" },
{ group: "pkg/providers", name: "providers-eventhub", path: "eventhub" },
{ group: "pkg/providers", name: "providers-oracle", path: "oracle" },
# pkg test suites
{ group: "pkg", name: "abstract", path: "abstract" },
{ group: "pkg", name: "transformer", path: "transformer" },
Expand All @@ -194,7 +165,7 @@ jobs:
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: "1.22.0"
go-version: "1.24.13"
- shell: bash
run: |
go install gotest.tools/gotestsum@latest
Expand All @@ -211,14 +182,20 @@ jobs:
echo "Running ${{ matrix.suite.group }} suite ${{ matrix.suite.name }}"
export RECIPE_CLICKHOUSE_BIN=clickhouse
export USE_TESTCONTAINERS=1
EXTRA_GO_TEST_ARGS=""
if [[ "${{ matrix.suite.group }}" == "pkg/providers" && "${{ matrix.suite.path }}" == "clickhouse" ]]; then
# ClickHouse provider tests initialize multiple testcontainer recipes at package init;
# serial package execution avoids ryuk/reaper startup races.
EXTRA_GO_TEST_ARGS="-p=1"
fi
gotestsum \
--junitfile="reports/${{ matrix.suite.name }}.xml" \
--junitfile-project-name="${{ matrix.suite.group }}" \
--junitfile-testsuite-name="short" \
--rerun-fails \
--format github-actions \
--packages="./${{ matrix.suite.group }}/${{ matrix.suite.path }}/..." \
-- -timeout=15m
-- -timeout=15m $EXTRA_GO_TEST_ARGS
- name: Upload Test Results
uses: actions/upload-artifact@v4
if: always()
Expand Down
93 changes: 37 additions & 56 deletions .github/workflows/build_and_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: "1.22.0"
go-version: "1.24.13"
- shell: bash
run: |
make build
Expand All @@ -39,50 +39,45 @@ jobs:
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: "1.22.0"
go-version: "1.24.13"
- shell: bash
run: |
go test ./cmd/... -timeout=20m
packages=$(go list ./cmd/... | grep -v '/tests$' || true)
if [ -z "$packages" ]; then
echo "No cmd packages selected"
exit 1
fi
go test $packages -timeout=20m

e2e-tests:
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch'
needs: build
name: e2e / ${{ matrix.suite.name }}
runs-on: ubuntu-latest
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
suite: [
# CLI test suites
{ group: "cmd", name: "cmd", path: "" },
# providers suites, some of the providers are too heavy to run as single test
{
group: "pkg/providers",
name: "container",
path: "container",
container: true,
},
{ group: "pkg/providers", name: "yt", path: "yt", yt: true },
{
group: "pkg/providers",
name: "providers-postgres",
path: "postgres",
},
# e2e test suites
{ group: "tests/e2e", name: "kafka2ch", path: "kafka2ch" },
{ group: "tests/e2e", name: "pg2pg", path: "pg2pg" },
# core e2e suites
{ group: "tests/e2e", name: "pg2ch", path: "pg2ch" },
{ group: "tests/e2e", name: "mysql2ch", path: "mysql2ch" },
{ group: "tests/e2e", name: "mongo2ch", path: "mongo2ch" },
{ group: "tests/e2e", name: "kafka2ch", path: "kafka2ch" },
# optional e2e suites
{ group: "tests/e2e", name: "airbyte2ch", path: "airbyte2ch" },
{ group: "tests/e2e", name: "ch2ch", path: "ch2ch" },
{ group: "tests/e2e", name: "eventhub2ch", path: "eventhub2ch" },
{ group: "tests/e2e", name: "kinesis2ch", path: "kinesis2ch" },
{ group: "tests/e2e", name: "ch2s3", path: "ch2s3" },
{ group: "tests/e2e", name: "oracle2ch", path: "oracle2ch" },
]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: "1.22.0"
go-version: "1.24.13"
- shell: bash
run: |
go install gotest.tools/gotestsum@latest
Expand All @@ -97,27 +92,9 @@ jobs:
- shell: bash
run: |
pg_dump --version
- uses: engineerd/setup-kind@v0.6.2
if: matrix.suite.container
with:
version: "v0.26.0"
# Handled by the test code
skipClusterCreation: true
skipClusterDeletion: true
skipClusterLogsExport: true
- shell: bash
if: matrix.suite.yt
name: prepare local YT
run: |
go build -o binaries/lightexe ./pkg/providers/yt/lightexe/*.go
docker compose -f "pkg/providers/yt/recipe/docker-compose.yml" up -d --build
export YT_PROXY=localhost:8180
export TEST_DEPS_BINARY_PATH=binaries
- shell: bash
run: |
make run-tests SUITE_GROUP="${{ matrix.suite.group }}" SUITE_PATH="${{ matrix.suite.path }}" SUITE_NAME="${{ matrix.suite.name }}"
env:
TEST_KUBERNETES_INTEGRATION: ${{ matrix.suite.container == true && '1' || '' }}
- name: Upload Test Results
uses: actions/upload-artifact@v4
if: always()
Expand All @@ -133,6 +110,7 @@ jobs:
needs: build
name: tests - ${{ matrix.suite.name }}
runs-on: ubuntu-latest
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
Expand All @@ -141,7 +119,7 @@ jobs:
{ group: "tests/canon", name: "canon-parser", path: "parser" },
{ group: "tests/storage", name: "storage-pg", path: "pg" },
# internal test suites
{ group: "internal", name: "internal", path: "..." },
{ group: "internal", name: "internal", path: "" },
# provider test suites
{ group: "pkg/providers", name: "providers-mongo", path: "mongo" },
{ group: "pkg/providers", name: "providers-mysql", path: "mysql" },
Expand All @@ -150,34 +128,31 @@ jobs:
name: "providers-sample",
path: "sample",
},
{ group: "pkg/providers", name: "providers-kafka", path: "kafka" },
{
group: "pkg/providers",
name: "providers-kinesis",
path: "kinesis",
name: "providers-stdout",
path: "stdout",
},
{ group: "pkg/providers", name: "providers-kafka", path: "kafka" },
{
group: "pkg/providers",
name: "providers-greenplum",
path: "greenplum",
name: "providers-kinesis",
path: "kinesis",
},
{
group: "pkg/providers",
name: "providers-clickhouse",
path: "clickhouse",
},
{
group: "pkg/providers",
name: "providers-elastic",
path: "elastic",
},
{ group: "pkg/providers", name: "providers-airbyte", path: "airbyte" },
{ group: "pkg/providers", name: "providers-eventhub", path: "eventhub" },
{ group: "pkg/providers", name: "providers-oracle", path: "oracle" },
# pkg test suites
{ group: "pkg", name: "abstract", path: "abstract" },
{ group: "pkg", name: "transformer", path: "transformer" },
{ group: "pkg", name: "predicate", path: "predicate" },
{ group: "pkg", name: "dblog", path: "dblog" },
{ group: "pkg", name: "functions", path: "functions" },
{ group: "pkg", name: "maplock", path: "maplock" },
{ group: "pkg", name: "middlewares", path: "middlewares" },
{ group: "pkg", name: "parsequeue", path: "parsequeue" },
{ group: "pkg", name: "util", path: "util" },
Expand All @@ -195,7 +170,7 @@ jobs:
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: "1.22.0"
go-version: "1.24.13"
- shell: bash
run: |
go install gotest.tools/gotestsum@latest
Expand All @@ -212,14 +187,20 @@ jobs:
echo "Running ${{ matrix.suite.group }} suite ${{ matrix.suite.name }}"
export RECIPE_CLICKHOUSE_BIN=clickhouse
export USE_TESTCONTAINERS=1
EXTRA_GO_TEST_ARGS=""
if [[ "${{ matrix.suite.group }}" == "pkg/providers" && "${{ matrix.suite.path }}" == "clickhouse" ]]; then
# ClickHouse provider tests initialize multiple testcontainer recipes at package init;
# serial package execution avoids ryuk/reaper startup races.
EXTRA_GO_TEST_ARGS="-p=1"
fi
gotestsum \
--junitfile="reports/${{ matrix.suite.name }}.xml" \
--junitfile-project-name="${{ matrix.suite.group }}" \
--junitfile-testsuite-name="short" \
--rerun-fails \
--rerun-fails=2 \
--format github-actions \
--packages="./${{ matrix.suite.group }}/${{ matrix.suite.path }}/..." \
-- -timeout=15m
-- -timeout=15m $EXTRA_GO_TEST_ARGS
- name: Upload Test Results
uses: actions/upload-artifact@v4
if: always()
Expand Down
Loading
Loading