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 +4 -4
- data/.github/workflows/ci.yml +36 -11
- data/AGENTS.md +65 -23
- data/CLAUDE.md +1 -0
- data/ChangeLog.md +17 -0
- data/GEMINI.md +1 -0
- data/README.md +9 -4
- data/kicks.gemspec +2 -2
- data/lib/sneakers/version.rb +1 -1
- metadata +8 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c3ecabfdb6983f2a20237a579d28d78cf868ada1979b4cd4b0b697d36b02a260
|
|
4
|
+
data.tar.gz: b8734c3b4a29ee2e2f5d735b0bbf9862391006506372f29b608af46470ec05fe
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 337a21db50e4ff7f8931abdf9eb1ab91a3a3f30d66b242e823e2a62bb93b162260aaab6c1d1b09f239fac46f1f837c2d8d0c9624e21b9500adc64076c20f123d
|
|
7
|
+
data.tar.gz: 342e9a4ba8bed410c80211cac9df5e1558cbae7e03cf774b3c5d559a3daa75096c3748a2242cb09e35f2194aa2086995cd6f0d6e44058def877b7d83ed6163eb
|
data/.github/workflows/ci.yml
CHANGED
|
@@ -1,26 +1,51 @@
|
|
|
1
1
|
name: CI
|
|
2
2
|
|
|
3
|
-
on:
|
|
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
|
|
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
|
|
12
|
-
- "
|
|
13
|
-
- "3.
|
|
14
|
-
- "3.
|
|
15
|
-
- "3.
|
|
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@
|
|
39
|
+
- uses: actions/checkout@v7
|
|
18
40
|
|
|
19
|
-
- name:
|
|
41
|
+
- name: Set up Ruby ${{ matrix.ruby }}
|
|
20
42
|
uses: ruby/setup-ruby@v1
|
|
21
43
|
with:
|
|
22
|
-
ruby-version: ${{ matrix.ruby
|
|
23
|
-
bundler-cache: true
|
|
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
|
|
6
|
-
|
|
7
|
-
|
|
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
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
* `lib/sneakers
|
|
31
|
-
* `lib/sneakers/
|
|
32
|
-
* `lib/sneakers/
|
|
33
|
-
* `lib/sneakers/
|
|
34
|
-
* `lib/sneakers/
|
|
35
|
-
* `lib/sneakers/
|
|
36
|
-
* `lib/sneakers/
|
|
37
|
-
* `lib/
|
|
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
|
|
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
|
|
63
|
-
5. Bump the dev version: add a new `## Changes Between
|
|
64
|
-
6. Commit with the message `
|
|
65
|
-
7. Push: `git push && git push
|
|
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.
|
|
195
|
-
* Kicks 3.
|
|
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-
|
|
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(">=
|
|
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', '~>
|
|
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'
|
data/lib/sneakers/version.rb
CHANGED
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.
|
|
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:
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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:
|
|
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:
|