fluentd 1.12.1 → 1.12.4

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of fluentd might be problematic. Click here for more details.

Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/.deepsource.toml +13 -0
  3. data/.github/ISSUE_TEMPLATE/config.yml +2 -2
  4. data/.github/workflows/linux-test.yaml +36 -0
  5. data/.github/workflows/{build.yaml → macos-test.yaml} +8 -7
  6. data/.github/workflows/windows-test.yaml +35 -0
  7. data/.gitlab-ci.yml +41 -19
  8. data/CHANGELOG.md +95 -0
  9. data/MAINTAINERS.md +5 -2
  10. data/README.md +5 -2
  11. data/fluentd.gemspec +4 -2
  12. data/lib/fluent/command/bundler_injection.rb +1 -1
  13. data/lib/fluent/command/cat.rb +0 -1
  14. data/lib/fluent/command/plugin_config_formatter.rb +2 -1
  15. data/lib/fluent/command/plugin_generator.rb +31 -1
  16. data/lib/fluent/compat/parser.rb +2 -2
  17. data/lib/fluent/config/section.rb +1 -1
  18. data/lib/fluent/config/types.rb +2 -2
  19. data/lib/fluent/event.rb +3 -13
  20. data/lib/fluent/load.rb +0 -1
  21. data/lib/fluent/plugin/file_wrapper.rb +39 -3
  22. data/lib/fluent/plugin/formatter_ltsv.rb +2 -2
  23. data/lib/fluent/plugin/in_http.rb +1 -1
  24. data/lib/fluent/plugin/in_monitor_agent.rb +1 -1
  25. data/lib/fluent/plugin/in_tail/position_file.rb +15 -1
  26. data/lib/fluent/plugin/in_tail.rb +35 -15
  27. data/lib/fluent/plugin/out_copy.rb +18 -5
  28. data/lib/fluent/plugin/out_exec_filter.rb +3 -3
  29. data/lib/fluent/plugin/out_forward.rb +61 -28
  30. data/lib/fluent/plugin/output.rb +11 -9
  31. data/lib/fluent/plugin/parser_csv.rb +2 -2
  32. data/lib/fluent/plugin/parser_syslog.rb +2 -2
  33. data/lib/fluent/plugin/storage_local.rb +4 -4
  34. data/lib/fluent/plugin_helper/server.rb +4 -2
  35. data/lib/fluent/plugin_helper/socket_option.rb +2 -2
  36. data/lib/fluent/supervisor.rb +1 -1
  37. data/lib/fluent/time.rb +57 -1
  38. data/lib/fluent/version.rb +1 -1
  39. data/templates/new_gem/fluent-plugin.gemspec.erb +3 -3
  40. data/test/command/test_fluentd.rb +8 -0
  41. data/test/config/test_configurable.rb +1 -1
  42. data/test/plugin/in_tail/test_position_file.rb +58 -4
  43. data/test/plugin/test_file_wrapper.rb +105 -0
  44. data/test/plugin/test_in_exec.rb +1 -1
  45. data/test/plugin/test_in_tail.rb +87 -26
  46. data/test/plugin/test_out_copy.rb +87 -0
  47. data/test/plugin/test_out_forward.rb +94 -6
  48. data/test/plugin/test_out_http.rb +1 -1
  49. data/test/plugin/test_output.rb +15 -3
  50. data/test/plugin/test_output_as_buffered_backup.rb +2 -0
  51. data/test/plugin/test_parser_csv.rb +14 -0
  52. data/test/plugin/test_parser_syslog.rb +14 -0
  53. data/test/plugin_helper/service_discovery/test_manager.rb +1 -1
  54. data/test/plugin_helper/test_child_process.rb +5 -2
  55. data/test/plugin_helper/test_http_server_helper.rb +1 -1
  56. data/test/plugin_helper/test_server.rb +8 -2
  57. data/test/test_event.rb +16 -0
  58. data/test/test_formatter.rb +30 -0
  59. data/test/test_output.rb +2 -2
  60. data/test/test_time_parser.rb +109 -0
  61. metadata +31 -9
  62. data/.travis.yml +0 -77
  63. data/appveyor.yml +0 -31
@@ -390,6 +390,18 @@ class OutputTest < Test::Unit::TestCase
390
390
  assert { logs.none? { |log| log.include?("${chunk_id}") } }
391
391
  end
392
392
 
393
+ test '#extract_placeholders does not log for ${chunk_id} placeholder (with @chunk_keys)' do
394
+ @i.configure(config_element('ROOT', '', {}, [config_element('buffer', 'key1')]))
395
+ tmpl = "/mypath/${chunk_id}/${key1}/tail"
396
+ t = event_time('2016-04-11 20:30:00 +0900')
397
+ v = {key1: "value1", key2: "value2"}
398
+ c = create_chunk(timekey: t, tag: 'fluentd.test.output', variables: v)
399
+ @i.log.out.logs.clear
400
+ @i.extract_placeholders(tmpl, c)
401
+ logs = @i.log.out.logs
402
+ assert { logs.none? { |log| log.include?("${chunk_id}") } }
403
+ end
404
+
393
405
  test '#extract_placeholders logs warn message with not replaced key' do
394
406
  @i.configure(config_element('ROOT', '', {}, [config_element('buffer', '')]))
395
407
  tmpl = "/mypath/${key1}/test"
@@ -868,7 +880,7 @@ class OutputTest < Test::Unit::TestCase
868
880
  test "Warn if primary type is different from secondary type and either primary or secondary has custom_format" do
869
881
  o = create_output(:buffered)
870
882
  mock(o.log).warn("Use different plugin for secondary. Check the plugin works with primary like secondary_file",
871
- { primary: o.class.to_s, secondary: "Fluent::Plugin::TestOutput" })
883
+ primary: o.class.to_s, secondary: "Fluent::Plugin::TestOutput")
872
884
 
873
885
  o.configure(config_element('ROOT','',{},[config_element('secondary','',{'@type'=>'test', 'name' => "cool"})]))
874
886
  assert_not_nil o.instance_variable_get(:@secondary)
@@ -877,7 +889,7 @@ class OutputTest < Test::Unit::TestCase
877
889
  test "don't warn if primary type is the same as secondary type" do
878
890
  o = Fluent::Plugin::TestOutput.new
879
891
  mock(o.log).warn("Use different plugin for secondary. Check the plugin works with primary like secondary_file",
880
- { primary: o.class.to_s, secondary: "Fluent::Plugin::TestOutput" }).never
892
+ primary: o.class.to_s, secondary: "Fluent::Plugin::TestOutput" ).never
881
893
 
882
894
  o.configure(config_element('ROOT','',{'name' => "cool2"},
883
895
  [config_element('secondary','',{'@type'=>'test', 'name' => "cool"}),
@@ -889,7 +901,7 @@ class OutputTest < Test::Unit::TestCase
889
901
  test "don't warn if primary type is different from secondary type and both don't have custom_format" do
890
902
  o = create_output(:standard)
891
903
  mock(o.log).warn("Use different plugin for secondary. Check the plugin works with primary like secondary_file",
892
- { primary: o.class.to_s, secondary: "Fluent::Plugin::TestOutput" }).never
904
+ primary: o.class.to_s, secondary: "Fluent::Plugin::TestOutput").never
893
905
 
894
906
  o.configure(config_element('ROOT','',{},[config_element('secondary','',{'@type'=>'test', 'name' => "cool"})]))
895
907
  assert_not_nil o.instance_variable_get(:@secondary)
@@ -173,6 +173,8 @@ class BufferedOutputBackupTest < Test::Unit::TestCase
173
173
  waiting(5) {
174
174
  target_dir = File.join(File.dirname(target_file), "*")
175
175
  while Dir.glob(target_dir).size.zero?
176
+ # Avoid to lose globbed entries on Windows in busy loop
177
+ sleep 0.1 if Fluent.windows?
176
178
  end
177
179
  }
178
180
  end
@@ -183,4 +183,18 @@ class CSVParserTest < ::Test::Unit::TestCase
183
183
  # And more...
184
184
  end
185
185
  end
186
+
187
+ # "parser_type" config shouldn't hide Fluent::Plugin::Parser#plugin_type
188
+ # https://github.com/fluent/fluentd/issues/3296
189
+ data('normal' => :normal, 'fast' => :fast)
190
+ def test_parser_type_method(engine)
191
+ d = create_driver('keys' => '["time"]','time_key' => 'time', 'parser_type' => engine.to_s)
192
+ assert_equal(:text_per_line, d.instance.parser_type)
193
+ end
194
+
195
+ data('normal' => :normal, 'fast' => :fast)
196
+ def test_parser_engine(engine)
197
+ d = create_driver('keys' => '["time"]', 'time_key' => 'time', 'parser_engine' => engine.to_s)
198
+ assert_equal(engine, d.instance.parser_engine)
199
+ end
186
200
  end
@@ -633,4 +633,18 @@ class SyslogParserTest < ::Test::Unit::TestCase
633
633
  end
634
634
  end
635
635
  end
636
+
637
+ # "parser_type" config shouldn't hide Fluent::Plugin::Parser#plugin_type
638
+ # https://github.com/fluent/fluentd/issues/3296
639
+ data('regexp' => :regexp, 'fast' => :string)
640
+ def test_parser_type_method(engine)
641
+ @parser.configure({'parser_type' => engine.to_s})
642
+ assert_equal(:text_per_line, @parser.instance.parser_type)
643
+ end
644
+
645
+ data('regexp' => :regexp, 'string' => :string)
646
+ def test_parser_engine(engine)
647
+ d = @parser.configure({'parser_engine' => engine.to_s})
648
+ assert_equal(engine, @parser.instance.parser_engine)
649
+ end
636
650
  end
@@ -71,7 +71,7 @@ class TestServiceDiscoveryManager < ::Test::Unit::TestCase
71
71
  test 'if new service added and deleted' do
72
72
  sdm = Fluent::PluginHelper::ServiceDiscovery::Manager.new(log: $log)
73
73
  t = TestSdPlugin.new
74
- mock(Fluent::Plugin).new_sd(:sd_test, anything) { t }
74
+ mock(Fluent::Plugin).new_sd(:sd_test, parent: anything) { t }
75
75
  sdm.configure([{ type: :sd_test, conf: config_element('service_discovery', '', {})}])
76
76
  sdm.start
77
77
 
@@ -1,3 +1,4 @@
1
+ # coding: utf-8
1
2
  require_relative '../helper'
2
3
  require 'fluent/plugin_helper/child_process'
3
4
  require 'fluent/plugin/base'
@@ -269,10 +270,12 @@ class ChildProcessTest < Test::Unit::TestCase
269
270
  Timeout.timeout(TEST_DEADLOCK_TIMEOUT) do
270
271
  ran = false
271
272
  @d.child_process_execute(:t4, "ruby -e 'Signal.trap(:TERM, nil); while sleep 0.1; puts 1; STDOUT.flush rescue nil; end'", mode: [:read]) do |io|
272
- m.lock
273
- ran = true
274
273
  begin
275
274
  while line = io.readline
275
+ unless ran
276
+ m.lock
277
+ ran = true
278
+ end
276
279
  ary << line
277
280
  end
278
281
  rescue
@@ -354,7 +354,7 @@ class HttpHelperTest < Test::Unit::TestCase
354
354
  watcher.should_receive(:stop).once
355
355
  end
356
356
 
357
- stub(Fluent::PluginHelper::HttpServer::Server).new(anything) { server }
357
+ stub(Fluent::PluginHelper::HttpServer::Server).new(addr: anything, port: anything, logger: anything, default_app: anything) { server }
358
358
  driver.http_server_create_http_server(:http_server_helper_test, addr: '127.0.0.1', port: PORT, logger: NULL_LOGGER) do
359
359
  # nothing
360
360
  end
@@ -234,7 +234,13 @@ class ServerPluginHelperTest < Test::Unit::TestCase
234
234
  assert_raise(ArgumentError.new("BUG: backlog is available for tcp/tls")) do
235
235
  @d.__send__(m, :myserver, PORT, proto: proto, backlog: 500){|x| x }
236
236
  end
237
- assert_raise(ArgumentError.new("BUG: send_keepalive_packet is available for tcp")) do
237
+ end
238
+
239
+ data(
240
+ 'server_create udp' => [:server_create, :udp],
241
+ )
242
+ test 'raise error if tcp/tls send_keepalive_packet option is specified for udp' do |(m, proto)|
243
+ assert_raise(ArgumentError.new("BUG: send_keepalive_packet is available for tcp/tls")) do
238
244
  @d.__send__(m, :myserver, PORT, proto: proto, send_keepalive_packet: true){|x| x }
239
245
  end
240
246
  end
@@ -1300,7 +1306,7 @@ class ServerPluginHelperTest < Test::Unit::TestCase
1300
1306
 
1301
1307
  test 'can accept all keyword arguments valid for tcp/tls server' do
1302
1308
  assert_nothing_raised do
1303
- @d.server_create_tls(:s, PORT, bind: '127.0.0.1', shared: false, resolve_name: true, linger_timeout: 10, backlog: 500, tls_options: @tls_options) do |data, conn|
1309
+ @d.server_create_tls(:s, PORT, bind: '127.0.0.1', shared: false, resolve_name: true, linger_timeout: 10, backlog: 500, tls_options: @tls_options, send_keepalive_packet: true) do |data, conn|
1304
1310
  # ...
1305
1311
  end
1306
1312
  end
data/test/test_event.rb CHANGED
@@ -401,6 +401,22 @@ module EventTest
401
401
  i += 1
402
402
  }
403
403
  end
404
+
405
+ # `any?` represents an Enumerable method which calls `each` internally
406
+ test 'size_after_any' do
407
+ @es.any?
408
+
409
+ assert_equal 2, @es.size
410
+ end
411
+
412
+ # `any?` represents an Enumerable method which calls `each` internally
413
+ test 'each_after_any' do
414
+ @es.any?
415
+
416
+ count = 0
417
+ @es.each { |time, record| count += 1 }
418
+ assert_equal 2, count
419
+ end
404
420
  end
405
421
 
406
422
  class CompressedMessagePackEventStreamTest < ::Test::Unit::TestCase
@@ -184,6 +184,36 @@ module FormatterTest
184
184
 
185
185
  assert_equal("message=awesome,greeting=hello#{@newline}", formatted)
186
186
  end
187
+
188
+ def record_with_tab
189
+ {'message' => "awe\tsome", 'greeting' => "hello\t"}
190
+ end
191
+
192
+ def test_format_suppresses_tab
193
+ @formatter.configure({})
194
+ formatted = @formatter.format(tag, @time, record_with_tab)
195
+
196
+ assert_equal("message:awe some\tgreeting:hello #{@newline}", formatted)
197
+ end
198
+
199
+ def test_format_suppresses_tab_custom_replacement
200
+ @formatter.configure(
201
+ 'replacement' => 'X',
202
+ )
203
+ formatted = @formatter.format(tag, @time, record_with_tab)
204
+
205
+ assert_equal("message:aweXsome\tgreeting:helloX#{@newline}", formatted)
206
+ end
207
+
208
+ def test_format_suppresses_custom_delimiter
209
+ @formatter.configure(
210
+ 'delimiter' => 'w',
211
+ 'label_delimiter' => '=',
212
+ )
213
+ formatted = @formatter.format(tag, @time, record)
214
+
215
+ assert_equal("message=a esomewgreeting=hello#{@newline}", formatted)
216
+ end
187
217
  end
188
218
 
189
219
  class CsvFormatterTest < ::Test::Unit::TestCase
data/test/test_output.rb CHANGED
@@ -117,7 +117,7 @@ module FluentOutputTest
117
117
  end
118
118
 
119
119
  mock(d.instance.log).warn("Use different plugin for secondary. Check the plugin works with primary like secondary_file",
120
- { primary: d.instance.class.to_s, secondary: "Fluent::Plugin::Test2Output" })
120
+ primary: d.instance.class.to_s, secondary: "Fluent::Plugin::Test2Output")
121
121
  d.configure(CONFIG + %[
122
122
  <secondary>
123
123
  type test2
@@ -133,7 +133,7 @@ module FluentOutputTest
133
133
  d = Fluent::Test::BufferedOutputTestDriver.new(Fluent::ObjectBufferedOutput)
134
134
 
135
135
  mock(d.instance.log).warn("Use different plugin for secondary. Check the plugin works with primary like secondary_file",
136
- { primary: d.instance.class.to_s, secondary: "Fluent::Plugin::Test2Output" }).never
136
+ primary: d.instance.class.to_s, secondary: "Fluent::Plugin::Test2Output").never
137
137
  d.configure(CONFIG + %[
138
138
  <secondary>
139
139
  type test2
@@ -228,4 +228,113 @@ class TimeParserTest < ::Test::Unit::TestCase
228
228
  assert_equal_event_time(time, parser.parse("#{time.sec}.#{time.nsec}"))
229
229
  end
230
230
  end
231
+
232
+ sub_test_case 'MixedTimeParser fallback' do
233
+ class DummyForTimeParser
234
+ include Fluent::Configurable
235
+ include Fluent::TimeMixin::Parser
236
+ end
237
+
238
+ test 'no time_format_fallbacks failure' do
239
+ i = DummyForTimeParser.new
240
+ assert_raise(Fluent::ConfigError.new("time_type is :mixed but time_format and time_format_fallbacks is empty.")) do
241
+ i.configure(config_element('parse', '', {'time_type' => 'mixed'}))
242
+ end
243
+ end
244
+
245
+ test 'fallback time format failure' do
246
+ i = DummyForTimeParser.new
247
+ i.configure(config_element('parse', '',
248
+ {'time_type' => 'mixed',
249
+ 'time_format_fallbacks' => ['%iso8601']}))
250
+ parser = i.time_parser_create
251
+ assert_raise(Fluent::TimeParser::TimeParseError.new("invalid time format: value = INVALID, even though fallbacks: Fluent::TimeParser")) do
252
+ parser.parse("INVALID")
253
+ end
254
+ end
255
+
256
+ test 'primary format is unixtime, secondary %iso8601 is used' do
257
+ i = DummyForTimeParser.new
258
+ i.configure(config_element('parse', '',
259
+ {'time_type' => 'mixed',
260
+ 'time_format' => 'unixtime',
261
+ 'time_format_fallbacks' => ['%iso8601']}))
262
+ parser = i.time_parser_create
263
+ time = event_time('2021-01-01T12:00:00+0900')
264
+ assert_equal_event_time(time, parser.parse('2021-01-01T12:00:00+0900'))
265
+ end
266
+
267
+ test 'primary format is %iso8601, secondary unixtime is used' do
268
+ i = DummyForTimeParser.new
269
+ i.configure(config_element('parse', '',
270
+ {'time_type' => 'mixed',
271
+ 'time_format' => '%iso8601',
272
+ 'time_format_fallbacks' => ['unixtime']}))
273
+ parser = i.time_parser_create
274
+ time = event_time('2021-01-01T12:00:00+0900')
275
+ assert_equal_event_time(time, parser.parse("#{time.sec}"))
276
+ end
277
+
278
+ test 'primary format is %iso8601, no secondary is used' do
279
+ i = DummyForTimeParser.new
280
+ i.configure(config_element('parse', '',
281
+ {'time_type' => 'mixed',
282
+ 'time_format' => '%iso8601'}))
283
+ parser = i.time_parser_create
284
+ time = event_time('2021-01-01T12:00:00+0900')
285
+ assert_equal_event_time(time, parser.parse("2021-01-01T12:00:00+0900"))
286
+ end
287
+
288
+ test 'primary format is unixtime, no secondary is used' do
289
+ i = DummyForTimeParser.new
290
+ i.configure(config_element('parse', '',
291
+ {'time_type' => 'mixed',
292
+ 'time_format' => 'unixtime'}))
293
+ parser = i.time_parser_create
294
+ time = event_time('2021-01-01T12:00:00+0900')
295
+ assert_equal_event_time(time, parser.parse("#{time.sec}"))
296
+ end
297
+
298
+ test 'primary format is %iso8601, raise error because of no appropriate secondary' do
299
+ i = DummyForTimeParser.new
300
+ i.configure(config_element('parse', '',
301
+ {'time_type' => 'mixed',
302
+ 'time_format' => '%iso8601'}))
303
+ parser = i.time_parser_create
304
+ time = event_time('2021-01-01T12:00:00+0900')
305
+ assert_raise("Fluent::TimeParser::TimeParseError: invalid time format: value = #{time.sec}, even though fallbacks: Fluent::TimeParser") do
306
+ parser.parse("#{time.sec}")
307
+ end
308
+ end
309
+
310
+ test 'primary format is unixtime, raise error because of no appropriate secondary' do
311
+ i = DummyForTimeParser.new
312
+ i.configure(config_element('parse', '',
313
+ {'time_type' => 'mixed',
314
+ 'time_format' => 'unixtime'}))
315
+ parser = i.time_parser_create
316
+ time = event_time('2021-01-01T12:00:00+0900')
317
+ assert_raise("Fluent::TimeParser::TimeParseError: invalid time format: value = #{time}, even though fallbacks: Fluent::NumericTimeParser") do
318
+ parser.parse("2021-01-01T12:00:00+0900")
319
+ end
320
+ end
321
+
322
+ test 'fallback to unixtime' do
323
+ i = DummyForTimeParser.new
324
+ i.configure(config_element('parse', '', {'time_type' => 'mixed',
325
+ 'time_format_fallbacks' => ['%iso8601', 'unixtime']}))
326
+ parser = i.time_parser_create
327
+ time = event_time('2021-01-01T12:00:00+0900')
328
+ assert_equal_event_time(Fluent::EventTime.new(time.to_i), parser.parse("#{time.sec}"))
329
+ end
330
+
331
+ test 'fallback to %iso8601' do
332
+ i = DummyForTimeParser.new
333
+ i.configure(config_element('parse', '', {'time_type' => 'mixed',
334
+ 'time_format_fallbacks' => ['unixtime', '%iso8601']}))
335
+ parser = i.time_parser_create
336
+ time = event_time('2021-01-01T12:00:00+0900')
337
+ assert_equal_event_time(time, parser.parse('2021-01-01T12:00:00+0900'))
338
+ end
339
+ end
231
340
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluentd
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.12.1
4
+ version: 1.12.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-18 00:00:00.000000000 Z
11
+ date: 2021-05-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -186,6 +186,26 @@ dependencies:
186
186
  - - "<"
187
187
  - !ruby/object:Gem::Version
188
188
  version: 1.0.0
189
+ - !ruby/object:Gem::Dependency
190
+ name: webrick
191
+ requirement: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - ">="
194
+ - !ruby/object:Gem::Version
195
+ version: 1.4.2
196
+ - - "<"
197
+ - !ruby/object:Gem::Version
198
+ version: 1.8.0
199
+ type: :runtime
200
+ prerelease: false
201
+ version_requirements: !ruby/object:Gem::Requirement
202
+ requirements:
203
+ - - ">="
204
+ - !ruby/object:Gem::Version
205
+ version: 1.4.2
206
+ - - "<"
207
+ - !ruby/object:Gem::Version
208
+ version: 1.8.0
189
209
  - !ruby/object:Gem::Dependency
190
210
  name: rake
191
211
  requirement: !ruby/object:Gem::Requirement
@@ -248,14 +268,14 @@ dependencies:
248
268
  requirements:
249
269
  - - "~>"
250
270
  - !ruby/object:Gem::Version
251
- version: '1.0'
271
+ version: '3.0'
252
272
  type: :development
253
273
  prerelease: false
254
274
  version_requirements: !ruby/object:Gem::Requirement
255
275
  requirements:
256
276
  - - "~>"
257
277
  - !ruby/object:Gem::Version
258
- version: '1.0'
278
+ version: '3.0'
259
279
  - !ruby/object:Gem::Dependency
260
280
  name: timecop
261
281
  requirement: !ruby/object:Gem::Requirement
@@ -350,18 +370,20 @@ executables:
350
370
  extensions: []
351
371
  extra_rdoc_files: []
352
372
  files:
373
+ - ".deepsource.toml"
353
374
  - ".drone.yml"
354
375
  - ".github/ISSUE_TEMPLATE.md"
355
376
  - ".github/ISSUE_TEMPLATE/bug_report.md"
356
377
  - ".github/ISSUE_TEMPLATE/config.yml"
357
378
  - ".github/ISSUE_TEMPLATE/feature_request.md"
358
379
  - ".github/PULL_REQUEST_TEMPLATE.md"
359
- - ".github/workflows/build.yaml"
360
380
  - ".github/workflows/issue-auto-closer.yml"
381
+ - ".github/workflows/linux-test.yaml"
382
+ - ".github/workflows/macos-test.yaml"
361
383
  - ".github/workflows/stale-actions.yml"
384
+ - ".github/workflows/windows-test.yaml"
362
385
  - ".gitignore"
363
386
  - ".gitlab-ci.yml"
364
- - ".travis.yml"
365
387
  - ADOPTERS.md
366
388
  - AUTHORS
367
389
  - CHANGELOG.md
@@ -373,7 +395,6 @@ files:
373
395
  - MAINTAINERS.md
374
396
  - README.md
375
397
  - Rakefile
376
- - appveyor.yml
377
398
  - bin/fluent-binlog-reader
378
399
  - bin/fluent-ca-generate
379
400
  - bin/fluent-cap-ctl
@@ -739,6 +760,7 @@ files:
739
760
  - test/plugin/test_buffer_memory_chunk.rb
740
761
  - test/plugin/test_compressable.rb
741
762
  - test/plugin/test_file_util.rb
763
+ - test/plugin/test_file_wrapper.rb
742
764
  - test/plugin/test_filter.rb
743
765
  - test/plugin/test_filter_grep.rb
744
766
  - test/plugin/test_filter_parser.rb
@@ -910,8 +932,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
910
932
  - !ruby/object:Gem::Version
911
933
  version: '0'
912
934
  requirements: []
913
- rubyforge_project:
914
- rubygems_version: 2.7.6.2
935
+ rubygems_version: 3.2.5
915
936
  signing_key:
916
937
  specification_version: 4
917
938
  summary: Fluentd event collector
@@ -977,6 +998,7 @@ test_files:
977
998
  - test/plugin/test_buffer_memory_chunk.rb
978
999
  - test/plugin/test_compressable.rb
979
1000
  - test/plugin/test_file_util.rb
1001
+ - test/plugin/test_file_wrapper.rb
980
1002
  - test/plugin/test_filter.rb
981
1003
  - test/plugin/test_filter_grep.rb
982
1004
  - test/plugin/test_filter_parser.rb
data/.travis.yml DELETED
@@ -1,77 +0,0 @@
1
- language: ruby
2
- cache: bundler
3
-
4
- # script: bundle exec rake test TESTOPTS=-v
5
-
6
- # http://rubies.travis-ci.org/
7
- # See here for osx_image -> OSX versions: https://docs.travis-ci.com/user/languages/objective-c
8
- matrix:
9
- include:
10
- - rvm: 2.4.9
11
- os: linux
12
- env: USE_CAPNG=false
13
- - rvm: 2.4.9
14
- os: linux-ppc64le
15
- env: USE_CAPNG=false
16
- - rvm: 2.5.7
17
- os: linux
18
- env: USE_CAPNG=false
19
- - rvm: 2.5.7
20
- os: linux
21
- arch: s390x
22
- dist: xenial
23
- env: USE_CAPNG=false
24
- - rvm: 2.6.5
25
- os: linux
26
- env: USE_CAPNG=false
27
- - rvm: 2.6.6
28
- os: linux
29
- env: USE_CAPNG=true
30
- - rvm: 2.7.0
31
- os: linux
32
- env: USE_CAPNG=false
33
- - rvm: ruby-head
34
- os: linux
35
- env: USE_CAPNG=false
36
- - rvm: ruby-head
37
- os: linux-ppc64le
38
- env: USE_CAPNG=false
39
- - rvm: 2.4.6
40
- os: osx
41
- osx_image: xcode8.3 # OSX 10.12
42
- env: USE_CAPNG=false
43
- - rvm: ruby-head
44
- os: osx
45
- osx_image: xcode8.3 # OSX 10.12
46
- env: USE_CAPNG=false
47
- allow_failures:
48
- - rvm: 2.4.6
49
- os: osx
50
- osx_image: xcode8.3
51
- env: USE_CAPNG=false
52
- - rvm: 2.5.7
53
- os: linux
54
- arch: s390x
55
- dist: xenial
56
- env: USE_CAPNG=false
57
- - rvm: ruby-head
58
- env: USE_CAPNG=false
59
-
60
- branches:
61
- only:
62
- - master
63
-
64
- before_install: |
65
- gem update --system=3.1.2
66
- if [[ x"${USE_CAPNG}" == "xtrue" ]]; then
67
- echo 'gem "capng_c"' >> Gemfile.local
68
- fi
69
-
70
- sudo: false
71
- dist: trusty # for TLSv1.2 support
72
-
73
- addons:
74
- apt:
75
- packages:
76
- - libgmp3-dev
77
- - libcap-ng-dev
data/appveyor.yml DELETED
@@ -1,31 +0,0 @@
1
- version: '{build}'
2
-
3
- # init:
4
- # - ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
5
-
6
- install:
7
- - SET PATH=C:\Ruby%ruby_version%\bin;%PATH%
8
- - ruby --version
9
- - gem --version
10
- # stay 0.14.0 for Windows CI until https://github.com/socketry/protocol-http2/issues/6 will be fixed
11
- - ps: Write-Output "gem 'protocol-http2', ['<= 0.14.0']" | Out-File -FilePath Gemfile.local -Encoding default
12
- - type Gemfile.local
13
- - ridk.cmd exec bundle install
14
- build: off
15
- test_script:
16
- - bundle exec rake test
17
- # - bundle exec rake test TESTOPTS=-v
18
-
19
- branches:
20
- only:
21
- - master
22
-
23
- # https://www.appveyor.com/docs/installed-software/#ruby
24
- environment:
25
- matrix:
26
- - ruby_version: "26-x64"
27
- - ruby_version: "26"
28
- - ruby_version: "25-x64"
29
- - ruby_version: "25"
30
- - ruby_version: "24-x64"
31
- - ruby_version: "24"