cloud-platform-repository-checker 1.0.1 → 1.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 858af448467a05e3a98bba68dac83f8fbc5250b9a9c91a879d60d53b6b78e5c3
4
- data.tar.gz: 574109bf4b68682da814f8fbdbffedf80948a0daf2404ee69fe8ffff2003b521
3
+ metadata.gz: 1e8cf546dab8f2551ca91e723bb23195baa4de9ca433c0b01f5cbd8d62405781
4
+ data.tar.gz: 36787f13af08b887b4289964411164f0a8a636346f25002ea7d84170e644c257
5
5
  SHA512:
6
- metadata.gz: 278579fd2a4755ff58fdf4d98131f4c06a0e4e4a1d224e37a616c310fa7944644a118b2a7d26d643f1a4ccbca3d0318272d8491dea43baa7870b58aa85336882
7
- data.tar.gz: 7087136847c8a86f75aae37454a65a1bfc9d8b4b200c75fdaf4208ec5748866d6bab2602ac38ab16c599a29a4e3e42cab98047f0bd27e51a13e821c387ffdbd5
6
+ metadata.gz: 2b04b7f8e2b4d75b273e19d65006a47fd65f5d8ef1c9e3d817c713fb716944686cd596b574deb54970dbda32cfe4387cad0097c525c9005ecaed8e8e12b80adb
7
+ data.tar.gz: 01a1858cacaba240aa9a1193b39072518a70c7108b148ab0e9de04dd673e0dfa447a0d353f571307235b64083aead7740afad030dafeccf8b044370825c7bf92
data/Gemfile CHANGED
@@ -8,4 +8,5 @@ gem "octokit"
8
8
 
9
9
  group :development do
10
10
  gem "pry-byebug"
11
+ gem "rspec"
11
12
  end
@@ -5,6 +5,7 @@ GEM
5
5
  public_suffix (>= 2.0.2, < 5.0)
6
6
  byebug (11.1.3)
7
7
  coderay (1.1.2)
8
+ diff-lcs (1.3)
8
9
  faraday (1.0.1)
9
10
  multipart-post (>= 1.2, < 3)
10
11
  method_source (1.0.0)
@@ -19,6 +20,19 @@ GEM
19
20
  byebug (~> 11.0)
20
21
  pry (~> 0.13.0)
21
22
  public_suffix (4.0.5)
23
+ rspec (3.9.0)
24
+ rspec-core (~> 3.9.0)
25
+ rspec-expectations (~> 3.9.0)
26
+ rspec-mocks (~> 3.9.0)
27
+ rspec-core (3.9.2)
28
+ rspec-support (~> 3.9.3)
29
+ rspec-expectations (3.9.2)
30
+ diff-lcs (>= 1.2.0, < 2.0)
31
+ rspec-support (~> 3.9.0)
32
+ rspec-mocks (3.9.1)
33
+ diff-lcs (>= 1.2.0, < 2.0)
34
+ rspec-support (~> 3.9.0)
35
+ rspec-support (3.9.3)
22
36
  sawyer (0.8.2)
23
37
  addressable (>= 2.3.5)
24
38
  faraday (> 0.8, < 2.0)
@@ -29,6 +43,7 @@ PLATFORMS
29
43
  DEPENDENCIES
30
44
  octokit
31
45
  pry-byebug
46
+ rspec
32
47
 
33
48
  BUNDLED WITH
34
49
  2.1.2
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Script to list repositories in the ministryofjustice organisation whose names
4
+ # match a regular expression, and output a JSON report of how well they
5
+ # do/don't comply with our team-wide standards for how github repositories
6
+ # should be configured.
7
+
8
+ require "json"
9
+ require "net/http"
10
+ require "uri"
11
+ require "octokit"
12
+
13
+ require_relative "../lib/github_graph_ql_client"
14
+ require_relative "../lib/repository_lister"
15
+ require_relative "../lib/repository_report"
16
+
17
+ ############################################################
18
+
19
+ params = {
20
+ organization: ENV.fetch("ORGANIZATION"),
21
+ regexp: Regexp.new(ENV.fetch("REGEXP")),
22
+ team: ENV.fetch("TEAM"),
23
+ github_token: ENV.fetch("GITHUB_TOKEN")
24
+ }
25
+
26
+ repo_name = ARGV.shift
27
+ pp RepositoryReport.new(params.merge(repo_name: repo_name)).fetch_repo_data
@@ -5,16 +5,14 @@
5
5
  # do/don't comply with our team-wide standards for how github repositories
6
6
  # should be configured.
7
7
 
8
- require "bundler/setup"
9
8
  require "json"
10
9
  require "net/http"
11
10
  require "uri"
12
11
  require "octokit"
13
12
 
14
- libdir = File.join(".", File.dirname(__FILE__), "..", "lib")
15
- require File.join(libdir, "github_graph_ql_client")
16
- require File.join(libdir, "repository_lister")
17
- require File.join(libdir, "repository_report")
13
+ require_relative "../lib/github_graph_ql_client"
14
+ require_relative "../lib/repository_lister"
15
+ require_relative "../lib/repository_report"
18
16
 
19
17
  ############################################################
20
18
 
@@ -12,7 +12,7 @@ class RepositoryLister < GithubGraphQlClient
12
12
  # Returns a list of repository names which match `regexp`
13
13
  def repository_names
14
14
  list_repos
15
- .filter { |repo| repo["name"] =~ regexp }
15
+ .select { |repo| repo["name"] =~ regexp }
16
16
  .map { |repo| repo["name"] }
17
17
  end
18
18
 
@@ -1,7 +1,7 @@
1
1
  class RepositoryReport < GithubGraphQlClient
2
2
  attr_reader :organization, :repo_name, :team
3
3
 
4
- MASTER = "master"
4
+ MAIN_BRANCHES = ["main", "master"] # We are changing to use "main" but many repos still use "master" as default branch
5
5
  ADMIN = "admin"
6
6
  PASS = "PASS"
7
7
  FAIL = "FAIL"
@@ -45,7 +45,7 @@ class RepositoryReport < GithubGraphQlClient
45
45
 
46
46
  def all_checks_result
47
47
  @all_checks_result ||= {
48
- has_master_branch_protection: has_master_branch_protection?,
48
+ has_main_branch_protection: has_main_branch_protection?,
49
49
  requires_approving_reviews: has_branch_protection_property?("requiresApprovingReviews"),
50
50
  requires_code_owner_reviews: has_branch_protection_property?("requiresCodeOwnerReviews"),
51
51
  administrators_require_review: has_branch_protection_property?("isAdminEnforced"),
@@ -101,8 +101,8 @@ class RepositoryReport < GithubGraphQlClient
101
101
  def is_team_admin?
102
102
  client = Octokit::Client.new(access_token: github_token)
103
103
 
104
- client.repo_teams([organization, repo_name].join("/")).filter do |team|
105
- team[:name] == team && team[:permission] == ADMIN
104
+ client.repo_teams([organization, repo_name].join("/")).select do |t|
105
+ t[:name] == team && t[:permission] == ADMIN
106
106
  end.any?
107
107
  rescue Octokit::NotFound
108
108
  # This happens if our token does not have permission to view repo settings
@@ -113,11 +113,11 @@ class RepositoryReport < GithubGraphQlClient
113
113
  @rules ||= repo_data.dig("data", "repository", "branchProtectionRules", "edges")
114
114
  end
115
115
 
116
- def has_master_branch_protection?
116
+ def has_main_branch_protection?
117
117
  requiring_branch_protection_rules do |rules|
118
118
 
119
119
  rules
120
- .filter { |edge| edge.dig("node", "pattern") == MASTER }
120
+ .select { |edge| MAIN_BRANCHES.include?(edge.dig("node", "pattern")) }
121
121
  .any?
122
122
  end
123
123
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloud-platform-repository-checker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Salgado
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-14 00:00:00.000000000 Z
11
+ date: 2020-06-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: octokit
@@ -27,6 +27,7 @@ dependencies:
27
27
  description:
28
28
  email: platforms@digital.justice.gov.uk
29
29
  executables:
30
+ - check.rb
30
31
  - cloud-platform-repository-checker
31
32
  extensions: []
32
33
  extra_rdoc_files:
@@ -36,6 +37,7 @@ files:
36
37
  - Gemfile.lock
37
38
  - LICENSE
38
39
  - README.md
40
+ - bin/check.rb
39
41
  - bin/cloud-platform-repository-checker
40
42
  - env.example
41
43
  - lib/github_graph_ql_client.rb