diff --git a/.kokoro/docker/Dockerfile b/.kokoro/docker/Dockerfile new file mode 100644 index 00000000000..cb2e323b501 --- /dev/null +++ b/.kokoro/docker/Dockerfile @@ -0,0 +1,161 @@ +# Copyright 2020 Google LLC +# +# Licensed 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. + +FROM ubuntu:16.04 + +ENV DEBIAN_FRONTEND noninteractive + +# Ensure local Python is preferred over distribution Python. +ENV PATH /usr/local/bin:$PATH + +# http://bugs.python.org/issue19846 +# At the moment, setting "LANG=C" on a Linux system fundamentally breaks +# Python 3. +ENV LANG C.UTF-8 + +# Install dependencies. +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + apt-transport-https \ + build-essential \ + ca-certificates \ + curl \ + git \ + graphviz \ + libbz2-dev \ + libdb5.3-dev \ + libexpat1-dev \ + libffi-dev \ + liblzma-dev \ + libmagickwand-dev \ + libreadline-dev \ + libsnappy-dev \ + libssl-dev \ + libsqlite3-dev \ + portaudio19-dev \ + redis-server \ + software-properties-common \ + ssh \ + sudo \ + tcl \ + tcl-dev \ + tk \ + tk-dev \ + uuid-dev \ + wget \ + zlib1g-dev \ + && apt-get clean autoclean \ + && apt-get autoremove -y \ + && rm -rf /var/lib/apt/lists/* \ + && rm -f /var/cache/apt/archives/*.deb + +# Install docker +RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - + +RUN add-apt-repository \ + "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ + $(lsb_release -cs) \ + stable" + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + docker-ce \ + && apt-get clean autoclean \ + && apt-get autoremove -y \ + && rm -rf /var/lib/apt/lists/* \ + && rm -f /var/cache/apt/archives/*.deb + +# Install Microsoft ODBC 17 Driver and unixodbc for testing SQL Server samples +RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \ + && curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list \ + && apt-get update \ + && ACCEPT_EULA=Y apt-get install -y --no-install-recommends \ + msodbcsql17 \ + unixodbc-dev \ + && apt-get clean autoclean \ + && apt-get autoremove -y \ + && rm -rf /var/lib/apt/lists/* \ + && rm -f /var/cache/apt/archives/*.deb + +# Install the desired versions of Python. +RUN for PYTHON_VERSION in 2.7.17 3.6.9 3.7.5 3.8.0; do \ + set -ex \ + && wget --no-check-certificate -O python-${PYTHON_VERSION}.tar.xz "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz" \ + && wget --no-check-certificate -O python-${PYTHON_VERSION}.tar.xz.asc "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc" \ + && export GNUPGHOME="$(mktemp -d)" \ + && gpg --keyserver ha.pool.sks-keyservers.net --recv-keys \ + # 2.7.17 (Benjamin Peterson) + C01E1CAD5EA2C4F0B8E3571504C367C218ADD4FF \ + # 3.4.10, 3.5.9 (Larry Hastings) + 97FC712E4C024BBEA48A61ED3A5CA953F73C700D \ + # 3.6.9, 3.7.5 (Ned Deily) + 0D96DF4D4110E5C43FBFB17F2D347EA6AA65421D \ + # 3.8.0 (Ɓukasz Langa) + E3FF2839C048B25C084DEBE9B26995E310250568 \ + && gpg --batch --verify python-${PYTHON_VERSION}.tar.xz.asc python-${PYTHON_VERSION}.tar.xz \ + && rm -r "$GNUPGHOME" python-${PYTHON_VERSION}.tar.xz.asc \ + && mkdir -p /usr/src/python-${PYTHON_VERSION} \ + && tar -xJC /usr/src/python-${PYTHON_VERSION} --strip-components=1 -f python-${PYTHON_VERSION}.tar.xz \ + && rm python-${PYTHON_VERSION}.tar.xz \ + && cd /usr/src/python-${PYTHON_VERSION} \ + && ./configure \ + --enable-shared \ + # This works only on Python 2.7 and throws a warning on every other + # version, but seems otherwise harmless. + --enable-unicode=ucs4 \ + --with-system-ffi \ + --without-ensurepip \ + && make -j$(nproc) \ + && make install \ + && ldconfig \ + ; done \ + && rm -rf /usr/src/python* \ + && rm -rf ~/.cache/ + + +# Install pip on Python 3.6 only. +# If the environment variable is called "PIP_VERSION", pip explodes with +# "ValueError: invalid truth value ''" +ENV PYTHON_PIP_VERSION 10.0.1 +RUN wget --no-check-certificate -O /tmp/get-pip.py 'https://bootstrap.pypa.io/get-pip.py' \ + && python3.6 /tmp/get-pip.py "pip==$PYTHON_PIP_VERSION" \ + # we use "--force-reinstall" for the case where the version of pip we're trying to install is the same as the version bundled with Python + # ("Requirement already up-to-date: pip==8.1.2 in /usr/local/lib/python3.6/site-packages") + # https://github.com/docker-library/python/pull/143#issuecomment-241032683 + && pip3 install --no-cache-dir --upgrade --force-reinstall "pip==$PYTHON_PIP_VERSION" \ + # then we use "pip list" to ensure we don't have more than one pip version installed + # https://github.com/docker-library/python/pull/100 + && [ "$(pip list |tac|tac| awk -F '[ ()]+' '$1 == "pip" { print $2; exit }')" = "$PYTHON_PIP_VERSION" ] + +# Ensure Pip for 3.8.0 +RUN python3.8 /tmp/get-pip.py +RUN rm /tmp/get-pip.py + +# Install "virtualenv", since the vast majority of users of this image +# will want it. +RUN pip install --no-cache-dir virtualenv + +# Setup Cloud SDK +ENV CLOUD_SDK_VERSION 272.0.0 +# Use system python for cloud sdk. +ENV CLOUDSDK_PYTHON python3.6 +RUN wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-$CLOUD_SDK_VERSION-linux-x86_64.tar.gz +RUN tar xzf google-cloud-sdk-$CLOUD_SDK_VERSION-linux-x86_64.tar.gz +RUN /google-cloud-sdk/install.sh +ENV PATH /google-cloud-sdk/bin:$PATH + +# Enable redis-server on boot. +RUN sudo systemctl enable redis-server.service + +CMD ["python3.6"] diff --git a/.kokoro/docker/cloudbuild.yaml b/.kokoro/docker/cloudbuild.yaml new file mode 100644 index 00000000000..a9970bc6c6e --- /dev/null +++ b/.kokoro/docker/cloudbuild.yaml @@ -0,0 +1,24 @@ +# Copyright 2020 Google LLC +# +# Licensed 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. + +timeout: 7200s # 2 hours + +steps: + - name: 'gcr.io/cloud-builders/docker' + args: ['build', '-t', 'gcr.io/$PROJECT_ID/python-samples-testing-docker', '.'] + dir: '.kokoro/docker' + - name: gcr.io/cloud-builders/docker + args: ['tag', 'gcr.io/$PROJECT_ID/python-samples-testing-docker', 'gcr.io/$PROJECT_ID/python-samples-testing-docker:$SHORT_SHA'] +images: + - 'gcr.io/$PROJECT_ID/python-samples-testing-docker'