itsi 0.2.21 → 0.2.23

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 (93) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -0
  3. data/Cargo.lock +26 -12
  4. data/Cargo.toml +4 -0
  5. data/Dockerfile +2 -2
  6. data/Rakefile +4 -0
  7. data/crates/itsi_scheduler/Cargo.toml +1 -1
  8. data/crates/itsi_server/Cargo.lock +2 -2
  9. data/crates/itsi_server/Cargo.toml +1 -1
  10. data/crates/itsi_server/src/server/middleware_stack/mod.rs +3 -9
  11. data/crates/itsi_server/src/server/signal.rs +7 -5
  12. data/crates/itsi_server/src/services/itsi_http_service.rs +5 -8
  13. data/gems/scheduler/Cargo.lock +518 -3986
  14. data/gems/scheduler/Cargo.toml +4 -0
  15. data/gems/scheduler/Gemfile +11 -0
  16. data/gems/scheduler/Rakefile +21 -6
  17. data/gems/scheduler/itsi-scheduler.gemspec +5 -1
  18. data/gems/scheduler/lib/itsi/scheduler/native_extension.rb +34 -0
  19. data/gems/scheduler/lib/itsi/scheduler/version.rb +1 -1
  20. data/gems/scheduler/lib/itsi/scheduler.rb +1 -1
  21. data/gems/scheduler/test/test_block_unblock.rb +1 -1
  22. data/gems/scheduler/vendor/rb-sys-build/.cargo-ok +1 -0
  23. data/gems/scheduler/vendor/rb-sys-build/.cargo_vcs_info.json +6 -0
  24. data/gems/scheduler/vendor/rb-sys-build/Cargo.lock +294 -0
  25. data/gems/scheduler/vendor/rb-sys-build/Cargo.toml +71 -0
  26. data/gems/scheduler/vendor/rb-sys-build/Cargo.toml.orig +32 -0
  27. data/gems/scheduler/vendor/rb-sys-build/LICENSE-APACHE +190 -0
  28. data/gems/scheduler/vendor/rb-sys-build/LICENSE-MIT +21 -0
  29. data/gems/scheduler/vendor/rb-sys-build/src/bindings/sanitizer.rs +185 -0
  30. data/gems/scheduler/vendor/rb-sys-build/src/bindings/stable_api.rs +247 -0
  31. data/gems/scheduler/vendor/rb-sys-build/src/bindings/wrapper.h +71 -0
  32. data/gems/scheduler/vendor/rb-sys-build/src/bindings.rs +280 -0
  33. data/gems/scheduler/vendor/rb-sys-build/src/cc.rs +421 -0
  34. data/gems/scheduler/vendor/rb-sys-build/src/lib.rs +12 -0
  35. data/gems/scheduler/vendor/rb-sys-build/src/rb_config/flags.rs +101 -0
  36. data/gems/scheduler/vendor/rb-sys-build/src/rb_config/library.rs +132 -0
  37. data/gems/scheduler/vendor/rb-sys-build/src/rb_config/search_path.rs +57 -0
  38. data/gems/scheduler/vendor/rb-sys-build/src/rb_config.rs +906 -0
  39. data/gems/scheduler/vendor/rb-sys-build/src/utils.rs +53 -0
  40. data/gems/server/Cargo.lock +25 -38
  41. data/gems/server/Cargo.toml +4 -0
  42. data/gems/server/Gemfile +23 -0
  43. data/gems/server/Rakefile +39 -7
  44. data/gems/server/itsi-server.gemspec +5 -1
  45. data/gems/server/lib/itsi/server/native_extension.rb +34 -0
  46. data/gems/server/lib/itsi/server/version.rb +1 -1
  47. data/gems/server/lib/itsi/server.rb +10 -2
  48. data/gems/server/test/helpers/test_helper.rb +19 -0
  49. data/gems/server/test/options/unmatched_request.rb +29 -0
  50. data/gems/server/test/rack/test_rack_server.rb +14 -2
  51. data/gems/server/vendor/rb-sys-build/.cargo-ok +1 -0
  52. data/gems/server/vendor/rb-sys-build/.cargo_vcs_info.json +6 -0
  53. data/gems/server/vendor/rb-sys-build/Cargo.lock +294 -0
  54. data/gems/server/vendor/rb-sys-build/Cargo.toml +71 -0
  55. data/gems/server/vendor/rb-sys-build/Cargo.toml.orig +32 -0
  56. data/gems/server/vendor/rb-sys-build/LICENSE-APACHE +190 -0
  57. data/gems/server/vendor/rb-sys-build/LICENSE-MIT +21 -0
  58. data/gems/server/vendor/rb-sys-build/src/bindings/sanitizer.rs +185 -0
  59. data/gems/server/vendor/rb-sys-build/src/bindings/stable_api.rs +247 -0
  60. data/gems/server/vendor/rb-sys-build/src/bindings/wrapper.h +71 -0
  61. data/gems/server/vendor/rb-sys-build/src/bindings.rs +280 -0
  62. data/gems/server/vendor/rb-sys-build/src/cc.rs +421 -0
  63. data/gems/server/vendor/rb-sys-build/src/lib.rs +12 -0
  64. data/gems/server/vendor/rb-sys-build/src/rb_config/flags.rs +101 -0
  65. data/gems/server/vendor/rb-sys-build/src/rb_config/library.rs +132 -0
  66. data/gems/server/vendor/rb-sys-build/src/rb_config/search_path.rs +57 -0
  67. data/gems/server/vendor/rb-sys-build/src/rb_config.rs +906 -0
  68. data/gems/server/vendor/rb-sys-build/src/utils.rs +53 -0
  69. data/lib/itsi/version.rb +1 -1
  70. data/script/ci/resolve_version.rb +32 -0
  71. data/script/ci/set_version.rb +53 -0
  72. data/script/ci/setup_cibuildgem_rake_compiler.sh +63 -0
  73. data/script/ci/smoke_scheduler.rb +24 -0
  74. data/script/ci/smoke_server.rb +38 -0
  75. data/vendor/rb-sys-build/.cargo-ok +1 -0
  76. data/vendor/rb-sys-build/.cargo_vcs_info.json +6 -0
  77. data/vendor/rb-sys-build/Cargo.lock +294 -0
  78. data/vendor/rb-sys-build/Cargo.toml +71 -0
  79. data/vendor/rb-sys-build/Cargo.toml.orig +32 -0
  80. data/vendor/rb-sys-build/LICENSE-APACHE +190 -0
  81. data/vendor/rb-sys-build/LICENSE-MIT +21 -0
  82. data/vendor/rb-sys-build/src/bindings/sanitizer.rs +185 -0
  83. data/vendor/rb-sys-build/src/bindings/stable_api.rs +247 -0
  84. data/vendor/rb-sys-build/src/bindings/wrapper.h +71 -0
  85. data/vendor/rb-sys-build/src/bindings.rs +280 -0
  86. data/vendor/rb-sys-build/src/cc.rs +421 -0
  87. data/vendor/rb-sys-build/src/lib.rs +12 -0
  88. data/vendor/rb-sys-build/src/rb_config/flags.rs +101 -0
  89. data/vendor/rb-sys-build/src/rb_config/library.rs +132 -0
  90. data/vendor/rb-sys-build/src/rb_config/search_path.rs +57 -0
  91. data/vendor/rb-sys-build/src/rb_config.rs +906 -0
  92. data/vendor/rb-sys-build/src/utils.rs +53 -0
  93. metadata +69 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: edac434aa9724351fa9fe5220e3451534473303c08d5b6ad34d56bbd5fb1aec6
4
- data.tar.gz: 88efe1b953ed1a418666d32730450eb7c14c232d25ea94dcc4b1f169f649367e
3
+ metadata.gz: 6f500a7fdc96a95bb73c92215cef369ad5a208c0ef60f260c36257f74a592448
4
+ data.tar.gz: 42ccd29b510e972f40b291a0f058b618e4605f2c9379412c853542d7e5e4e8a8
5
5
  SHA512:
6
- metadata.gz: 675fe7f09ec66c9583f3c69963127f3ec01e46bf613657bc7d8778919dfccf2a38d420348af3ed51fd5f4df6d05291fec816eab78daa67325196d589eb7dae82
7
- data.tar.gz: e6d3276f2b3e59f5dd6cda1f3bcb44e54a59260ca0bf265092bd26069f6ecb3a2c56ad804792a2304062f3e6f3e0e355cf668b89a9a8a93a18168ca4f90ed811
6
+ metadata.gz: 3e1e1c6426657562728948fbfab3ca19a727e62ba144ef0c1d0c4ab46d6fa4a7152305ea47d4b23cfdb795a906b60e7bea6e8891c6af704ff9486210a7f05a1e
7
+ data.tar.gz: 499ba6cd3408cf9e780092e025cb3791af23460cc581dbf774f2774a573b45ddded6c8153358ca3ef6744d6bacc998ac829505c37f329e22dc1e856a7e65891d
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## [0.2.23] - 2026-04-18
2
+ - Return a normal 404 for unmatched proxy-style requests such as CONNECT instead of panicking the HTTP listener.
3
+
1
4
  ## [0.2.21] - 2026-02-16
2
5
  - Fix Ruby 2.7 startup NameError in static_assets redirect schema load path
3
6
 
data/Cargo.lock CHANGED
@@ -270,7 +270,7 @@ version = "0.28.2"
270
270
  source = "registry+https://github.com/rust-lang/crates.io-index"
271
271
  checksum = "bfa9b6986f250236c27e5a204062434a773a13243d2ffc2955f37bdba4c5c6a1"
272
272
  dependencies = [
273
- "bindgen",
273
+ "bindgen 0.69.5",
274
274
  "cc",
275
275
  "cmake",
276
276
  "dunce",
@@ -427,6 +427,24 @@ dependencies = [
427
427
  "which",
428
428
  ]
429
429
 
430
+ [[package]]
431
+ name = "bindgen"
432
+ version = "0.72.1"
433
+ source = "registry+https://github.com/rust-lang/crates.io-index"
434
+ checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895"
435
+ dependencies = [
436
+ "bitflags 2.9.0",
437
+ "cexpr",
438
+ "clang-sys",
439
+ "itertools",
440
+ "proc-macro2",
441
+ "quote",
442
+ "regex",
443
+ "rustc-hash 2.1.1",
444
+ "shlex",
445
+ "syn 2.0.101",
446
+ ]
447
+
430
448
  [[package]]
431
449
  name = "bitflags"
432
450
  version = "1.3.2"
@@ -660,7 +678,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
660
678
  checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c"
661
679
  dependencies = [
662
680
  "lazy_static",
663
- "windows-sys 0.59.0",
681
+ "windows-sys 0.48.0",
664
682
  ]
665
683
 
666
684
  [[package]]
@@ -1644,7 +1662,7 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
1644
1662
 
1645
1663
  [[package]]
1646
1664
  name = "itsi-scheduler"
1647
- version = "0.2.21"
1665
+ version = "0.2.23"
1648
1666
  dependencies = [
1649
1667
  "bytes",
1650
1668
  "derive_more",
@@ -1662,7 +1680,7 @@ dependencies = [
1662
1680
 
1663
1681
  [[package]]
1664
1682
  name = "itsi-server"
1665
- version = "0.2.21"
1683
+ version = "0.2.23"
1666
1684
  dependencies = [
1667
1685
  "argon2",
1668
1686
  "async-channel",
@@ -1934,8 +1952,7 @@ checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
1934
1952
  [[package]]
1935
1953
  name = "magnus"
1936
1954
  version = "0.8.2"
1937
- source = "registry+https://github.com/rust-lang/crates.io-index"
1938
- checksum = "3b36a5b126bbe97eb0d02d07acfeb327036c6319fd816139a49824a83b7f9012"
1955
+ source = "git+https://github.com/matsadler/magnus.git?rev=1ed232edb2b75a2eed9b1def34ad57e55c411a5c#1ed232edb2b75a2eed9b1def34ad57e55c411a5c"
1939
1956
  dependencies = [
1940
1957
  "bytes",
1941
1958
  "magnus-macros",
@@ -1947,8 +1964,7 @@ dependencies = [
1947
1964
  [[package]]
1948
1965
  name = "magnus-macros"
1949
1966
  version = "0.8.0"
1950
- source = "registry+https://github.com/rust-lang/crates.io-index"
1951
- checksum = "47607461fd8e1513cb4f2076c197d8092d921a1ea75bd08af97398f593751892"
1967
+ source = "git+https://github.com/matsadler/magnus.git?rev=1ed232edb2b75a2eed9b1def34ad57e55c411a5c#1ed232edb2b75a2eed9b1def34ad57e55c411a5c"
1952
1968
  dependencies = [
1953
1969
  "proc-macro2",
1954
1970
  "quote",
@@ -2591,10 +2607,8 @@ dependencies = [
2591
2607
  [[package]]
2592
2608
  name = "rb-sys-build"
2593
2609
  version = "0.9.124"
2594
- source = "registry+https://github.com/rust-lang/crates.io-index"
2595
- checksum = "568068db4102230882e6d4ae8de6632e224ca75fe5970f6e026a04e91ed635d3"
2596
2610
  dependencies = [
2597
- "bindgen",
2611
+ "bindgen 0.72.1",
2598
2612
  "lazy_static",
2599
2613
  "proc-macro2",
2600
2614
  "quote",
@@ -3922,7 +3936,7 @@ version = "0.1.9"
3922
3936
  source = "registry+https://github.com/rust-lang/crates.io-index"
3923
3937
  checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
3924
3938
  dependencies = [
3925
- "windows-sys 0.59.0",
3939
+ "windows-sys 0.48.0",
3926
3940
  ]
3927
3941
 
3928
3942
  [[package]]
data/Cargo.toml CHANGED
@@ -12,6 +12,10 @@ members = [
12
12
  ]
13
13
  resolver = "2"
14
14
 
15
+ [patch.crates-io]
16
+ magnus = { git = "https://github.com/matsadler/magnus.git", rev = "1ed232edb2b75a2eed9b1def34ad57e55c411a5c" }
17
+ rb-sys-build = { path = "vendor/rb-sys-build" }
18
+
15
19
 
16
20
  [profile.release]
17
21
  opt-level = 3
data/Dockerfile CHANGED
@@ -3,7 +3,7 @@ FROM ruby:3.4
3
3
  RUN apt-get update && apt-get install build-essential libclang-dev -y && apt-get clean && rm -rf /var/lib/apt/lists/*
4
4
  RUN curl https://sh.rustup.rs -sSf | sh -s -- -y
5
5
 
6
- COPY pkg/itsi-server-0.2.21.gem .
7
- RUN gem install itsi-server-0.2.21.gem
6
+ COPY pkg/itsi-server-0.2.23.gem .
7
+ RUN gem install itsi-server-0.2.23.gem
8
8
 
9
9
  CMD ["itsi", "serve"]
data/Rakefile CHANGED
@@ -57,7 +57,9 @@ task :sync_crates do
57
57
  require 'fileutils'
58
58
  GEMS.each do |gem_info|
59
59
  ext_dir = File.join(gem_info[:dir], 'ext')
60
+ vendor_dir = File.join(gem_info[:dir], 'vendor')
60
61
  FileUtils.mkdir_p(ext_dir)
62
+ FileUtils.mkdir_p(vendor_dir)
61
63
 
62
64
  Dir.chdir('crates') do
63
65
  Dir['*'].each do |to_sync|
@@ -68,6 +70,8 @@ task :sync_crates do
68
70
  system("cp ../Cargo.lock ../#{gem_info[:dir]}/Cargo.lock")
69
71
  end
70
72
  end
73
+
74
+ system("rsync -q -av vendor/rb-sys-build/ #{vendor_dir}/rb-sys-build --delete")
71
75
  end
72
76
  end
73
77
 
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "itsi-scheduler"
3
- version = "0.2.21"
3
+ version = "0.2.23"
4
4
  edition = "2021"
5
5
  authors = ["Wouter Coppieters <wc@pico.net.nz>"]
6
6
  license = "MIT"
@@ -984,7 +984,7 @@ checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674"
984
984
 
985
985
  [[package]]
986
986
  name = "itsi-scheduler"
987
- version = "0.1.0"
987
+ version = "0.2.23"
988
988
  dependencies = [
989
989
  "bytes",
990
990
  "derive_more",
@@ -1002,7 +1002,7 @@ dependencies = [
1002
1002
 
1003
1003
  [[package]]
1004
1004
  name = "itsi-server"
1005
- version = "0.1.0"
1005
+ version = "0.2.23"
1006
1006
  dependencies = [
1007
1007
  "async-channel",
1008
1008
  "async-trait",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "itsi-server"
3
- version = "0.2.21"
3
+ version = "0.2.23"
4
4
  edition = "2021"
5
5
  authors = ["Wouter Coppieters <wc@pico.net.nz>"]
6
6
  license = "MIT"
@@ -263,7 +263,7 @@ impl MiddlewareSet {
263
263
  pub fn stack_for(
264
264
  &self,
265
265
  request: &HttpRequest,
266
- ) -> Result<(&Vec<Middleware>, Option<Arc<Regex>>)> {
266
+ ) -> Option<(&Vec<Middleware>, Option<Arc<Regex>>)> {
267
267
  let binding = self.route_set.matches(request.uri().path());
268
268
  let matches = binding.iter();
269
269
 
@@ -276,7 +276,7 @@ impl MiddlewareSet {
276
276
  let matching_pattern = self.patterns.get(index).cloned();
277
277
  if let Some(stack) = self.stacks.get(&index) {
278
278
  if stack.matches(request) {
279
- return Ok((&stack.layers, matching_pattern));
279
+ return Some((&stack.layers, matching_pattern));
280
280
  }
281
281
  }
282
282
  }
@@ -285,13 +285,7 @@ impl MiddlewareSet {
285
285
  request.uri().path(),
286
286
  self.route_set
287
287
  );
288
- Err(magnus::Error::new(
289
- magnus::Ruby::get().unwrap().exception_standard_error(),
290
- format!(
291
- "No matching middleware stack found for request: {:?}",
292
- request
293
- ),
294
- ))
288
+ None
295
289
  }
296
290
 
297
291
  pub fn parse_middleware(middleware_type: String, parameters: Value) -> Result<Middleware> {
@@ -45,15 +45,17 @@ pub fn unsubscribe_runtime() {
45
45
  pub fn send_lifecycle_event(event: LifecycleEvent) {
46
46
  if let Some(sender) = SIGNAL_HANDLER_CHANNEL.lock().as_ref() {
47
47
  if let Err(e) = sender.send(event) {
48
- // Channel full or receivers dropped - this is a critical error for shutdown signals
49
- eprintln!("Critical: Failed to send lifecycle event {:?}", e);
50
- // For shutdown events, try to force exit if channel delivery fails
51
48
  if matches!(
52
49
  e.0,
53
50
  LifecycleEvent::Shutdown | LifecycleEvent::ForceShutdown
54
51
  ) {
55
- eprintln!("Emergency shutdown due to signal delivery failure");
56
- std::process::exit(1);
52
+ SHUTDOWN_REQUESTED.store(true, Ordering::SeqCst);
53
+ warn!(
54
+ "Dropping shutdown lifecycle event after receiver closed: {:?}",
55
+ e
56
+ );
57
+ } else {
58
+ eprintln!("Warning: Failed to send lifecycle event {:?}", e);
57
59
  }
58
60
  }
59
61
  } else {
@@ -188,14 +188,11 @@ impl ItsiHttpService {
188
188
  let token_preference = self.server_params.itsi_server_token_preference;
189
189
 
190
190
  let service_future = async move {
191
- let middleware_stack = self
192
- .server_params
193
- .middleware
194
- .get()
195
- .unwrap()
196
- .stack_for(&req)
197
- .unwrap();
198
- let (stack, matching_pattern) = middleware_stack;
191
+ let Some((stack, matching_pattern)) =
192
+ self.server_params.middleware.get().unwrap().stack_for(&req)
193
+ else {
194
+ return Ok(NOT_FOUND_RESPONSE.to_http_response(accept).await);
195
+ };
199
196
  let mut resp: Option<HttpResponse> = None;
200
197
 
201
198
  let mut context =