This commit cleans up the existing CI scripts a bit while adding jobs to build RPM packages. The directory structure allows for easily adding more package targets. RPM outputs will only be uploaded on tagged commits.Release_2.1
@ -0,0 +1,56 @@ | |||
include ../DEPENDENCIES | |||
export | |||
CURRENT_DISTRO=${CI_DISTRO_TARGET} | |||
IMAGE_NAME=${DOCKER_REGISTRY_HOST}/pep-$(CI_DISTRO_TARGET)-libpepadapter | |||
DOCKERFILE=libpEpAdapter.linux.Dockerfile | |||
PKG_BUILD_IMAGE=${DOCKER_REGISTRY_HOST}/fpm-$(CURRENT_DISTRO) | |||
PKG_INSTALL_PATH=/opt/pEp | |||
PKG_NAME=libpEpAdapter | |||
PKG_DESCRIPTION="p≡p libpEpAdapter Binary RPM Package" | |||
PKG_DEPENDS=pEpEngine | |||
PKG_INSTALL_PATH_STRING="/ /package/lib=${PKG_INSTALL_PATH} /package/include/pEp=${PKG_INSTALL_PATH}/include" | |||
IS_TAGGED=${TAGGED_BUILD} | |||
ifeq ($(IS_TAGGED), true) | |||
# $CI_COMMIT_TAG is a predefined environment variable from Gitlab | |||
LIBPEPADAPTER_VERSION=${CI_COMMIT_TAG} | |||
else | |||
LIBPEPADAPTER_VERSION=$(shell git rev-parse --short=8 HEAD) | |||
endif | |||
all: build | |||
build: | |||
-docker pull $(IMAGE_NAME):latest | |||
cd ../ && docker build --build-arg CURRENT_DISTRO=$(CURRENT_DISTRO) \ | |||
--build-arg DOCKER_REGISTRY_HOST=${DOCKER_REGISTRY_HOST} \ | |||
--build-arg LIBPEPADAPTER_VERSION=$(LIBPEPADAPTER_VERSION) \ | |||
--cache-from $(IMAGE_NAME):latest \ | |||
--tag=$(IMAGE_NAME):$(LIBPEPADAPTER_VERSION) \ | |||
--tag=$(IMAGE_NAME):latest \ | |||
-f scripts/common/$(DOCKERFILE) . | |||
docker push $(IMAGE_NAME):${LIBPEPADAPTER_VERSION} | |||
docker push $(IMAGE_NAME):latest | |||
rpm: | |||
-docker pull $(PKG_BUILD_IMAGE)-libpepadapter:latest | |||
@docker build --build-arg CURRENT_DISTRO=$(CURRENT_DISTRO) \ | |||
--build-arg LIBPEPADAPTER_VERSION=$(LIBPEPADAPTER_VERSION) \ | |||
--build-arg DOCKER_REGISTRY_HOST=${DOCKER_REGISTRY_HOST} \ | |||
--build-arg PKG_INSTALL_PATH=$(PKG_INSTALL_PATH) \ | |||
--cache-from $(PKG_BUILD_IMAGE)-engine:latest \ | |||
--tag=$(PKG_BUILD_IMAGE)-libpepadapter:$(LIBPEPADAPTER_VERSION) \ | |||
--tag=$(PKG_BUILD_IMAGE)-libpepadapter:latest \ | |||
centos8/packages/rpm | |||
@docker push $(PKG_BUILD_IMAGE)-libpepadapter:$(LIBPEPADAPTER_VERSION) | |||
@docker push $(PKG_BUILD_IMAGE)-libpepadapter:latest | |||
@docker run -e LIBPEPADAPTER_VERSION=$(LIBPEPADAPTER_VERSION) \ | |||
-e PEP_MACHINE_DIR=$(PEP_MACHINE_DIR) \ | |||
-e PKG_VERSION=$(LIBPEPADAPTER_VERSION) \ | |||
-e PKG_INSTALL_PATH=$(PKG_INSTALL_PATH) \ | |||
-e PKG_NAME=$(PKG_NAME) \ | |||
-e PKG_DESCRIPTION=$(PKG_DESCRIPTION) \ | |||
-e PKG_DEPENDS=$(PKG_DEPENDS) \ | |||
-e PKG_INSTALL_PATH_STRING=$(PKG_INSTALL_PATH_STRING) \ | |||
--rm -v $(shell pwd)/centos8/packages/rpm/create-libpepadapter-rpm.sh:/usr/bin/create-rpm.sh:ro \ | |||
-v $(shell pwd)/out:/out \ | |||
-w / $(PKG_BUILD_IMAGE)-libpepadapter:${LIBPEPADAPTER_VERSION} \ | |||
/usr/bin/create-rpm.sh |
@ -1,15 +0,0 @@ | |||
CURRENT_DISTRO=$(shell basename $(shell pwd)) | |||
LIBPEPADAPTER_VERSION=$(shell git rev-parse --short=8 HEAD) | |||
IMAGE_NAME=${DOCKER_REGISTRY_HOST}/pep-$(CURRENT_DISTRO)-libpepadapter | |||
DOCKERFILE=libpEpAdapter.$(CURRENT_DISTRO).Dockerfile | |||
all: | |||
-docker pull $(IMAGE_NAME):latest | |||
cd ../../ && docker build --build-arg CURRENT_DISTRO=$(CURRENT_DISTRO) \ | |||
--build-arg DOCKER_REGISTRY_HOST=${DOCKER_REGISTRY_HOST} \ | |||
--build-arg LIBPEPADAPTER_VERSION=$(LIBPEPADAPTER_VERSION) \ | |||
--cache-from $(IMAGE_NAME):latest \ | |||
--tag=$(IMAGE_NAME):$(LIBPEPADAPTER_VERSION) \ | |||
--tag=$(IMAGE_NAME):latest \ | |||
-f scripts/${CURRENT_DISTRO}/$(DOCKERFILE) . | |||
docker push $(IMAGE_NAME):${LIBPEPADAPTER_VERSION} | |||
docker push $(IMAGE_NAME):latest |
@ -1,23 +0,0 @@ | |||
ARG DOCKER_REGISTRY_HOST | |||
ARG CURRENT_DISTRO | |||
ARG PEPENGINE_VERSION=latest | |||
FROM ${DOCKER_REGISTRY_HOST}/pep-${CURRENT_DISTRO}-engine:${PEPENGINE_VERSION} | |||
ENV BUILDROOT /build | |||
ENV INSTPREFIX /install | |||
ENV OUTDIR /out | |||
### Setup working directory | |||
RUN mkdir ${BUILDROOT}/libpEpAdapter | |||
COPY . ${BUILDROOT}/libpEpAdapter | |||
USER root | |||
RUN chown -R pep-builder:pep-builder ${BUILDROOT}/libpEpAdapter | |||
USER pep-builder | |||
WORKDIR ${BUILDROOT}/libpEpAdapter | |||
ARG LIBPEPADAPTER_VERSION | |||
ARG CURRENT_DISTRO | |||
### Build libpEpAdapter | |||
RUN sh ./scripts/${CURRENT_DISTRO}/build_libpEpAdapter.sh && \ | |||
rm -rf ${BUILDROOT}/* |
@ -0,0 +1,18 @@ | |||
ARG DOCKER_REGISTRY_HOST | |||
ARG CURRENT_DISTRO | |||
ARG LIBPEPADAPTER_VERSION | |||
FROM ${DOCKER_REGISTRY_HOST}/pep-${CURRENT_DISTRO}-libpepadapter:${LIBPEPADAPTER_VERSION} AS pEpBuild | |||
FROM ${DOCKER_REGISTRY_HOST}/fpm-${CURRENT_DISTRO}:latest | |||
# whatever is required for building should be installed in this image; just like BuildRequires: for RPM specs | |||
RUN yum -y install readline-devel epel-release && \ | |||
yum -y install patchelf chrpath | |||
ARG PEP_MACHINE_DIR | |||
COPY --from=pEpBuild /install /source | |||
COPY install.sh /usr/local/bin/install.sh | |||
ENV INSTPREFIX /source | |||
RUN /usr/local/bin/install.sh |
@ -0,0 +1,27 @@ | |||
#!/bin/bash -ex | |||
# we should always set proper ownership before exiting, otherwise | |||
# the created packages will have root:root ownership and we'll be unable | |||
# to delete them from our host. | |||
trap 'chown -R --reference /usr/bin/create-rpm.sh /out/' EXIT | |||
# the source directory is mounted read-only to prevent issues where the build | |||
# could alter the source; we should copy it somewhere inside the container | |||
cd /source/out | |||
ls -alh | |||
tree | |||
INSTALL_TOP=/package | |||
mkdir -p ${INSTALL_TOP}/lib | |||
mkdir -p ${INSTALL_TOP}/include/pEp | |||
cp -ar lib/* ${INSTALL_TOP}/lib/. | |||
cp -ar include/pEp/* ${INSTALL_TOP}/include/pEp/. | |||
cd /out | |||
#this would be the no-signature command line | |||
fpm -t rpm -s dir \ | |||
-n ${PKG_NAME} \ | |||
--version ${PKG_VERSION} \ | |||
--description "${PKG_DESCRIPTION}" \ | |||
--depends ${PKG_DEPENDS} \ | |||
-C ${PKG_INSTALL_PATH_STRING} |
@ -0,0 +1,32 @@ | |||
#!/bin/bash | |||
set -exuo pipefail | |||
# =========================== | |||
# Distro | |||
# =========================== | |||
echo 7 >"${INSTPREFIX}/D_REVISION" | |||
D_REV=$(cat ${INSTPREFIX}/D_REVISION) | |||
D="" | |||
D=${INSTPREFIX}/out | |||
mkdir -p ${INSTPREFIX}/out | |||
rm -rf ${INSTPREFIX}/out/* | |||
mkdir -p "$D"/{bin,ld,lib/pEp,share/pEp,include/pEp} | |||
# libpEpAdapter | |||
cp -a ${INSTPREFIX}/lib/libpEpAdapter.a "$D"/lib | |||
cp -av ${INSTPREFIX}/include/pEp/{status_to_string.hh,message_cache.hh,call_with_lock.hh,Adapter.hh,callback_dispatcher.hh,locked_queue.hh,slurp.hh,constant_time_algo.hh,Semaphore.hh,pc_container.hh,passphrase_cache.hh,pEpLog.hh,Adapter.hxx,passphrase_cache.hxx} "$D"/include/pEp | |||
# versions | |||
cp -a ${INSTPREFIX}/*.ver "$D" | |||
find "$D"/lib -maxdepth 1 -type f -print -exec patchelf --set-rpath '$ORIGIN/pEp:$ORIGIN' {} \; | |||
find "$D"/lib/pEp -type f -print -exec patchelf --set-rpath '$ORIGIN' {} \; | |||
find "$D"/bin -type f -print -exec patchelf --set-rpath '$ORIGIN/../lib/pEp:$ORIGIN/../lib' {} \; | |||
ls -lh "$D"/* | |||
du -sch "$D" |
@ -1,27 +0,0 @@ | |||
include ../../DEPENDENCIES | |||
export | |||
PEPENGINE_VERSION=${pEpEngine} | |||
CURRENT_DISTRO=$(shell basename $(shell pwd)) | |||
IMAGE_NAME=${DOCKER_REGISTRY_HOST}/pep-$(CURRENT_DISTRO)-libpepadapter | |||
DOCKERFILE=libpEpAdapter.$(CURRENT_DISTRO).Dockerfile | |||
IS_TAGGED=${TAGGED_BUILD} | |||
ifeq ($(IS_TAGGED), true) | |||
# $CI_COMMIT_TAG is a predefined environment variable from Gitlab | |||
LIBPEPADAPTER_VERSION=${CI_COMMIT_TAG} | |||
else | |||
LIBPEPADAPTER_VERSION=$(shell git rev-parse --short=8 HEAD) | |||
endif | |||
all: | |||
-docker pull $(IMAGE_NAME):latest | |||
cd ../../ && docker build --build-arg CURRENT_DISTRO=$(CURRENT_DISTRO) \ | |||
--build-arg DOCKER_REGISTRY_HOST=${DOCKER_REGISTRY_HOST} \ | |||
--build-arg PEPENGINE_VERSION=$(PEPENGINE_VERSION) \ | |||
--build-arg LIBPEPADAPTER_VERSION=$(LIBPEPADAPTER_VERSION) \ | |||
--cache-from $(IMAGE_NAME):latest \ | |||
--tag=$(IMAGE_NAME):$(LIBPEPADAPTER_VERSION) \ | |||
--tag=$(IMAGE_NAME):${LIBPEPADAPTER_VERSION}_engine-${PEPENGINE_VERSION} \ | |||
--tag=$(IMAGE_NAME):latest \ | |||
-f scripts/${CURRENT_DISTRO}/$(DOCKERFILE) . | |||
docker push $(IMAGE_NAME):${LIBPEPADAPTER_VERSION} | |||
docker push $(IMAGE_NAME):${LIBPEPADAPTER_VERSION}_engine-${PEPENGINE_VERSION} | |||
docker push $(IMAGE_NAME):latest |
@ -1,8 +0,0 @@ | |||
#!/usr/bin/env sh | |||
set -exo | |||
echo "ENGINE_LIB_PATH=${INSTPREFIX}/lib" >> local.conf | |||
echo "ENGINE_INC_PATH=${INSTPREFIX}/include" >> local.conf | |||
make | |||
make install PREFIX="${INSTPREFIX}" |