amqp-client 1.2.0 → 2.0.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.
@@ -1,41 +0,0 @@
1
- name: "CodeQL"
2
-
3
- on:
4
- push:
5
- branches: [ main ]
6
- pull_request:
7
- # The branches below must be a subset of the branches above
8
- branches: [ main ]
9
- schedule:
10
- - cron: '23 22 * * 2'
11
-
12
- jobs:
13
- analyze:
14
- name: Analyze
15
- runs-on: ubuntu-latest
16
- permissions:
17
- actions: read
18
- contents: read
19
- security-events: write
20
-
21
- strategy:
22
- fail-fast: false
23
- matrix:
24
- language: [ 'ruby' ]
25
-
26
- steps:
27
- - name: Checkout repository
28
- uses: actions/checkout@v5
29
-
30
- # Initializes the CodeQL tools for scanning.
31
- - name: Initialize CodeQL
32
- uses: github/codeql-action/init@v3
33
- with:
34
- languages: ${{ matrix.language }}
35
- # If you wish to specify custom queries, you can do so here or in a config file.
36
- # By default, queries listed here will override any specified in a config file.
37
- # Prefix the list here with "+" to use these queries and those in the config file.
38
- # queries: ./path/to/local/query, your-org/your-repo/queries@main
39
-
40
- - name: Perform CodeQL Analysis
41
- uses: github/codeql-action/analyze@v3
@@ -1,28 +0,0 @@
1
- name: Documentation
2
-
3
- on:
4
- push:
5
- branches:
6
- - main
7
- paths:
8
- - 'src/**'
9
- - 'README.md'
10
-
11
- jobs:
12
- docs:
13
- runs-on: ubuntu-latest
14
- steps:
15
- - uses: actions/checkout@v5
16
- - name: Setup Ruby
17
- uses: ruby/setup-ruby@v1
18
- with:
19
- ruby-version: ruby
20
- - name: Install yard
21
- run: gem install yard
22
- - name: Generate docs
23
- run: yard doc
24
- - name: Deploy docs
25
- uses: JamesIves/github-pages-deploy-action@v4.5.0
26
- with:
27
- branch: gh-pages
28
- folder: doc
@@ -1,140 +0,0 @@
1
- name: Ruby
2
-
3
- on:
4
- push:
5
- branches:
6
- - main
7
- pull_request:
8
- branches:
9
- - main
10
-
11
- jobs:
12
- tests:
13
- name: >-
14
- ${{ matrix.ruby }} (sudo: ${{ matrix.sudo }})
15
- runs-on: ubuntu-latest
16
- timeout-minutes: 10
17
- strategy:
18
- fail-fast: false
19
- matrix:
20
- sudo: [true]
21
- ruby:
22
- - "3.2"
23
- - "3.3"
24
- - "3.4"
25
- include:
26
- - { ruby: jruby, allow-failure: false, sudo: false }
27
- - { ruby: truffleruby, allow-failure: false, sudo: false }
28
- steps:
29
- - name: Configure dpkg to skip building man pages
30
- run: |
31
- echo 'path-exclude /usr/share/doc/*' | sudo tee -a /etc/dpkg/dpkg.cfg.d/01_nodoc
32
- echo 'path-exclude /usr/share/man/*' | sudo tee -a /etc/dpkg/dpkg.cfg.d/01_nodoc
33
- - name: Install RabbitMQ
34
- run: sudo apt-get update && sudo apt-get install -y rabbitmq-server
35
- - name: Verify RabbitMQ started correctly
36
- run: while true; do sudo rabbitmq-diagnostics status 2>/dev/null && break; echo -n .; sleep 2; done
37
- - uses: actions/checkout@v5
38
- - uses: ruby/setup-ruby@v1
39
- with:
40
- bundler-cache: true
41
- ruby-version: ${{ matrix.ruby }}
42
- - name: Run tests (excluding TLS tests)
43
- continue-on-error: ${{ matrix.allow-failure || false }}
44
- run: bundle exec rake
45
- env:
46
- RUN_SUDO_TESTS: ${{ matrix.sudo }}
47
-
48
- tls:
49
- runs-on: ubuntu-latest
50
- timeout-minutes: 10
51
- strategy:
52
- fail-fast: false
53
- matrix:
54
- ruby:
55
- - "ruby" # latest stable release
56
- - "jruby"
57
- - "truffleruby"
58
- steps:
59
- - name: Configure dpkg to skip building man pages
60
- run: |
61
- echo 'path-exclude /usr/share/doc/*' | sudo tee -a /etc/dpkg/dpkg.cfg.d/01_nodoc
62
- echo 'path-exclude /usr/share/man/*' | sudo tee -a /etc/dpkg/dpkg.cfg.d/01_nodoc
63
- - name: Install RabbitMQ
64
- run: sudo apt-get update && sudo apt-get install -y rabbitmq-server
65
- - name: Stop RabbitMQ
66
- run: sudo systemctl stop rabbitmq-server
67
- - name: Set up Homebrew
68
- uses: Homebrew/actions/setup-homebrew@master
69
- - name: Install github.com/FiloSottile/mkcert
70
- run: brew install mkcert
71
- - name: Create local CA
72
- run: sudo CAROOT=/etc/rabbitmq $(brew --prefix)/bin/mkcert -install
73
- - name: Create certificate
74
- run: |
75
- sudo $(brew --prefix)/bin/mkcert -key-file /etc/rabbitmq/localhost-key.pem -cert-file /etc/rabbitmq/localhost.pem localhost
76
- sudo chmod +r /etc/rabbitmq/localhost-key.pem
77
- - name: Create RabbitMQ config
78
- run: |
79
- sudo tee /etc/rabbitmq/rabbitmq.conf <<'EOF'
80
- listeners.ssl.default = 5671
81
- ssl_options.cacertfile = /etc/rabbitmq/rootCA.pem
82
- ssl_options.certfile = /etc/rabbitmq/localhost.pem
83
- ssl_options.keyfile = /etc/rabbitmq/localhost-key.pem
84
- EOF
85
- - name: Start RabbitMQ
86
- run: sudo systemctl start rabbitmq-server
87
- - name: Verify RabbitMQ started correctly
88
- run: while true; do sudo rabbitmq-diagnostics status 2>/dev/null && break; echo -n .; sleep 2; done
89
- - uses: actions/checkout@v5
90
- - uses: ruby/setup-ruby@v1
91
- with:
92
- bundler-cache: true
93
- ruby-version: ${{ matrix.ruby }}
94
- - name: Run TLS tests (JRuby)
95
- if: ${{ matrix.ruby == 'jruby' }}
96
- run: bundle exec rake
97
- env:
98
- JAVA_OPTS: "-Djava.net.preferIPv4Stack=true"
99
- TEST_AMQP_HOST: "localhost"
100
- TESTOPTS: --name=/_tls$/
101
- - name: Run TLS tests
102
- if: ${{ matrix.ruby != 'jruby' }}
103
- run: bundle exec rake
104
- env:
105
- TESTOPTS: --name=/_tls$/
106
-
107
- macos:
108
- runs-on: macos-latest
109
- timeout-minutes: 10
110
- strategy:
111
- fail-fast: false
112
- matrix:
113
- ruby: # enough to test one Ruby on macOS
114
- - "ruby" # latest stable release
115
- steps:
116
- - name: Install RabbitMQ
117
- run: brew install rabbitmq
118
- - name: Start RabbitMQ
119
- run: brew services start rabbitmq
120
- - uses: actions/checkout@v5
121
- - uses: ruby/setup-ruby@v1
122
- with:
123
- bundler-cache: true
124
- ruby-version: ${{ matrix.ruby }}
125
- - name: Verify RabbitMQ started correctly
126
- run: while true; do rabbitmq-diagnostics status 2>/dev/null && break; echo -n .; sleep 2; done
127
- - name: Run tests (excluding TLS tests)
128
- run: bundle exec rake
129
-
130
- lint:
131
- runs-on: ubuntu-latest
132
- timeout-minutes: 10
133
- steps:
134
- - uses: actions/checkout@v5
135
- - uses: ruby/setup-ruby@v1
136
- with:
137
- bundler-cache: true
138
- ruby-version: ruby
139
- - name: Run RuboCop
140
- run: bundle exec rake rubocop
@@ -1,26 +0,0 @@
1
- name: Release
2
-
3
- on:
4
- push:
5
- tags:
6
- - v*
7
- workflow_dispatch:
8
-
9
- jobs:
10
- release:
11
- if: github.repository == 'cloudamqp/amqp-client.rb'
12
- runs-on: ubuntu-latest
13
- permissions:
14
- id-token: write # for trusted publishing
15
- steps:
16
- - uses: actions/checkout@v5
17
- - uses: ruby/setup-ruby@v1
18
- with:
19
- bundler-cache: true
20
- ruby-version: ruby
21
- - uses: rubygems/configure-rubygems-credentials@v1.0.0
22
- - run: ruby -v
23
- # ensure gem can be built and installed, push to rubygems.org
24
- - run: gem build *.gemspec
25
- - run: gem install *.gem
26
- - run: gem push *.gem
data/.gitignore DELETED
@@ -1,9 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /_yardoc/
4
- /coverage/
5
- /doc/
6
- /pkg/
7
- /spec/reports/
8
- /tmp/
9
- Gemfile.lock
data/.rubocop.yml DELETED
@@ -1,30 +0,0 @@
1
- inherit_from: .rubocop_todo.yml
2
- plugins:
3
- - rubocop-minitest
4
-
5
- AllCops:
6
- NewCops: disable
7
- TargetRubyVersion: 3.2
8
- SuggestExtensions: false
9
-
10
- Style/StringLiterals:
11
- Enabled: true
12
- EnforcedStyle: double_quotes
13
-
14
- Style/StringLiteralsInInterpolation:
15
- Enabled: true
16
- EnforcedStyle: double_quotes
17
-
18
- Layout/LineLength:
19
- Max: 130
20
-
21
- Naming/FileName:
22
- Exclude:
23
- - "lib/amqp-client.rb"
24
-
25
- Metrics/PerceivedComplexity:
26
- Exclude:
27
- - "lib/amqp/client/properties.rb"
28
-
29
- Metrics/ParameterLists:
30
- Max: 8
data/.rubocop_todo.yml DELETED
@@ -1,65 +0,0 @@
1
- # This configuration was generated by
2
- # `rubocop --auto-gen-config`
3
- # on 2021-10-15 13:44:24 UTC using RuboCop version 1.19.1.
4
- # The point is for the user to remove these configuration records
5
- # one by one as the offenses are removed from the code base.
6
- # Note that changes in the inspected code, or installation of new
7
- # versions of RuboCop, may require this file to be generated again.
8
-
9
- # Offense count: 1
10
- # Cop supports --auto-correct.
11
- # Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
12
- # URISchemes: http, https
13
- Layout/LineLength:
14
- Max: 132
15
-
16
- # Offense count: 1
17
- Lint/RescueException:
18
- Exclude:
19
- - 'lib/amqp/client/connection.rb'
20
-
21
- # Offense count: 32
22
- # Configuration parameters: IgnoredMethods, CountRepeatedAttributes.
23
- Metrics/AbcSize:
24
- Max: 175
25
-
26
- # Offense count: 1
27
- # Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
28
- # IgnoredMethods: refine
29
- Metrics/BlockLength:
30
- Max: 40
31
-
32
- # Offense count: 3
33
- # Configuration parameters: CountBlocks.
34
- Metrics/BlockNesting:
35
- Max: 4
36
-
37
- # Offense count: 6
38
- # Configuration parameters: CountComments, CountAsOne.
39
- Metrics/ClassLength:
40
- Max: 497
41
-
42
- # Offense count: 10
43
- # Configuration parameters: IgnoredMethods.
44
- Metrics/CyclomaticComplexity:
45
- Max: 46
46
-
47
- # Offense count: 67
48
- # Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
49
- Metrics/MethodLength:
50
- Max: 169
51
-
52
- # Offense count: 2
53
- # Configuration parameters: CountComments, CountAsOne.
54
- Metrics/ModuleLength:
55
- Max: 486
56
-
57
- # Offense count: 1
58
- # Configuration parameters: CountKeywordArgs, MaxOptionalParameters.
59
- Metrics/ParameterLists:
60
- Max: 13
61
-
62
- # Offense count: 5
63
- # Configuration parameters: IgnoredMethods.
64
- Metrics/PerceivedComplexity:
65
- Max: 23
data/.yardopts DELETED
@@ -1 +0,0 @@
1
- --no-api - LICENSE.txt CHANGELOG.md
data/CHANGELOG.md DELETED
@@ -1,109 +0,0 @@
1
- ## [Unreleased]
2
-
3
- ## [1.2.0] - 2025-09-10
4
-
5
- - Fixed: `Connection#channel` wasn't thread-safe
6
- - Added: Support for heartbeats
7
-
8
- ## [1.1.7] - 2024-05-12
9
-
10
- - Support for Connection.update-secret
11
- - Allow sub-second connect_timeout
12
- - Fixed: undefinied variable if message was returned and no on_return block was set
13
-
14
- ## [1.1.6] - 2024-03-26
15
-
16
- - Fixed: Channel#wait_for_confirms now waits for all confirms, in a thread safe way
17
- - Changed: When server sends Connection.blocked the client isn't write blocked anymore, and can continue consume for instance. However, the on_blocked/unblocked callbacks should be used and manually stop publishing as the server otherwise will stop reading from the client socket.
18
-
19
- ## [1.1.5] - 2024-03-15
20
-
21
- - Fixed: Correctly reference the `UnexpectedFrameEnd` exception
22
-
23
- ## [1.1.4] - 2021-12-27
24
-
25
- - Fixed: Ruby 3.1.0 compability, StringIO have to be required manually
26
-
27
- ## [1.1.3] - 2021-11-04
28
-
29
- - Fixed: Reraise SystemcallError in connect so that reconnect works
30
- - Fixed: Keepalive support in OS X
31
- - Added: Make keepalive settings configurable (eg. amqp://?keepalive=60:10:3)
32
-
33
- ## [1.1.2] - 2021-10-15
34
-
35
- - Added: Support for JRuby and TruffleRuby
36
-
37
- ## [1.1.1] - 2021-09-15
38
-
39
- - Added: Examples in the documentation
40
- - Added: Faster Properties and Table encoding and decoding
41
-
42
- ## [1.1.0] - 2021-09-08
43
-
44
- - Fixed: Due to a race condition publishers could get stuck waiting for publish confirms
45
- - Change: Message, ReturnMessage and Properties are now classes and not structs (for performance reasons)
46
- - Added: Ruby 2.6 support
47
- - Added: RBS signatures in sig/amqp-client.rbs
48
-
49
- ## [1.0.2] - 2021-09-07
50
-
51
- - Changed: Raise ConnectionClosed and ChannelClosed correctly (previous always ChannelClosed)
52
- - Fixed: Respect Connection#blocked sent by the broker, will block all writes/requests
53
-
54
- ## [1.0.1] - 2021-09-06
55
-
56
- - The API is fully documented! <https://cloudamqp.github.io/amqp-client.rb/>
57
- - Fixed: Socket writing is now thread-safe
58
- - Change: Block while waiting for basic_cancel by default
59
- - Added: Can specify channel_max, heartbeat and frame_max as options to the Client/Connection
60
- - Added: Reuse channel 1 to declare high level queues/exchanges
61
- - Fixed: Only wait for exchange_delete confirmation if not no_wait is set
62
- - Fixed: Don't raise if Connection#close detects a closed socket (expected)
63
-
64
- ## [1.0.0] - 2021-08-27
65
-
66
- - Verify TLS certificate matches hostname
67
- - TLS thread-safety
68
- - Assemble Messages in the (single threaded) read_loop thread
69
- - Give read_loop_thread higher priority so that channel errors crop up faster
70
- - One less Thread required per Consumer
71
- - Read exactly one frame at a time, not trying to split/assemble frames over socket reads
72
- - Heafty speedup for message assembling with StringIO
73
- - Channel#queue_declare returns a struct for nicer API (still backward compatible)
74
- - AMQP::Client#publish_and_forget for fast, non confirmed publishes
75
- - Allow Properties#timestamp to be an integer (in addition to Time)
76
- - Bug fix allow Properties#expiration to be an Integer
77
- - Consistent use of named parameters
78
- - High level Exchange API
79
- - Don't try to reconnect if first connect fails
80
- - Bug fix: Close all channels when connection is closed by server
81
- - Raise error if run out of channels
82
- - Improved retry in high level client
83
- - Bug fix: Support channel_max 0
84
-
85
- ## [0.3.0] - 2021-08-20
86
-
87
- - Channel#wait_for_confirms is a smarter way of waiting for publish confirms
88
- - Default connection_name to $PROGRAM_NAME
89
-
90
- ## [0.2.3] - 2021-08-19
91
-
92
- - Improved TLS/AMQPS support
93
-
94
- ## [0.2.2] - 2021-08-19
95
-
96
- - TLS port issue fixed
97
-
98
- ## [0.2.1] - 2021-08-19
99
-
100
- - More arguments to be passed to AMQP::Client::Queue
101
- - Can require with 'amqp-client'
102
-
103
- ## [0.2.0] - 2021-08-19
104
-
105
- - Much improved and with a high level client
106
-
107
- ## [0.1.0] - 2021-04-13
108
-
109
- - Initial release
data/CODEOWNERS DELETED
@@ -1 +0,0 @@
1
- * @carlhoerberg @spuun @dentarg @baelter @walro
data/Gemfile DELETED
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source "https://rubygems.org"
4
-
5
- # Specify your gem's dependencies in amqp-client.gemspec
6
- gemspec
7
-
8
- gem "rake", "~> 13.0"
9
-
10
- gem "minitest", "~> 5.0"
11
-
12
- gem "rubocop", "~> 1.7"
13
-
14
- gem "rubocop-minitest", require: false
15
-
16
- gem "yard", require: false
17
-
18
- gem "redcarpet", require: false, platforms: :ruby
data/README.md DELETED
@@ -1,193 +0,0 @@
1
- # AMQP::Client
2
-
3
- A modern AMQP 0-9-1 Ruby client. Very fast (just as fast as the Java client, and >4x than other Ruby clients), fully thread-safe, blocking operations and straight-forward error handling.
4
-
5
- It's small, only ~1800 lines of code, and without any dependencies. Other Ruby clients are about 4 times bigger. But without trading functionallity.
6
-
7
- It's safe by default, messages are published as persistent, and is waiting for confirmation from the broker. That can of course be disabled if performance is a priority.
8
-
9
- ## Support
10
-
11
- The library is fully supported by [CloudAMQP](https://www.cloudamqp.com), the largest LavinMQ and RabbitMQ hosting provider in the world. Open [an issue](https://github.com/cloudamqp/amqp-client.rb/issues) or [email our support](mailto:support@cloudamqp.com) if you have problems or questions.
12
-
13
- ## Documentation
14
-
15
- [API reference](https://cloudamqp.github.io/amqp-client.rb/)
16
-
17
- ## Usage
18
-
19
- The client has two APIs.
20
-
21
- ### Low level API
22
-
23
- This API matches the AMQP protocol very well, it can do everything the protocol allows, but requires some knowledge about the protocol, and doesn't handle reconnects.
24
-
25
- ```ruby
26
- require "amqp-client"
27
-
28
- # Opens and establishes a connection
29
- conn = AMQP::Client.new("amqp://guest:guest@localhost").connect
30
-
31
- # Open a channel
32
- ch = conn.channel
33
-
34
- # Create a temporary queue
35
- q = ch.queue_declare
36
-
37
- # Publish a message to said queue
38
- ch.basic_publish_confirm "Hello World!", "", q.queue_name, persistent: true
39
-
40
- # Poll the queue for a message
41
- msg = ch.basic_get(q.queue_name)
42
-
43
- # Print the message's body to STDOUT
44
- puts msg.body
45
- ```
46
-
47
- ### High level API
48
-
49
- The library provides a high-level API that is a bit easier to get started with, and also handles reconnection automatically.
50
-
51
- ```ruby
52
- require "amqp-client"
53
- require "json"
54
- require "zlib"
55
-
56
- # Start the client, it will connect and once connected it will reconnect if that connection is lost
57
- # Operation pending when the connection is lost will raise an exception (not timeout)
58
- amqp = AMQP::Client.new("amqp://localhost").start
59
-
60
- # Declares a durable queue
61
- myqueue = amqp.queue("myqueue")
62
-
63
- # Bind the queue to any exchange, with any binding key
64
- myqueue.bind("amq.topic", "my.events.*")
65
-
66
- # The message will be reprocessed if the client loses connection to the broker
67
- # between message arrival and when the message was supposed to be ack'ed.
68
- myqueue.subscribe(prefetch: 20) do |msg|
69
- puts JSON.parse(msg.body)
70
- msg.ack
71
- rescue => e
72
- puts e.full_message
73
- msg.reject(requeue: false)
74
- end
75
-
76
- # Publish directly to the queue
77
- myqueue.publish({ foo: "bar" }.to_json, content_type: "application/json")
78
-
79
- # Publish to any exchange
80
- amqp.publish("my message", "amq.topic", "topic.foo", headers: { foo: 'bar' })
81
- amqp.publish(Zlib.gzip("an event"), "amq.topic", "my.event", content_encoding: 'gzip')
82
- ```
83
-
84
- ## Benchmark
85
-
86
- 1 byte messages:
87
-
88
- | Client | Publish rate | Consume rate | Memory usage |
89
- | ------ | ------------ | ------------ | ------------ |
90
- | amqp-client.rb | 237.000 msgs/s | 154.000 msgs/s | 23 MB |
91
- | bunny | 39.000 msgs/s | 44.000 msgs/s | 31 MB |
92
-
93
- Gem comparison:
94
-
95
- | Client | Runtime dependencies | [Lines of code](https://github.com/AlDanial/cloc) |
96
- | --- | --- | --- |
97
- | amqp-client.rb | 0 | 1876 |
98
- | bunny | 2 | 4003 |
99
-
100
- ## Supported Ruby versions
101
-
102
- All maintained Ruby versions are supported.
103
-
104
- See the [CI workflow](https://github.com/cloudamqp/amqp-client.rb/blob/main/.github/workflows/main.yml) for the exact versions.
105
-
106
- ## Installation
107
-
108
- Add this line to your application's Gemfile:
109
-
110
- ```ruby
111
- gem 'amqp-client'
112
- ```
113
-
114
- And then execute:
115
-
116
- bundle install
117
-
118
- Or install it yourself as:
119
-
120
- gem install amqp-client
121
-
122
- ## Development
123
-
124
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
125
-
126
- To install this gem onto your local machine, run `bundle exec rake install`.
127
-
128
- ### Release Process
129
-
130
- The gem uses rake tasks to automate the release process. Make sure your working directory is clean before starting a release.
131
-
132
- #### Quick Release (Patch Version)
133
-
134
- ```bash
135
- rake release:full
136
- ```
137
-
138
- This will:
139
-
140
- 1. Run tests and RuboCop to ensure code quality
141
- 2. Bump the patch version (e.g., 1.2.0 → 1.2.1)
142
- 3. Update the CHANGELOG.md with the new version and current date
143
- 4. Create a git commit and tag for the release
144
- 5. Build and push the gem to RubyGems
145
- 6. Push commits and tags to the remote repository
146
-
147
- #### Custom Version Bump
148
-
149
- For minor or major version bumps:
150
-
151
- ```bash
152
- # Minor version bump (e.g., 1.2.0 → 1.3.0)
153
- rake release:full[minor]
154
-
155
- # Major version bump (e.g., 1.2.0 → 2.0.0)
156
- rake release:full[major]
157
- ```
158
-
159
- #### Individual Release Steps
160
-
161
- You can also run individual steps if needed:
162
-
163
- ```bash
164
- # Bump version only
165
- rake release:bump[patch] # or [minor] or [major]
166
-
167
- # Update changelog with current version
168
- rake release:changelog
169
-
170
- # Create git tag
171
- rake release:tag
172
-
173
- # Build and push to RubyGems
174
- rake release:push
175
- ```
176
-
177
- #### Manual Release Steps
178
-
179
- If you prefer manual control:
180
-
181
- 1. Update the version number in `lib/amqp/client/version.rb`
182
- 2. Update the CHANGELOG.md with the new version and release notes
183
- 3. Commit your changes: `git add . && git commit -m "Release X.Y.Z"`
184
- 4. Create and push a tag: `git tag vX.Y.Z && git push origin vX.Y.Z`
185
- 5. Build and push: `rake build && gem push amqp-client-X.Y.Z.gem`
186
-
187
- ## Contributing
188
-
189
- Bug reports and pull requests are welcome on GitHub at [https://github.com/cloudamqp/amqp-client.rb](https://github.com/cloudamqp/amqp-client.rb/)
190
-
191
- ## License
192
-
193
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).