tvalentyn commented on a change in pull request #16457:
URL: https://github.com/apache/beam/pull/16457#discussion_r784335180



##########
File path: .test-infra/tools/python_installer.sh
##########
@@ -0,0 +1,92 @@
+#!/usr/bin/env bash
+#
+#    Licensed to the Apache Software Foundation (ASF) under one or more
+#    contributor license agreements.  See the NOTICE file distributed with
+#    this work for additional information regarding copyright ownership.
+#    The ASF licenses this file to You under the Apache License, Version 2.0
+#    (the "License"); you may not use this file except in compliance with
+#    the License.  You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS,
+#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#    See the License for the spefic language governing permissions and
+#    limitations under the License.
+#
+#    Python version 3.6.13-3.7.10-3.8.9-3.9.4 installer via pyenv.

Review comment:
       We can remove the versions from this comment so that we don't have to 
keep them in sync with line 23.

##########
File path: .test-infra/tools/README.md
##########
@@ -0,0 +1,61 @@
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+
+> **PLEASE update this file if you add a new tool or update an existing one**
+
+## Tools
+
+- [Python installer](#python-installer)
+
+### Python installer
+
+It is a tool that installs pyenv and its dependencies, as well as different
+versions of python through pyenv. It was developed during the Ubuntu update
+of the Jenkins image.
+
+**Warning:** This tool was conceived to install pyenv and python versions in a 
clean

Review comment:
       what do you mean by a clean environment?

##########
File path: .test-infra/tools/python_installer.sh
##########
@@ -0,0 +1,92 @@
+#!/usr/bin/env bash
+#
+#    Licensed to the Apache Software Foundation (ASF) under one or more
+#    contributor license agreements.  See the NOTICE file distributed with
+#    this work for additional information regarding copyright ownership.
+#    The ASF licenses this file to You under the Apache License, Version 2.0
+#    (the "License"); you may not use this file except in compliance with
+#    the License.  You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS,
+#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#    See the License for the spefic language governing permissions and
+#    limitations under the License.
+#
+#    Python version 3.6.13-3.7.10-3.8.9-3.9.4 installer via pyenv.
+#
+set -euo pipefail
+
+# Variable containing the python versions to install
+python_versions_arr=("3.6.13" "3.7.10" "3.8.9" "3.9.4")
+
+# Install pyenv dependencies.
+pyenv_dep(){
+  sudo apt-get update -y
+  sudo apt-get install -y make build-essential libssl-dev zlib1g-dev \
+libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
+libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev 
liblzma-dev
+}
+
+# Install pyenv, delete previous version if needed.
+pyenv_install(){
+  if [[ -d "$HOME"/.pyenv/ ]]; then
+    sudo rm -r "$HOME"/.pyenv
+  fi
+  if [[ -e "$HOME"/pyenv_installer.sh ]]; then
+    sudo rm "$HOME"/pyenv_installer.sh
+  fi
+  curl https://pyenv.run > "$HOME"/pyenv_installer.sh
+  chmod +x "$HOME"/pyenv_installer.sh
+  "$HOME"/pyenv_installer.sh
+}
+
+# Setting pyenv in User environment, PATH.
+pyenv_post_install(){
+  if ! < "$HOME"/.bashrc grep -q "# pyenv Config" ; then
+    {
+      echo '# pyenv Config'
+      echo 'export PYENV_ROOT="$HOME/.pyenv"'
+      echo 'export PATH="$PYENV_ROOT/bin:$PATH"'
+      echo 'if which pyenv > /dev/null; then'
+      echo '  eval "$(pyenv init -)"'
+      echo '  eval "$(pyenv init --path)"'
+      echo '  eval "$(pyenv virtualenv-init -)"'
+      echo 'fi'
+    } >> "$HOME"/.bashrc
+  fi
+}
+
+# Install python versions with pyenv
+pyenv_versions_install(){
+  arr=("$@")
+  for version in "${arr[@]}"; do
+    "$HOME"/.pyenv/bin/pyenv install "$version"
+  done
+}
+
+# Setting python versions globally 
+python_versions_setglobally(){
+  "$HOME"/.pyenv/bin/pyenv global "$@"
+}
+
+# Remove pyenv script installer
+clean(){
+  sudo rm "$HOME"/pyenv_installer.sh
+  echo -e "\nRestart your shell so the path changes take effect"
+  echo "    'exec $SHELL'" 
+}
+
+# Install pyenv environment with python versions
+pyenv(){
+  pyenv_dep
+  pyenv_install
+  pyenv_post_install
+  pyenv_versions_install "${python_versions_arr[@]}"
+  python_versions_setglobally "${python_versions_arr[@]}"
+  clean
+}
+
+pyenv

Review comment:
       let's pick a different name to avoid a collision with pyenv itself

##########
File path: .test-infra/tools/README.md
##########
@@ -0,0 +1,61 @@
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one

Review comment:
       Thanks a lot!
   Let's advertise this script on https://s.apache.org/beam-python-dev-wiki 
and/or Jenkins portion of the Wiki once this is merged and document what would 
it take to install a new Python version using this script.
   
   




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to