blob: a42cdb33a1fc631429a1b4387a095867f108fb2a [file] [log] [blame]
#!/bin/bash
# Copyright 2020 The Verible Authors.
#
# 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.
set -e
DIRS=${1:-$(find -mindepth 1 -maxdepth 1 -type d)}
REPO_SLUG=${TRAVIS_REPO_SLUG:-google/verible}
GIT_DATE=${GIT_DATE:-$(git show -s --format=%ci)}
GIT_VERSION=${GIT_VERSION:-$(git describe --match=v*)}
GIT_HASH=${GIT_HASH:-$(git rev-parse HEAD)}
# Generate the docker files for ubuntu versions
for UBUNTU_VERSION in trusty xenial bionic eoan focal; do
cat > ubuntu-${UBUNTU_VERSION}/Dockerfile <<EOF
FROM ubuntu:$UBUNTU_VERSION
RUN apt-get update
RUN apt-get install -y curl gnupg software-properties-common
RUN \
curl https://bazel.build/bazel-release.pub.gpg | apt-key add - ; \
echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | tee /etc/apt/sources.list.d/bazel.list ; \
apt-get update
RUN apt-get install -y \
bazel \
build-essential \
gcc \
g++ \
file \
lsb-release \
wget \
EOF
case $UBUNTU_VERSION in
trusty)
cat >> ubuntu-${UBUNTU_VERSION}/Dockerfile <<EOF
# Get a newer GCC version
RUN add-apt-repository ppa:ubuntu-toolchain-r/test; \
apt-get update
RUN apt-get install -y \
gcc-6 \
g++-6 \
RUN ln -sf /usr/bin/gcc-6 /usr/bin/gcc
RUN ln -sf /usr/bin/g++-6 /usr/bin/g++
# Link libstdc++ statically
ENV BAZEL_LINKOPTS "-static-libstdc++:-lm"
ENV BAZEL_LINKLIBS "-l%:libstdc++.a"
EOF
;;
esac
done
# Generate the docker files for centos versions
for CENTOS_VERSION in 6 7 8; do
# Install basic tools
cat > centos-${CENTOS_VERSION}/Dockerfile <<EOF
FROM centos:$CENTOS_VERSION
RUN yum install -y \
file \
redhat-lsb \
tar \
git \
wget \
EOF
# Install compiler
case $CENTOS_VERSION in
6|7)
cat >> centos-${CENTOS_VERSION}/Dockerfile <<EOF
# Get a newer GCC version
RUN yum install -y --nogpgcheck centos-release-scl
RUN yum install -y --nogpgcheck devtoolset-7
SHELL [ "scl", "enable", "devtoolset-7" ]
# Link libstdc++ statically
ENV BAZEL_LINKOPTS "-static-libstdc++:-lm -static-libstdc++:-lrt"
ENV BAZEL_LINKLIBS "-l%:libstdc++.a"
EOF
;;
8)
cat >> centos-${CENTOS_VERSION}/Dockerfile <<EOF
# Install C++ compiler
RUN yum -y group install --nogpgcheck "Development Tools" || yum -y groupinstall --nogpgcheck "Development Tools"
RUN gcc --version
RUN g++ --version
EOF
;;
esac
# Install Bazel
cat >> centos-${CENTOS_VERSION}/Dockerfile <<EOF
# Install bazel
RUN yum install -y --nogpgcheck \
java-1.8.0-openjdk-devel \
unzip \
zip \
RUN java -version
RUN javac -version
EOF
case $CENTOS_VERSION in
6)
cat >> centos-${CENTOS_VERSION}/Dockerfile <<EOF
RUN yum install -y --nogpgcheck rh-python36
SHELL [ "scl", "enable", "rh-python36", "devtoolset-7" ]
RUN python --version
RUN python3 --version
# Build bazel
RUN wget https://github.com/bazelbuild/bazel/releases/download/2.1.0/bazel-2.1.0-dist.zip
RUN unzip bazel-2.1.0-dist.zip -d bazel-2.1.0-dist
RUN cd bazel-2.1.0-dist; ./compile.sh
RUN cp bazel-2.1.0-dist/output/bazel /usr/local/bin
RUN bazel --version
SHELL [ "scl", "enable", "devtoolset-7" ]
EOF
;;
7|8)
cat >> centos-${CENTOS_VERSION}/Dockerfile <<EOF
ADD https://copr.fedorainfracloud.org/coprs/vbatts/bazel/repo/epel-${CENTOS_VERSION}/vbatts-bazel-epel-${CENTOS_VERSION}.repo /etc/yum.repos.d
RUN yum install -y --nogpgcheck bazel
EOF
esac
# Install gflags2man
cat >> centos-${CENTOS_VERSION}/Dockerfile <<EOF
# Install gflags2man
RUN \
wget https://repo.anaconda.com/miniconda/Miniconda2-latest-Linux-x86_64.sh; \
chmod a+x Miniconda2-latest-Linux-x86_64.sh; \
./Miniconda2-latest-Linux-x86_64.sh -p /usr/local -b -f; \
conda --version
RUN which pip
RUN /usr/local/bin/pip install python-gflags
RUN chmod a+x /usr/local/bin/gflags2man.py
RUN ln -s /usr/local/bin/gflags2man.py /usr/bin/gflags2man
RUN gflags2man
EOF
done
for DFILE in $(find -name Dockerfile); do
cat >> $DFILE <<EOF
ENV REPO_SLUG $REPO_SLUG
ENV GIT_VERSION $GIT_VERSION
ENV GIT_DATE $GIT_DATE
ENV GIT_HASH $GIT_HASH
ADD verible-$GIT_VERSION.tar.gz /src/verible
WORKDIR /src/verible/verible-$GIT_VERSION
RUN bazel build --workspace_status_command=bazel/build-version.sh -c opt //...
RUN echo $REPO_SLUG
RUN echo $GIT_DATE
RUN echo $GIT_HASH
RUN echo $GIT_VERSION
RUN ./.github/travis/github-pages-setup.sh
RUN ./.github/travis/github-releases-setup.sh /out/
EOF
done
# Create archive for each docker directory
for DIR in $DIRS; do
(cd .. ; git archive --prefix verible-$GIT_VERSION/ --output Docker/$DIR/verible-$GIT_VERSION.tar.gz HEAD)
done