|
| 1 | +#!/usr/bin/env bash |
| 2 | +# SPDX-License-Identifier: BSD-3-Clause |
| 3 | +# Copyright 2022, Intel Corporation |
| 4 | + |
| 5 | +# |
| 6 | +# build.sh - runs a Docker container from a Docker image with environment |
| 7 | +# prepared for running CacheLib builds and tests. It uses Docker image |
| 8 | +# tagged as described in ./images/build-image.sh. |
| 9 | +# |
| 10 | +# Notes: |
| 11 | +# - set env var 'HOST_WORKDIR' to where the root of this project is on the host machine, |
| 12 | +# - set env var 'OS' and 'OS_VER' properly to a system/Docker you want to build this |
| 13 | +# repo on (for proper values take a look at the list of Dockerfiles at the |
| 14 | +# utils/docker/images directory in this repo), e.g. OS=ubuntu, OS_VER=20.04, |
| 15 | +# - set env var 'CONTAINER_REG' to container registry address |
| 16 | +# [and possibly user/org name, and package name], e.g. "<CR_addr>/pmem/CacheLib", |
| 17 | +# - set env var 'DNS_SERVER' if you use one, |
| 18 | +# - set env var 'COMMAND' to execute specific command within Docker container or |
| 19 | +# env var 'TYPE' to pick command based on one of the predefined types of build (see below). |
| 20 | +# |
| 21 | + |
| 22 | +set -e |
| 23 | + |
| 24 | +source $(dirname ${0})/set-ci-vars.sh |
| 25 | +IMG_VER=${IMG_VER:-devel} |
| 26 | +TAG="${OS}-${OS_VER}-${IMG_VER}" |
| 27 | +IMAGE_NAME=${CONTAINER_REG}:${TAG} |
| 28 | +CONTAINER_NAME=CacheLib-${OS}-${OS_VER} |
| 29 | +WORKDIR=/CacheLib # working dir within Docker container |
| 30 | +SCRIPTSDIR=${WORKDIR}/docker |
| 31 | + |
| 32 | +if [[ -z "${OS}" || -z "${OS_VER}" ]]; then |
| 33 | + echo "ERROR: The variables OS and OS_VER have to be set " \ |
| 34 | + "(e.g. OS=fedora, OS_VER=32)." |
| 35 | + exit 1 |
| 36 | +fi |
| 37 | + |
| 38 | +if [[ -z "${HOST_WORKDIR}" ]]; then |
| 39 | + echo "ERROR: The variable HOST_WORKDIR has to contain a path to " \ |
| 40 | + "the root of this project on the host machine." |
| 41 | + exit 1 |
| 42 | +fi |
| 43 | + |
| 44 | +if [[ -z "${CONTAINER_REG}" ]]; then |
| 45 | + echo "ERROR: CONTAINER_REG environment variable is not set " \ |
| 46 | + "(e.g. \"<registry_addr>/<org_name>/<package_name>\")." |
| 47 | + exit 1 |
| 48 | +fi |
| 49 | + |
| 50 | +# Set command to execute in the Docker container |
| 51 | +COMMAND="./run-build.sh"; |
| 52 | +echo "COMMAND to execute within Docker container: ${COMMAND}" |
| 53 | + |
| 54 | +if [ -n "${DNS_SERVER}" ]; then DOCKER_OPTS="${DOCKER_OPTS} --dns=${DNS_SERVER}"; fi |
| 55 | + |
| 56 | +# Check if we are running on a CI (Travis or GitHub Actions) |
| 57 | +[ -n "${GITHUB_ACTIONS}" -o -n "${TRAVIS}" ] && CI_RUN="YES" || CI_RUN="NO" |
| 58 | + |
| 59 | +# Do not allocate a pseudo-TTY if we are running on GitHub Actions |
| 60 | +[ ! "${GITHUB_ACTIONS}" ] && DOCKER_OPTS="${DOCKER_OPTS} --tty=true" |
| 61 | + |
| 62 | + |
| 63 | +echo "Running build using Docker image: ${IMAGE_NAME}" |
| 64 | + |
| 65 | +# Run a container with |
| 66 | +# - environment variables set (--env) |
| 67 | +# - host directory containing source mounted (-v) |
| 68 | +# - working directory set (-w) |
| 69 | +docker run --privileged=true --name=${CONTAINER_NAME} -i \ |
| 70 | + ${DOCKER_OPTS} \ |
| 71 | + --env http_proxy=${http_proxy} \ |
| 72 | + --env https_proxy=${https_proxy} \ |
| 73 | + --env TERM=xterm-256color \ |
| 74 | + --env WORKDIR=${WORKDIR} \ |
| 75 | + --env SCRIPTSDIR=${SCRIPTSDIR} \ |
| 76 | + --env GITHUB_REPO=${GITHUB_REPO} \ |
| 77 | + --env CI_RUN=${CI_RUN} \ |
| 78 | + --env TRAVIS=${TRAVIS} \ |
| 79 | + --env GITHUB_ACTIONS=${GITHUB_ACTIONS} \ |
| 80 | + --env CI_COMMIT=${CI_COMMIT} \ |
| 81 | + --env CI_COMMIT_RANGE=${CI_COMMIT_RANGE} \ |
| 82 | + --env CI_BRANCH=${CI_BRANCH} \ |
| 83 | + --env CI_EVENT_TYPE=${CI_EVENT_TYPE} \ |
| 84 | + --env CI_REPO_SLUG=${CI_REPO_SLUG} \ |
| 85 | + --env DOC_UPDATE_GITHUB_TOKEN=${DOC_UPDATE_GITHUB_TOKEN} \ |
| 86 | + --env DOC_UPDATE_BOT_NAME=${DOC_UPDATE_BOT_NAME} \ |
| 87 | + --env DOC_REPO_OWNER=${DOC_REPO_OWNER} \ |
| 88 | + --env COVERITY_SCAN_TOKEN=${COVERITY_SCAN_TOKEN} \ |
| 89 | + --env COVERITY_SCAN_NOTIFICATION_EMAIL=${COVERITY_SCAN_NOTIFICATION_EMAIL} \ |
| 90 | + --env TEST_TIMEOUT=${TEST_TIMEOUT} \ |
| 91 | + --env TZ='Europe/Warsaw' \ |
| 92 | + --shm-size=4G \ |
| 93 | + -v ${HOST_WORKDIR}:${WORKDIR} \ |
| 94 | + -v /etc/localtime:/etc/localtime \ |
| 95 | + -w ${SCRIPTSDIR} \ |
| 96 | + ${IMAGE_NAME} ${COMMAND} |
| 97 | + |
0 commit comments