fbe 0.0.59 → 0.0.61

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dcb7a83f13eadb9bd57bd7a4741709a4b41622109f64e716ffabe98df60f2e7e
4
- data.tar.gz: b854b1108dc729e24cee35970cefc92387c4e44c0a171c3991a162a819e7e256
3
+ metadata.gz: 714cfed283ff521d4b0c51a0520157a1663da7786a0665debdc835fefcb39ea2
4
+ data.tar.gz: 61e090588bc4b073e00a3f496e382545d9e5a04f73d36225474fbee69d8423b3
5
5
  SHA512:
6
- metadata.gz: 95584b9296deb9707f364d29b8351505f70e12273c3df3794704535febd965a18f0777318ec8d445a51bcc2309453820094039354e1d3dc3f82aa50635f81b1c
7
- data.tar.gz: a2893b12fef6a7f24ffda4ac0152c08500ac58a9ac27e6bc9e32ae3ba329b7b8f781dbfae7514bd6ade9b0c9fff38ac109706f1e2a6d8a67b7631b8a6a1be020
6
+ metadata.gz: f819bf9191c6f18fc5671578f3bb3368ff3a6220df378e6938d0412fbd088d3f41f17017d3bf5d1abb59fbda12b06df99fd984769931ab7d558a31cfa1a1cd71
7
+ data.tar.gz: cf1a95c3f4ecbb8ed0a4c0bf644e2b2e286a0d041a8db93781bdf40280097f7ba5c2f6b21a891807067a2a92ee999a2f335bc255d58cbeaeeb2c63129b08adcd
@@ -1,7 +1,7 @@
1
1
  (award
2
2
  (explain "If a branch has a name that doesn\\\'t obey the convention, a penalty is given to the author")
3
3
  (aka
4
- (let fee -12)
4
+ (let fee {{ -6 | times: anger }})
5
5
  (give fee "as a basis")
6
6
  "deduct ${fee} points")
7
7
  )
@@ -11,7 +11,7 @@
11
11
 
12
12
  (aka
13
13
  (let hoc_k {{ 0.05 | times: love }})
14
- (let hoc_threshold 200)
14
+ (let hoc_threshold {{ 400 | divided_by: paranoia }})
15
15
  (let hoc_max 16)
16
16
  (let hoc_min 5)
17
17
  (set bonus_for_hoc (if (lt hoc hoc_threshold) (times hoc hoc_k) 0))
@@ -30,7 +30,7 @@
30
30
 
31
31
  (aka
32
32
  (let many_hoc_fee2 {{ 8 | times: anger }})
33
- (let hoc_threshold2 800)
33
+ (let hoc_threshold2 {{ 1600 | divided_by: paranoia }})
34
34
  (set penalty_for_hoc2 (if (gte hoc hoc_threshold2) (times -1 many_hoc_fee2) 0))
35
35
  (give penalty_for_hoc2 "for way too many hits-of-code (${hoc} >= ${hoc_threshold2})")
36
36
  "deduct ${many_hoc_fee2} points if more than ${hoc_threshold2}
@@ -53,7 +53,7 @@
53
53
 
54
54
  (aka
55
55
  (let few_comments_fee {{ 2 | times: anger }})
56
- (let comments_needed 5)
56
+ (let comments_needed {{ 3 | times: paranoia }})
57
57
  (set penalty_for_few_comments (if (and (lt comments comments_needed) (not (eq comments 0))) (times -1 few_comments_fee) 0))
58
58
  (give penalty_for_few_comments "for very few (${comments}) comments")
59
59
  "deduct ${few_comments_fee} points if there were less than ${comments_needed} comments made during review")
@@ -66,7 +66,7 @@
66
66
 
67
67
  (aka
68
68
  (let few_hoc_fee {{ 4 | times: anger }})
69
- (let hoc_needed 20)
69
+ (let hoc_needed {{ 10 | times: paranoia }})
70
70
  (set penalty_for_few_hoc (if (lt hoc hoc_needed) (times -1 few_hoc_fee) 0))
71
71
  (give penalty_for_few_hoc "for too few (${hoc}) hits-of-code")
72
72
  "deduct ${few_hoc_fee} points if you contribute less than ${hoc_needed} hits-of-code")
@@ -29,7 +29,7 @@
29
29
 
30
30
  (aka
31
31
  (let few_comments_fee {{ 5 | times: anger }})
32
- (let comments_needed 6)
32
+ (let comments_needed {{ 3 | times: paranoia }})
33
33
  (set penalty_for_few_comments (if (and (lt comments comments_needed) (not (eq comments 0))) (times -1 few_comments_fee) 0))
34
34
  (give penalty_for_few_comments "for very few (${comments}) comments")
35
35
  "deduct ${few_comments_fee} points if there were less than ${comments_needed} comments made during review")
@@ -52,7 +52,7 @@
52
52
 
53
53
  (aka
54
54
  (let hoc_fee {{ 4 | times: anger }})
55
- (let hoc_needed 15)
55
+ (let hoc_needed {{ 8 | times: paranoia }})
56
56
  (set penalty_for_hoc (if (lt hoc hoc_needed) (times -1 hoc_fee) 0))
57
57
  (give penalty_for_hoc "for too few (${hoc}) hits-of-code")
58
58
  "deduct ${hoc_fee} points if there were less than ${hoc_needed} hits-of-code")
@@ -1,7 +1,7 @@
1
1
  (award
2
2
  (explain "When someone pushes directly to the default branch, they get a penalty")
3
3
  (aka
4
- (let fee -16)
4
+ (let fee {{ -8 | times: anger }})
5
5
  (give fee "as a basis")
6
6
  "${fee} points")
7
7
  )
@@ -10,7 +10,7 @@
10
10
 
11
11
  (aka
12
12
  (let b1 {{ 4 | times: love }})
13
- (let hours_threshold 24)
13
+ (let hours_threshold {{ 48 | divided_by: paranoia }})
14
14
  (set b1 (if (lt hours hours_threshold) b1 0))
15
15
  (give b1 "for resolving it in less than ${hours_threshold} hours")
16
16
  "add ${b1} points if it was resolved in less than ${hours_threshold} hours")
data/lib/fbe/bylaws.rb CHANGED
@@ -30,12 +30,15 @@ require_relative '../fbe'
30
30
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
31
31
  # Copyright:: Copyright (c) 2024 Yegor Bugayenko
32
32
  # License:: MIT
33
- def Fbe.bylaws(anger: 2, love: 2)
33
+ def Fbe.bylaws(anger: 2, love: 2, paranoia: 2)
34
+ raise 'The "anger" must be in the [0..4] interval' unless !anger.negative? && anger < 5
35
+ raise 'The "lover" must be in the [0..4] interval' unless !love.negative? && love < 5
36
+ raise 'The "paranoia" must be in the [1..4] interval' unless paranoia.positive? && paranoia < 5
34
37
  home = File.join(__dir__, '../../assets/bylaws')
35
38
  raise "The directory with templates is absent '#{home}'" unless File.exist?(home)
36
39
  Dir[File.join(home, '*.liquid')].to_h do |f|
37
40
  formula = Liquid::Template.parse(File.read(f)).render(
38
- 'anger' => anger, 'love' => love
41
+ 'anger' => anger, 'love' => love, 'paranoia' => paranoia
39
42
  )
40
43
  [File.basename(f).gsub(/\.liquid$/, ''), formula]
41
44
  end
data/lib/fbe/octo.rb CHANGED
@@ -541,6 +541,64 @@ class Fbe::FakeOctokit
541
541
  changed_files: 2
542
542
  }
543
543
  }
544
+ },
545
+ {
546
+ id: 43,
547
+ created_at: Time.now,
548
+ actor: { id: 42 },
549
+ type: 'PullRequestEvent',
550
+ repo: { id: repo },
551
+ payload: {
552
+ action: 'closed',
553
+ number: 172,
554
+ ref_type: 'tag',
555
+ ref: 'foo',
556
+ pull_request: {
557
+ url: 'https://api.github.com/repos/yegor256/judges/pulls/93',
558
+ id: 1_990_323_142,
559
+ node_id: 'PR_kwDOL6GCO852oevG',
560
+ number: 172,
561
+ state: 'closed',
562
+ locked: false,
563
+ title: '#999 new feature',
564
+ user: {
565
+ login: 'test',
566
+ id: 88_084_038,
567
+ node_id: 'MDQ6VXNlcjE2NDYwMjA=',
568
+ type: 'User',
569
+ site_admin: false
570
+ },
571
+ base: {
572
+ label: 'zerocracy:master',
573
+ ref: 'master',
574
+ user: {
575
+ login: 'zerocracy',
576
+ id: 24_234_201
577
+ },
578
+ repo: {
579
+ id: repo,
580
+ node_id: 'R_kgDOK2_4Aw',
581
+ name: 'judges-action',
582
+ full_name: 'zerocracy/judges-action',
583
+ private: false,
584
+ owner: {
585
+ login: 'zerocracy'
586
+ }
587
+ }
588
+ },
589
+ head: {
590
+ ref: 'zerocracy/judges-action',
591
+ sha: '74d0c234967de0f690805c6943e78db42a294c1a'
592
+ },
593
+ merged_at: Time.now,
594
+ comments: 2,
595
+ review_comments: 2,
596
+ commits: 1,
597
+ additions: 3,
598
+ deletions: 3,
599
+ changed_files: 2
600
+ }
601
+ }
544
602
  }
545
603
  ]
546
604
  end
@@ -691,65 +749,166 @@ class Fbe::FakeOctokit
691
749
  ]
692
750
  end
693
751
 
694
- def check_runs_for_ref(_repo, sha)
695
- {
696
- total_count: 7,
697
- check_runs: [
698
- {
699
- id: 28_907_016_501,
700
- name: 'make',
701
- head_sha: sha,
702
- started_at: '2024-08-18T08:04:44Z',
703
- completed_at: '2024-08-18T08:20:17Z'
704
- },
705
- {
706
- id: 28_906_596_603,
707
- name: 'copyrights',
708
- head_sha: sha,
709
- started_at: '2024-08-18T08:04:44Z',
710
- completed_at: '2024-08-18T08:20:17Z'
711
- },
712
- {
713
- id: 28_906_596_550,
714
- name: 'markdown-lint',
715
- head_sha: sha,
716
- started_at: '2024-08-18T08:04:44Z',
717
- completed_at: '2024-08-18T08:20:17Z'
718
- },
719
- {
720
- id: 28_906_596_483,
721
- name: 'pdd',
722
- head_sha: sha,
723
- started_at: '2024-08-18T08:04:44Z',
724
- completed_at: '2024-08-18T08:20:17Z'
725
- },
726
- {
727
- id: 28_906_596_433,
728
- name: 'rake',
729
- head_sha: sha,
730
- started_at: '2024-08-18T08:04:44Z',
731
- completed_at: '2024-08-18T08:20:17Z'
732
- },
733
- {
734
- id: 28_906_596_405,
735
- name: 'shellcheck',
736
- head_sha: sha,
737
- started_at: '2024-08-18T08:04:44Z',
738
- completed_at: '2024-08-18T08:20:17Z'
739
- },
740
- {
741
- id: 28_906_596_379,
742
- name: 'yamllint',
743
- head_sha: sha,
744
- started_at: '2024-08-18T08:04:44Z',
745
- completed_at: '2024-08-18T08:20:17Z'
746
- }
747
- ]
752
+ def check_runs_for_ref(repo, sha)
753
+ data = {
754
+ 'zerocracy/baza' => {
755
+ total_count: 7,
756
+ check_runs: [
757
+ {
758
+ id: 28_907_016_501,
759
+ name: 'make',
760
+ head_sha: sha,
761
+ started_at: '2024-08-18T08:04:44Z',
762
+ completed_at: '2024-08-18T08:20:17Z',
763
+ app: {
764
+ slug: 'github-actions'
765
+ }
766
+ },
767
+ {
768
+ id: 28_906_596_603,
769
+ name: 'copyrights',
770
+ head_sha: sha,
771
+ started_at: '2024-08-18T08:04:44Z',
772
+ completed_at: '2024-08-18T08:20:17Z',
773
+ app: {
774
+ slug: 'github-actions'
775
+ }
776
+ },
777
+ {
778
+ id: 28_906_596_550,
779
+ name: 'markdown-lint',
780
+ head_sha: sha,
781
+ started_at: '2024-08-18T08:04:44Z',
782
+ completed_at: '2024-08-18T08:20:17Z',
783
+ app: {
784
+ slug: 'github-actions'
785
+ }
786
+ },
787
+ {
788
+ id: 28_906_596_483,
789
+ name: 'pdd',
790
+ head_sha: sha,
791
+ started_at: '2024-08-18T08:04:44Z',
792
+ completed_at: '2024-08-18T08:20:17Z',
793
+ app: {
794
+ slug: 'github-actions'
795
+ }
796
+ },
797
+ {
798
+ id: 28_906_596_433,
799
+ name: 'rake',
800
+ head_sha: sha,
801
+ started_at: '2024-08-18T08:04:44Z',
802
+ completed_at: '2024-08-18T08:20:17Z',
803
+ app: {
804
+ slug: 'github-actions'
805
+ }
806
+ },
807
+ {
808
+ id: 28_906_596_405,
809
+ name: 'shellcheck',
810
+ head_sha: sha,
811
+ started_at: '2024-08-18T08:04:44Z',
812
+ completed_at: '2024-08-18T08:20:17Z',
813
+ app: {
814
+ slug: 'github-actions'
815
+ }
816
+ },
817
+ {
818
+ id: 28_906_596_379,
819
+ name: 'yamllint',
820
+ head_sha: sha,
821
+ started_at: '2024-08-18T08:04:44Z',
822
+ completed_at: '2024-08-18T08:20:17Z',
823
+ app: {
824
+ slug: 'github-actions'
825
+ }
826
+ }
827
+ ]
828
+ },
829
+ 'zerocracy/judges-action' => {
830
+ total_count: 7,
831
+ check_runs: [
832
+ {
833
+ id: 28_907_016_501,
834
+ name: 'Codacy Static Code Analysis',
835
+ head_sha: sha,
836
+ started_at: '2024-08-18T08:04:44Z',
837
+ completed_at: '2024-08-18T08:20:17Z',
838
+ app: {
839
+ slug: 'codacy-production'
840
+ }
841
+ },
842
+ {
843
+ id: 28_906_596_603,
844
+ name: 'copyrights',
845
+ head_sha: sha,
846
+ started_at: '2024-08-18T08:04:44Z',
847
+ completed_at: '2024-08-18T08:20:17Z',
848
+ app: {
849
+ slug: 'github-actions'
850
+ }
851
+ },
852
+ {
853
+ id: 28_906_596_550,
854
+ name: 'markdown-lint',
855
+ head_sha: sha,
856
+ started_at: '2024-08-18T08:04:44Z',
857
+ completed_at: '2024-08-18T08:20:17Z',
858
+ app: {
859
+ slug: 'github-actions'
860
+ }
861
+ },
862
+ {
863
+ id: 28_906_596_483,
864
+ name: 'pdd',
865
+ head_sha: sha,
866
+ started_at: '2024-08-18T08:04:44Z',
867
+ completed_at: '2024-08-18T08:20:17Z',
868
+ app: {
869
+ slug: 'github-actions'
870
+ }
871
+ },
872
+ {
873
+ id: 28_906_596_433,
874
+ name: 'rake',
875
+ head_sha: sha,
876
+ started_at: '2024-08-18T08:04:44Z',
877
+ completed_at: '2024-08-18T08:20:17Z',
878
+ app: {
879
+ slug: 'github-actions'
880
+ }
881
+ },
882
+ {
883
+ id: 28_906_596_405,
884
+ name: 'shellcheck',
885
+ head_sha: sha,
886
+ started_at: '2024-08-18T08:04:44Z',
887
+ completed_at: '2024-08-18T08:20:17Z',
888
+ app: {
889
+ slug: 'github-actions'
890
+ }
891
+ },
892
+ {
893
+ id: 28_906_596_379,
894
+ name: 'yamllint',
895
+ head_sha: sha,
896
+ started_at: '2024-08-18T08:04:44Z',
897
+ completed_at: '2024-08-18T08:20:17Z',
898
+ app: {
899
+ slug: 'github-actions'
900
+ }
901
+ }
902
+ ]
903
+ }
748
904
  }
905
+ data.fetch(repo) do
906
+ { total_count: 0, check_runs: [] }
907
+ end
749
908
  end
750
909
 
751
910
  def workflow_run_job(_repo, job)
752
- result = [
911
+ [
753
912
  {
754
913
  id: 28_907_016_501,
755
914
  run_id: 10_438_531_072,
@@ -799,12 +958,17 @@ class Fbe::FakeOctokit
799
958
  started_at: '2024-08-18T08:04:44Z',
800
959
  completed_at: '2024-08-18T08:20:17Z'
801
960
  }
802
- ].select { |json| json[:id] == job }
803
- result.first
961
+ ].select { |json| json[:id] == job }.first || {
962
+ id: job,
963
+ run_id: 1234,
964
+ name: 'run job',
965
+ started_at: '2024-08-18T08:04:44Z',
966
+ completed_at: '2024-08-18T08:20:17Z'
967
+ }
804
968
  end
805
969
 
806
970
  def workflow_run(repo, id)
807
- runs = [
971
+ [
808
972
  {
809
973
  id: 10_438_531_072,
810
974
  event: 'pull_request',
@@ -861,22 +1025,17 @@ class Fbe::FakeOctokit
861
1025
  started_at: '2024-08-18T08:04:44Z',
862
1026
  completed_at: '2024-08-18T08:20:17Z'
863
1027
  }
864
- ].select { |json| json[:id] == id }
865
- if runs.first.nil?
866
- {
867
- id:,
868
- name: 'copyrights',
869
- head_branch: 'master',
870
- head_sha: '7d34c53e6743944dbf6fc729b1066bcbb3b18443',
871
- event: 'push',
872
- status: 'completed',
873
- conclusion: 'success',
874
- workflow_id: id,
875
- created_at: random_time,
876
- repository: repository(repo)
877
- }
878
- else
879
- runs.first
880
- end
1028
+ ].select { |json| json[:id] == id }.first || {
1029
+ id:,
1030
+ name: 'copyrights',
1031
+ head_branch: 'master',
1032
+ head_sha: '7d34c53e6743944dbf6fc729b1066bcbb3b18443',
1033
+ event: 'push',
1034
+ status: 'completed',
1035
+ conclusion: 'success',
1036
+ workflow_id: id,
1037
+ created_at: random_time,
1038
+ repository: repository(repo)
1039
+ }
881
1040
  end
882
1041
  end
data/lib/fbe.rb CHANGED
@@ -27,5 +27,5 @@
27
27
  # License:: MIT
28
28
  module Fbe
29
29
  # Current version of the gem (changed by .rultor.yml on every release)
30
- VERSION = '0.0.59'
30
+ VERSION = '0.0.61'
31
31
  end
@@ -80,7 +80,7 @@ class TestBylaws < Minitest::Test
80
80
  { hoc: 50, comments: 15, reviews: 0 } => 5,
81
81
  { hoc: 50, comments: 25, reviews: 0 } => 4,
82
82
  { hoc: 180, comments: 7, reviews: 2 } => 32,
83
- { hoc: 150, comments: 5, reviews: 1 } => 31,
83
+ { hoc: 150, comments: 5, reviews: 1 } => 27,
84
84
  { hoc: 500, comments: 25, reviews: 2 } => 4,
85
85
  { hoc: 99, comments: 6, reviews: 1 } => 26,
86
86
  { hoc: 1_500, comments: 3, reviews: 0 } => 4,
@@ -104,7 +104,7 @@ class TestBylaws < Minitest::Test
104
104
  assert(!formula.nil?, title)
105
105
  a = Fbe::Award.new(formula)
106
106
  help = [
107
- " #{title}: {\n ",
107
+ " '#{title.gsub('-', '_')}' => {\n ",
108
108
  pairs.map do |args, _|
109
109
  [
110
110
  '{',
@@ -162,4 +162,40 @@ class TestOcto < Minitest::Test
162
162
  end
163
163
  assert_in_delta(pause, Time.now - start_time, 1)
164
164
  end
165
+
166
+ def test_fetches_fake_check_runs_for_ref
167
+ WebMock.disable_net_connect!
168
+ o = Fbe.octo(loog: Loog::NULL, global: {}, options: Judges::Options.new({ 'testing' => true }))
169
+ sha = 'f2ca1bb6c7e907d06'
170
+ result = o.check_runs_for_ref('zerocracy/baza', sha)
171
+ assert_equal(7, result[:total_count])
172
+ assert_equal(7, result[:check_runs].count)
173
+ result = o.check_runs_for_ref('zerocracy/judges-action', sha)
174
+ assert_equal(7, result[:total_count])
175
+ assert_equal(7, result[:check_runs].count)
176
+ result = o.check_runs_for_ref('zerocracy/something', sha)
177
+ assert_equal(0, result[:total_count])
178
+ assert_instance_of(Array, result[:check_runs])
179
+ assert_equal(0, result[:check_runs].count)
180
+ end
181
+
182
+ def test_fetches_fake_workflow_run
183
+ WebMock.disable_net_connect!
184
+ o = Fbe.octo(loog: Loog::NULL, global: {}, options: Judges::Options.new({ 'testing' => true }))
185
+ id = 10_438_531_072
186
+ result = o.workflow_run('zerocracy/baza', id)
187
+ assert_equal(id, result[:id])
188
+ result = o.workflow_run('zerocracy/baza', 0)
189
+ assert_equal(0, result[:id])
190
+ end
191
+
192
+ def test_fetches_fake_workflow_run_job
193
+ WebMock.disable_net_connect!
194
+ o = Fbe.octo(loog: Loog::NULL, global: {}, options: Judges::Options.new({ 'testing' => true }))
195
+ id = 28_906_596_433
196
+ result = o.workflow_run_job('zerocracy/baza', id)
197
+ assert_equal(id, result[:id])
198
+ result = o.workflow_run_job('zerocracy/baza', 0)
199
+ assert_equal(0, result[:id])
200
+ end
165
201
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fbe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.59
4
+ version: 0.0.61
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-08-22 00:00:00.000000000 Z
11
+ date: 2024-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: backtrace