karafka-rdkafka 0.20.0.rc2 → 0.20.0.rc5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci_linux_x86_64_gnu.yml +249 -0
  3. data/.github/workflows/ci_linux_x86_64_musl.yml +205 -0
  4. data/.github/workflows/ci_macos_arm64.yml +306 -0
  5. data/.github/workflows/push_linux_x86_64_gnu.yml +64 -0
  6. data/.github/workflows/push_linux_x86_64_musl.yml +77 -0
  7. data/.github/workflows/push_macos_arm64.yml +54 -0
  8. data/.github/workflows/push_ruby.yml +37 -0
  9. data/.gitignore +1 -0
  10. data/.ruby-version +1 -1
  11. data/CHANGELOG.md +22 -3
  12. data/README.md +2 -3
  13. data/Rakefile +0 -2
  14. data/dist/{librdkafka-2.10.0.tar.gz → librdkafka-2.8.0.tar.gz} +0 -0
  15. data/docker-compose.yml +1 -1
  16. data/ext/Rakefile +1 -1
  17. data/ext/build_common.sh +361 -0
  18. data/ext/build_linux_x86_64_gnu.sh +306 -0
  19. data/ext/build_linux_x86_64_musl.sh +763 -0
  20. data/ext/build_macos_arm64.sh +550 -0
  21. data/karafka-rdkafka.gemspec +26 -10
  22. data/lib/rdkafka/bindings.rb +31 -4
  23. data/lib/rdkafka/config.rb +4 -1
  24. data/lib/rdkafka/error.rb +8 -1
  25. data/lib/rdkafka/native_kafka.rb +4 -0
  26. data/lib/rdkafka/producer/partitions_count_cache.rb +216 -0
  27. data/lib/rdkafka/producer.rb +40 -28
  28. data/lib/rdkafka/version.rb +3 -3
  29. data/lib/rdkafka.rb +1 -0
  30. data/renovate.json +74 -0
  31. data/spec/rdkafka/admin_spec.rb +15 -2
  32. data/spec/rdkafka/bindings_spec.rb +0 -1
  33. data/spec/rdkafka/config_spec.rb +1 -1
  34. data/spec/rdkafka/consumer_spec.rb +35 -14
  35. data/spec/rdkafka/metadata_spec.rb +2 -2
  36. data/spec/rdkafka/producer/partitions_count_cache_spec.rb +359 -0
  37. data/spec/rdkafka/producer/partitions_count_spec.rb +359 -0
  38. data/spec/rdkafka/producer_spec.rb +198 -7
  39. data/spec/spec_helper.rb +12 -1
  40. metadata +43 -100
  41. checksums.yaml.gz.sig +0 -0
  42. data/.github/workflows/ci.yml +0 -99
  43. data/Guardfile +0 -19
  44. data/certs/cert.pem +0 -26
  45. data.tar.gz.sig +0 -0
  46. metadata.gz.sig +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7ec0f374f69159e6c590fa86b922713e06c75685417fe3ff2a92873fdcc211f5
4
- data.tar.gz: 75bdd3a80ee00c00ab6accc1ee837dfdb56520e89118cf86d904ddc498389bdc
3
+ metadata.gz: c9d63942785f841c6fdd663a7bf0375a0ff5dc9364c75d94c485e27387ccdf8b
4
+ data.tar.gz: '065864a6b250dc8c65dbc4fb9f1f9b4da3ac71a48c18f86ca4571e87c0cf7006'
5
5
  SHA512:
6
- metadata.gz: c71fcf404900358c5c8ff73d3908ca3c1c8ce54472427cc6ec8cd8d179a71766dfe568154abadc40230b1b9c55fc028754e3bd1e9d9a617b2df288f172d7a34b
7
- data.tar.gz: 988603f062bc16ecab79b36c277d68ac2d55b53822e7bb6f3382b5daeafbff4e566b05e29f974e59cab9a53bbd368f4c4e9e1da3111576bba752f7e476c97831
6
+ metadata.gz: fabfe803214a89c9ad9e7d6a4a056b8db5fb30a5c561c03b4871967a831b4cedaff9c418120cba833ade4cff24259238b8c763aedfeebfa8238dca4dc01abb29
7
+ data.tar.gz: 87bc10b2e24586af151e7bf69fd2b8fbece36dfcc40345fdf6f770486296db3e0c1f2c0112dc56c73419fa086c3235c063ba7384df8b74f8f70a94861d4a1c00
@@ -0,0 +1,249 @@
1
+ name: CI Linux x86_64 GNU
2
+
3
+ concurrency:
4
+ group: ${{ github.workflow }}-${{ github.ref }}
5
+ cancel-in-progress: true
6
+
7
+ on:
8
+ pull_request:
9
+ branches: [ main, master ]
10
+ push:
11
+ branches: [ main, master ]
12
+ schedule:
13
+ - cron: '0 1 * * *'
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ env:
19
+ BUNDLE_RETRY: 6
20
+ BUNDLE_JOBS: 4
21
+
22
+ jobs:
23
+ build_install:
24
+ timeout-minutes: 30
25
+ runs-on: ubuntu-latest
26
+ steps:
27
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
28
+ with:
29
+ fetch-depth: 0
30
+ - name: Install package dependencies
31
+ run: "[ -e $APT_DEPS ] || sudo apt-get install -y --no-install-recommends $APT_DEPS"
32
+ - name: Set up Ruby
33
+ uses: ruby/setup-ruby@a4effe49ee8ee5b8b5091268c473a4628afb5651 # v1.245.0
34
+ with:
35
+ ruby-version: '3.4' # Use one Ruby version for building
36
+ bundler-cache: false
37
+ - name: Build gem with mini_portile
38
+ run: |
39
+ set -e
40
+ bundle install
41
+ cd ext && bundle exec rake
42
+ cd ..
43
+ - name: Upload built gem and bundle
44
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
45
+ with:
46
+ name: rdkafka-built-gem
47
+ path: |
48
+ vendor/bundle/
49
+ .bundle/
50
+ ext/
51
+ lib/
52
+ retention-days: 1
53
+
54
+ specs_install:
55
+ timeout-minutes: 30
56
+ runs-on: ubuntu-latest
57
+ needs: build_install
58
+ strategy:
59
+ fail-fast: false
60
+ matrix:
61
+ ruby:
62
+ - '3.5.0-preview1'
63
+ - '3.4'
64
+ - '3.3'
65
+ - '3.2'
66
+ - '3.1'
67
+ - 'jruby-10.0'
68
+ include:
69
+ - ruby: '3.4'
70
+ coverage: 'true'
71
+ - ruby: 'jruby-10.0'
72
+ continue-on-error: true
73
+ steps:
74
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
75
+ with:
76
+ fetch-depth: 0
77
+ - name: Download built gem
78
+ uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
79
+ with:
80
+ name: rdkafka-built-gem
81
+ path: ./
82
+ - name: Set up Ruby
83
+ uses: ruby/setup-ruby@a4effe49ee8ee5b8b5091268c473a4628afb5651 # v1.245.0
84
+ with:
85
+ ruby-version: ${{matrix.ruby}}
86
+ bundler-cache: false
87
+ - name: Start Kafka with Docker Compose
88
+ run: |
89
+ docker compose up -d
90
+ echo "Waiting for Kafka to be ready..."
91
+
92
+ sleep 10
93
+
94
+ echo "=== Container status ==="
95
+ docker compose ps kafka
96
+
97
+ for i in {1..30}; do
98
+ echo "=== Attempt $i/30 ==="
99
+
100
+ echo "Testing kafka-topics command..."
101
+ if docker compose exec -T kafka kafka-topics --bootstrap-server localhost:9092 --list >/dev/null 2>&1; then
102
+ echo "Kafka topics command succeeded!"
103
+ break
104
+ else
105
+ echo "Kafka topics command failed (exit code: $?)"
106
+ fi
107
+
108
+ echo "Sleeping 2 seconds..."
109
+ sleep 2
110
+ done
111
+ - name: Install remaining dependencies
112
+ env:
113
+ RDKAFKA_EXT_PATH: ${{ github.workspace }}/ext
114
+ run: |
115
+ # Only install gems that aren't Ruby-version specific
116
+ bundle install
117
+ - name: Run all specs
118
+ env:
119
+ GITHUB_COVERAGE: ${{matrix.coverage}}
120
+ RDKAFKA_EXT_PATH: ${{ github.workspace }}/ext
121
+ continue-on-error: ${{ matrix.continue-on-error || false }}
122
+ run: |
123
+ bundle exec rspec
124
+
125
+ build_precompiled:
126
+ timeout-minutes: 30
127
+ runs-on: ubuntu-latest
128
+ steps:
129
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
130
+ with:
131
+ fetch-depth: 0
132
+ - name: Install build dependencies
133
+ run: |
134
+ sudo apt-get update
135
+ sudo apt-get install -y --no-install-recommends \
136
+ build-essential \
137
+ gcc \
138
+ make \
139
+ patch \
140
+ tar \
141
+ wget \
142
+ ca-certificates \
143
+ libsasl2-dev \
144
+ libssl-dev \
145
+ zlib1g-dev \
146
+ libzstd-dev
147
+ - name: Cache build-tmp directory
148
+ uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
149
+ with:
150
+ path: ext/build-tmp
151
+ key: build-tmp-${{ runner.os }}-${{ hashFiles('ext/*.sh', 'ext/Rakefile') }}-v2
152
+ - name: Build precompiled librdkafka.so
153
+ run: |
154
+ cd ext
155
+ ./build_linux_x86_64_gnu.sh
156
+ - name: Upload precompiled library
157
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
158
+ with:
159
+ name: librdkafka-precompiled-linux
160
+ path: ext/
161
+ retention-days: 1
162
+
163
+ specs_precompiled:
164
+ timeout-minutes: 30
165
+ runs-on: ubuntu-latest
166
+ needs: build_precompiled
167
+ strategy:
168
+ fail-fast: false
169
+ matrix:
170
+ ruby:
171
+ - '3.5.0-preview1'
172
+ - '3.4'
173
+ - '3.3'
174
+ - '3.2'
175
+ - '3.1'
176
+ include:
177
+ - ruby: '3.4'
178
+ coverage: 'true'
179
+ steps:
180
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
181
+ with:
182
+ fetch-depth: 0
183
+ - name: Download precompiled library
184
+ uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
185
+ with:
186
+ name: librdkafka-precompiled-linux
187
+ path: ext/
188
+ - name: Set up Ruby
189
+ uses: ruby/setup-ruby@a4effe49ee8ee5b8b5091268c473a4628afb5651 # v1.245.0
190
+ with:
191
+ ruby-version: ${{ matrix.ruby }}
192
+ bundler-cache: false
193
+ - name: Start Kafka with Docker Compose
194
+ run: |
195
+ docker compose up -d
196
+ echo "Waiting for Kafka to be ready..."
197
+
198
+ sleep 10
199
+
200
+ echo "=== Container status ==="
201
+ docker compose ps kafka
202
+
203
+ for i in {1..30}; do
204
+ echo "=== Attempt $i/30 ==="
205
+
206
+ echo "Testing kafka-topics command..."
207
+ if docker compose exec -T kafka kafka-topics --bootstrap-server localhost:9092 --list >/dev/null 2>&1; then
208
+ echo "Kafka topics command succeeded!"
209
+ break
210
+ else
211
+ echo "Kafka topics command failed (exit code: $?)"
212
+ fi
213
+
214
+ echo "Sleeping 2 seconds..."
215
+ sleep 2
216
+ done
217
+ - name: Install bundle with precompiled library
218
+ env:
219
+ GITHUB_COVERAGE: ${{ matrix.coverage }}
220
+ RDKAFKA_EXT_PATH: ${{ github.workspace }}/ext
221
+ run: |
222
+ bundle install
223
+ echo "Bundle install completed with precompiled library"
224
+ - name: Remove build dependencies to test static linking
225
+ continue-on-error: true
226
+ run: |
227
+ echo "Removing build dependencies to verify precompiled library is truly self-contained..."
228
+
229
+ # Remove packages one by one to avoid dependency conflicts
230
+ packages_to_remove="build-essential gcc g++ make patch tar wget libsasl2-dev libssl-dev zlib1g-dev libzstd-dev"
231
+
232
+ for package in $packages_to_remove; do
233
+ if dpkg -l | grep -q "^ii.*$package "; then
234
+ echo "Removing $package..."
235
+ sudo dpkg --remove --force-depends $package 2>/dev/null || echo "Could not remove $package"
236
+ else
237
+ echo "$package is not installed"
238
+ fi
239
+ done
240
+
241
+ echo "Build dependencies removal completed"
242
+ echo "Remaining build tools:"
243
+ which gcc g++ make 2>/dev/null || echo "No build tools found in PATH (good!)"
244
+ - name: Run specs with precompiled library
245
+ env:
246
+ GITHUB_COVERAGE: ${{ matrix.coverage }}
247
+ RDKAFKA_EXT_PATH: ${{ github.workspace }}/ext
248
+ run: |
249
+ bundle exec rspec
@@ -0,0 +1,205 @@
1
+ name: CI Linux x86_64 musl
2
+
3
+ concurrency:
4
+ group: ${{ github.workflow }}-${{ github.ref }}
5
+ cancel-in-progress: true
6
+
7
+ on:
8
+ pull_request:
9
+ branches: [ main, master ]
10
+ push:
11
+ branches: [ main, master ]
12
+ schedule:
13
+ - cron: '0 1 * * *'
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ env:
19
+ BUNDLE_RETRY: 6
20
+ BUNDLE_JOBS: 4
21
+
22
+ jobs:
23
+ build_install:
24
+ timeout-minutes: 30
25
+ runs-on: ubuntu-latest
26
+ container:
27
+ image: alpine:3.22@sha256:8a1f59ffb675680d47db6337b49d22281a139e9d709335b492be023728e11715
28
+ steps:
29
+ - name: Install dependencies
30
+ run: |
31
+ apk add --no-cache git curl ca-certificates build-base linux-headers \
32
+ pkgconf perl autoconf automake libtool bison flex file \
33
+ ruby ruby-dev ruby-bundler bash zstd-dev zlib zlib-dev openssl-dev cyrus-sasl-dev
34
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
35
+ with:
36
+ fetch-depth: 0
37
+ - name: Configure git safe directory
38
+ run: git config --global --add safe.directory /__w/karafka-rdkafka/karafka-rdkafka
39
+ - name: Build gem with mini_portile
40
+ run: |
41
+ set -e
42
+ bundle config set --local path 'vendor/bundle'
43
+ bundle install
44
+ cd ext && bundle exec rake
45
+ cd ..
46
+ - name: Upload built gem and bundle
47
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
48
+ with:
49
+ name: rdkafka-built-gem-musl
50
+ path: |
51
+ vendor/bundle/
52
+ .bundle/
53
+ ext/
54
+ lib/
55
+ retention-days: 1
56
+
57
+ specs_install:
58
+ timeout-minutes: 30
59
+ runs-on: ubuntu-latest
60
+ needs: build_install
61
+ strategy:
62
+ fail-fast: false
63
+ matrix:
64
+ ruby:
65
+ - '3.4'
66
+ - '3.3'
67
+ - '3.2'
68
+ - '3.1'
69
+ include:
70
+ - ruby: '3.4'
71
+ coverage: 'true'
72
+ steps:
73
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
74
+ with:
75
+ fetch-depth: 0
76
+ - name: Download built gem
77
+ uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
78
+ with:
79
+ name: rdkafka-built-gem-musl
80
+ path: ./
81
+ - name: Start Kafka with Docker Compose
82
+ run: |
83
+ docker compose up -d
84
+ echo "Waiting for Kafka to be ready..."
85
+ sleep 10
86
+
87
+ for i in {1..30}; do
88
+ if docker compose exec -T kafka kafka-topics --bootstrap-server localhost:9092 --list >/dev/null 2>&1; then
89
+ echo "Kafka topics command succeeded!"
90
+ break
91
+ fi
92
+ sleep 2
93
+ done
94
+ - name: Run all specs
95
+ env:
96
+ GITHUB_COVERAGE: ${{ matrix.coverage }}
97
+ RDKAFKA_EXT_PATH: ${{ github.workspace }}/ext
98
+ run: |
99
+ docker run --rm \
100
+ --network host \
101
+ -v "${{ github.workspace }}:/workspace" \
102
+ -w /workspace \
103
+ -e "GITHUB_COVERAGE=${{ matrix.coverage }}" \
104
+ -e "RDKAFKA_EXT_PATH=/workspace/ext" \
105
+ ruby:${{ matrix.ruby }}-alpine \
106
+ sh -c 'apk add --no-cache git build-base linux-headers bash \
107
+ cyrus-sasl \
108
+ cyrus-sasl-login \
109
+ cyrus-sasl-crammd5 \
110
+ cyrus-sasl-digestmd5 \
111
+ cyrus-sasl-gssapiv2 \
112
+ cyrus-sasl-scram \
113
+ krb5-libs \
114
+ openssl \
115
+ zlib \
116
+ zlib-dev \
117
+ zstd-libs && \
118
+ git config --global --add safe.directory /workspace && \
119
+ bundle config set --local path vendor/bundle && \
120
+ bundle install && \
121
+ bundle exec ruby -S rspec'
122
+ build_precompiled:
123
+ timeout-minutes: 45
124
+ runs-on: ubuntu-latest
125
+ container:
126
+ image: alpine:3.22@sha256:8a1f59ffb675680d47db6337b49d22281a139e9d709335b492be023728e11715
127
+ steps:
128
+ - name: Install dependencies
129
+ run: |
130
+ apk add --no-cache git curl ca-certificates build-base linux-headers \
131
+ pkgconf perl autoconf automake libtool bison flex file bash wget zstd-dev \
132
+ openssl-dev cyrus-sasl-dev cyrus-sasl cyrus-sasl-login \
133
+ cyrus-sasl-crammd5 cyrus-sasl-digestmd5 cyrus-sasl-gssapiv2 cyrus-sasl-scram \
134
+ krb5-libs openssl zlib zlib-dev zstd-libs
135
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
136
+ with:
137
+ fetch-depth: 0
138
+ - name: Configure git safe directory
139
+ run: git config --global --add safe.directory /__w/karafka-rdkafka/karafka-rdkafka
140
+ - name: Cache build-tmp directory
141
+ uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
142
+ with:
143
+ path: ext/build-tmp-musl
144
+ key: build-tmp-musl-${{ runner.os }}-${{ hashFiles('ext/*.sh', 'ext/Rakefile') }}-v2
145
+ - name: Build precompiled librdkafka.so
146
+ run: |
147
+ cd ext
148
+ bash ./build_linux_x86_64_musl.sh
149
+ - name: Upload precompiled library
150
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
151
+ with:
152
+ name: librdkafka-precompiled-musl
153
+ path: ext/
154
+ retention-days: 1
155
+
156
+ specs_precompiled:
157
+ timeout-minutes: 30
158
+ runs-on: ubuntu-latest
159
+ needs: build_precompiled
160
+ strategy:
161
+ fail-fast: false
162
+ matrix:
163
+ ruby:
164
+ - '3.4'
165
+ - '3.3'
166
+ - '3.2'
167
+ - '3.1'
168
+ include:
169
+ - ruby: '3.4'
170
+ coverage: 'true'
171
+ steps:
172
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
173
+ with:
174
+ fetch-depth: 0
175
+ - name: Download precompiled library
176
+ uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
177
+ with:
178
+ name: librdkafka-precompiled-musl
179
+ path: ext/
180
+ - name: Start Kafka with Docker Compose
181
+ run: |
182
+ docker compose up -d
183
+ echo "Waiting for Kafka to be ready..."
184
+ sleep 10
185
+
186
+ for i in {1..30}; do
187
+ if docker compose exec -T kafka kafka-topics --bootstrap-server localhost:9092 --list >/dev/null 2>&1; then
188
+ echo "Kafka topics command succeeded!"
189
+ break
190
+ fi
191
+ sleep 2
192
+ done
193
+ - name: Run specs with precompiled library
194
+ env:
195
+ GITHUB_COVERAGE: ${{ matrix.coverage }}
196
+ RDKAFKA_EXT_PATH: ${{ github.workspace }}/ext
197
+ run: |
198
+ docker run --rm \
199
+ --network host \
200
+ -v "${{ github.workspace }}:/workspace" \
201
+ -w /workspace \
202
+ -e "GITHUB_COVERAGE=${{ matrix.coverage }}" \
203
+ -e "RDKAFKA_EXT_PATH=/workspace/ext" \
204
+ ruby:${{ matrix.ruby }}-alpine \
205
+ sh -c 'apk add --no-cache git build-base linux-headers bash && git config --global --add safe.directory /workspace && bundle config set --local path vendor/bundle && bundle install && bundle exec ruby -S rspec'