Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 0 additions & 37 deletions .github/workflows/build-cachelib-centos.yml

This file was deleted.

47 changes: 47 additions & 0 deletions .github/workflows/build-cachelib-docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: build-cachelib-docker
on:
push:
pull_request:

jobs:
build-cachelib-docker:
name: "CentOS/latest - Build CacheLib with all dependencies"
runs-on: ubuntu-latest
env:
REPO: cachelib
GITHUB_REPO: pmem/CacheLib
CONTAINER_REG: ghcr.io/pmem/cachelib
CONTAINER_REG_USER: ${{ secrets.GH_CR_USER }}
CONTAINER_REG_PASS: ${{ secrets.GH_CR_PAT }}
FORCE_IMAGE_ACTION: ${{ secrets.FORCE_IMAGE_ACTION }}
HOST_WORKDIR: ${{ github.workspace }}
WORKDIR: docker
IMG_VER: devel
strategy:
matrix:
CONFIG: ["OS=centos OS_VER=8streams PUSH_IMAGE=1"]
steps:
- name: "System Information"
run: |
echo === uname ===
uname -a
echo === /etc/os-release ===
cat /etc/os-release
echo === df -hl ===
df -hl
echo === free -h ===
free -h
echo === top ===
top -b -n1 -1 -Eg || timeout 1 top -b -n1
echo === env ===
env
echo === gcc -v ===
gcc -v
- name: "checkout sources"
uses: actions/checkout@v2

- name: Pull the image or rebuild and push it
run: cd $WORKDIR && ${{ matrix.CONFIG }} ./pull-or-rebuild-image.sh $FORCE_IMAGE_ACTION

- name: Run the build
run: cd $WORKDIR && ${{ matrix.CONFIG }} ./build.sh
97 changes: 97 additions & 0 deletions docker/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
#!/usr/bin/env bash
# SPDX-License-Identifier: BSD-3-Clause
# Copyright 2022, Intel Corporation

#
# build.sh - runs a Docker container from a Docker image with environment
# prepared for running CacheLib builds and tests. It uses Docker image
# tagged as described in ./images/build-image.sh.
#
# Notes:
# - set env var 'HOST_WORKDIR' to where the root of this project is on the host machine,
# - set env var 'OS' and 'OS_VER' properly to a system/Docker you want to build this
# repo on (for proper values take a look at the list of Dockerfiles at the
# utils/docker/images directory in this repo), e.g. OS=ubuntu, OS_VER=20.04,
# - set env var 'CONTAINER_REG' to container registry address
# [and possibly user/org name, and package name], e.g. "<CR_addr>/pmem/CacheLib",
# - set env var 'DNS_SERVER' if you use one,
# - set env var 'COMMAND' to execute specific command within Docker container or
# env var 'TYPE' to pick command based on one of the predefined types of build (see below).
#

set -e

source $(dirname ${0})/set-ci-vars.sh
IMG_VER=${IMG_VER:-devel}
TAG="${OS}-${OS_VER}-${IMG_VER}"
IMAGE_NAME=${CONTAINER_REG}:${TAG}
CONTAINER_NAME=CacheLib-${OS}-${OS_VER}
WORKDIR=/CacheLib # working dir within Docker container
SCRIPTSDIR=${WORKDIR}/docker

if [[ -z "${OS}" || -z "${OS_VER}" ]]; then
echo "ERROR: The variables OS and OS_VER have to be set " \
"(e.g. OS=fedora, OS_VER=32)."
exit 1
fi

if [[ -z "${HOST_WORKDIR}" ]]; then
echo "ERROR: The variable HOST_WORKDIR has to contain a path to " \
"the root of this project on the host machine."
exit 1
fi

if [[ -z "${CONTAINER_REG}" ]]; then
echo "ERROR: CONTAINER_REG environment variable is not set " \
"(e.g. \"<registry_addr>/<org_name>/<package_name>\")."
exit 1
fi

# Set command to execute in the Docker container
COMMAND="./run-build.sh";
echo "COMMAND to execute within Docker container: ${COMMAND}"

if [ -n "${DNS_SERVER}" ]; then DOCKER_OPTS="${DOCKER_OPTS} --dns=${DNS_SERVER}"; fi

# Check if we are running on a CI (Travis or GitHub Actions)
[ -n "${GITHUB_ACTIONS}" -o -n "${TRAVIS}" ] && CI_RUN="YES" || CI_RUN="NO"

# Do not allocate a pseudo-TTY if we are running on GitHub Actions
[ ! "${GITHUB_ACTIONS}" ] && DOCKER_OPTS="${DOCKER_OPTS} --tty=true"


echo "Running build using Docker image: ${IMAGE_NAME}"

# Run a container with
# - environment variables set (--env)
# - host directory containing source mounted (-v)
# - working directory set (-w)
docker run --privileged=true --name=${CONTAINER_NAME} -i \
${DOCKER_OPTS} \
--env http_proxy=${http_proxy} \
--env https_proxy=${https_proxy} \
--env TERM=xterm-256color \
--env WORKDIR=${WORKDIR} \
--env SCRIPTSDIR=${SCRIPTSDIR} \
--env GITHUB_REPO=${GITHUB_REPO} \
--env CI_RUN=${CI_RUN} \
--env TRAVIS=${TRAVIS} \
--env GITHUB_ACTIONS=${GITHUB_ACTIONS} \
--env CI_COMMIT=${CI_COMMIT} \
--env CI_COMMIT_RANGE=${CI_COMMIT_RANGE} \
--env CI_BRANCH=${CI_BRANCH} \
--env CI_EVENT_TYPE=${CI_EVENT_TYPE} \
--env CI_REPO_SLUG=${CI_REPO_SLUG} \
--env DOC_UPDATE_GITHUB_TOKEN=${DOC_UPDATE_GITHUB_TOKEN} \
--env DOC_UPDATE_BOT_NAME=${DOC_UPDATE_BOT_NAME} \
--env DOC_REPO_OWNER=${DOC_REPO_OWNER} \
--env COVERITY_SCAN_TOKEN=${COVERITY_SCAN_TOKEN} \
--env COVERITY_SCAN_NOTIFICATION_EMAIL=${COVERITY_SCAN_NOTIFICATION_EMAIL} \
--env TEST_TIMEOUT=${TEST_TIMEOUT} \
--env TZ='Europe/Warsaw' \
--shm-size=4G \
-v ${HOST_WORKDIR}:${WORKDIR} \
-v /etc/localtime:/etc/localtime \
-w ${SCRIPTSDIR} \
${IMAGE_NAME} ${COMMAND}

38 changes: 38 additions & 0 deletions docker/images/build-image.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/usr/bin/env bash
# SPDX-License-Identifier: BSD-3-Clause
# Copyright 2016-2021, Intel Corporation
#
# build-image.sh - prepares a Docker image with <OS>-based environment for
# testing (or dev) purpose, tagged with ${CONTAINER_REG}:${OS}-${OS_VER}-${IMG_VER},
# according to the ${OS}-${OS_VER}.Dockerfile file located in the same directory.
# IMG_VER is a version of Docker image (it usually relates to project's release tag)
# and it defaults to "devel".
#

set -e
IMG_VER=${IMG_VER:-devel}
TAG="${OS}-${OS_VER}-${IMG_VER}"

if [[ -z "${OS}" || -z "${OS_VER}" ]]; then
echo "ERROR: The variables OS and OS_VER have to be set " \
"(e.g. OS=fedora, OS_VER=34)."
exit 1
fi

if [[ -z "${CONTAINER_REG}" ]]; then
echo "ERROR: CONTAINER_REG environment variable is not set " \
"(e.g. \"<registry_addr>/<org_name>/<package_name>\")."
exit 1
fi

echo "Check if the file ${OS}-${OS_VER}.Dockerfile exists"
if [[ ! -f "${OS}-${OS_VER}.Dockerfile" ]]; then
echo "Error: ${OS}-${OS_VER}.Dockerfile does not exist."
exit 1
fi

echo "Build a Docker image tagged with: ${CONTAINER_REG}:${TAG}"
docker build -t ${CONTAINER_REG}:${TAG} \
--build-arg http_proxy=$http_proxy \
--build-arg https_proxy=$https_proxy \
-f ${OS}-${OS_VER}.Dockerfile .
13 changes: 13 additions & 0 deletions docker/images/centos-8streams.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
FROM quay.io/centos/centos:stream8

RUN dnf install -y \
cmake \
sudo \
git \
tzdata \
vim \
gdb \
clang

COPY ./install-cachelib-deps.sh ./install-cachelib-deps.sh
RUN ./install-cachelib-deps.sh
14 changes: 14 additions & 0 deletions docker/images/install-cachelib-deps.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/usr/bin/env bash
# SPDX-License-Identifier: BSD-3-Clause
# Copyright 2022, Intel Corporation

git clone https://github.com/pmem/CacheLib CacheLib

./CacheLib/contrib/prerequisites-centos8.sh

for pkg in zstd googleflags googlelog googletest sparsemap fmt folly fizz wangle fbthrift ;
do
sudo ./CacheLib/contrib/build-package.sh -j -I /opt/ "$pkg"
done

rm -rf CacheLib
49 changes: 49 additions & 0 deletions docker/images/push-image.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#!/usr/bin/env bash
# SPDX-License-Identifier: BSD-3-Clause
# Copyright 2016-2021, Intel Corporation

#
# push-image.sh - pushes the Docker image tagged as described in
# ./build-image.sh, to the ${CONTAINER_REG}.
#
# The script utilizes ${CONTAINER_REG_USER} and ${CONTAINER_REG_PASS} variables to
# log in to the ${CONTAINER_REG}. The variables can be set in the CI's configuration
# for automated builds.
#

set -e
IMG_VER=${IMG_VER:-devel}
TAG="${OS}-${OS_VER}-${IMG_VER}"

if [[ -z "${OS}" || -z "${OS_VER}" ]]; then
echo "ERROR: The variables OS and OS_VER have to be set " \
"(e.g. OS=fedora, OS_VER=34)."
exit 1
fi

if [[ -z "${CONTAINER_REG}" ]]; then
echo "ERROR: CONTAINER_REG environment variable is not set " \
"(e.g. \"<registry_addr>/<org_name>/<package_name>\")."
exit 1
fi

if [[ -z "${CONTAINER_REG_USER}" || -z "${CONTAINER_REG_PASS}" ]]; then
echo "ERROR: variables CONTAINER_REG_USER=\"${CONTAINER_REG_USER}\" and " \
"CONTAINER_REG_PASS=\"${CONTAINER_REG_PASS}\"" \
"have to be set properly to allow login to the Container Registry."
exit 1
fi

# Check if the image tagged with ${CONTAINER_REG}:${TAG} exists locally
if [[ ! $(docker images -a | awk -v pattern="^${CONTAINER_REG}:${TAG}\$" \
'$1":"$2 ~ pattern') ]]
then
echo "ERROR: Docker image tagged ${CONTAINER_REG}:${TAG} does not exist locally."
exit 1
fi

echo "Log in to the Container Registry: ${CONTAINER_REG}"
echo "${CONTAINER_REG_PASS}" | docker login ghcr.io -u="${CONTAINER_REG_USER}" --password-stdin

echo "Push the image to the Container Registry"
docker push ${CONTAINER_REG}:${TAG}
Loading