judges 0.4.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/{license.yml → copyrights.yml} +3 -30
- data/Gemfile.lock +2 -2
- data/bin/judges +8 -4
- data/features/pull.feature +1 -1
- data/judges.gemspec +1 -1
- data/lib/judges/commands/pull.rb +5 -3
- data/lib/judges/commands/test.rb +6 -4
- data/lib/judges/commands/update.rb +6 -4
- data/lib/judges.rb +1 -1
- data/test/commands/test_pull.rb +2 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 14d7a10c327b1cbd22dcc87773e6c3f218598a5f7d879f6f8c3ff2ddabc9018c
|
4
|
+
data.tar.gz: '0106468efd8e11754252950a2249ab0f2cbd22a9ed2081867e88e154ae2c0cc0'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7035bfcbf8e162ef9c4504fdb9953ad275bae7c00123d692bfd8b612bef16745e144b3b51e10560890d79681c48fb37d1f2d3a9030f6caba8896c0a76a6925e6
|
7
|
+
data.tar.gz: '09533523b712227e1fced16b32a74abd450e9f454d217574c9b35334564718f034283bd9b61cdc39ee1e654798ddb4f439199284d6ed66827024dcb347299c50'
|
@@ -18,40 +18,13 @@
|
|
18
18
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
19
19
|
# SOFTWARE.
|
20
20
|
---
|
21
|
-
name:
|
21
|
+
name: copyrights
|
22
22
|
'on':
|
23
23
|
push:
|
24
|
-
branches:
|
25
|
-
- master
|
26
24
|
pull_request:
|
27
|
-
branches:
|
28
|
-
- master
|
29
25
|
jobs:
|
30
|
-
|
26
|
+
copyrights:
|
31
27
|
runs-on: ubuntu-22.04
|
32
28
|
steps:
|
33
29
|
- uses: actions/checkout@v4
|
34
|
-
-
|
35
|
-
run: |
|
36
|
-
header="Copyright (c) $(date +%Y) Yegor Bugayenko"
|
37
|
-
failed="false"
|
38
|
-
while IFS= read -r file; do
|
39
|
-
if ! grep -q "${header}" "${file}"; then
|
40
|
-
failed="true"
|
41
|
-
echo "⚠️ Copyright header is not found in: ${file}"
|
42
|
-
else
|
43
|
-
echo "File looks good: ${file}"
|
44
|
-
fi
|
45
|
-
done < <(find . -type f \( \
|
46
|
-
-name "Dockerfile" -o \
|
47
|
-
-name "LICENSE.txt" -o \
|
48
|
-
-name "Makefile" -o \
|
49
|
-
-name "Rakefile" -o \
|
50
|
-
-name "*.sh" -o \
|
51
|
-
-name "*.rb" -o \
|
52
|
-
-name "*.fe" -o \
|
53
|
-
-name "*.yml" \
|
54
|
-
\) -print)
|
55
|
-
if [ "${failed}" = "true" ]; then
|
56
|
-
exit 1
|
57
|
-
fi
|
30
|
+
- uses: yegor256/copyrights-action@0.0.3
|
data/Gemfile.lock
CHANGED
@@ -47,7 +47,7 @@ GEM
|
|
47
47
|
backtrace (0.4.0)
|
48
48
|
base64 (0.2.0)
|
49
49
|
bigdecimal (3.1.8)
|
50
|
-
builder (3.
|
50
|
+
builder (3.3.0)
|
51
51
|
concurrent-ruby (1.2.3)
|
52
52
|
connection_pool (2.4.1)
|
53
53
|
crack (1.0.0)
|
@@ -85,7 +85,7 @@ GEM
|
|
85
85
|
erubi (1.12.0)
|
86
86
|
ethon (0.16.0)
|
87
87
|
ffi (>= 1.15.0)
|
88
|
-
factbase (0.0.
|
88
|
+
factbase (0.0.44)
|
89
89
|
json (~> 2.7)
|
90
90
|
loog (~> 0.2)
|
91
91
|
nokogiri (~> 1.10)
|
data/bin/judges
CHANGED
@@ -138,6 +138,8 @@ class App
|
|
138
138
|
c.flag([:enable], multiple: true)
|
139
139
|
c.desc 'Name of the judge to run (directory name)'
|
140
140
|
c.flag([:judge], multiple: true)
|
141
|
+
c.desc 'How many times to run?'
|
142
|
+
c.flag([:runs], type: Integer, default_value: 1)
|
141
143
|
c.desc 'The location of a Ruby library (directory with .rb files to include)'
|
142
144
|
c.flag([:lib])
|
143
145
|
c.desc 'Stay quiet even if some tests fail or simply no tests executed?'
|
@@ -155,9 +157,9 @@ class App
|
|
155
157
|
c.desc 'The IP/hostname of the server'
|
156
158
|
c.flag([:host], default_value: 'www.zerocracy.com')
|
157
159
|
c.desc 'The TCP port number of the server'
|
158
|
-
c.flag([:port], default_value: 443)
|
160
|
+
c.flag([:port], default_value: 443, type: Integer)
|
159
161
|
c.desc 'Connection and read time in seconds'
|
160
|
-
c.flag([:timeout], default_value: 30)
|
162
|
+
c.flag([:timeout], default_value: 30, type: Integer)
|
161
163
|
c.desc 'Shall SSL be used?'
|
162
164
|
c.switch([:ssl], default_value: true)
|
163
165
|
c.action do |global, options, args|
|
@@ -170,12 +172,14 @@ class App
|
|
170
172
|
command :pull do |c|
|
171
173
|
c.desc 'Authentication token'
|
172
174
|
c.flag([:token])
|
175
|
+
c.desc 'How many seconds to wait'
|
176
|
+
c.flag([:wait], default_value: 10 * 60, arg_name: '<seconds>', type: Integer)
|
173
177
|
c.desc 'The IP/hostname of the server'
|
174
178
|
c.flag([:host], default_value: 'www.zerocracy.com')
|
175
179
|
c.desc 'The TCP port number of the server'
|
176
|
-
c.flag([:port], default_value: 443)
|
180
|
+
c.flag([:port], default_value: 443, type: Integer)
|
177
181
|
c.desc 'Connection and read time in seconds'
|
178
|
-
c.flag([:timeout], default_value: 30)
|
182
|
+
c.flag([:timeout], default_value: 30, type: Integer)
|
179
183
|
c.desc 'Shall SSL be used?'
|
180
184
|
c.switch([:ssl], default_value: true)
|
181
185
|
c.action do |global, options, args|
|
data/features/pull.feature
CHANGED
@@ -4,7 +4,7 @@ Feature: Pull
|
|
4
4
|
Scenario: Pull a small factbase
|
5
5
|
Given We are online
|
6
6
|
Given I make a temp directory
|
7
|
-
Then I run bin/judges with "--verbose pull --token 00000000-0000-0000-0000-000000000000 simple simple.fb"
|
7
|
+
Then I run bin/judges with "--verbose pull --token 00000000-0000-0000-0000-000000000000 --wait=15 simple simple.fb"
|
8
8
|
Then Stdout contains "Pulled"
|
9
9
|
And Exit code is zero
|
10
10
|
Then I run bin/judges with "inspect simple.fb"
|
data/judges.gemspec
CHANGED
@@ -26,7 +26,7 @@ Gem::Specification.new do |s|
|
|
26
26
|
s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
|
27
27
|
s.required_ruby_version = '>=3.2'
|
28
28
|
s.name = 'judges'
|
29
|
-
s.version = '0.
|
29
|
+
s.version = '0.6.0'
|
30
30
|
s.license = 'MIT'
|
31
31
|
s.summary = 'Command-Line Tool for a Factbase'
|
32
32
|
s.description =
|
data/lib/judges/commands/pull.rb
CHANGED
@@ -47,7 +47,7 @@ class Judges::Pull
|
|
47
47
|
name = args[0]
|
48
48
|
elapsed(@loog) do
|
49
49
|
if baza.name_exists?(name)
|
50
|
-
fb.import(baza.pull(wait(baza, baza.recent(name))))
|
50
|
+
fb.import(baza.pull(wait(baza, baza.recent(name), opts['wait'])))
|
51
51
|
Judges::Impex.new(@loog, args[1]).export(fb)
|
52
52
|
throw :"Pulled #{fb.size} facts by the name '#{name}'"
|
53
53
|
else
|
@@ -58,12 +58,14 @@ class Judges::Pull
|
|
58
58
|
|
59
59
|
private
|
60
60
|
|
61
|
-
def wait(baza, id)
|
61
|
+
def wait(baza, id, limit)
|
62
|
+
raise 'Waiting time is nil' if limit.nil?
|
62
63
|
start = Time.now
|
63
64
|
loop do
|
64
65
|
break if baza.finished?(id)
|
65
66
|
sleep 1
|
66
|
-
raise 'Time is over, the job is still not finished' if Time.now - start >
|
67
|
+
raise 'Time is over, the job is still not finished' if Time.now - start > limit
|
68
|
+
@loog.debug("Still waiting for the job ##{id} to finish... (#{format('%.2f', Time.now - start)}s already)")
|
67
69
|
end
|
68
70
|
id
|
69
71
|
end
|
data/lib/judges/commands/test.rb
CHANGED
@@ -69,7 +69,7 @@ class Judges::Test
|
|
69
69
|
end
|
70
70
|
@loog.info("🛠️ Testing #{f.to_rel}:")
|
71
71
|
begin
|
72
|
-
test_one(opts, p, yaml)
|
72
|
+
test_one(opts, p, tname, yaml)
|
73
73
|
tests += 1
|
74
74
|
rescue StandardError => e
|
75
75
|
@loog.warn(Backtrace.new(e))
|
@@ -106,7 +106,7 @@ class Judges::Test
|
|
106
106
|
judges.any? { |n| n.match?(%r{^#{name}(/#{tre})?$}) }
|
107
107
|
end
|
108
108
|
|
109
|
-
def test_one(opts, judge, yaml)
|
109
|
+
def test_one(opts, judge, tname, yaml)
|
110
110
|
fb = Factbase.new
|
111
111
|
inputs = yaml['input']
|
112
112
|
inputs&.each do |i|
|
@@ -122,12 +122,14 @@ class Judges::Test
|
|
122
122
|
end
|
123
123
|
end
|
124
124
|
options = Judges::Options.new(opts['option']) + Judges::Options.new(yaml['options'])
|
125
|
-
|
125
|
+
(1..(opts['runs'] || 1)).each do
|
126
|
+
judge.run(Factbase::Looged.new(fb, @loog), {}, {}, options)
|
127
|
+
end
|
126
128
|
xpaths = yaml['expected']
|
127
129
|
return if xpaths.nil?
|
128
130
|
xml = Nokogiri::XML.parse(Factbase::ToXML.new(fb).xml)
|
129
131
|
xpaths.each do |xp|
|
130
|
-
raise "#{judge.
|
132
|
+
raise "#{judge.name}/#{tname} doesn't match '#{xp}':\n#{xml}" if xml.xpath(xp).empty?
|
131
133
|
end
|
132
134
|
end
|
133
135
|
end
|
@@ -82,7 +82,7 @@ class Judges::Update
|
|
82
82
|
end
|
83
83
|
|
84
84
|
def to_s
|
85
|
-
"#{
|
85
|
+
"#{@added}/-#{@removed}"
|
86
86
|
end
|
87
87
|
|
88
88
|
def zero?
|
@@ -105,8 +105,10 @@ class Judges::Update
|
|
105
105
|
elapsed(@loog) do
|
106
106
|
done = judges.each_with_index do |p, i|
|
107
107
|
@loog.info("\n👉 Running #{p.name} (##{i}) at #{p.dir.to_rel}...")
|
108
|
-
|
109
|
-
|
108
|
+
elapsed(@loog) do
|
109
|
+
churn += one_judge(fb, p, global, options)
|
110
|
+
throw :"👍 The judge #{p.name} modified #{churn} facts\n"
|
111
|
+
end
|
110
112
|
rescue StandardError, SyntaxError => e
|
111
113
|
@loog.warn(Backtrace.new(e))
|
112
114
|
errors << p.script
|
@@ -132,7 +134,7 @@ class Judges::Update
|
|
132
134
|
if diff.positive?
|
133
135
|
Churn.new(diff, 0)
|
134
136
|
else
|
135
|
-
Churn.new(0, diff)
|
137
|
+
Churn.new(0, -diff)
|
136
138
|
end
|
137
139
|
end
|
138
140
|
end
|
data/lib/judges.rb
CHANGED
data/test/commands/test_pull.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: judges
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yegor Bugayenko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-06-
|
11
|
+
date: 2024-06-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: backtrace
|
@@ -151,7 +151,7 @@ files:
|
|
151
151
|
- ".gitattributes"
|
152
152
|
- ".github/workflows/actionlint.yml"
|
153
153
|
- ".github/workflows/codecov.yml"
|
154
|
-
- ".github/workflows/
|
154
|
+
- ".github/workflows/copyrights.yml"
|
155
155
|
- ".github/workflows/markdown-lint.yml"
|
156
156
|
- ".github/workflows/pdd.yml"
|
157
157
|
- ".github/workflows/rake.yml"
|