#!/bin/bash set -xeuo pipefail IFS=$'\n\t' CHROME_VERSION=${1:-99.0.4844.74-1} # We hard code the URL rather than using $CI_API_V4_URL $CI_PROJECT_ID, # because we would need to forward those variables CHROME_DOWNLOAD_URL_BASE="https://gitlab.com/api/v4/projects/1075790/packages/generic/google-chrome-stable" function build_debian() { if [[ $(dpkg --print-architecture) == arm64 ]]; then echo "The arm64 does not have prebuilt chrome. Using chromium instead." apt-get update -q -y apt-get install -y chromium chromium-driver apt-get autoremove -yq apt-get clean -yqq rm -rf /var/lib/apt/lists/* exit 0 fi export DEBIAN_FRONTEND=noninteractive curl -sS -L https://dl.google.com/linux/linux_signing_key.pub | apt-key add - echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >/etc/apt/sources.list.d/google.list apt-get update -q -y # Download from our package registry if we can't find the package in the apt repository echo "Searching for $CHROME_VERSION in apt repository" CHECK_VERSION=$(apt-cache show google-chrome-stable | grep Version | grep "$CHROME_VERSION") || true apt-cache policy google-chrome-stable if [[ -z $CHECK_VERSION ]]; then CHROME_DEB="google-chrome-stable_${CHROME_VERSION}_$(dpkg --print-architecture).deb" CHROME_URL="${CHROME_DOWNLOAD_URL_BASE}/${CHROME_VERSION}/${CHROME_DEB}" echo "Downloading from our Package registry: $CHROME_URL" curl --silent --show-error --fail -O $CHROME_URL dpkg -i ./$CHROME_DEB || true apt-get install -f -y rm -f $CHROME_DEB else echo "Installing via apt-get" apt-get install -y google-chrome-stable=$CHROME_VERSION fi rm -rf /var/lib/apt/lists/* # Install ChromeDriver CHROME_VERSION_BASE=$(echo $CHROME_VERSION | awk -F "." '{print $1 "." $2 "." $3}') CHROME_DRIVER_VERSION=$(curl -q https://chromedriver.storage.googleapis.com/LATEST_RELEASE_$CHROME_VERSION_BASE) wget -q https://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip unzip chromedriver_linux64.zip -d /usr/local/bin rm -f chromedriver_linux64.zip apt-get autoremove -yq apt-get clean -yqq rm -rf /var/lib/apt/lists/* rm -rf /etc/apt/sources.list.d/google*.list } function build_ubi() { UBI_VERSION=$(lsb_release -a | awk '/Release/ { print $2 }') UBI_MAJOR_VERSION=${UBI_VERSION%.*} # strip last component # Dependencies are spread across epel and CentOS 8 repos. So we temporarily # enable them. # The awk is below to strip leading and trailing spaces in the # repo file which can cause yum to blow up { awk '{$1=$1};1' | tee -a /etc/yum.repos.d/centos.repo; } <<- EOM [centos-appstream] name=CentOS-${UBI_MAJOR_VERSION}- AppStream baseurl=http://vault.centos.org/centos/8/AppStream/x86_64/os/ gpgcheck=0 enabled=1 [centos-baseos] name=CentOS-${UBI_MAJOR_VERSION}- BaseOS baseurl=http://vault.centos.org/centos/8/BaseOS/x86_64/os gpgcheck=0 enabled=1 EOM yum -y install "https://dl.fedoraproject.org/pub/epel/epel-release-latest-${UBI_MAJOR_VERSION}.noarch.rpm" if [[ ${BUILD_ARCH} == "arm64" ]]; then echo "The arm64 does not have prebuilt chrome. Using chromium instead." yum update -y yum install -y chromium chromedriver yum autoremove -y yum clean -y all rm -rf /etc/yum.repos.d/centos.repo yum remove -y epel-release exit 0 fi { awk '{$1=$1};1' | tee -a /etc/yum.repos.d/google-chrome.repo; } <<- EOM [google-chrome] name=Google Chrome baseurl=http://dl.google.com/linux/chrome/rpm/stable/$(arch) enabled=1 gpgcheck=1 repo_gpgcheck=0 gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub EOM yum update -y LATEST_VERSION_STRING=$(yum info google-chrome-stable | awk '/Version/ { print $NF}') LATEST_RELEASE_STRING=$(yum info google-chrome-stable | awk '/Release/ { print $NF}') LATEST_VERSION="${LATEST_VERSION_STRING}-${LATEST_RELEASE_STRING}" # Download from our package registry if we can't find the package in the apt repository echo "Searching for $CHROME_VERSION in apt repository" if [[ $LATEST_VERSION != ${CHROME_VERSION} ]]; then CHROME_RPM="google-chrome-stable-${CHROME_VERSION}.$(arch).rpm" CHROME_URL="${CHROME_DOWNLOAD_URL_BASE}/${CHROME_VERSION}/${CHROME_RPM}" echo "Downloading from our Package registry: $CHROME_URL" curl --silent --show-error --fail -O $CHROME_URL yum install -y ./${CHROME_RPM} || true rm -f $CHROME_RPM else echo "Installing via apt-get" yum install -y google-chrome-stable-$CHROME_VERSION fi # Install ChromeDriver CHROME_VERSION_BASE=$(echo $CHROME_VERSION | awk -F "." '{print $1 "." $2 "." $3}') CHROME_DRIVER_VERSION=$(curl -q https://chromedriver.storage.googleapis.com/LATEST_RELEASE_$CHROME_VERSION_BASE) wget -q https://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip unzip chromedriver_linux64.zip -d /usr/local/bin rm -f chromedriver_linux64.zip yum autoremove -y yum clean -y all rm -rf /etc/yum.repos.d/centos.repo rm -rf /etc/yum.repos.d/google-chrome.repo yum remove -y epel-release yum update -y --nobest } BUILD_OS=${BUILD_OS:-debian} BUILD_ARCH=${BUILD_ARCH:-amd64} if [[ $BUILD_OS =~ debian ]]; then build_debian "$@" elif [[ $BUILD_OS =~ ubi ]]; then build_ubi "$@" fi