Skip to content

Commit 21c6082

Browse files
Merge pull request #878 from travis-ci/km-TDOC-18-V2
Add support for Python 3.12 and 3.13
2 parents 7092e9a + c9390db commit 21c6082

File tree

2 files changed

+184
-12
lines changed

2 files changed

+184
-12
lines changed

cookbooks/travis_ci_freebsd_14/attributes/default.rb

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,21 @@
2525
pythons = %w[
2626
3.7.17
2727
3.8.18
28-
3.9.18
29-
3.12.4
28+
3.9.19
29+
3.10.13
30+
3.11.8
31+
3.12.5
32+
3.13.0
3033
]
3134

3235
override['travis_build_environment']['go']['versions'] = go_versions
3336
override['travis_build_environment']['go']['default_version'] = go_versions.max
3437

3538
override['travis_build_environment']['pythons'] = pythons
39+
40+
# Ustaw globalną wersję Pythona jako atrybut
41+
override['travis_build_environment']['global_python'] = '3.8.18'
42+
3643
override['travis_build_environment']['python_aliases'] = {
3744
'2.7.15' => %w[2.7],
3845
'3.6.10' => %w[3.6],
Lines changed: 175 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,91 +1,256 @@
11
# frozen_string_literal: true
22

3+
RED = "\e[31m"
4+
GREEN = "\e[32m"
5+
YELLOW = "\e[33m"
6+
BLUE = "\e[34m"
7+
MAGENTA = "\e[35m"
8+
CYAN = "\e[36m"
9+
RESET = "\e[0m"
10+
PREFIX = "[PYENV-SETUP]"
11+
12+
Chef::Log.info("#{CYAN}#{PREFIX} Starting pyenv installation process#{RESET}")
13+
314
pyenv_installer_path = ::File.join(
415
Chef::Config[:file_cache_path], 'pyenv-installer'
516
)
617

18+
Chef::Log.info("#{BLUE}#{PREFIX} Downloading pyenv installer to #{pyenv_installer_path}#{RESET}")
719
remote_file pyenv_installer_path do
820
source node['travis_python']['pyenv_install_url']
921
owner node['travis_build_environment']['user']
1022
group node['travis_build_environment']['group']
1123
mode 0o755
24+
notifies :run, 'ruby_block[log_pyenv_download]', :immediately
25+
end
26+
27+
ruby_block 'log_pyenv_download' do
28+
block do
29+
Chef::Log.info("#{GREEN}#{PREFIX} Pyenv installer downloaded successfully to #{pyenv_installer_path}#{RESET}")
30+
end
31+
action :nothing
1232
end
1333

34+
Chef::Log.info("#{BLUE}#{PREFIX} Running pyenv installer script#{RESET}")
1435
bash 'install_pyenv' do
1536
code pyenv_installer_path.to_s
1637
user node['travis_build_environment']['user']
1738
group node['travis_build_environment']['group']
1839
environment('HOME' => node['travis_build_environment']['home'])
1940
retries 2
2041
retry_delay 30
42+
notifies :run, 'ruby_block[log_pyenv_install_result]', :immediately
2143
end
2244

45+
ruby_block 'log_pyenv_install_result' do
46+
block do
47+
pyenv_path = "#{node['travis_build_environment']['home']}/.pyenv"
48+
if ::File.directory?(pyenv_path)
49+
Chef::Log.info("#{GREEN}#{PREFIX} Pyenv successfully installed to #{pyenv_path}#{RESET}")
50+
else
51+
Chef::Log.error("#{RED}#{PREFIX} Failed to install pyenv to #{pyenv_path}#{RESET}")
52+
end
53+
end
54+
action :nothing
55+
end
56+
57+
Chef::Log.info("#{BLUE}#{PREFIX} Creating symlink to pyenv at /opt/pyenv#{RESET}")
2358
link '/opt/pyenv' do
2459
to "#{node['travis_build_environment']['home']}/.pyenv"
2560
owner node['travis_build_environment']['user']
2661
group node['travis_build_environment']['group']
2762
mode 0o755
63+
notifies :run, 'ruby_block[log_symlink_result]', :immediately
64+
end
65+
66+
ruby_block 'log_symlink_result' do
67+
block do
68+
if ::File.symlink?('/opt/pyenv')
69+
Chef::Log.info("#{GREEN}#{PREFIX} Symlink to pyenv created successfully#{RESET}")
70+
else
71+
Chef::Log.error("#{RED}#{PREFIX} Failed to create symlink to pyenv#{RESET}")
72+
end
73+
end
74+
action :nothing
2875
end
2976

3077
bash_profile = ::File.join(
3178
node['travis_build_environment']['home'],
3279
'.bash_profile'
3380
)
3481

82+
Chef::Log.info("#{BLUE}#{PREFIX} Adding pyenv to PATH in #{bash_profile}#{RESET}")
3583
bash 'export_path_to_pyenv' do
3684
code "echo 'export PATH=#{node['travis_build_environment']['home']}/.pyenv/bin:$PATH' >> #{bash_profile}"
3785
user node['travis_build_environment']['user']
3886
group node['travis_build_environment']['group']
87+
notifies :run, 'ruby_block[log_path_export]', :immediately
88+
end
89+
90+
ruby_block 'log_path_export' do
91+
block do
92+
Chef::Log.info("#{GREEN}#{PREFIX} Pyenv PATH export added to bash profile#{RESET}")
93+
end
94+
action :nothing
3995
end
4096

97+
Chef::Log.info("#{BLUE}#{PREFIX} Adding pyenv init to bash profile#{RESET}")
4198
bash 'add_pyenv_init_to_bash_profile' do
4299
code "echo 'eval \"$(pyenv init -)\"' >> #{bash_profile}"
43100
user node['travis_build_environment']['user']
44101
group node['travis_build_environment']['group']
102+
notifies :run, 'ruby_block[log_pyenv_init]', :immediately
45103
end
46104

105+
ruby_block 'log_pyenv_init' do
106+
block do
107+
Chef::Log.info("#{GREEN}#{PREFIX} Pyenv init added to bash profile#{RESET}")
108+
end
109+
action :nothing
110+
end
111+
112+
Chef::Log.info("#{BLUE}#{PREFIX} Adding virtualenv init to bash profile#{RESET}")
47113
bash 'add_virtualenv_init_to_bash_profile' do
48114
code "echo 'eval \"$(pyenv virtualenv-init -)\"' >> #{bash_profile}"
49115
user node['travis_build_environment']['user']
50116
group node['travis_build_environment']['group']
117+
notifies :run, 'ruby_block[log_virtualenv_init]', :immediately
51118
end
52119

120+
ruby_block 'log_virtualenv_init' do
121+
block do
122+
Chef::Log.info("#{GREEN}#{PREFIX} Pyenv virtualenv-init added to bash profile#{RESET}")
123+
end
124+
action :nothing
125+
end
53126

54-
pyenv_versions = %w[
55-
3.7.6
56-
3.8.1
57-
3.9.16
58-
3.10.9
59-
]
127+
pyenv_versions = node['travis_build_environment']['pythons']
60128

129+
Chef::Log.info("#{MAGENTA}#{PREFIX} Installing Python versions: #{pyenv_versions.join(', ')}#{RESET}")
61130
pyenv_versions.each do |version|
131+
Chef::Log.info("#{YELLOW}#{PREFIX} Starting installation of Python #{version}#{RESET}")
62132
bash "pyenv_install_#{version}" do
63-
code "source #{bash_profile} && pyenv install #{version}"
133+
code <<-EOH
134+
source #{bash_profile}
135+
echo "#{YELLOW}#{PREFIX} Starting installation of Python #{version}#{RESET}"
136+
pyenv install #{version}
137+
if pyenv versions | grep #{version}; then
138+
echo "#{GREEN}#{PREFIX} Python #{version} installed successfully#{RESET}"
139+
else
140+
echo "#{RED}#{PREFIX} Failed to install Python #{version}#{RESET}"
141+
exit 1
142+
fi
143+
EOH
64144
user node['travis_build_environment']['user']
65145
group node['travis_build_environment']['group']
66146
environment(
67147
'HOME' => node['travis_build_environment']['home'],
68148
'PATH' => ENV.fetch('PATH', nil)
69149
)
150+
notifies :run, "ruby_block[log_python_#{version}_install]", :immediately
151+
end
152+
153+
ruby_block "log_python_#{version}_install" do
154+
block do
155+
Chef::Log.info("#{GREEN}#{PREFIX} Completed installation attempt of Python #{version}#{RESET}")
156+
end
157+
action :nothing
70158
end
71159
end
72160

73-
bash 'pyenv_global_set_to_3.8.1' do
74-
code "source #{bash_profile} && pyenv global 3.8.1"
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
165+
code <<-EOH
166+
source #{bash_profile}
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}"
171+
else
172+
echo "#{RED}#{PREFIX} Failed to set global Python version to #{global_python}#{RESET}"
173+
exit 1
174+
fi
175+
EOH
75176
user node['travis_build_environment']['user']
76177
group node['travis_build_environment']['group']
77178
environment(
78179
'HOME' => node['travis_build_environment']['home'],
79180
'PATH' => ENV.fetch('PATH', nil)
80181
)
182+
notifies :run, 'ruby_block[log_global_python]', :immediately
81183
end
82184

185+
ruby_block 'log_global_python' do
186+
block do
187+
Chef::Log.info("#{GREEN}#{PREFIX} Global Python version set to #{global_python}#{RESET}")
188+
end
189+
action :nothing
190+
end
191+
192+
Chef::Log.info("#{BLUE}#{PREFIX} Installing virtualenv#{RESET}")
83193
bash 'pip_install_virtualenv' do
84-
code "source #{bash_profile} && pip install virtualenv==15.1.0"
194+
code <<-EOH
195+
source #{bash_profile}
196+
echo "#{BLUE}#{PREFIX} Installing virtualenv 15.1.0#{RESET}"
197+
pip install virtualenv==15.1.0
198+
if pip list | grep virtualenv; then
199+
echo "#{GREEN}#{PREFIX} Virtualenv 15.1.0 installed successfully#{RESET}"
200+
else
201+
echo "#{RED}#{PREFIX} Failed to install virtualenv#{RESET}"
202+
exit 1
203+
fi
204+
EOH
85205
user node['travis_build_environment']['user']
86206
group node['travis_build_environment']['group']
87207
environment(
88208
'HOME' => node['travis_build_environment']['home'],
89209
'PATH' => ENV.fetch('PATH', nil)
90210
)
211+
notifies :run, 'ruby_block[log_virtualenv_install]', :immediately
212+
end
213+
214+
ruby_block 'log_virtualenv_install' do
215+
block do
216+
Chef::Log.info("#{GREEN}#{PREFIX} Virtualenv installation completed#{RESET}")
217+
end
218+
action :nothing
219+
end
220+
221+
Chef::Log.info("#{CYAN}#{PREFIX} Pyenv and Python installation process completed#{RESET}")
222+
223+
ruby_block 'verify_full_installation' do
224+
block do
225+
Chef::Log.info("#{MAGENTA}#{PREFIX} Verifying full installation#{RESET}")
226+
pyenv_installed = ::File.directory?("#{node['travis_build_environment']['home']}/.pyenv")
227+
symlink_created = ::File.symlink?('/opt/pyenv')
228+
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}")
231+
232+
if pyenv_installed && symlink_created
233+
Chef::Log.info("#{GREEN}#{PREFIX} Installation verification passed#{RESET}")
234+
else
235+
Chef::Log.error("#{RED}#{PREFIX} Installation verification failed#{RESET}")
236+
end
237+
end
238+
action :run
239+
end
240+
241+
ruby_block 'installation_summary' do
242+
block do
243+
puts "\n"
244+
puts "#{MAGENTA}#{PREFIX} =============================================#{RESET}"
245+
puts "#{MAGENTA}#{PREFIX} PYENV INSTALLATION SUMMARY#{RESET}"
246+
puts "#{MAGENTA}#{PREFIX} =============================================#{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}"
252+
puts "#{MAGENTA}#{PREFIX} =============================================#{RESET}"
253+
puts "\n"
254+
end
255+
action :run
91256
end

0 commit comments

Comments
 (0)