forked from lewagon/setup
-
Notifications
You must be signed in to change notification settings - Fork 0
/
check.rb
102 lines (95 loc) · 3.53 KB
/
check.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
require 'io/console'
begin
require "colored"
require "http"
rescue LoadError
puts "Could not find all needed gems. Please run `gem install colored http` and retry"
exit
end
require "json"
REQUIRED_RUBY_VERSION = "2.7.4"
REQUIRED_GIT_VERSION = "2.0"
MINIMUM_AVATAR_SIZE = 2 * 1024
$all_good = true
def check(label, &block)
puts "Checking #{label}..."
result, message = yield
$all_good = $all_good && result
puts result ? "[OK] #{message}".green : "[KO] #{message}".red
rescue HTTP::Request::UnsupportedSchemeError
puts "Test not available for now..."
end
def check_all
check("shell") do
if ENV["SHELL"].match(/zsh/)
[ true, "Your default shell is zsh"]
else
[ false, "Your default shell is #{ENV["SHELL"]}, but should be zsh"]
end
end
check("ruby version") do
if RUBY_VERSION == REQUIRED_RUBY_VERSION
[ true, "Your default ruby version is #{RUBY_VERSION}" ]
else
details = `type -a ruby`
[ false, "Your default ruby version is #{RUBY_VERSION}, but should be #{REQUIRED_RUBY_VERSION}. Did you run `rbenv global #{REQUIRED_RUBY_VERSION}`?\n#{details}---" ]
end
end
check("git version") do
version_tokens = `git --version`.gsub("git version", "").strip.split(".").map(&:to_i)
required_version_tokens = REQUIRED_GIT_VERSION.split(".").map(&:to_i)
if version_tokens.first == required_version_tokens.first && version_tokens[1] >= required_version_tokens[1]
[ true, "Your default git version is #{version_tokens.join(".")}"]
else
[ false, "Your default git version is outdated: #{version_tokens.join(".")}"]
end
end
check("git/Github email matching") do
git_email = (`git config --global user.email`).chomp
puts "Please go to https://github.com/settings/emails and make sure that"
puts "the following email is listed on that page:"
puts "👉 #{git_email}"
print "Is that the case? (y/n + <Enter>)\n> "
response = gets.chomp
ok = response.downcase.include?("y")
[ ok, ok ? "git email is included in Github emails" : "Add #{git_email} to your GitHub account or update your git global settings" ]
end
check("GitHub profile picture") do
groups = `ssh -T [email protected] 2>&1`.match(/Hi (?<nickname>.*)! You've successfully authenticated/)
nickname = groups["nickname"]
puts "Your username on GitHub is #{nickname}, checking your profile picture now..."
avatar_url = JSON.parse(HTTP.get("https://api.github.com/users/#{nickname}"))['avatar_url']
content_length = HTTP.get(avatar_url).headers["Content-Length"].to_i
if content_length >= MINIMUM_AVATAR_SIZE
[ true, "Thanks for uploading a GitHub profile picture 📸"]
else
[ false, "You don't have any profile picture set.\nIt's important, go to github.com/settings/profile and upload a picture *right now*."]
end
end
check("git editor setup") do
editor = `git config --global core.editor`
if editor.match(/code/i)
[ true, "VS Code is your default git editor"]
else
[ false, "Ask a teacher to check your ~/.gitconfig editor setup. Right now, it's `#{editor.chomp}`"]
end
end
check("ruby gems") do
if (`which rspec`) != "" && (`which rubocop`) != ""
[ true, "Everything's fine"]
else
[ false, "Rspec and Rubocop gems aren't there. Did you run the `gem install ...` command?"]
end
end
end
def outro
if $all_good
puts ""
puts "🚀 Awesome! Your computer is now ready!".green
else
puts ""
puts "😥 Bummer! Something's wrong, if you're stuck, ask a teacher.".red
end
end
check_all
outro