blob: 8b042f18b88d638a27e3dcedcfe2bdaf047d7c25 [file] [log] [blame]
#!/usr/bin/env bash
# Copyright 2020-2021 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
cd $(dirname "$0")
# Get target OS and version
if [ -z "${1}" ]; then
echo "Make sure that \$1 ($1) is set."
exit 1
fi
export TARGET=`echo "$1" | sed 's#:#-#g'`
TARGET_VERSION=`echo $TARGET | cut -d- -f2`
TARGET_OS=`echo $TARGET | cut -d- -f1`
export TAG=${TAG:-$(git describe --match=v*)}
if [ -z "${BAZEL_VERSION}" ]; then
echo "Make sure that \$BAZEL_VERSION ($BAZEL_VERSION) is set."
echo " (try 'source ../.github/settings.sh')"
exit 1
fi
if [ -z "${BAZEL_OPTS}" ]; then
echo "Make sure that \$BAZEL_OPTS ($BAZEL_OPTS) is set."
echo " (try 'source ../.github/settings.sh')"
exit 1
fi
if [ -z "${BAZEL_CXXOPTS}" ]; then
echo "Make sure that \$BAZEL_CXXOPTS ($BAZEL_CXXOPTS) is set."
echo " (try 'source ../.github/settings.sh')"
exit 1
fi
# Generate the Dockerfile
OUT_DIR=${TARGET_OS}-${TARGET_VERSION}
# Basic tools
mkdir -p "${OUT_DIR}"
sed "s#${TARGET_OS}:VERSION#${TARGET_OS}:${TARGET_VERSION}#g" ${TARGET_OS}.dockerfile > ${OUT_DIR}/Dockerfile
case "$TARGET_OS" in
ubuntu)
# Compiler
[ "$TARGET_VERSION" = xenial ] || [ "$TARGET_VERSION" = bionic ] && _version="$TARGET_VERSION" || _version="common"
cat ${TARGET_OS}/${_version}/compiler.dockerstage >> ${OUT_DIR}/Dockerfile
# Use local flex/bison on Jammy
if [ "$TARGET_VERSION" = jammy ]; then
BAZEL_OPTS="${BAZEL_OPTS} --//bazel:use_local_flex_bison"
echo 'RUN apt-get install -y flex bison' >> ${OUT_DIR}/Dockerfile
fi
# Bazel
cat ${TARGET_OS}/common/bazel.dockerstage >> ${OUT_DIR}/Dockerfile
;;
centos)
# Compiler
cat ${TARGET_OS}/common/compiler.dockerstage >> ${OUT_DIR}/Dockerfile
# Bazel
cat ${TARGET_OS}/common/bazel.dockerstage >> ${OUT_DIR}/Dockerfile
;;
esac
# gflags2man
cat gflags2man.dockerstage >> ${OUT_DIR}/Dockerfile
# ==================================================================
REPO_SLUG=${GITHUB_REPOSITORY_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)}
# Build Verible
cat >> ${OUT_DIR}/Dockerfile <<EOF
ENV BAZEL_OPTS "${BAZEL_OPTS}"
ENV BAZEL_CXXOPTS "${BAZEL_CXXOPTS}"
ENV REPO_SLUG $REPO_SLUG
ENV GIT_VERSION $GIT_VERSION
ENV GIT_DATE $GIT_DATE
ENV GIT_HASH $GIT_HASH
RUN which bazel
RUN bazel --version
ADD verible-$GIT_VERSION.tar.gz /src/verible
WORKDIR /src/verible/verible-$GIT_VERSION
RUN bazel build --workspace_status_command=bazel/build-version.py $BAZEL_OPTS //...
EOF
(cd .. ; git archive --prefix verible-$GIT_VERSION/ --output releasing/$TARGET/verible-$GIT_VERSION.tar.gz HEAD)
IMAGE="verible:$TARGET-$TAG"
echo "::group::Docker file for $IMAGE"
cat $TARGET/Dockerfile
echo '::endgroup::'
echo "::group::Docker build $IMAGE"
docker build \
--tag $IMAGE \
--build-arg BAZEL_VERSION="$BAZEL_VERSION" \
--build-arg TARGET_VERSION="$TARGET_VERSION" \
$TARGET
echo '::endgroup::'
echo "::group::Build in container"
mkdir -p out
docker run --rm \
-e BAZEL_OPTS="${BAZEL_OPTS}" \
-e BAZEL_CXXOPTS="${BAZEL_CXXOPTS}" \
-e REPO_SLUG="${GITHUB_REPOSITORY_SLUG:-google/verible}" \
-e GIT_VERSION="${GIT_VERSION:-$(git describe --match=v*)}" \
-e GIT_DATE="${GIT_DATE:-$(git show -s --format=%ci)}" \
-e GIT_HASH="${GIT_HASH:-$(git rev-parse HEAD)}" \
-v $(pwd)/out:/out \
$IMAGE \
./releasing/build.sh
echo '::endgroup::'