kicks 3.3.0 → 3.4.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a7bbca9eba169dacb7dc06c6536049d59ccf469f7c006918850dff45e7f6248a
4
- data.tar.gz: a9c635d5d1404a4b090df86217c5ffbd28c7dd2dabf3bed1a7d3403236513528
3
+ metadata.gz: c3ecabfdb6983f2a20237a579d28d78cf868ada1979b4cd4b0b697d36b02a260
4
+ data.tar.gz: b8734c3b4a29ee2e2f5d735b0bbf9862391006506372f29b608af46470ec05fe
5
5
  SHA512:
6
- metadata.gz: 13a7f0407c737d4a263283bd07b44bdba929c23b0e3fe2a724e4c900b9edc5ab60fe1d9695e1fca1b9deba4e6ed435b4a80794ed8f3bf9188335ba1b58c1b373
7
- data.tar.gz: 8a0bc7b766d90f3d0789cf5948d2046e7096d9b8ffecd6af9f3dff80166dfcaa948b21b91e10e0172b5a311d2b51b16085f0f0a3e34e2412fc944dfd7a2073a8
6
+ metadata.gz: 337a21db50e4ff7f8931abdf9eb1ab91a3a3f30d66b242e823e2a62bb93b162260aaab6c1d1b09f239fac46f1f837c2d8d0c9624e21b9500adc64076c20f123d
7
+ data.tar.gz: 342e9a4ba8bed410c80211cac9df5e1558cbae7e03cf774b3c5d559a3daa75096c3748a2242cb09e35f2194aa2086995cd6f0d6e44058def877b7d83ed6163eb
@@ -1,26 +1,51 @@
1
1
  name: CI
2
2
 
3
- on: [push, pull_request]
3
+ on:
4
+ push:
5
+ branches:
6
+ - "main"
7
+ pull_request:
8
+ branches:
9
+ - "main"
4
10
 
5
11
  jobs:
6
12
  tests:
7
- name: Ruby ${{ matrix.ruby-version }}
13
+ name: RabbitMQ ${{ matrix.rabbitmq }}, Ruby ${{ matrix.ruby }}
8
14
  runs-on: ubuntu-latest
15
+
9
16
  strategy:
17
+ fail-fast: false
10
18
  matrix:
11
- ruby-version:
12
- - "3.4.2"
13
- - "3.3.7"
14
- - "3.2.7"
15
- - "3.1.6"
19
+ ruby:
20
+ - "4.0"
21
+ - "3.4"
22
+ - "3.3"
23
+ - "3.2"
24
+ - "3.1"
25
+ rabbitmq:
26
+ - "4.2"
27
+ - "4.1"
28
+ - "4.0"
29
+ - "3.13"
30
+
31
+ services:
32
+ rabbitmq:
33
+ image: rabbitmq:${{ matrix.rabbitmq }}-management
34
+ ports:
35
+ - 5672:5672
36
+ - 15672:15672
37
+
16
38
  steps:
17
- - uses: actions/checkout@v6
39
+ - uses: actions/checkout@v7
18
40
 
19
- - name: Install Ruby ${{ matrix.ruby-version }}
41
+ - name: Set up Ruby ${{ matrix.ruby }}
20
42
  uses: ruby/setup-ruby@v1
21
43
  with:
22
- ruby-version: ${{ matrix.ruby-version }}
23
- bundler-cache: true # 'bundle install', cache gems
44
+ ruby-version: ${{ matrix.ruby }}
45
+ bundler-cache: true
46
+
47
+ - name: Wait for RabbitMQ to start
48
+ run: sleep 10
24
49
 
25
50
  - name: Run tests
26
51
  run: bundle exec rake
data/AGENTS.md CHANGED
@@ -2,39 +2,69 @@
2
2
 
3
3
  ## Overview
4
4
 
5
- Kicks is a high-performance RabbitMQ background processing framework for Ruby,
6
- a community-driven continuation of the original [Sneakers](https://github.com/jondot/sneakers) project.
7
- The internal module name is still `Sneakers`.
5
+ Kicks is a fast background processing framework for Ruby and RabbitMQ.
6
+ It was originally developed under the name [Sneakers](https://github.com/jondot/sneakers)
7
+ and later renamed and moved to [`ruby-amqp/kicks`](https://github.com/ruby-amqp/kicks).
8
8
 
9
- Its key dependencies are [Bunny](https://github.com/ruby-amqp/bunny) (a RabbitMQ client that uses AMQP 0-9-1)
10
- and [ServerEngine](https://github.com/treasure-data/serverengine) for process management.
9
+ Its key dependency is [Bunny](https://github.com/ruby-amqp/bunny), a Ruby AMQP 0-9-1 client for RabbitMQ.
11
10
 
12
11
  ## Target Ruby Version
13
12
 
14
- This library targets Ruby 3.0 and later versions.
13
+ This library targets Ruby 3.1 and later versions.
15
14
 
16
15
  ## Build and Test
17
16
 
18
17
  ```bash
19
18
  bundle install
20
19
 
21
- bundle exec rake
20
+ bundle exec rake test
22
21
  ```
23
22
 
24
- Tests use Minitest. The default Rake task runs `spec/**/*_spec.rb`.
23
+ To run a specific test file:
24
+
25
+ ```bash
26
+ bundle exec ruby -Ilib -Ispec spec/sneakers/queue_spec.rb
27
+ ```
25
28
 
26
29
  ## Key Files
27
30
 
28
- * `lib/sneakers/worker.rb`: the core `Sneakers::Worker` module (work processing, [delivery acknowledgements](https://www.rabbitmq.com/docs/confirms))
29
- * `lib/sneakers/configuration.rb`: configuration and defaults
30
- * `lib/sneakers/queue.rb`: queue declaration and consumer registration
31
- * `lib/sneakers/runner.rb`: the main runner that spawns and manages workers
32
- * `lib/sneakers/publisher.rb`: message publishing
33
- * `lib/sneakers/cli.rb`: CLI, based on Thor
34
- * `lib/sneakers/handlers/maxretry.rb`: retry handler with error queue support
35
- * `lib/sneakers/handlers/oneshot.rb`: the default handler
36
- * `lib/sneakers/version.rb`: `Sneakers::VERSION` constant
37
- * `lib/active_job/queue_adapters/sneakers_adapter.rb`: an `ActiveJob` adapter for Ruby on Rails
31
+ ### Core
32
+
33
+ * `lib/sneakers.rb`: top-level module, global configuration, logger setup
34
+ * `lib/sneakers/queue.rb`: Bunny connection and channel lifecycle, queue and exchange declaration, consumer subscription
35
+ * `lib/sneakers/worker.rb`: `Sneakers::Worker` module included by worker classes; message dispatch, acknowledgement, error handling
36
+ * `lib/sneakers/publisher.rb`: message publishing with its own Bunny connection
37
+ * `lib/sneakers/runner.rb`: worker process runner built on ServerEngine
38
+ * `lib/sneakers/spawner.rb`: forks worker groups into separate processes
39
+ * `lib/sneakers/workergroup.rb`: manages a group of workers sharing a connection
40
+ * `lib/sneakers/configuration.rb`: configuration defaults and option merging
41
+ * `lib/sneakers/content_type.rb`: pluggable content type serialization/deserialization
42
+ * `lib/sneakers/content_encoding.rb`: pluggable content encoding (e.g. gzip)
43
+ * `lib/sneakers/error_reporter.rb`: error reporting interface
44
+ * `lib/sneakers/cli.rb`: Thor-based CLI (`sneakers work`)
45
+ * `lib/sneakers/tasks.rb`: Rake tasks for running workers
46
+ * `lib/sneakers/version.rb`: the `Sneakers::VERSION` constant
47
+
48
+ ### Handlers
49
+
50
+ * `lib/sneakers/handlers/oneshot.rb`: basic handler that acks/rejects once (default)
51
+ * `lib/sneakers/handlers/maxretry.rb`: dead-letter-based retry with configurable max attempts
52
+
53
+ ### Metrics
54
+
55
+ * `lib/sneakers/metrics/null_metrics.rb`: no-op (default)
56
+ * `lib/sneakers/metrics/logging_metrics.rb`: logs metric events
57
+ * `lib/sneakers/metrics/statsd_metrics.rb`: StatsD integration
58
+ * `lib/sneakers/metrics/newrelic_metrics.rb`: New Relic integration
59
+
60
+ ### ActiveJob
61
+
62
+ * `lib/active_job/queue_adapters/sneakers_adapter.rb`: Rails ActiveJob adapter
63
+
64
+ ### Testing
65
+
66
+ * `spec/sneakers/`: test files that mirror the `lib/sneakers/` structure
67
+ * `spec/sneakers/integration_spec.rb`: integration tests requiring a running RabbitMQ node and `INTEGRATION=1`
38
68
 
39
69
  ## Comments
40
70
 
@@ -52,23 +82,35 @@ existing writing style.
52
82
  ### How to Roll (Produce) a New Release
53
83
 
54
84
  Suppose the current development version in `ChangeLog.md` has
55
- a `## Changes Between Kicks X.Y.0 and X.(Y+1).0 (in development)` section at the top.
85
+ a `## Changes Between X.Y.0 and X.(Y+1).0 (in development)` section at the top.
56
86
 
57
87
  To produce a new release:
58
88
 
59
89
  1. Update `ChangeLog.md`: replace `(in development)` with today's date, e.g. `(Mar 30, 2026)`. Make sure all notable changes since the previous release are listed
60
90
  2. Update the version in `lib/sneakers/version.rb` to match (remove the `.pre` suffix)
61
91
  3. Commit with the message `X.(Y+1).0` (just the version number, nothing else)
62
- 4. Tag the commit: `git tag X.(Y+1).0`
63
- 5. Bump the dev version: add a new `## Changes Between Kicks X.(Y+1).0 and X.(Y+2).0 (in development)` section to `ChangeLog.md` with `No changes yet.` underneath, and update `lib/sneakers/version.rb` to the next dev version with a `.pre` suffix
64
- 6. Commit with the message `Bump dev version`
65
- 7. Push: `git push && git push --tags`
92
+ 4. Tag the commit: `git tag vX.(Y+1).0`
93
+ 5. Bump the dev version: add a new `## Changes Between X.(Y+1).0 and X.(Y+2).0 (in development)` section to `ChangeLog.md` with `No (documented) changes yet.` underneath, and update `lib/sneakers/version.rb` to the next dev version with a `.pre` suffix
94
+ 6. Commit with the message `Back to dev version`
95
+ 7. Push: `git push && git push origin vX.(Y+1).0`
66
96
 
67
97
  ## Git Instructions
68
98
 
99
+ * Do not commit changes automatically without explicit permission to do so
69
100
  * Never add yourself to the list of commit co-authors
70
101
  * Never mention yourself in commit messages in any way (no "Generated by", no AI tool links, etc)
71
102
 
72
103
  ## Style Guide
73
104
 
74
105
  * Never add full stops to Markdown list items
106
+
107
+ ## After Completing a Task
108
+
109
+ ### Iterative Reviews
110
+
111
+ After completing a task, perform up to thirty iterative reviews of your changes.
112
+ In every iteration, look for meaningful improvements that were missed, for gaps in test coverage,
113
+ and for deviations from the instructions in this file.
114
+
115
+ If no meaningful improvements are found for three iterations in a row,
116
+ report it and stop iterating.
data/CLAUDE.md ADDED
@@ -0,0 +1 @@
1
+ AGENTS.md
data/ChangeLog.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Change Log
2
2
 
3
+ ## Changes Between 3.3.0 and 3.4.0 (Jul 31, 2026)
4
+
5
+ ### Bunny 3.x
6
+
7
+ Kicks now depends on Bunny `3.x`.
8
+
9
+ Bunny 3.0 removed `Bunny::VersionedDeliveryTag`, changed the third argument of
10
+ `Bunny::Channel#initialize` to an options hash, and moved topology recovery to
11
+ `Bunny::Session`. None of these affect the Kicks API.
12
+
13
+ GitHub issue: [#45](https://github.com/ruby-amqp/kicks/issues/45)
14
+
15
+ ### Minimum Required Ruby Version
16
+
17
+ Kicks now requires Ruby `3.1` or later.
18
+
19
+
3
20
  ## Changes Between 3.2.0 and 3.3.0 (Mar 31, 2026)
4
21
 
5
22
  ### Queue Type Inheritance for Retry and Error Queues
data/GEMINI.md ADDED
@@ -0,0 +1 @@
1
+ AGENTS.md
data/README.md CHANGED
@@ -20,6 +20,11 @@ to this "fork" (continuation) under the new name.
20
20
  By virtue of its Sneakers lineage, Kicks is a mature project that has been around since 2016.
21
21
 
22
22
 
23
+ ## Supported Ruby Versions
24
+
25
+ Kicks `3.4.x` and later series target Ruby `3.1` and later versions.
26
+
27
+
23
28
  ## Installation
24
29
 
25
30
  Add this line to your application's Gemfile:
@@ -191,9 +196,9 @@ environment needed locally on your development box.
191
196
 
192
197
  # Compatibility
193
198
 
194
- * Kicks main branch: Ruby 3.0+
195
- * Kicks 3.1.x branch: Ruby 3.0+
196
- * Kicks 3.0.x: Ruby 2.5+
199
+ * Kicks main branch: Ruby 3.1+
200
+ * Kicks 3.4.x and later (using Bunny 3.x): Ruby 3.1+
201
+ * Kicks 3.0.x through 3.3.x (using Bunny 2.x): Ruby 2.5+
197
202
  * Sneakers 2.7.x and later (using Bunny 2.9): Ruby 2.2.x
198
203
  * Sneakers 1.1.x and later (using Bunny 2.x): Ruby 2.x
199
204
  * Sneakers 1.x.x and earlier: Ruby 1.9.x, 2.x
@@ -212,6 +217,6 @@ See [LICENSE](LICENSE.txt) for further details.
212
217
 
213
218
  ## Copyright
214
219
 
215
- Copyright (c) 2023-2024 Kicks contributors.
220
+ Copyright (c) 2023-2026 Kicks contributors.
216
221
 
217
222
  Copyright (c) 2015-2023 [Dotan Nahum](http://gplus.to/dotan) [@jondot](http://twitter.com/jondot).
data/kicks.gemspec CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |gem|
15
15
  gem.homepage = 'https://github.com/ruby-amqp/kicks'
16
16
  gem.metadata = { "source_code_uri" => "https://github.com/ruby-amqp/kicks" }
17
17
  gem.license = 'MIT'
18
- gem.required_ruby_version = Gem::Requirement.new(">= 2.5")
18
+ gem.required_ruby_version = Gem::Requirement.new(">= 3.1")
19
19
 
20
20
  gem.files = `git ls-files`.split($/).reject { |f| f == 'Gemfile.lock' }
21
21
  gem.executables = gem.files.grep(/^bin/).
@@ -25,7 +25,7 @@ Gem::Specification.new do |gem|
25
25
  gem.require_paths = ['lib']
26
26
 
27
27
  gem.add_dependency 'serverengine', '~> 2.1'
28
- gem.add_dependency 'bunny', '~> 2.24'
28
+ gem.add_dependency 'bunny', '~> 3.0'
29
29
  gem.add_dependency 'concurrent-ruby', '~> 1.0'
30
30
  gem.add_dependency 'thor'
31
31
  gem.add_dependency 'rake', '>= 12.3', '< 14.0'
@@ -1,3 +1,3 @@
1
1
  module Sneakers
2
- VERSION = "3.3.0"
2
+ VERSION = "3.4.0"
3
3
  end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kicks
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.0
4
+ version: 3.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dotan Nahum
8
8
  - Michael Klishin
9
- autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2026-04-01 00:00:00.000000000 Z
11
+ date: 1980-01-02 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: serverengine
@@ -31,14 +30,14 @@ dependencies:
31
30
  requirements:
32
31
  - - "~>"
33
32
  - !ruby/object:Gem::Version
34
- version: '2.24'
33
+ version: '3.0'
35
34
  type: :runtime
36
35
  prerelease: false
37
36
  version_requirements: !ruby/object:Gem::Requirement
38
37
  requirements:
39
38
  - - "~>"
40
39
  - !ruby/object:Gem::Version
41
- version: '2.24'
40
+ version: '3.0'
42
41
  - !ruby/object:Gem::Dependency
43
42
  name: concurrent-ruby
44
43
  requirement: !ruby/object:Gem::Requirement
@@ -267,9 +266,11 @@ files:
267
266
  - ".github/workflows/ci.yml"
268
267
  - ".gitignore"
269
268
  - AGENTS.md
269
+ - CLAUDE.md
270
270
  - ChangeLog.md
271
271
  - Dockerfile
272
272
  - Dockerfile.slim
273
+ - GEMINI.md
273
274
  - Gemfile
274
275
  - Guardfile
275
276
  - LICENSE.txt
@@ -344,7 +345,6 @@ licenses:
344
345
  - MIT
345
346
  metadata:
346
347
  source_code_uri: https://github.com/ruby-amqp/kicks
347
- post_install_message:
348
348
  rdoc_options: []
349
349
  require_paths:
350
350
  - lib
@@ -352,15 +352,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
352
352
  requirements:
353
353
  - - ">="
354
354
  - !ruby/object:Gem::Version
355
- version: '2.5'
355
+ version: '3.1'
356
356
  required_rubygems_version: !ruby/object:Gem::Requirement
357
357
  requirements:
358
358
  - - ">="
359
359
  - !ruby/object:Gem::Version
360
360
  version: '0'
361
361
  requirements: []
362
- rubygems_version: 3.4.19
363
- signing_key:
362
+ rubygems_version: 4.0.10
364
363
  specification_version: 4
365
364
  summary: Fast background processing framework for Ruby and RabbitMQ
366
365
  test_files: