nonnative 1.107.0 → 1.109.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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +36 -6
  3. data/.rubocop.yml +8 -2
  4. data/AGENTS.md +248 -0
  5. data/CHANGELOG.md +141 -0
  6. data/Gemfile.lock +69 -58
  7. data/README.md +51 -32
  8. data/lib/nonnative/close_all_socket_pair.rb +14 -0
  9. data/lib/nonnative/configuration.rb +67 -0
  10. data/lib/nonnative/configuration_process.rb +14 -0
  11. data/lib/nonnative/configuration_proxy.rb +28 -0
  12. data/lib/nonnative/configuration_runner.rb +44 -0
  13. data/lib/nonnative/configuration_server.rb +12 -0
  14. data/lib/nonnative/configuration_service.rb +9 -0
  15. data/lib/nonnative/cucumber.rb +4 -12
  16. data/lib/nonnative/delay_socket_pair.rb +15 -0
  17. data/lib/nonnative/error.rb +7 -0
  18. data/lib/nonnative/fault_injection_proxy.rb +63 -0
  19. data/lib/nonnative/go_command.rb +34 -0
  20. data/lib/nonnative/grpc_server.rb +30 -0
  21. data/lib/nonnative/header.rb +44 -0
  22. data/lib/nonnative/http_client.rb +45 -0
  23. data/lib/nonnative/http_proxy_server.rb +62 -1
  24. data/lib/nonnative/http_server.rb +40 -0
  25. data/lib/nonnative/invalid_data_socket_pair.rb +15 -0
  26. data/lib/nonnative/no_proxy.rb +35 -0
  27. data/lib/nonnative/not_found_error.rb +7 -0
  28. data/lib/nonnative/observability.rb +44 -0
  29. data/lib/nonnative/pool.rb +50 -0
  30. data/lib/nonnative/port.rb +26 -0
  31. data/lib/nonnative/process.rb +29 -0
  32. data/lib/nonnative/proxy.rb +24 -0
  33. data/lib/nonnative/proxy_factory.rb +16 -0
  34. data/lib/nonnative/runner.rb +30 -0
  35. data/lib/nonnative/server.rb +28 -0
  36. data/lib/nonnative/service.rb +16 -0
  37. data/lib/nonnative/socket_pair.rb +46 -0
  38. data/lib/nonnative/socket_pair_factory.rb +21 -0
  39. data/lib/nonnative/start_error.rb +5 -0
  40. data/lib/nonnative/stop_error.rb +5 -0
  41. data/lib/nonnative/timeout.rb +20 -0
  42. data/lib/nonnative/version.rb +4 -1
  43. data/lib/nonnative.rb +128 -0
  44. metadata +3 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a906e384075c90b1e86c9d6e3b89ab5cea13d50a06e403e7a2646eb1689ac64b
4
- data.tar.gz: d617213ea910eeedf18f76a8172554f78058d16073d17a3d374592a5117d3864
3
+ metadata.gz: ec0c9a126e9b5b8e02c9ac05f66fb156afaccca630a549c21731d0eaf4db9dd3
4
+ data.tar.gz: 995103d4139ebdf4d6a1e4181ecfa95f6998c2ba55c5bcaace89704461060689
5
5
  SHA512:
6
- metadata.gz: c5f765bd48e2fa81d93eced56cc04dd6147f7ec26e96a1a7a587417ce9815690c6e73db121735a356f5d9e09f17fd371f0469436ea40e5a6f8cf039babad7fd3
7
- data.tar.gz: b799c7f1e3fc4d69d22c4d12d68777b545dfec17532e98fb31d7dba883eb3210c805d401dfbcc72368ab07021f5ca898a8adc43228edf6a79224749b300b0632
6
+ metadata.gz: a62754a9383e9f126ce83998876d8ebee533a63359dd2fbd456bbbe77bef5fab2bbcdea4bf3488255757664357914690ddceef6f296f2dd16924a6243a1bb5e1
7
+ data.tar.gz: 9d7a0bec50fbb6ebdaa8b77734d4122c0449357eea1718edfd2e8d8d84987a4e4c5aec2b92de7e2f369fb35e2d738ef6d727bb04498ba86a023e4d5387a4b547
data/.circleci/config.yml CHANGED
@@ -3,10 +3,11 @@ version: 2.1
3
3
  jobs:
4
4
  build:
5
5
  docker:
6
- - image: alexfalkowski/ruby:1.52
6
+ - image: alexfalkowski/ruby:1.100
7
7
  working_directory: ~/nonnative
8
8
  steps:
9
- - checkout
9
+ - checkout:
10
+ method: blobless
10
11
  - run: git submodule sync
11
12
  - run: git submodule update --init
12
13
  - run: make source-key
@@ -29,22 +30,46 @@ jobs:
29
30
  - store_artifacts:
30
31
  path: test/reports
31
32
  - run: make codecov-upload
32
- resource_class: large
33
+ resource_class: arm.large
34
+ sync:
35
+ docker:
36
+ - image: alexfalkowski/release:5.59
37
+ working_directory: ~/nonnative
38
+ steps:
39
+ - checkout:
40
+ method: blobless
41
+ - run: git submodule sync
42
+ - run: git submodule update --init
43
+ - run: make sync push
44
+ resource_class: arm.large
33
45
  version:
34
46
  docker:
35
- - image: alexfalkowski/release:5.11
47
+ - image: alexfalkowski/release:5.59
36
48
  working_directory: ~/nonnative
37
49
  steps:
38
- - checkout
50
+ - checkout:
51
+ method: blobless
39
52
  - run: git submodule sync
40
53
  - run: git submodule update --init
41
54
  - run: version
42
- resource_class: large
55
+ resource_class: arm.large
56
+ wait-all:
57
+ docker:
58
+ - image: alexfalkowski/ruby:1.100
59
+ steps:
60
+ - run: echo "all applicable jobs finished"
61
+ resource_class: arm.large
43
62
 
44
63
  workflows:
45
64
  nonnative:
46
65
  jobs:
47
66
  - build
67
+ - sync:
68
+ requires:
69
+ - build
70
+ filters:
71
+ branches:
72
+ ignore: master
48
73
  - version:
49
74
  context: gh
50
75
  requires:
@@ -52,3 +77,8 @@ workflows:
52
77
  filters:
53
78
  branches:
54
79
  only: master
80
+ - wait-all:
81
+ requires:
82
+ - build
83
+ - sync
84
+ - version
data/.rubocop.yml CHANGED
@@ -10,6 +10,9 @@ AllCops:
10
10
  Layout/LineLength:
11
11
  Max: 150
12
12
 
13
+ Lint/HashCompareByIdentity:
14
+ Enabled: false
15
+
13
16
  Metrics/MethodLength:
14
17
  Max: 20
15
18
 
@@ -19,11 +22,14 @@ Metrics/BlockLength:
19
22
  Metrics/AbcSize:
20
23
  Max: 25
21
24
 
25
+ Metrics/ClassLength:
26
+ Max: 150
27
+
22
28
  Style/Documentation:
23
29
  Enabled: false
24
30
 
25
- Lint/HashCompareByIdentity:
31
+ Style/NumericPredicate:
26
32
  Enabled: false
27
33
 
28
- Style/NumericPredicate:
34
+ Style/FileOpen:
29
35
  Enabled: false
data/AGENTS.md ADDED
@@ -0,0 +1,248 @@
1
+ # AGENTS.md
2
+
3
+ This repository is the **`nonnative` Ruby gem**. It provides a Ruby-first harness for end-to-end testing of services implemented in other languages by **starting processes/servers/services**, waiting for readiness (port checks), and optionally running **fault-injection proxies**.
4
+
5
+ Everything below is based on the files currently in this repo (no assumptions).
6
+
7
+ ## Recent documentation updates (important for future sessions)
8
+
9
+ - **Public API RDoc pass started**:
10
+ - Added/expanded RDoc for the module entry point (`Nonnative`) and core configuration/error types.
11
+ - Goal: document *public APIs only* (gem consumers), not internal/private helpers.
12
+ - **README accuracy pass started**:
13
+ - Fixed incorrect examples around **services**:
14
+ - Programmatic example incorrectly used `p.port` inside a `config.service do |s| ... end` block; corrected to `s.host`/`s.port`.
15
+ - YAML example incorrectly used `processes:` for services; corrected to `services:`.
16
+ - Removed/avoided implying non-existent config fields (e.g. there is no top-level `config.wait`; `wait` is per-runner).
17
+
18
+ These changes were made to align docs/examples with the actual runtime/config objects under `lib/nonnative/**/*.rb`.
19
+
20
+ ## Quick orientation
21
+
22
+ - **Library code**: `lib/nonnative/**/*.rb`
23
+ - **Acceptance tests**: `features/**/*.feature` + `features/support/**/*.rb` + `features/step_definitions/**/*.rb` (Cucumber)
24
+ - **Generated gRPC Ruby stubs for tests**: `test/grpc/**/*` (excluded from RuboCop)
25
+ - **Proto definitions for test fixtures**: `test/nonnative/v1/*.proto`
26
+ - **Build system**: `Makefile` includes make fragments from the `bin/` submodule (`bin/build/make/*.mak`).
27
+
28
+ ## Important repo dependency: `bin/` submodule
29
+
30
+ This repo uses a git submodule at `bin/`:
31
+
32
+ - `.gitmodules` points to `git@github.com:alexfalkowski/bin.git`.
33
+ - CI runs `git submodule sync && git submodule update --init` before running `make` targets (`.circleci/config.yml`).
34
+
35
+ If you don’t have SSH access to that repo, `make` targets that include `bin/build/make/*.mak` will fail.
36
+
37
+ ### Submodule commands
38
+
39
+ ```sh
40
+ git submodule sync
41
+ git submodule update --init
42
+ ```
43
+
44
+ ## Essential commands (from Makefiles)
45
+
46
+ ### Ruby version
47
+
48
+ - `nonnative.gemspec` requires Ruby `>= 3.4.0` and `< 4.0.0`.
49
+
50
+ ### Install deps
51
+
52
+ Ruby deps are managed by Bundler and installed into `vendor/bundle`:
53
+
54
+ ```sh
55
+ make dep
56
+ ```
57
+
58
+ Implementation lives in `bin/build/make/ruby.mak` (included by root `Makefile`).
59
+
60
+ ### Lint
61
+
62
+ ```sh
63
+ make lint
64
+ ```
65
+
66
+ Runs RuboCop:
67
+
68
+ - `bundler exec rubocop` (`bin/build/make/ruby.mak:4-5`)
69
+ - Config: `.rubocop.yml` (TargetRubyVersion 3.4; max line length 150)
70
+
71
+ Auto-fix:
72
+
73
+ ```sh
74
+ make fix-lint
75
+ # or
76
+ make format
77
+ ```
78
+
79
+ ### Run acceptance tests (Cucumber)
80
+
81
+ ```sh
82
+ make features
83
+ ```
84
+
85
+ This calls `bin/quality/ruby/feature`, which runs:
86
+
87
+ - `bundler exec cucumber --profile report ... --tags "not @benchmark" ...`
88
+ - Cucumber profile `report` is defined in `.config/cucumber.yml` and writes:
89
+ - JUnit XML to `test/reports`
90
+ - HTML report to `test/reports/index.html`
91
+
92
+ Run only benchmarks:
93
+
94
+ ```sh
95
+ make benchmarks
96
+ ```
97
+
98
+ ### Coverage
99
+
100
+ Cucumber loads SimpleCov via `features/support/env.rb` and writes coverage output under `test/reports/`.
101
+
102
+ Codecov config exists in `.codecov.yml` and CI uploads coverage in `.circleci/config.yml`.
103
+
104
+ Local upload target:
105
+
106
+ ```sh
107
+ make codecov-upload
108
+ ```
109
+
110
+ ### Clean deps / reports
111
+
112
+ ```sh
113
+ make clean-dep
114
+ make clean-reports
115
+ ```
116
+
117
+ ## Testing patterns and hooks
118
+
119
+ ### Cucumber hooks and tags
120
+
121
+ Cucumber integration lives in `lib/nonnative/cucumber.rb`:
122
+
123
+ - `@startup`: starts and stops Nonnative around each scenario.
124
+ - `@manual`: only stops after scenario (start is expected to be triggered manually in steps).
125
+ - `@clear`: calls `Nonnative.clear` before scenario.
126
+ - `@reset`: resets proxies after scenario.
127
+
128
+ The “start once per test run” strategy is implemented by requiring `nonnative/startup`:
129
+
130
+ - `lib/nonnative/startup.rb` calls `Nonnative.start` and registers an `at_exit` stop.
131
+
132
+ ### README gotchas that matter in practice
133
+
134
+ - **Service vs process YAML keys**:
135
+ - Services must be declared under `services:` in YAML (not `processes:`). Code reads `cfg.services` and maps them to `Nonnative::ConfigurationService`.
136
+ - **No top-level `wait`**:
137
+ - `wait` is defined on runner configurations (`ConfigurationRunner#wait`) and is per process/server/service.
138
+ - **Proxy wiring is easy to misunderstand**:
139
+ - When a proxy kind like `fault_injection` is enabled, the proxy binds to `service.proxy.host`/`service.proxy.port`.
140
+ - Readiness checks and traffic should typically target the **proxy host/port**, not the underlying service host/port.
141
+
142
+ ### Feature support code
143
+
144
+ `features/support/` contains small servers/clients used by cucumber scenarios (HTTP/TCP/gRPC). Example:
145
+
146
+ - `features/support/http_server.rb` defines a Sinatra app for `/hello` and health endpoints.
147
+
148
+ ### Process fixture
149
+
150
+ Scenarios start a local process via `features/support/bin/start` (referenced in step definitions and YAML configs like `features/configs/processes.yml`).
151
+
152
+ ## Library architecture (high level)
153
+
154
+ ### Entry point and global state
155
+
156
+ - `lib/nonnative.rb` defines the `Nonnative` module singleton API:
157
+ - `configure { |config| ... }`
158
+ - `start` / `stop`
159
+ - `clear`, `reset`
160
+ - `pool` is created on `start` (`Nonnative::Pool.new(configuration)`).
161
+
162
+ ### Configuration objects
163
+
164
+ - `Nonnative::Configuration` (`lib/nonnative/configuration.rb`) holds arrays of:
165
+ - `processes` (`Nonnative::ConfigurationProcess`)
166
+ - `servers` (`Nonnative::ConfigurationServer`)
167
+ - `services` (`Nonnative::ConfigurationService`)
168
+
169
+ It can be populated either:
170
+
171
+ - programmatically via `config.process { ... }`, `config.server { ... }`, `config.service { ... }`
172
+ - via YAML using `config.load_file(path)` which calls `Config.load_files(...)` (the `config` gem)
173
+
174
+ Proxies are configured via `ConfigurationProxy` (`lib/nonnative/configuration_proxy.rb`) and attached to runners as a hash.
175
+
176
+ ### Runners and lifecycle
177
+
178
+ There are three runtime “runner” types, all subclassing `Runner` (`lib/nonnative/runner.rb`):
179
+
180
+ - `Nonnative::Process` (`lib/nonnative/process.rb`): `spawn(...)` + `Process.kill` / `waitpid2`.
181
+ - `Nonnative::Server` (`lib/nonnative/server.rb`): `Thread.new { perform_start }` + `perform_stop`.
182
+ - `Nonnative::Service` (`lib/nonnative/service.rb`): no process management; proxy only.
183
+
184
+ `Nonnative::Pool` (`lib/nonnative/pool.rb`) owns collections of runners and orchestrates start/stop:
185
+
186
+ - starts **services first**, then servers/processes
187
+ - stops **processes/servers first**, then services
188
+ - readiness is determined via `Nonnative::Port#open?` / `#closed?` (`lib/nonnative/port.rb`) which repeatedly tries `TCPSocket.new(host, port)` inside a timeout.
189
+
190
+ ### Proxies
191
+
192
+ Proxy selection is keyed by `kind`:
193
+
194
+ - mapping: `Nonnative.proxies` in `lib/nonnative.rb`
195
+ - default proxy config values: `ConfigurationProxy#initialize` sets kind `none`, host `0.0.0.0`, wait `0.1`, etc.
196
+
197
+ Implemented proxies:
198
+
199
+ - `Nonnative::NoProxy` (`lib/nonnative/no_proxy.rb`)
200
+ - `Nonnative::FaultInjectionProxy` (`lib/nonnative/fault_injection_proxy.rb`)
201
+ - states: `:none`, `:close_all`, `:delay`, `:invalid_data`
202
+ - delegates behavior to socket-pair classes via `SocketPairFactory` (`lib/nonnative/socket_pair_factory.rb`).
203
+
204
+ ### Go executable helper
205
+
206
+ There is a helper for building a Go *test binary* command line with optional profiling/trace/coverage flags:
207
+
208
+ - `Nonnative.go_executable` in `lib/nonnative.rb`
209
+ - `Nonnative::GoCommand` in `lib/nonnative/go_command.rb`
210
+
211
+ This is used when YAML process config has a `go:` section (see `Configuration#command` in `lib/nonnative/configuration.rb`).
212
+
213
+ ## Style and conventions
214
+
215
+ - Ruby style is enforced by RuboCop (`.rubocop.yml`):
216
+ - Target Ruby 3.4
217
+ - Line length 150
218
+ - `Style/Documentation` disabled
219
+ - `.editorconfig`:
220
+ - `indent_size = 2` for most files
221
+ - **Makefiles use tabs**
222
+ - Many Ruby files use `# frozen_string_literal: true`.
223
+
224
+ ## CI notes
225
+
226
+ CircleCI runs (see `.circleci/config.yml`):
227
+
228
+ - `make source-key` (defined in `bin/build/make/git.mak`) to generate `.source-key` used for caching
229
+ - `make dep`, `make clean-dep`
230
+ - `make lint`, `make features`
231
+ - uploads `test/reports` artifacts
232
+
233
+ ## Common gotchas
234
+
235
+ - **Submodule required**: root `Makefile` only includes `bin/...` make fragments; without `bin/` present/updated, `make` won’t work.
236
+ - **SSH-only submodule URL**: `.gitmodules` uses `git@github.com:...`; CI or local environments without SSH keys will fail to init the submodule.
237
+ - **Local Ruby/Bundler mismatch can break native extensions**: on macOS, `make lint`/`bundle exec ...` may fail if the Ruby used to install gems differs from the Ruby used to run them (example error seen: `prism.bundle` missing `libruby.3.4.dylib`).
238
+ - **Requiring `nonnative` loads Cucumber DSL**: `lib/nonnative.rb` requires `lib/nonnative/cucumber.rb`, which calls `World(...)`. Outside a Cucumber runtime this can raise (example error seen: `Cucumber::Glue::Dsl.build_rb_world_factory`).
239
+ - **Reports directory**: Cucumber report profile writes into `test/reports/` and the repo keeps a `test/reports/.keep` file.
240
+ - **Port checks can be flaky if ports are reused**: readiness is purely `TCPSocket`-based (`lib/nonnative/port.rb`), so ensure test fixtures bind expected ports.
241
+
242
+ ## Where to look first when changing behavior
243
+
244
+ - Lifecycle orchestration: `lib/nonnative.rb`, `lib/nonnative/pool.rb`
245
+ - Readiness / timeouts: `lib/nonnative/port.rb`, `lib/nonnative/timeout.rb`
246
+ - Process management: `lib/nonnative/process.rb`
247
+ - Proxies / fault injection: `lib/nonnative/fault_injection_proxy.rb`, `lib/nonnative/socket_pair_factory.rb`
248
+ - Cucumber integration: `lib/nonnative/cucumber.rb`, `lib/nonnative/startup.rb`, `features/support/env.rb`
data/CHANGELOG.md CHANGED
@@ -6,6 +6,147 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## [v1.109.0](https://github.com/alexfalkowski/nonnative/releases/tag/v1.109.0) - 2026-03-17
10
+
11
+ - [`c3d5b01`](https://github.com/alexfalkowski/nonnative/commit/c3d5b0150b76c2f7adbf3df514da4caef48938d1) feat(cucumber): use wait_for for healthy and unhealthy (#781)
12
+ - [`7f96912`](https://github.com/alexfalkowski/nonnative/commit/7f96912122d4c4ec158e2d2a2f80732809e6942e) build(ci): use latest published images (#780)
13
+ - [`f489497`](https://github.com/alexfalkowski/nonnative/commit/f4894979d327283061dbe9ceef79222262d6360f) build(deps): upgraded github.com/alexfalkowski/bin (#779)
14
+ - [`6ff8684`](https://github.com/alexfalkowski/nonnative/commit/6ff8684acb51509df49b164884567c260ef15cad) build(ci): use latest published images (#778)
15
+ - [`f818467`](https://github.com/alexfalkowski/nonnative/commit/f8184677fdb0dcf6741857f5063770031fbcd939) test(deps): bump ruby-lsp from 0.26.7 to 0.26.8 (#776)
16
+ - [`1fc4d36`](https://github.com/alexfalkowski/nonnative/commit/1fc4d36bbc31460038e4bd52f3a0dbf2d4f0b805) build(deps): bump bin from `59b1ab0` to `a7996aa` (#777)
17
+ - [`970ba28`](https://github.com/alexfalkowski/nonnative/commit/970ba283dc50d514c7cb0359d7ccb7e88a07918b) build(ci): use alexfalkowski/release:5.58 (#775)
18
+ - [`a0ac1c9`](https://github.com/alexfalkowski/nonnative/commit/a0ac1c907a8d9f21e55c9311d472e3d994c212fd) test(deps): upgraded bundler to 4.0.8 (#774)
19
+ - [`5778b0f`](https://github.com/alexfalkowski/nonnative/commit/5778b0f92e5bf0bfc4f00083ece8e67b2b14ec13) build(ci): use latest published images (#773)
20
+ - [`7a24b2d`](https://github.com/alexfalkowski/nonnative/commit/7a24b2de00d01d049e2f8ade4c89468317b27739) build(ci): add wait-all (#772)
21
+ - [`be6bede`](https://github.com/alexfalkowski/nonnative/commit/be6bedecb19381b0e8f6c70caf7abf4ac7e426f2) build(ci): use latest published images (#771)
22
+ - [`959fff1`](https://github.com/alexfalkowski/nonnative/commit/959fff1884973ac08a3975eebaa93d91e2f7f10a) build(ci): use latest published images (#770)
23
+ - [`2633d39`](https://github.com/alexfalkowski/nonnative/commit/2633d39c0d41eccaf965fcc3d0358e8930af82a8) test(deps): bump retriable from 3.3.0 to 3.4.1 (#769)
24
+ - [`af83337`](https://github.com/alexfalkowski/nonnative/commit/af83337c8ec5c82532c8f696b12a683851076c64) test(deps): bump retriable from 3.2.1 to 3.3.0 (#767)
25
+ - [`4e0a68b`](https://github.com/alexfalkowski/nonnative/commit/4e0a68b34f41e61391c9858a1706178f23df91c1) build(deps): bump bin from `000304e` to `59b1ab0` (#768)
26
+ - [`0dfec9f`](https://github.com/alexfalkowski/nonnative/commit/0dfec9fc3e459b982f7f2e75c130d058b17b0cdd) build(ci): use latest published images (#766)
27
+ - [`9f69a38`](https://github.com/alexfalkowski/nonnative/commit/9f69a386ad52a68cf72a24d95842ee78d3293188) test(deps): make update-all-dep (#765)
28
+ - [`e71512b`](https://github.com/alexfalkowski/nonnative/commit/e71512b58a7670d94b4e3119aecebdecfaa879ac) test(deps): bump rubocop from 1.85.0 to 1.85.1 (#764)
29
+ - [`8942a9a`](https://github.com/alexfalkowski/nonnative/commit/8942a9a03ce533a40f0e670d0fb2d2a24e4496b4) build(deps): upgraded github.com/alexfalkowski/bin (#763)
30
+ - [`3dc78dd`](https://github.com/alexfalkowski/nonnative/commit/3dc78dd7e54cfb31a095eafc50304521fc266cff) build(ci): use latest published images (#762)
31
+ - [`fc30adc`](https://github.com/alexfalkowski/nonnative/commit/fc30adc4e70a83356558345f231c3cffe8c57332) build(ci): use latest published images (#761)
32
+ - [`7aaeb3d`](https://github.com/alexfalkowski/nonnative/commit/7aaeb3d98dc3ef3e28b166cd5c73ed1dfc16734a) test(deps): bump rubocop from 1.84.2 to 1.85.0 (#760)
33
+ - [`6e3053c`](https://github.com/alexfalkowski/nonnative/commit/6e3053cf3f6ed9becfefd4b0eb991b5f4dc704db) build(ci): use latest published images (#759)
34
+ - [`706939a`](https://github.com/alexfalkowski/nonnative/commit/706939addc59be998ac8893c5beb2a449b11074e) build(ci): use latest published images (#758)
35
+ - [`a5f30ef`](https://github.com/alexfalkowski/nonnative/commit/a5f30efa008c1f7b8e896edfe97b43bb068601f8) build(ci): use latest published images (#754)
36
+ - [`5150df4`](https://github.com/alexfalkowski/nonnative/commit/5150df4ed96e9e371ce25bea889ebb2cbdc69904) build(deps): bump bin from `60f3a4b` to `b165431` (#755)
37
+ - [`ed974ea`](https://github.com/alexfalkowski/nonnative/commit/ed974ea12ed9adfaacce2c89bd4067f99e691a4e) build(ci): use resource_class: large (#756)
38
+ - [`540fc17`](https://github.com/alexfalkowski/nonnative/commit/540fc174b50fb6c3f7d86b6fbcf2f726b4a6f304) test(deps): bump grpc from 1.78.0 to 1.78.1 (#748)
39
+ - [`328cfb8`](https://github.com/alexfalkowski/nonnative/commit/328cfb8ee829ebe3f825d797deed47e003e5540e) test(deps): bump retriable from 3.2.0 to 3.2.1 (#749)
40
+ - [`ff7f0de`](https://github.com/alexfalkowski/nonnative/commit/ff7f0dec49079ce1c628100436613f6faa91122d) test(deps): bump ruby-lsp from 0.26.6 to 0.26.7 (#750)
41
+ - [`8b9f04b`](https://github.com/alexfalkowski/nonnative/commit/8b9f04b6a492646a8f2cec5b6701b1968afda36e) test(deps): bump retriable from 3.1.2 to 3.2.0 (#747)
42
+ - [`004fd69`](https://github.com/alexfalkowski/nonnative/commit/004fd696347bd763ef9b2df9d008cccaae093c39) build(ci): use latest published images (#746)
43
+ - [`e0888ae`](https://github.com/alexfalkowski/nonnative/commit/e0888ae8e714cdf3d2484d83eaa39876f9ed05e9) test(deps): bump rack from 3.2.4 to 3.2.5 (#745)
44
+ - [`c1c3645`](https://github.com/alexfalkowski/nonnative/commit/c1c3645a799b925663b0daf2d161357dea6be413) build(ci): use latest published images (#744)
45
+
46
+ ## [v1.108.0](https://github.com/alexfalkowski/nonnative/releases/tag/v1.108.0) - 2026-02-13
47
+
48
+ - [`7683fb1`](https://github.com/alexfalkowski/nonnative/commit/7683fb15b8d68531dd7a309217c0ff6503f1ca51) feat(docs): update to reflect important information (#743)
49
+ - [`d765159`](https://github.com/alexfalkowski/nonnative/commit/d765159e40c9aa51c61cfe44ecd0c18c3b5c965a) test(deps): bump rubocop from 1.84.1 to 1.84.2 (#742)
50
+ - [`c55d2ca`](https://github.com/alexfalkowski/nonnative/commit/c55d2cac8a4f663f1d90b7904694a5c3573b943f) build(ci): use arm.large (#741)
51
+ - [`aedb111`](https://github.com/alexfalkowski/nonnative/commit/aedb11189392f68aefa8d494f9a0d64f98acb3e6) build(ci): use latest published images (#740)
52
+ - [`dba1db1`](https://github.com/alexfalkowski/nonnative/commit/dba1db1a4d373e6b21b41357963b284a0ac5f9f5) build(deps): bump bin from `dc92464` to `60f3a4b` (#736)
53
+ - [`e52950f`](https://github.com/alexfalkowski/nonnative/commit/e52950fa4681f46583b9f024405b415dde015a7d) build(ci): use latest published images (#735)
54
+ - [`032d9b1`](https://github.com/alexfalkowski/nonnative/commit/032d9b1347a59fba9fcb9bf06f5ffbb1f3093d33) test(deps): bump ruby-lsp from 0.26.5 to 0.26.6 (#733)
55
+ - [`d9a1068`](https://github.com/alexfalkowski/nonnative/commit/d9a1068b3cf722af12668ed34b5b13520c38abe0) test(deps): bump grpc from 1.76.0 to 1.78.0 (#732)
56
+ - [`8869a4f`](https://github.com/alexfalkowski/nonnative/commit/8869a4fe7395a51e449293c8fd1cc514ea13f8c8) build(ci): use latest published images (#731)
57
+ - [`3ceba36`](https://github.com/alexfalkowski/nonnative/commit/3ceba360706cd344cbe6f5d155d4087f4ba64ad1) build(deps): bump bin from `50ee2c1` to `dc92464` (#730)
58
+ - [`4443962`](https://github.com/alexfalkowski/nonnative/commit/4443962fb64df8ae45437c47c2c4f4c8e2c75fbf) build(ci): use latest published images (#729)
59
+ - [`cbae6a7`](https://github.com/alexfalkowski/nonnative/commit/cbae6a75762d9d89d33638919fd6f28260581563) build(ci): use latest published images (#728)
60
+ - [`1588b2e`](https://github.com/alexfalkowski/nonnative/commit/1588b2e57e0c895705e552d0a7dac35bf92af3de) test(deps): bump rubocop from 1.84.0 to 1.84.1 (#727)
61
+ - [`440ec57`](https://github.com/alexfalkowski/nonnative/commit/440ec570a8bb9ad13522238cc29dc62c53ec9467) build(ci): use latest published images (#726)
62
+ - [`0b8dc73`](https://github.com/alexfalkowski/nonnative/commit/0b8dc73566c0933476f427a59eff28ce2cbac3b0) build(ci): use latest published images (#725)
63
+ - [`3c7a2ca`](https://github.com/alexfalkowski/nonnative/commit/3c7a2ca1df34c66030066a8fffda829e03e06ec9) test(deps): bump rubocop from 1.82.1 to 1.84.0 (#724)
64
+ - [`0f476f9`](https://github.com/alexfalkowski/nonnative/commit/0f476f9a040d19e6ac60f0f15cc9824d8cac30e4) build(ci): use latest published images (#723)
65
+ - [`e9d602d`](https://github.com/alexfalkowski/nonnative/commit/e9d602d0ecbf940628a701abbad5d436184e4f1d) test(deps): bump puma from 7.1.0 to 7.2.0 (#721)
66
+ - [`7d5626a`](https://github.com/alexfalkowski/nonnative/commit/7d5626acfdd3691079adab7a0274c7107fb8dc80) test(deps): bump ruby-lsp from 0.26.4 to 0.26.5 (#722)
67
+ - [`c9846ef`](https://github.com/alexfalkowski/nonnative/commit/c9846ef060be95fd241091174bf22244310c28fe) build(ci): add AGENTS.md (#720)
68
+ - [`2e2e1e5`](https://github.com/alexfalkowski/nonnative/commit/2e2e1e56ca51da1cc527be492f79c72b0d86d50e) build(ci): use latest published images (#719)
69
+ - [`5ed97d5`](https://github.com/alexfalkowski/nonnative/commit/5ed97d579cec91dfea4b00d6d976fef380d63bfd) build(ci): use latest published images (#718)
70
+ - [`826d054`](https://github.com/alexfalkowski/nonnative/commit/826d05498aa6d2345d7da8b879990c8ecc07d5f7) build(deps): upgraded github.com/alexfalkowski/bin (#717)
71
+ - [`232c1d4`](https://github.com/alexfalkowski/nonnative/commit/232c1d4df62d57c63d5fc7f3be00663555f2305e) build(ci): use latest published images (#716)
72
+ - [`aed7269`](https://github.com/alexfalkowski/nonnative/commit/aed7269f5190ddd816e7181054e0c3fa8108cc42) build(ci): use latest published images (#715)
73
+ - [`04c091a`](https://github.com/alexfalkowski/nonnative/commit/04c091afbb2608e9a25f6b43905d43259b35a37b) build(ci): use latest published images (#714)
74
+ - [`e7c11bf`](https://github.com/alexfalkowski/nonnative/commit/e7c11bfa42060e26b7570d803b2bd74d8f75982b) build(ci): use latest published images (#713)
75
+ - [`4088109`](https://github.com/alexfalkowski/nonnative/commit/4088109f0445030b7d794b2d5b0a331fa3d97fad) build(deps): upgraded github.com/alexfalkowski/bin (#712)
76
+ - [`b5bbf83`](https://github.com/alexfalkowski/nonnative/commit/b5bbf830d02813c02681cb521dc89953b6f0a56f) build(ci): use latest published images (#711)
77
+ - [`ee6d957`](https://github.com/alexfalkowski/nonnative/commit/ee6d957a3c4bf544ee16fc0840027bdaa0d6f39b) build(deps): upgraded github.com/alexfalkowski/bin (#710)
78
+ - [`d95a8b8`](https://github.com/alexfalkowski/nonnative/commit/d95a8b883378d76840f49a406b21b014bf1a2552) build(ci): use latest published images (#709)
79
+ - [`bfe8d84`](https://github.com/alexfalkowski/nonnative/commit/bfe8d84dec0fe84e3f1e12da275ca29a7e1c155c) build(deps): bump bin from `664d367` to `302ba69` (#708)
80
+ - [`06a2f4f`](https://github.com/alexfalkowski/nonnative/commit/06a2f4fc167fe8b4af5f5192f149b272ba70715d) build(ci): use latest published images (#707)
81
+ - [`36eb73a`](https://github.com/alexfalkowski/nonnative/commit/36eb73ae477fa8ae785faf347d8cf947fbeb8788) build(ci): use latest published images (#706)
82
+ - [`55a5e9c`](https://github.com/alexfalkowski/nonnative/commit/55a5e9ca62e6756feff8783890a5688bd3a5f657) build(ci): use latest published images (#705)
83
+ - [`e8aba06`](https://github.com/alexfalkowski/nonnative/commit/e8aba067a2bba1cd7439b30384bd2f8c8748c9d8) build(deps): upgraded github.com/alexfalkowski/bin (#704)
84
+ - [`36b4e10`](https://github.com/alexfalkowski/nonnative/commit/36b4e10583d26a21fa5b01169299a1ddfe7ba681) test(deps): upgraded bundler to 4.0.3 (#703)
85
+ - [`758ed2d`](https://github.com/alexfalkowski/nonnative/commit/758ed2d5950071ff7bbcdc7eb9044303aaa04cb7) build(deps): upgraded github.com/alexfalkowski/bin (#702)
86
+ - [`e445325`](https://github.com/alexfalkowski/nonnative/commit/e445325381c5b7814e9216be8ec22485c24e4699) build(ci): use latest published images (#701)
87
+ - [`76876f9`](https://github.com/alexfalkowski/nonnative/commit/76876f97b6567593e346a268ec7c3593c11cda55) build(ci): use latest published images (#700)
88
+ - [`3fdea64`](https://github.com/alexfalkowski/nonnative/commit/3fdea64e294e035aea648dfd66717472e8447725) test(deps): bump rubocop from 1.82.0 to 1.82.1 (#699)
89
+ - [`8f423d3`](https://github.com/alexfalkowski/nonnative/commit/8f423d3fb938a9b9ced8b4fd338477ad08a2adaf) build(deps): upgraded github.com/alexfalkowski/bin (#698)
90
+ - [`31b5556`](https://github.com/alexfalkowski/nonnative/commit/31b555640fcb3c189d2078def07deffbd856d2d1) build(deps): upgraded github.com/alexfalkowski/bin (#697)
91
+ - [`0a1c10e`](https://github.com/alexfalkowski/nonnative/commit/0a1c10efc9fbc89b549fd747f7b5496b44646e63) build(ci): use latest published images (#696)
92
+ - [`24326a1`](https://github.com/alexfalkowski/nonnative/commit/24326a1a31516e53229237bf6e5a0dbc3893b0f8) test(deps): update bundler to v4.0.2 (#695)
93
+ - [`3fbae8e`](https://github.com/alexfalkowski/nonnative/commit/3fbae8eeae18c7e5a5dd62de72e3ab73f7342475) build(deps): upgraded github.com/alexfalkowski/bin (#694)
94
+ - [`28b97a0`](https://github.com/alexfalkowski/nonnative/commit/28b97a0503285e46e88fa57e59430d94bcdf9b0a) build(ci): use latest published images (#693)
95
+ - [`df8738c`](https://github.com/alexfalkowski/nonnative/commit/df8738c55b1fea9452305e6ea1e8abf9ed5fcbb8) test(deps): bump rubocop from 1.81.7 to 1.82.0 (#692)
96
+ - [`1946fc8`](https://github.com/alexfalkowski/nonnative/commit/1946fc846c42cfb732cfe5438d7457eb94abe2ec) test(deps): bump concurrent-ruby from 1.3.5 to 1.3.6 (#691)
97
+ - [`f1d3525`](https://github.com/alexfalkowski/nonnative/commit/f1d3525f832f7909c40126927d2c20cb9f5503c5) test(deps): bump cucumber from 10.1.1 to 10.2.0 (#690)
98
+ - [`70ac846`](https://github.com/alexfalkowski/nonnative/commit/70ac8464a077ad5c7e9b52da29be411ab1a19461) build(ci): use latest published images (#689)
99
+ - [`51c70a1`](https://github.com/alexfalkowski/nonnative/commit/51c70a1bd076c343c13b703675a1f3f8fca39cb7) test(deps): make update-all-dep (#688)
100
+ - [`915571d`](https://github.com/alexfalkowski/nonnative/commit/915571d4c7ee066a38db62ca069d9c5fc8a62d7d) build(ci): use latest published images (#687)
101
+ - [`5826ae6`](https://github.com/alexfalkowski/nonnative/commit/5826ae685346666683c440a149a0bf99a443e787) build(ci): use latest published images (#686)
102
+ - [`8f50291`](https://github.com/alexfalkowski/nonnative/commit/8f502910b112f3940a51a950b2f941b1bd5ab891) build(deps): bump bin from `5ed27e1` to `6174b3d` (#685)
103
+ - [`c784cc0`](https://github.com/alexfalkowski/nonnative/commit/c784cc0f2ab395a7eacf4f55d7f453e301cd60f5) build(ci): use latest published images (#684)
104
+ - [`736c1d8`](https://github.com/alexfalkowski/nonnative/commit/736c1d8271e74957abb2c758c96b29f533157158) build(ci): use latest published images (#683)
105
+ - [`28ba6aa`](https://github.com/alexfalkowski/nonnative/commit/28ba6aafd0b2d1c948a2485127d618b140a8bb08) build(ci): use latest published images (#682)
106
+ - [`9ae3129`](https://github.com/alexfalkowski/nonnative/commit/9ae31297ef036de635c5500e14dc2aa47cb7e31a) build(ci): use latest published images (#681)
107
+ - [`76ee2f2`](https://github.com/alexfalkowski/nonnative/commit/76ee2f260a480e78373f1053b6a27c76b820c06a) build(deps): upgraded github.com/alexfalkowski/bin (#680)
108
+ - [`55d6045`](https://github.com/alexfalkowski/nonnative/commit/55d60458dbdd7c7cd84dd88f98070df401b00c89) test(deps): make update-all-dep (#679)
109
+ - [`8feeb62`](https://github.com/alexfalkowski/nonnative/commit/8feeb626e10e8690e6af54ba77c07db0e4b97c80) build(ci): use latest published images (#678)
110
+ - [`c142b6a`](https://github.com/alexfalkowski/nonnative/commit/c142b6a905bad22a7090ab8950bfe1025b6fad86) test(deps): bump ruby-lsp from 0.26.3 to 0.26.4 (#677)
111
+ - [`fca4096`](https://github.com/alexfalkowski/nonnative/commit/fca40966002eaf7803290db8aa882848e663ec5a) build(ci): use latest published images (#676)
112
+ - [`6ae4f49`](https://github.com/alexfalkowski/nonnative/commit/6ae4f49d51d90567e7705079a911a9e1f1e4edd9) build(ci): use latest published images (#675)
113
+ - [`1e066b1`](https://github.com/alexfalkowski/nonnative/commit/1e066b13478106449cf31badab3bef6115b553b8) test(deps): bump ruby-lsp from 0.26.2 to 0.26.3 (#674)
114
+ - [`a3749f3`](https://github.com/alexfalkowski/nonnative/commit/a3749f3d02e01abf0eb34ee4942cc5197709a21e) build(deps): bump bin from `5563606` to `ecccdf6` (#673)
115
+ - [`ea1f0fa`](https://github.com/alexfalkowski/nonnative/commit/ea1f0facfbab8f247296ce2c75c00481520ffdd9) build(ci): use latest published images (#672)
116
+ - [`3cb7ca1`](https://github.com/alexfalkowski/nonnative/commit/3cb7ca1d364bc5268c55e944b7896adb74c1352d) build(ci): use latest published images (#671)
117
+ - [`3c35102`](https://github.com/alexfalkowski/nonnative/commit/3c3510235a4b891ce9686cc4d1f37e3e39cf754f) test(deps): bump rubocop from 1.81.6 to 1.81.7 (#670)
118
+ - [`8d5ed5a`](https://github.com/alexfalkowski/nonnative/commit/8d5ed5a3abeb8c22b73490b559e28490083fc989) build(ci): use latest published images (#669)
119
+ - [`d0d4e4e`](https://github.com/alexfalkowski/nonnative/commit/d0d4e4ee8ebebe5859432f1ef39678868e7e1307) build(ci): use latest published images (#668)
120
+ - [`7c1865d`](https://github.com/alexfalkowski/nonnative/commit/7c1865d2a6df2c26ae73a7dbace673dbdfba898e) test(deps): bump ruby-lsp from 0.26.1 to 0.26.2 (#667)
121
+ - [`86ae06d`](https://github.com/alexfalkowski/nonnative/commit/86ae06deac4a72e9e2e5586cf4dea1bd9fe2aa61) test(deps): bump grpc from 1.75.0 to 1.76.0 (#666)
122
+ - [`b10692a`](https://github.com/alexfalkowski/nonnative/commit/b10692a28c940c3eb50830de5e33351cff88461b) build(ci): use latest published images (#665)
123
+ - [`c55853d`](https://github.com/alexfalkowski/nonnative/commit/c55853d9f3f75659850aa7fdfa5bce6d375f920b) test(deps): bump rubocop from 1.81.1 to 1.81.6 (#664)
124
+ - [`df198c3`](https://github.com/alexfalkowski/nonnative/commit/df198c322808e8e6017492ca2589f162359d34ac) test(deps): bump puma from 7.0.4 to 7.1.0 (#663)
125
+ - [`087f5a3`](https://github.com/alexfalkowski/nonnative/commit/087f5a30ab85f1e6aa7a8bc85dbd6f20fbf83ce7) build(deps): bump bin from `09a61a1` to `5563606` (#662)
126
+ - [`41ab18a`](https://github.com/alexfalkowski/nonnative/commit/41ab18a4c004bf90c553105a761cee058ff691ac) build(ci): use latest published images (#661)
127
+ - [`b00bcd4`](https://github.com/alexfalkowski/nonnative/commit/b00bcd4fc78e31c61e8c5dff22fe5fbef3d39039) test(deps): bump sinatra from 4.1.1 to 4.2.0 (#656)
128
+ - [`f96fe17`](https://github.com/alexfalkowski/nonnative/commit/f96fe17ecbd94a82f44989b5ec1213c1eeb5d783) test(deps): bump cucumber from 10.1.0 to 10.1.1 (#657)
129
+ - [`9e201b1`](https://github.com/alexfalkowski/nonnative/commit/9e201b1f3ec28143cb80277a03b1abaf69fc1347) test(deps): bump rack from 3.2.2 to 3.2.3 (#660)
130
+ - [`7c37fc1`](https://github.com/alexfalkowski/nonnative/commit/7c37fc113541813d682f09f71ef2cf4d91acf560) build(ci): use latest published images (#659)
131
+ - [`96029db`](https://github.com/alexfalkowski/nonnative/commit/96029dbdc2cb200de33b4fb19a823c3ac6a31ea2) build(deps): bump bin from `6aa86c4` to `09a61a1` (#658)
132
+ - [`68a258e`](https://github.com/alexfalkowski/nonnative/commit/68a258e9234f1cfcd2f5b2e7dc395526e2afec2d) build(ci): use latest published images (#655)
133
+ - [`f8dd7b5`](https://github.com/alexfalkowski/nonnative/commit/f8dd7b530eaf776fd6ba7582c0e7025580f21833) test(deps): bump rack from 3.2.1 to 3.2.2 (#654)
134
+ - [`742a7b2`](https://github.com/alexfalkowski/nonnative/commit/742a7b28fa83e4a93c5b677606faea3c114af9c6) build(deps): bump bin from `7794421` to `6aa86c4` (#653)
135
+ - [`24186ec`](https://github.com/alexfalkowski/nonnative/commit/24186ecdf433c26c64ae46b7e616515998086c61) build(ci): use blobless (#652)
136
+ - [`9c81a2d`](https://github.com/alexfalkowski/nonnative/commit/9c81a2d82ef6749eaa08cb80b3b6ea98312be3b6) build(deps): bump bin from `d437cb4` to `7794421` (#651)
137
+ - [`bf07c46`](https://github.com/alexfalkowski/nonnative/commit/bf07c460820bf53809a76dd39c1c5773d41f49fb) build(ci): use latest published images (#650)
138
+ - [`cb7a3dd`](https://github.com/alexfalkowski/nonnative/commit/cb7a3dd551d174bc936386679d8f84f2e4431bb4) test(deps): bump rubocop from 1.81.0 to 1.81.1 (#649)
139
+ - [`6a85af9`](https://github.com/alexfalkowski/nonnative/commit/6a85af9333eee0542b37e7c4264f30621c41fab2) test(deps): bump rubocop from 1.80.2 to 1.81.0 (#648)
140
+ - [`9c25a32`](https://github.com/alexfalkowski/nonnative/commit/9c25a3284924577f2426d4e4425b08926a9824d4) build(deps): bump bin from `870aeb4` to `d437cb4` (#647)
141
+ - [`2be0fba`](https://github.com/alexfalkowski/nonnative/commit/2be0fbaa42218d980c32b3072fd440a628b4c5dd) test(deps): bump puma from 7.0.3 to 7.0.4 (#646)
142
+ - [`753046c`](https://github.com/alexfalkowski/nonnative/commit/753046c9e4641c6ceecb2d17435a276ea5b4d5d0) build(ci): use latest published images (#645)
143
+ - [`bd76798`](https://github.com/alexfalkowski/nonnative/commit/bd76798f8fe0ad31894a88b5cc75b68e27938590) build(ci): use latest published images (#644)
144
+ - [`d8eb73c`](https://github.com/alexfalkowski/nonnative/commit/d8eb73c0b84285ddc552f7075f66546136941acb) build(ci): use latest published images (#643)
145
+ - [`f477c8a`](https://github.com/alexfalkowski/nonnative/commit/f477c8a949e46b7d7d10864a5bd97bd8a2da5843) test(deps): bump grpc from 1.74.1 to 1.75.0 (#642)
146
+ - [`31d7c84`](https://github.com/alexfalkowski/nonnative/commit/31d7c8451a5d398aaffa3b2d99f3e5a1ee3fca29) test(deps): bump puma from 7.0.2 to 7.0.3 (#641)
147
+ - [`85b4ff6`](https://github.com/alexfalkowski/nonnative/commit/85b4ff6783154e09a386fa1a8c453138917cec3f) test(deps): bump puma from 7.0.1 to 7.0.2 (#640)
148
+ - [`32bff37`](https://github.com/alexfalkowski/nonnative/commit/32bff37f77f2c1ebb6169b516fc17a3d8e7b98da) test(deps): bump puma from 7.0.0 to 7.0.1 (#639)
149
+
9
150
  ## [v1.107.0](https://github.com/alexfalkowski/nonnative/releases/tag/v1.107.0) - 2025-09-05
10
151
 
11
152
  - [`8aab337`](https://github.com/alexfalkowski/nonnative/commit/8aab337296fd94859bfed52962531f56b5269120) feat(deps): update puma to v7.0.0 (#638)