neetob 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +10 -0
  3. data/.env +1 -0
  4. data/.rubocop.yml +596 -0
  5. data/.ruby-version +1 -0
  6. data/.semaphore/semaphore.yml +31 -0
  7. data/CHANGELOG.md +5 -0
  8. data/CODE_OF_CONDUCT.md +84 -0
  9. data/Gemfile +26 -0
  10. data/Gemfile.lock +249 -0
  11. data/LICENSE.txt +21 -0
  12. data/README.md +381 -0
  13. data/Rakefile +16 -0
  14. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/github_access.rb +29 -0
  15. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/neeto_apps.rb +35 -0
  16. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/neeto_commons.rb +16 -0
  17. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/runner.rb +35 -0
  18. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/skippable.rb +19 -0
  19. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/sync_neeto_commons/sync_bin.rb +32 -0
  20. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/sync_neeto_commons/sync_formatters.rb +35 -0
  21. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/sync_neeto_commons/sync_husky.rb +33 -0
  22. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/sync_neeto_commons/sync_misc.rb +36 -0
  23. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/sync_neeto_commons/sync_test_support.rb +38 -0
  24. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/sync_neeto_commons.rb +36 -0
  25. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/auto_update_prs_with_latest_master_verifier.rb +25 -0
  26. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/base.rb +72 -0
  27. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/bundler_version_verifier.rb +53 -0
  28. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/circleci_config_verifier.rb +25 -0
  29. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/common_gemfile_verifier.rb +25 -0
  30. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/common_initializers_verifier.rb +25 -0
  31. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/cypress_config_verifier.rb +46 -0
  32. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/cypress_plugins_index_verifier.rb +25 -0
  33. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/docker_file_dev_verifier.rb +25 -0
  34. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/environment_config_verifier.rb +38 -0
  35. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/gem_version_verifier.rb +38 -0
  36. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/gems_verifier_base.rb +34 -0
  37. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/gitignore_file_verifier.rb +39 -0
  38. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/jsconfig_verifier.rb +100 -0
  39. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/neeto_auth_gems_verifier.rb +20 -0
  40. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/neeto_commons_sync_verifier.rb +42 -0
  41. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/neeto_gems_version_verifier.rb +24 -0
  42. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/newrelic_verifier.rb +25 -0
  43. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/node_version_verifier.rb +63 -0
  44. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/package_dependencies_version_verifier.rb +62 -0
  45. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/package_json_verifier.rb +39 -0
  46. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/roles_verifier.rb +22 -0
  47. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/ruby_version_verifier.rb +25 -0
  48. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/semaphoreci_config_verifier.rb +162 -0
  49. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/sidekiq_queues_verifier.rb +34 -0
  50. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/simplecov_config_verifier.rb +28 -0
  51. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/sitemap_config_verifier.rb +29 -0
  52. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/slugignore_file_verifier.rb +25 -0
  53. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/sync_neeto_commons_verifier/bin_files_verifier.rb +29 -0
  54. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/sync_neeto_commons_verifier/formatter_files_verifier.rb +29 -0
  55. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/sync_neeto_commons_verifier/husky_files_verifier.rb +29 -0
  56. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/sync_neeto_commons_verifier/misc_files_verifier.rb +29 -0
  57. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/sync_neeto_commons_verifier/test_support_files_verifier.rb +28 -0
  58. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/sync_neeto_commons_verifier.rb +31 -0
  59. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/webpack_configuration_verifier.rb +44 -0
  60. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers/webpacker_config_verifier.rb +29 -0
  61. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/verifiers_list.rb +61 -0
  62. data/Users/chiragshah/Workspace/bigbinary/neeto/neetob/neeto_compliance/lib/neeto_compliance/version.rb +5 -0
  63. data/data/branch-protection-rules.json +25 -0
  64. data/data/config-vars-audit.json +18 -0
  65. data/data/config-vars-list.json +1 -0
  66. data/data/config-vars-upsert.json +3 -0
  67. data/data/github-labels.json +192 -0
  68. data/env.sample +1 -0
  69. data/exe/neetob +25 -0
  70. data/install.sh +21 -0
  71. data/lib/neetob/cli/base.rb +85 -0
  72. data/lib/neetob/cli/fetchorupdate_repos/execute.rb +53 -0
  73. data/lib/neetob/cli/github/auth.rb +134 -0
  74. data/lib/neetob/cli/github/base.rb +35 -0
  75. data/lib/neetob/cli/github/commands.rb +50 -0
  76. data/lib/neetob/cli/github/issues/commands.rb +51 -0
  77. data/lib/neetob/cli/github/issues/create.rb +42 -0
  78. data/lib/neetob/cli/github/issues/list.rb +94 -0
  79. data/lib/neetob/cli/github/labels/commands.rb +62 -0
  80. data/lib/neetob/cli/github/labels/delete.rb +44 -0
  81. data/lib/neetob/cli/github/labels/delete_all.rb +48 -0
  82. data/lib/neetob/cli/github/labels/list.rb +36 -0
  83. data/lib/neetob/cli/github/labels/show.rb +37 -0
  84. data/lib/neetob/cli/github/labels/update.rb +40 -0
  85. data/lib/neetob/cli/github/labels/upsert.rb +62 -0
  86. data/lib/neetob/cli/github/login.rb +16 -0
  87. data/lib/neetob/cli/github/make_pr/base.rb +72 -0
  88. data/lib/neetob/cli/github/make_pr/commands.rb +37 -0
  89. data/lib/neetob/cli/github/make_pr/compliance_fix.rb +49 -0
  90. data/lib/neetob/cli/github/make_pr/script.rb +55 -0
  91. data/lib/neetob/cli/github/protect_branch.rb +46 -0
  92. data/lib/neetob/cli/github/search.rb +38 -0
  93. data/lib/neetob/cli/heroku/access/add.rb +38 -0
  94. data/lib/neetob/cli/heroku/access/commands.rb +41 -0
  95. data/lib/neetob/cli/heroku/access/list.rb +36 -0
  96. data/lib/neetob/cli/heroku/access/remove.rb +38 -0
  97. data/lib/neetob/cli/heroku/commands.rb +28 -0
  98. data/lib/neetob/cli/heroku/config_vars/audit.rb +64 -0
  99. data/lib/neetob/cli/heroku/config_vars/base.rb +19 -0
  100. data/lib/neetob/cli/heroku/config_vars/commands.rb +49 -0
  101. data/lib/neetob/cli/heroku/config_vars/list.rb +56 -0
  102. data/lib/neetob/cli/heroku/config_vars/remove.rb +39 -0
  103. data/lib/neetob/cli/heroku/config_vars/upsert.rb +80 -0
  104. data/lib/neetob/cli/heroku/execute.rb +37 -0
  105. data/lib/neetob/cli/local/commands.rb +19 -0
  106. data/lib/neetob/cli/local/ls.rb +29 -0
  107. data/lib/neetob/cli/sub_command_base.rb +17 -0
  108. data/lib/neetob/cli/ui.rb +41 -0
  109. data/lib/neetob/cli/users/audit.rb +121 -0
  110. data/lib/neetob/cli/users/commands.rb +28 -0
  111. data/lib/neetob/cli/users/commits.rb +125 -0
  112. data/lib/neetob/cli.rb +40 -0
  113. data/lib/neetob/exception_handler.rb +58 -0
  114. data/lib/neetob/utils.rb +16 -0
  115. data/lib/neetob/version.rb +5 -0
  116. data/lib/neetob.rb +10 -0
  117. data/overcommit.yml +43 -0
  118. data/scripts/delete_unused_assets.rb +67 -0
  119. metadata +235 -0
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NeetoCompliance
4
+ class NeetoCommonsSyncVerifier < Base
5
+ def webpack_config_files
6
+ @_webpack_config_files ||= {
7
+ "config/webpack/development.js" => NeetoCompliance::NeetoCommons.path.join("webpack/development.js"),
8
+ "config/webpack/production.js" => NeetoCompliance::NeetoCommons.path.join("webpack/production.js"),
9
+ "config/webpack/staging.js" => NeetoCompliance::NeetoCommons.path.join("webpack/staging.js"),
10
+ "config/webpack/test.js" => NeetoCompliance::NeetoCommons.path.join("webpack/test.js")
11
+ }
12
+ end
13
+
14
+ def auto_correct!
15
+ @autofix_commands.each do |command|
16
+ puts command
17
+ system(command)
18
+ end
19
+ end
20
+
21
+ def autofix_suggestion
22
+ @autofix_commands.join("\n").yellow
23
+ end
24
+
25
+ def valid?
26
+ @autofix_commands = []
27
+
28
+ webpack_config_files.each_pair do |local_file, common_file|
29
+ unless same_file?(local_file, common_file)
30
+ @autofix_commands << "cp #{common_file.to_s} #{local_file}"
31
+ end
32
+ end
33
+
34
+ @autofix_commands.length == 0
35
+ end
36
+
37
+ def same_file?(local_file, common_file)
38
+ File.exist?(local_file) &&
39
+ `diff #{local_file} #{common_file.to_s}`.empty?
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NeetoCompliance
4
+ class NeetoGemsVerifier < GemsVerifierBase
5
+ def gems
6
+ [
7
+ { name: "neeto-commons-backend", repo: "bigbinary/neeto-commons-backend" },
8
+ { name: "neeto-compliance", repo: "bigbinary/neeto-compliance" },
9
+ { name: "neeto-area51-engine", repo: "bigbinary/neeto-area51-engine" },
10
+ { name: "neeto-sso", repo: "bigbinary/neeto-sso" },
11
+ { name: "neeto-team-members-engine", repo: "bigbinary/neeto-team-members-engine" },
12
+ { name: "neeto-org-incineration-engine", repo: "bigbinary/neeto-org-incineration-engine" },
13
+ # { name: "neeto-emails", repo: "bigbinary/neeto-emails" },
14
+ { name: "neeto-email-prefixer", repo: "bigbinary/neeto-email-prefixer" },
15
+ { name: "neeto-mail-interceptor", repo: "bigbinary/neeto-mail-interceptor" },
16
+ { name: "neeto-payments-engine", repo: "bigbinary/neeto-payments-engine" },
17
+ { name: "neeto-notifications-engine", repo: "bigbinary/neeto-notifications-engine" },
18
+ { name: "neeto-tags-engine", repo: "bigbinary/neeto-tags-engine" },
19
+ { name: "neeto-filters-engine", repo: "bigbinary/neeto-filters-engine" },
20
+ { name: "neeto-custom-domains-engine", repo: "bigbinary/neeto-custom-domains-engine" },
21
+ ]
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NeetoCompliance
4
+ class NewrelicVerifier < Base
5
+ def local_copy
6
+ "config/newrelic.yml"
7
+ end
8
+
9
+ def commons_copy
10
+ NeetoCompliance::NeetoCommons.path.join "common_files/newrelic.yml"
11
+ end
12
+
13
+ def verify_command
14
+ "diff -N #{commons_copy} #{local_copy}"
15
+ end
16
+
17
+ def valid?
18
+ `#{verify_command}`.empty?
19
+ end
20
+
21
+ def autofix_command
22
+ "cp #{commons_copy} #{local_copy}"
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NeetoCompliance
4
+ class NodeVersionVerifier < Base
5
+ def node_version
6
+ JSON.parse(open(common_packages_latest_file).read)["engines"]["node"]
7
+ end
8
+
9
+ def package_json_engines
10
+ JSON.parse(open("package.json").read)["engines"]
11
+ end
12
+
13
+ def auto_correct!
14
+ end
15
+
16
+ def autofix_suggestion
17
+ @errors.join("\n").yellow
18
+ end
19
+
20
+ def valid?
21
+ @errors = []
22
+ unless updated_nvmrc_file?
23
+ @errors << "Update node version in .nvmrc to #{node_version}"
24
+ end
25
+
26
+ unless updated_node_version_file?
27
+ @errors << "Update node version in .node-version to #{node_version}"
28
+ end
29
+
30
+ unless check_node_step_added_to_semahore_config?
31
+ @errors << "Add node version to your semaphore.yml as shown below:
32
+ global_job_config:
33
+ prologue:
34
+ commands:
35
+ - checkout
36
+ - sem-version ruby 3.0.1
37
+ - sem-version node #{node_version}
38
+ - sem-service start postgres 12.4
39
+ \n "
40
+ end
41
+
42
+ @errors.length == 0
43
+ end
44
+
45
+ def updated_node_version_file?
46
+ node_version == File.open(".node-version").read.chomp
47
+ end
48
+
49
+ def updated_nvmrc_file?
50
+ node_version == File.open(".nvmrc").read.chomp
51
+ end
52
+
53
+ def check_node_step_added_to_semahore_config?
54
+ semaphore_config = YAML.load(File.open(".semaphore/semaphore.yml").read, aliases: true)
55
+ semaphore_command = "sem-version node #{node_version}"
56
+ semaphore_config["global_job_config"]["prologue"]["commands"].include?(semaphore_command)
57
+ end
58
+
59
+ def common_packages_latest_file
60
+ NeetoCompliance::NeetoCommons.path.join "common_files/package-common.json"
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+
5
+ module NeetoCompliance
6
+ class PackageDependenciesVersionVerifier < Base
7
+ def valid?
8
+ @common_package_json = load_json_file(common_packages_latest_file)
9
+ @project_package_json = load_json_file("package.json")
10
+
11
+ @incorrect_dependencies = {
12
+ dependencies: find_incorrect_dependencies(:dependencies),
13
+ devDependencies: find_incorrect_dependencies(:devDependencies)
14
+ }
15
+ @incorrect_dependencies[:misplacedDependencies] = find_misplaced_dependencies
16
+ @incorrect_dependencies.keys.all? { |key| @incorrect_dependencies[key].empty? }
17
+ end
18
+
19
+ def auto_correct!
20
+ end
21
+
22
+ def autofix_command
23
+ command = ""
24
+ command += "yarn remove #{@incorrect_dependencies[:misplacedDependencies]
25
+ .join(" ")}\n" unless @incorrect_dependencies[:misplacedDependencies].empty?
26
+ command += "yarn add #{@incorrect_dependencies[:dependencies]
27
+ .join(" ")}\n" unless @incorrect_dependencies[:dependencies].empty?
28
+ command += "yarn add -D #{@incorrect_dependencies[:devDependencies]
29
+ .join(" ")}\n" unless @incorrect_dependencies[:devDependencies].empty?
30
+ command
31
+ end
32
+
33
+ private
34
+
35
+ def common_packages_latest_file
36
+ NeetoCompliance::NeetoCommons.path.join "common_files/package-common.json"
37
+ end
38
+
39
+ def find_misplaced_dependencies
40
+ project_dependencies = @project_package_json[:dependencies]
41
+ @common_package_json[:devDependencies].inject([]) do |result, (package_name, latest_version)|
42
+ next result unless project_dependencies.key?(package_name)
43
+
44
+ @incorrect_dependencies[:devDependencies] |= ["\"#{package_name}@#{latest_version}\""]
45
+ result.push("#{package_name}")
46
+ end
47
+ end
48
+
49
+ def find_incorrect_dependencies(key)
50
+ project_dependencies = @project_package_json[key]
51
+ @common_package_json[key].inject([]) do |result, (package_name, latest_version)|
52
+ next result if project_dependencies[package_name] == latest_version
53
+
54
+ result.push("\"#{package_name}@#{latest_version}\"")
55
+ end
56
+ end
57
+
58
+ def load_json_file(url)
59
+ JSON.parse(open(url).read, symbolize_names: true)
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+
5
+ KEYS_TO_CHECK = %w[engines lint-staged].freeze
6
+
7
+ module NeetoCompliance
8
+ class PackageJsonVerifier < Base
9
+ def valid?
10
+ @common_lint_staged = JSON.parse(open(common_packages_latest_file).read)
11
+ project_lint_staged = JSON.parse(open("package.json").read)
12
+
13
+ @results = KEYS_TO_CHECK.map { |key| @common_lint_staged[key].to_json === project_lint_staged[key].to_json }
14
+ @results.all?
15
+ end
16
+
17
+ def auto_correct!
18
+ end
19
+
20
+ def autofix_command
21
+ return "" if @results.all?
22
+
23
+ command = ""
24
+ KEYS_TO_CHECK.each_with_index do |key, index|
25
+ next if @results[index]
26
+
27
+ command += "Replace the value of \"#{key}\" in package.json with:\n\n#{JSON.pretty_generate(@common_lint_staged[key])}\n\n"
28
+ end
29
+
30
+ command
31
+ end
32
+
33
+ private
34
+
35
+ def common_packages_latest_file
36
+ NeetoCompliance::NeetoCommons.path.join "common_files/package-common.json"
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NeetoCompliance
4
+ # To verify if the `roles.yml` file exist in the host application.
5
+ class RolesVerifier < Base
6
+ def local_copy
7
+ "config/roles.yml"
8
+ end
9
+
10
+ def commons_copy
11
+ NeetoCompliance::NeetoCommons.path.join "common_files/roles.yml"
12
+ end
13
+
14
+ def valid?
15
+ File.exist?(local_copy)
16
+ end
17
+
18
+ def autofix_command
19
+ "cp #{commons_copy} #{local_copy}"
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NeetoCompliance
4
+ class RubyVersionVerifier < Base
5
+ def local_copy
6
+ ".ruby-version"
7
+ end
8
+
9
+ def commons_copy
10
+ NeetoCompliance::NeetoCommons.path.join "common_files/.ruby-version"
11
+ end
12
+
13
+ def verify_command
14
+ "diff -N #{commons_copy} #{local_copy}"
15
+ end
16
+
17
+ def valid?
18
+ `#{verify_command}`.empty?
19
+ end
20
+
21
+ def autofix_command
22
+ "cp #{commons_copy} #{local_copy}"
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,162 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NeetoCompliance
4
+ class SemaphoreciConfigVerifier < Base
5
+ def local_copy
6
+ ".semaphore/semaphore.yml"
7
+ end
8
+
9
+ def auto_correct!
10
+ end
11
+
12
+ def semaphore_config
13
+ @_semaphore_config ||= YAML.load(File.open(local_copy).read, aliases: true)
14
+ end
15
+
16
+ def my_container_setup_commands
17
+ semaphore_config["global_job_config"]["prologue"]["commands"]
18
+ end
19
+
20
+ def my_jobs_config
21
+ semaphore_config["blocks"].map { |block| block["task"]["jobs"] }
22
+ end
23
+
24
+ def my_env_vars_config
25
+ semaphore_config["global_job_config"]["env_vars"]
26
+ end
27
+
28
+ def my_after_pipeline_jobs
29
+ semaphore_config["after_pipeline"]["task"]
30
+ end
31
+
32
+ def my_machine_type
33
+ semaphore_config["agent"]["machine"]["type"]
34
+ end
35
+
36
+ def machine_type
37
+ "e1-standard-2"
38
+ end
39
+
40
+ def container_setup_commands
41
+ [
42
+ "checkout",
43
+ "sem-version ruby 3.1.2",
44
+ "sem-version node 18.12",
45
+ "sem-service start postgres 13",
46
+ "sem-service start redis",
47
+ "bundle config path 'vendor/bundle'",
48
+ "cp config/database.yml.ci config/database.yml",
49
+ "bundle install --jobs 1",
50
+ ]
51
+ end
52
+
53
+ def jobs_config
54
+ [
55
+ [
56
+ {
57
+ "name" => "Checks",
58
+ "commands" =>
59
+ [
60
+ "bundle exec ruby-audit check",
61
+ "bundle exec rubocop",
62
+ "bundle exec erblint --lint-all --format compact",
63
+ "curl -s -L \"https://raw.githubusercontent.com/bigbinary/wheel/main/.semaphore/commands/run_eslint_on_modified_files.sh\" | bash",
64
+ "bundle exec neeto-audit",
65
+ "bundle exec rake db:create db:schema:load --trace",
66
+ "bundle exec rake incinerator:check_for_missing_models",
67
+ "bundle exec rails test",
68
+ "bundle exec rake simplecov_coverage:publish",
69
+ "test-results publish ./test/reports",
70
+ "bundle exec rake setup"
71
+ ]
72
+ }
73
+ ]
74
+ ]
75
+ end
76
+
77
+ def env_vars_config
78
+ [
79
+ {
80
+ "name" => "TZ",
81
+ "value" => "UTC"
82
+ },
83
+ {
84
+ "name" => "RAILS_ENV",
85
+ "value" => "test"
86
+ },
87
+ {
88
+ "name" => "RACK_ENV",
89
+ "value" => "test"
90
+ }
91
+ ]
92
+ end
93
+
94
+ def after_pipeline_jobs
95
+ {
96
+ "jobs" => [
97
+ {
98
+ "name" => "Publish Results",
99
+ "commands" => ["test-results gen-pipeline-report"]
100
+ }
101
+ ]
102
+ }
103
+ end
104
+
105
+ def standard_semaphore_config_file
106
+ NeetoCompliance::NeetoCommons.path.join "common_files/semaphore/semaphore.yml"
107
+ end
108
+
109
+ def semaphore_config_valid?
110
+ @semaphore_errors = []
111
+ @no_errors = true
112
+
113
+ begin
114
+ container_setup_commands.each do |cmd|
115
+ unless my_container_setup_commands.include?(cmd)
116
+ @semaphore_errors << "Missing: \"#{cmd}\" in global_job_config"
117
+ @no_errors = false
118
+ end
119
+ end
120
+
121
+ unless jobs_config == my_jobs_config
122
+ @semaphore_errors << "Blocks configuration should be same as in #{standard_semaphore_config_file}"
123
+ @no_errors = false
124
+ end
125
+
126
+ unless env_vars_config == my_env_vars_config
127
+ @semaphore_errors << "Env vars configuration should be same as in #{standard_semaphore_config_file}"
128
+ @no_errors = false
129
+ end
130
+
131
+ unless after_pipeline_jobs == my_after_pipeline_jobs
132
+ @semaphore_errors << "after_pipeline jobs configuration should be same as in #{standard_semaphore_config_file}"
133
+ @no_errors = false
134
+ end
135
+
136
+ unless machine_type == my_machine_type
137
+ @semaphore_errors << "Machine type should be #{machine_type}"
138
+ @no_errors = false
139
+ end
140
+
141
+ rescue => e
142
+ p e
143
+ return false
144
+ end
145
+
146
+ @no_errors
147
+ end
148
+
149
+ def autofix_suggestion
150
+ @error.yellow
151
+ end
152
+
153
+ def valid?
154
+ unless semaphore_config_valid?
155
+ @error = %{SemaphoreCI configuration (.semaphore/semaphore.yml) is incomplete/incorrect. \n#{@semaphore_errors.join("\n")} \n}
156
+ return false
157
+ end
158
+
159
+ true
160
+ end
161
+ end
162
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NeetoCompliance
4
+ class SidekiqQueuesVerifier < Base
5
+ def local_copy
6
+ "config/sidekiq.yml"
7
+ end
8
+
9
+ def queues
10
+ @_queues ||= ["active_storage_analysis", "active_storage_purge"]
11
+ end
12
+
13
+ def valid?
14
+ @errors = []
15
+
16
+ sidekiq_yml = YAML.load(File.open(local_copy), aliases: true)
17
+
18
+ queues.map do |queue|
19
+ unless sidekiq_yml["queues"].include?(queue)
20
+ @errors << "Add #{queue} to queues in #{local_copy}"
21
+ end
22
+ end
23
+
24
+ @errors.length == 0
25
+ end
26
+
27
+ def autofix_suggestion
28
+ @errors.join("\n").yellow
29
+ end
30
+
31
+ def auto_correct!
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NeetoCompliance
4
+ class SimplecovConfigVerifier < Base
5
+ def test_helper
6
+ "test/test_helper.rb"
7
+ end
8
+
9
+ def valid?
10
+ @errors = []
11
+
12
+ check_file = Set.new(File.readlines(test_helper).collect(&:chomp))
13
+
14
+ if check_file.include?("NeetoCommonsBackend.simplecov_config")
15
+ @errors << "Remove NeetoCommons.simplecov_config from #{test_helper}"
16
+ end
17
+
18
+ @errors.length == 0
19
+ end
20
+
21
+ def autofix_suggestion
22
+ @errors.join("\n").yellow
23
+ end
24
+
25
+ def auto_correct!
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NeetoCompliance
4
+ class SitemapConfigVerifier < Base
5
+ def local_copy
6
+ "public/sitemap.xml"
7
+ end
8
+
9
+ def commons_copy
10
+ NeetoCompliance::NeetoCommons.path.join "common_files", "sitemap.xml"
11
+ end
12
+
13
+ def verify_command
14
+ "diff -N #{commons_copy} #{local_copy}"
15
+ end
16
+
17
+ def valid?
18
+ `#{verify_command}`.empty?
19
+ end
20
+
21
+ def autofix_command
22
+ "cp #{commons_copy} #{local_copy}"
23
+ end
24
+
25
+ def apps_exception_list
26
+ ["neeto-kb-web.git"]
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NeetoCompliance
4
+ class SlugignoreFileVerifier < Base
5
+ def local_copy
6
+ ".slugignore"
7
+ end
8
+
9
+ def commons_copy
10
+ NeetoCompliance::NeetoCommons.path.join local_copy
11
+ end
12
+
13
+ def verify_command
14
+ "diff -N #{commons_copy} #{local_copy}"
15
+ end
16
+
17
+ def valid?
18
+ `#{verify_command}`.empty?
19
+ end
20
+
21
+ def autofix_command
22
+ "cp #{commons_copy} #{local_copy}"
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "net/http"
4
+ require "json"
5
+ require "yaml"
6
+
7
+ require "neeto_compliance/sync_neeto_commons"
8
+
9
+ module NeetoCompliance
10
+ class SyncNeetoCommonsVerifier < Base
11
+ class BinFilesVerifier
12
+ def process
13
+ non_complied_bin_files = find_non_complied_bin_files
14
+
15
+ return false if non_complied_bin_files.any?
16
+
17
+ true
18
+ end
19
+
20
+ private
21
+
22
+ def find_non_complied_bin_files
23
+ NeetoCompliance::SyncNeetoCommons::SyncBin.BIN_FILES.select do |file|
24
+ !system("cat #{NeetoCompliance::SyncNeetoCommons.neeto_commons_url}#{file} | diff #{file} - 1> /dev/null")
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "net/http"
4
+ require "json"
5
+ require "yaml"
6
+
7
+ require "neeto_compliance/sync_neeto_commons"
8
+
9
+ module NeetoCompliance
10
+ class SyncNeetoCommonsVerifier < Base
11
+ class FormatterFilesVerifier
12
+ def process
13
+ non_complied_formatter_files = find_non_complied_formatter_files
14
+
15
+ return false if non_complied_formatter_files.any?
16
+
17
+ true
18
+ end
19
+
20
+ private
21
+
22
+ def find_non_complied_formatter_files
23
+ NeetoCompliance::SyncNeetoCommons::SyncFormatters.CONFIG_FILES.select do |file|
24
+ !system("cat #{NeetoCompliance::SyncNeetoCommons.neeto_commons_url}#{file} | diff #{file} - 1> /dev/null")
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "net/http"
4
+ require "json"
5
+ require "yaml"
6
+
7
+ require "neeto_compliance/sync_neeto_commons"
8
+
9
+ module NeetoCompliance
10
+ class SyncNeetoCommonsVerifier < Base
11
+ class HuskyFilesVerifier
12
+ def process
13
+ non_complied_husky_files = find_non_complied_husky_files
14
+
15
+ return false if non_complied_husky_files.any?
16
+
17
+ true
18
+ end
19
+
20
+ private
21
+
22
+ def find_non_complied_husky_files
23
+ NeetoCompliance::SyncNeetoCommons::SyncHusky.HUSKY_FILES.select do |file|
24
+ !system("cat #{NeetoCompliance::SyncNeetoCommons.neeto_commons_url}#{file} | diff #{file} - 1> /dev/null")
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end