Skip to content

Commit 8bbf08c

Browse files
committed
fix(ci): skip schema-only changed config fetch tests
1 parent 4f738fd commit 8bbf08c

3 files changed

Lines changed: 45 additions & 33 deletions

File tree

bin/rspec_changed_configs

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,34 @@
11
#!/usr/bin/env ruby
22
# frozen_string_literal: true
33

4-
changed_files = `git diff --name-only origin/master | grep 'lib/html2rss/configs/.*/.*.yml'`.split("\n")
5-
6-
if changed_files.any?
7-
# Use dynamic test file with environment variable to filter changed configs
8-
config_names = changed_files.map { |file| file.sub('lib/html2rss/configs/', '') }
9-
10-
# Test each changed config individually
11-
config_names.each do |config_name|
12-
puts "Testing changed config: #{config_name}"
13-
system("bundle exec rspec --example '#{config_name}' --tag fetch spec/html2rss/configs_dynamic_spec.rb")
14-
end
15-
else
16-
puts 'No changed config files found'
4+
CONFIG_PATH = %r{\Alib/html2rss/configs/.+/.+\.yml\z}
5+
SCHEMA_MODELINE = /\A[+-]# yaml-language-server: \$schema=/
6+
7+
def comment_only_change?(file)
8+
diff_lines = `git diff --unified=0 origin/master -- #{file}`.lines
9+
changed_lines = diff_lines.select { |line| line.start_with?('+', '-') }
10+
content_lines = changed_lines.reject { |line| line.start_with?('+++', '---') }
11+
12+
content_lines.any? && content_lines.all? { |line| line.match?(SCHEMA_MODELINE) }
13+
end
14+
15+
changed_files = `git diff --name-only origin/master`
16+
.split("\n")
17+
.grep(CONFIG_PATH)
18+
19+
test_files = changed_files.reject { |file| comment_only_change?(file) }
20+
21+
if test_files.empty?
22+
puts 'No changed config files require fetch tests'
1723
exit 0
1824
end
25+
26+
failed = false
27+
28+
test_files.each do |file|
29+
config_name = file.sub('lib/html2rss/configs/', '')
30+
puts "Testing changed config: #{config_name}"
31+
failed ||= !system("bundle exec rspec --example '#{config_name}' --tag fetch spec/html2rss/configs_dynamic_spec.rb")
32+
end
33+
34+
exit 1 if failed

bin/validate_configs

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,28 +9,26 @@ files = Dir['lib/html2rss/configs/**/*.yml']
99
failed = []
1010

1111
files.each do |file|
12-
begin
13-
config = YAML.safe_load_file(file, symbolize_names: true)
14-
result = Html2rss::Config.validate(config)
12+
config = YAML.safe_load_file(file, symbolize_names: true)
13+
result = Html2rss::Config.validate(config)
1514

16-
if result.success?
17-
puts "ok #{file}"
18-
else
19-
puts "FAIL #{file}"
20-
result.errors.to_h.each do |key, messages|
21-
Array(messages).each { |msg| warn " #{key}: #{msg}" }
22-
end
23-
failed << file
24-
end
25-
rescue Psych::Exception => e
26-
puts "FAIL #{file}"
27-
warn " parse: #{e.message}"
28-
failed << file
29-
rescue StandardError => e
15+
if result.success?
16+
puts "ok #{file}"
17+
else
3018
puts "FAIL #{file}"
31-
warn " validation: #{e.class}: #{e.message}"
19+
result.errors.to_h.each do |key, messages|
20+
Array(messages).each { |msg| warn " #{key}: #{msg}" }
21+
end
3222
failed << file
3323
end
24+
rescue Psych::Exception => error
25+
puts "FAIL #{file}"
26+
warn " parse: #{error.message}"
27+
failed << file
28+
rescue StandardError => error
29+
puts "FAIL #{file}"
30+
warn " validation: #{error.class}: #{error.message}"
31+
failed << file
3432
end
3533

3634
puts

lib/html2rss/configs/espn.com/f1.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
# yaml-language-server: $schema=https://raw.githubusercontent.com/html2rss/html2rss/refs/heads/master/schema/html2rss-config.schema.json
2-
strategy: default
32
channel:
43
url: https://www.espn.com/f1/
54
time_zone: UTC
65
ttl: 60
76
selectors:
87
items:
9-
s: 'dfd'
108
selector: ".headlineStack__list > li"
119
title:
1210
selector: "a"

0 commit comments

Comments
 (0)