|
1 | 1 | # frozen_string_literal: true
|
2 | 2 |
|
3 |
| -# Define log color codes |
4 | 3 | RED = "\e[31m"
|
5 | 4 | GREEN = "\e[32m"
|
6 | 5 | YELLOW = "\e[33m"
|
|
10 | 9 | RESET = "\e[0m"
|
11 | 10 | PREFIX = "[PYENV-SETUP]"
|
12 | 11 |
|
13 |
| -Chef::Log.info("#{CYAN}#{PREFIX} π Starting pyenv installation process#{RESET}") |
| 12 | +Chef::Log.info("#{CYAN}#{PREFIX} Starting pyenv installation process#{RESET}") |
14 | 13 |
|
15 | 14 | pyenv_installer_path = ::File.join(
|
16 | 15 | Chef::Config[:file_cache_path], 'pyenv-installer'
|
17 | 16 | )
|
18 | 17 |
|
19 |
| -Chef::Log.info("#{BLUE}#{PREFIX} π₯ Downloading pyenv installer to #{pyenv_installer_path}#{RESET}") |
| 18 | +Chef::Log.info("#{BLUE}#{PREFIX} Downloading pyenv installer to #{pyenv_installer_path}#{RESET}") |
20 | 19 | remote_file pyenv_installer_path do
|
21 | 20 | source node['travis_python']['pyenv_install_url']
|
22 | 21 | owner node['travis_build_environment']['user']
|
|
27 | 26 |
|
28 | 27 | ruby_block 'log_pyenv_download' do
|
29 | 28 | block do
|
30 |
| - Chef::Log.info("#{GREEN}#{PREFIX} β
Pyenv installer downloaded successfully to #{pyenv_installer_path}#{RESET}") |
| 29 | + Chef::Log.info("#{GREEN}#{PREFIX} Pyenv installer downloaded successfully to #{pyenv_installer_path}#{RESET}") |
31 | 30 | end
|
32 | 31 | action :nothing
|
33 | 32 | end
|
34 | 33 |
|
35 |
| -Chef::Log.info("#{BLUE}#{PREFIX} π§ Running pyenv installer script#{RESET}") |
| 34 | +Chef::Log.info("#{BLUE}#{PREFIX} Running pyenv installer script#{RESET}") |
36 | 35 | bash 'install_pyenv' do
|
37 | 36 | code pyenv_installer_path.to_s
|
38 | 37 | user node['travis_build_environment']['user']
|
|
47 | 46 | block do
|
48 | 47 | pyenv_path = "#{node['travis_build_environment']['home']}/.pyenv"
|
49 | 48 | if ::File.directory?(pyenv_path)
|
50 |
| - Chef::Log.info("#{GREEN}#{PREFIX} β
Pyenv successfully installed to #{pyenv_path}#{RESET}") |
| 49 | + Chef::Log.info("#{GREEN}#{PREFIX} Pyenv successfully installed to #{pyenv_path}#{RESET}") |
51 | 50 | else
|
52 |
| - Chef::Log.error("#{RED}#{PREFIX} β Failed to install pyenv to #{pyenv_path}#{RESET}") |
| 51 | + Chef::Log.error("#{RED}#{PREFIX} Failed to install pyenv to #{pyenv_path}#{RESET}") |
53 | 52 | end
|
54 | 53 | end
|
55 | 54 | action :nothing
|
56 | 55 | end
|
57 | 56 |
|
58 |
| -Chef::Log.info("#{BLUE}#{PREFIX} π Creating symlink to pyenv at /opt/pyenv#{RESET}") |
| 57 | +Chef::Log.info("#{BLUE}#{PREFIX} Creating symlink to pyenv at /opt/pyenv#{RESET}") |
59 | 58 | link '/opt/pyenv' do
|
60 | 59 | to "#{node['travis_build_environment']['home']}/.pyenv"
|
61 | 60 | owner node['travis_build_environment']['user']
|
|
67 | 66 | ruby_block 'log_symlink_result' do
|
68 | 67 | block do
|
69 | 68 | if ::File.symlink?('/opt/pyenv')
|
70 |
| - Chef::Log.info("#{GREEN}#{PREFIX} β
Symlink to pyenv created successfully#{RESET}") |
| 69 | + Chef::Log.info("#{GREEN}#{PREFIX} Symlink to pyenv created successfully#{RESET}") |
71 | 70 | else
|
72 |
| - Chef::Log.error("#{RED}#{PREFIX} β Failed to create symlink to pyenv#{RESET}") |
| 71 | + Chef::Log.error("#{RED}#{PREFIX} Failed to create symlink to pyenv#{RESET}") |
73 | 72 | end
|
74 | 73 | end
|
75 | 74 | action :nothing
|
|
80 | 79 | '.bash_profile'
|
81 | 80 | )
|
82 | 81 |
|
83 |
| -Chef::Log.info("#{BLUE}#{PREFIX} βοΈ Adding pyenv to PATH in #{bash_profile}#{RESET}") |
| 82 | +Chef::Log.info("#{BLUE}#{PREFIX} Adding pyenv to PATH in #{bash_profile}#{RESET}") |
84 | 83 | bash 'export_path_to_pyenv' do
|
85 | 84 | code "echo 'export PATH=#{node['travis_build_environment']['home']}/.pyenv/bin:$PATH' >> #{bash_profile}"
|
86 | 85 | user node['travis_build_environment']['user']
|
|
90 | 89 |
|
91 | 90 | ruby_block 'log_path_export' do
|
92 | 91 | block do
|
93 |
| - Chef::Log.info("#{GREEN}#{PREFIX} β
Pyenv PATH export added to bash profile#{RESET}") |
| 92 | + Chef::Log.info("#{GREEN}#{PREFIX} Pyenv PATH export added to bash profile#{RESET}") |
94 | 93 | end
|
95 | 94 | action :nothing
|
96 | 95 | end
|
97 | 96 |
|
98 |
| -Chef::Log.info("#{BLUE}#{PREFIX} βοΈ Adding pyenv init to bash profile#{RESET}") |
| 97 | +Chef::Log.info("#{BLUE}#{PREFIX} Adding pyenv init to bash profile#{RESET}") |
99 | 98 | bash 'add_pyenv_init_to_bash_profile' do
|
100 | 99 | code "echo 'eval \"$(pyenv init -)\"' >> #{bash_profile}"
|
101 | 100 | user node['travis_build_environment']['user']
|
|
105 | 104 |
|
106 | 105 | ruby_block 'log_pyenv_init' do
|
107 | 106 | block do
|
108 |
| - Chef::Log.info("#{GREEN}#{PREFIX} β
Pyenv init added to bash profile#{RESET}") |
| 107 | + Chef::Log.info("#{GREEN}#{PREFIX} Pyenv init added to bash profile#{RESET}") |
109 | 108 | end
|
110 | 109 | action :nothing
|
111 | 110 | end
|
112 | 111 |
|
113 |
| -Chef::Log.info("#{BLUE}#{PREFIX} βοΈ Adding virtualenv init to bash profile#{RESET}") |
| 112 | +Chef::Log.info("#{BLUE}#{PREFIX} Adding virtualenv init to bash profile#{RESET}") |
114 | 113 | bash 'add_virtualenv_init_to_bash_profile' do
|
115 | 114 | code "echo 'eval \"$(pyenv virtualenv-init -)\"' >> #{bash_profile}"
|
116 | 115 | user node['travis_build_environment']['user']
|
|
120 | 119 |
|
121 | 120 | ruby_block 'log_virtualenv_init' do
|
122 | 121 | block do
|
123 |
| - Chef::Log.info("#{GREEN}#{PREFIX} β
Pyenv virtualenv-init added to bash profile#{RESET}") |
| 122 | + Chef::Log.info("#{GREEN}#{PREFIX} Pyenv virtualenv-init added to bash profile#{RESET}") |
124 | 123 | end
|
125 | 124 | action :nothing
|
126 | 125 | end
|
127 | 126 |
|
128 |
| -pyenv_versions = %w[ |
129 |
| - 3.7.17 |
130 |
| - 3.8.18 |
131 |
| - 3.9.19 |
132 |
| - 3.10.13 |
133 |
| - 3.11.8 |
134 |
| - 3.12.5 |
135 |
| - 3.13.0 |
136 |
| -] |
| 127 | +pyenv_versions = node['travis_build_environment']['pythons'] |
137 | 128 |
|
138 |
| -Chef::Log.info("#{MAGENTA}#{PREFIX} π Installing Python versions: #{pyenv_versions.join(', ')}#{RESET}") |
| 129 | +Chef::Log.info("#{MAGENTA}#{PREFIX} Installing Python versions: #{pyenv_versions.join(', ')}#{RESET}") |
139 | 130 | pyenv_versions.each do |version|
|
140 |
| - Chef::Log.info("#{YELLOW}#{PREFIX} β³ Starting installation of Python #{version}#{RESET}") |
| 131 | + Chef::Log.info("#{YELLOW}#{PREFIX} Starting installation of Python #{version}#{RESET}") |
141 | 132 | bash "pyenv_install_#{version}" do
|
142 | 133 | code <<-EOH
|
143 | 134 | source #{bash_profile}
|
144 |
| - echo "#{YELLOW}#{PREFIX} β³ Starting installation of Python #{version}#{RESET}" |
| 135 | + echo "#{YELLOW}#{PREFIX} Starting installation of Python #{version}#{RESET}" |
145 | 136 | pyenv install #{version}
|
146 | 137 | if pyenv versions | grep #{version}; then
|
147 |
| - echo "#{GREEN}#{PREFIX} β
Python #{version} installed successfully#{RESET}" |
| 138 | + echo "#{GREEN}#{PREFIX} Python #{version} installed successfully#{RESET}" |
148 | 139 | else
|
149 |
| - echo "#{RED}#{PREFIX} β Failed to install Python #{version}#{RESET}" |
| 140 | + echo "#{RED}#{PREFIX} Failed to install Python #{version}#{RESET}" |
150 | 141 | exit 1
|
151 | 142 | fi
|
152 | 143 | EOH
|
|
161 | 152 |
|
162 | 153 | ruby_block "log_python_#{version}_install" do
|
163 | 154 | block do
|
164 |
| - Chef::Log.info("#{GREEN}#{PREFIX} β
Completed installation attempt of Python #{version}#{RESET}") |
| 155 | + Chef::Log.info("#{GREEN}#{PREFIX} Completed installation attempt of Python #{version}#{RESET}") |
165 | 156 | end
|
166 | 157 | action :nothing
|
167 | 158 | end
|
168 | 159 | end
|
169 | 160 |
|
170 |
| -Chef::Log.info("#{BLUE}#{PREFIX} π Setting global Python version to 3.8.18#{RESET}") |
171 |
| -bash 'pyenv_global_set_to_3.8.18' do |
| 161 | +global_python = node['travis_build_environment']['global_python'] |
| 162 | + |
| 163 | +Chef::Log.info("#{BLUE}#{PREFIX} Setting global Python version to #{global_python}#{RESET}") |
| 164 | +bash 'pyenv_global_set' do |
172 | 165 | code <<-EOH
|
173 | 166 | source #{bash_profile}
|
174 |
| - pyenv global 3.8.18 |
175 |
| - echo "#{BLUE}#{PREFIX} π Current Python version: $(python --version)#{RESET}" |
176 |
| - if [[ "$(python --version 2>&1)" == *"3.8.18"* ]]; then |
177 |
| - echo "#{GREEN}#{PREFIX} β
Successfully set global Python version to 3.8.18#{RESET}" |
| 167 | + pyenv global #{global_python} |
| 168 | + echo "#{BLUE}#{PREFIX} Current Python version: $(python --version)#{RESET}" |
| 169 | + if [[ "$(python --version 2>&1)" == *"#{global_python}"* ]]; then |
| 170 | + echo "#{GREEN}#{PREFIX} Successfully set global Python version to #{global_python}#{RESET}" |
178 | 171 | else
|
179 |
| - echo "#{RED}#{PREFIX} β Failed to set global Python version to 3.8.18#{RESET}" |
| 172 | + echo "#{RED}#{PREFIX} Failed to set global Python version to #{global_python}#{RESET}" |
180 | 173 | exit 1
|
181 | 174 | fi
|
182 | 175 | EOH
|
|
191 | 184 |
|
192 | 185 | ruby_block 'log_global_python' do
|
193 | 186 | block do
|
194 |
| - Chef::Log.info("#{GREEN}#{PREFIX} β
Global Python version set to 3.8.18#{RESET}") |
| 187 | + Chef::Log.info("#{GREEN}#{PREFIX} Global Python version set to #{global_python}#{RESET}") |
195 | 188 | end
|
196 | 189 | action :nothing
|
197 | 190 | end
|
198 | 191 |
|
199 |
| -Chef::Log.info("#{BLUE}#{PREFIX} π¦ Installing virtualenv#{RESET}") |
| 192 | +Chef::Log.info("#{BLUE}#{PREFIX} Installing virtualenv#{RESET}") |
200 | 193 | bash 'pip_install_virtualenv' do
|
201 | 194 | code <<-EOH
|
202 | 195 | source #{bash_profile}
|
203 |
| - echo "#{BLUE}#{PREFIX} π¦ Installing virtualenv 15.1.0#{RESET}" |
| 196 | + echo "#{BLUE}#{PREFIX} Installing virtualenv 15.1.0#{RESET}" |
204 | 197 | pip install virtualenv==15.1.0
|
205 | 198 | if pip list | grep virtualenv; then
|
206 |
| - echo "#{GREEN}#{PREFIX} β
Virtualenv 15.1.0 installed successfully#{RESET}" |
| 199 | + echo "#{GREEN}#{PREFIX} Virtualenv 15.1.0 installed successfully#{RESET}" |
207 | 200 | else
|
208 |
| - echo "#{RED}#{PREFIX} β Failed to install virtualenv#{RESET}" |
| 201 | + echo "#{RED}#{PREFIX} Failed to install virtualenv#{RESET}" |
209 | 202 | exit 1
|
210 | 203 | fi
|
211 | 204 | EOH
|
|
220 | 213 |
|
221 | 214 | ruby_block 'log_virtualenv_install' do
|
222 | 215 | block do
|
223 |
| - Chef::Log.info("#{GREEN}#{PREFIX} β
Virtualenv installation completed#{RESET}") |
| 216 | + Chef::Log.info("#{GREEN}#{PREFIX} Virtualenv installation completed#{RESET}") |
224 | 217 | end
|
225 | 218 | action :nothing
|
226 | 219 | end
|
227 | 220 |
|
228 |
| -Chef::Log.info("#{CYAN}#{PREFIX} π Pyenv and Python installation process completed#{RESET}") |
| 221 | +Chef::Log.info("#{CYAN}#{PREFIX} Pyenv and Python installation process completed#{RESET}") |
229 | 222 |
|
230 | 223 | ruby_block 'verify_full_installation' do
|
231 | 224 | block do
|
232 |
| - Chef::Log.info("#{MAGENTA}#{PREFIX} π Verifying full installation#{RESET}") |
| 225 | + Chef::Log.info("#{MAGENTA}#{PREFIX} Verifying full installation#{RESET}") |
233 | 226 | pyenv_installed = ::File.directory?("#{node['travis_build_environment']['home']}/.pyenv")
|
234 | 227 | symlink_created = ::File.symlink?('/opt/pyenv')
|
235 | 228 |
|
236 |
| - Chef::Log.info("#{pyenv_installed ? GREEN : RED}#{PREFIX} πΉ Pyenv installed: #{pyenv_installed ? 'β
' : 'β'}#{RESET}") |
237 |
| - Chef::Log.info("#{symlink_created ? GREEN : RED}#{PREFIX} πΉ Symlink created: #{symlink_created ? 'β
' : 'β'}#{RESET}") |
| 229 | + Chef::Log.info("#{pyenv_installed ? GREEN : RED}#{PREFIX} Pyenv installed: #{pyenv_installed ? 'success' : 'failure'}#{RESET}") |
| 230 | + Chef::Log.info("#{symlink_created ? GREEN : RED}#{PREFIX} Symlink created: #{symlink_created ? 'success' : 'failure'}#{RESET}") |
238 | 231 |
|
239 | 232 | if pyenv_installed && symlink_created
|
240 |
| - Chef::Log.info("#{GREEN}#{PREFIX} π Installation verification passed#{RESET}") |
| 233 | + Chef::Log.info("#{GREEN}#{PREFIX} Installation verification passed#{RESET}") |
241 | 234 | else
|
242 |
| - Chef::Log.error("#{RED}#{PREFIX} β Installation verification failed#{RESET}") |
| 235 | + Chef::Log.error("#{RED}#{PREFIX} Installation verification failed#{RESET}") |
243 | 236 | end
|
244 | 237 | end
|
245 | 238 | action :run
|
246 | 239 | end
|
247 | 240 |
|
248 |
| -# Final installation report |
249 | 241 | ruby_block 'installation_summary' do
|
250 | 242 | block do
|
251 | 243 | puts "\n"
|
252 | 244 | puts "#{MAGENTA}#{PREFIX} =============================================#{RESET}"
|
253 |
| - puts "#{MAGENTA}#{PREFIX} π― PYENV INSTALLATION SUMMARY#{RESET}" |
| 245 | + puts "#{MAGENTA}#{PREFIX} PYENV INSTALLATION SUMMARY#{RESET}" |
254 | 246 | puts "#{MAGENTA}#{PREFIX} =============================================#{RESET}"
|
255 |
| - puts "#{BLUE}#{PREFIX} π Pyenv location: #{node['travis_build_environment']['home']}/.pyenv#{RESET}" |
256 |
| - puts "#{BLUE}#{PREFIX} π Symlink: /opt/pyenv#{RESET}" |
257 |
| - puts "#{BLUE}#{PREFIX} π Python versions installed: #{pyenv_versions.join(', ')}#{RESET}" |
258 |
| - puts "#{BLUE}#{PREFIX} π Global Python version: 3.8.18#{RESET}" |
259 |
| - puts "#{BLUE}#{PREFIX} π Bash profile: #{bash_profile}#{RESET}" |
| 247 | + puts "#{BLUE}#{PREFIX} Pyenv location: #{node['travis_build_environment']['home']}/.pyenv#{RESET}" |
| 248 | + puts "#{BLUE}#{PREFIX} Symlink: /opt/pyenv#{RESET}" |
| 249 | + puts "#{BLUE}#{PREFIX} Python versions installed: #{pyenv_versions.join(', ')}#{RESET}" |
| 250 | + puts "#{BLUE}#{PREFIX} Global Python version: #{global_python}#{RESET}" |
| 251 | + puts "#{BLUE}#{PREFIX} Bash profile: #{bash_profile}#{RESET}" |
260 | 252 | puts "#{MAGENTA}#{PREFIX} =============================================#{RESET}"
|
261 | 253 | puts "\n"
|
262 | 254 | end
|
|
0 commit comments