Merge pull request #435 from rafalste/update_versioning

Version unifying
This commit is contained in:
Robert Baldyga 2020-07-27 18:34:46 +02:00 committed by GitHub
commit b8cfee1883
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 165 additions and 157 deletions

View File

@ -6,9 +6,10 @@
PWD:=$(shell pwd) PWD:=$(shell pwd)
MODULESDIR:=$(PWD)/../modules MODULESDIR:=$(PWD)/../modules
UTILS_DIR:=$(PWD)/../utils UTILS_DIR:=$(PWD)/../utils
METADATA_DIR:=$(PWD)/../.metadata
BINARY_PATH = /sbin BINARY_PATH = /sbin
VERSION_FILE := $(MODULESDIR)/CAS_VERSION VERSION_FILE := $(METADATA_DIR)/cas_version
# #
# Section below enables creating build with experimental features # Section below enables creating build with experimental features
@ -89,7 +90,7 @@ LDFLAGS = -z noexecstack -z relro -z now -pie -pthread
all: sync all: sync
$(MAKE) build $(MAKE) build
build: $(VERSION_FILE) $(TARGETS) build: $(TARGETS)
sync: sync:
@cd $(MODULESDIR) && $(MAKE) sync @cd $(MODULESDIR) && $(MAKE) sync
@ -119,17 +120,12 @@ ifeq ($(strip $(CAS_VERSION_MAIN)),)
endif endif
@$(CC) -c $(CFLAGS) -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<" @$(CC) -c $(CFLAGS) -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
$(VERSION_FILE):
@echo " VERSION " $@
@cd $(MODULESDIR) && ./CAS_VERSION_GEN
clean: clean:
@echo " CLEAN " @echo " CLEAN "
@rm -f *.a $(TARGETS) @rm -f *.a $(TARGETS)
@rm -f $(shell find -name \*.d) $(shell find -name \*.o) @rm -f $(shell find -name \*.d) $(shell find -name \*.o)
distclean: clean distclean: clean
@rm -f $(VERSION_FILE)
install: install_files install: install_files
@ -143,6 +139,8 @@ install_files:
@install -m 755 -d $(DESTDIR)/etc/opencas @install -m 755 -d $(DESTDIR)/etc/opencas
@install -m 644 $(UTILS_DIR)/opencas.conf $(DESTDIR)/etc/opencas/opencas.conf @install -m 644 $(UTILS_DIR)/opencas.conf $(DESTDIR)/etc/opencas/opencas.conf
@install -m 444 $(UTILS_DIR)/ioclass-config.csv $(DESTDIR)/etc/opencas/ioclass-config.csv @install -m 444 $(UTILS_DIR)/ioclass-config.csv $(DESTDIR)/etc/opencas/ioclass-config.csv
@install -m 755 -d $(DESTDIR)/var/lib/opencas
@install -m 644 $(METADATA_DIR)/cas_version $(DESTDIR)/var/lib/opencas/cas_version
@mkdir -p $(DESTDIR)/usr/share/man/man5 @mkdir -p $(DESTDIR)/usr/share/man/man5
@install -m 644 $(UTILS_DIR)/opencas.conf.5 $(DESTDIR)/usr/share/man/man5/opencas.conf.5 @install -m 644 $(UTILS_DIR)/opencas.conf.5 $(DESTDIR)/usr/share/man/man5/opencas.conf.5
@ -155,6 +153,8 @@ uninstall:
@rm $(DESTDIR)/etc/opencas/opencas.conf @rm $(DESTDIR)/etc/opencas/opencas.conf
@rm $(DESTDIR)/etc/opencas/ioclass-config.csv @rm $(DESTDIR)/etc/opencas/ioclass-config.csv
@rm -rf $(DESTDIR)/etc/opencas @rm -rf $(DESTDIR)/etc/opencas
@rm $(DESTDIR)/var/lib/opencas/cas_version
@rm -rf $(DESTDIR)/var/lib/opencas
@rm $(DESTDIR)/usr/share/man/man5/opencas.conf.5 @rm $(DESTDIR)/usr/share/man/man5/opencas.conf.5

8
configure vendored
View File

@ -77,6 +77,14 @@ then
exit 1 exit 1
fi fi
# Run version generator with 'build' flag to
# indicate that we are in the build process
(cd utils && ./cas_version_gen build)
if [ $? -ne 0 ]; then
echo "Error: failed to obtain CAS version" >&2
exit 1
fi
CONFIG_FILES=`ls $SCRIPTPATH/configure.d/*.conf | sort` CONFIG_FILES=`ls $SCRIPTPATH/configure.d/*.conf | sort`
FILES_COUNT=`echo $CONFIG_FILES | wc -w` FILES_COUNT=`echo $CONFIG_FILES | wc -w`

View File

@ -1,31 +0,0 @@
#!/bin/bash
#
# Copyright(c) 2012-2020 Intel Corporation
# SPDX-License-Identifier: BSD-3-Clause-Clear
#
VER_FILE=CAS_VERSION
if [ -f ${VER_FILE} ]; then
echo -e "Using existing ${VER_FILE} version file.\n"
exit 0
fi
echo -e "No ${VER_FILE} found. Preparing default version file.\n"
CAS_VERSION_MAIN=20
CAS_VERSION_MAJOR=6
CAS_VERSION_MINOR=0
CAS_BUILD_NO=0000`date +%m%d`
touch ${VER_FILE}
CAS_VERSION=$(printf "%02d.%02d.%02d.%s" $CAS_VERSION_MAIN $CAS_VERSION_MAJOR \
$CAS_VERSION_MINOR $CAS_BUILD_NO)
echo "CAS_VERSION_MAIN=${CAS_VERSION_MAIN}" >> ${VER_FILE}
echo "CAS_VERSION_MAJOR=${CAS_VERSION_MAJOR}" >> ${VER_FILE}
echo "CAS_VERSION_MINOR=${CAS_VERSION_MINOR}" >> ${VER_FILE}
echo "CAS_VERSION=${CAS_VERSION}" >> ${VER_FILE}
cat ${VER_FILE}

View File

@ -15,8 +15,6 @@ obj-y += cas_disk/
# line; invoke the kernel build system. # line; invoke the kernel build system.
else else
VERSION_FILE=$(PWD)/CAS_VERSION
OCFDIR=$(PWD)/../ocf OCFDIR=$(PWD)/../ocf
KERNEL_DIR ?= "/lib/modules/$(shell uname -r)/build" KERNEL_DIR ?= "/lib/modules/$(shell uname -r)/build"
PWD=$(shell pwd) PWD=$(shell pwd)
@ -31,9 +29,6 @@ MODPROBE:=$(shell which modprobe)
all: default all: default
$(VERSION_FILE):
./CAS_VERSION_GEN
# Extra targets and file configuration # Extra targets and file configuration
ifneq ($(wildcard $(PWD)/extra.mk),) ifneq ($(wildcard $(PWD)/extra.mk),)
include $(PWD)/extra.mk include $(PWD)/extra.mk
@ -41,7 +36,7 @@ else
sync distsync: sync distsync:
endif endif
default: $(VERSION_FILE) sync default: sync
cd $(KERNEL_DIR) && $(MAKE) M=$(PWD) modules cd $(KERNEL_DIR) && $(MAKE) M=$(PWD) modules
clean: clean:

View File

@ -3,10 +3,7 @@
# SPDX-License-Identifier: BSD-3-Clause-Clear # SPDX-License-Identifier: BSD-3-Clause-Clear
# #
VERSION_FILE := $(M)/CAS_VERSION VERSION_FILE := $(M)/../.metadata/cas_version
$(VERSION_FILE):
./CAS_VERSION_GEN
check_cflag=$(shell echo "" | \ check_cflag=$(shell echo "" | \
gcc -c -xc ${1} -o /dev/null - 2>/dev/null; \ gcc -c -xc ${1} -o /dev/null - 2>/dev/null; \

105
utils/cas_version_gen Executable file
View File

@ -0,0 +1,105 @@
#!/bin/bash
#
# Copyright(c) 2020 Intel Corporation
# SPDX-License-Identifier: BSD-3-Clause-Clear
#
THIS=$(basename "$0")
SOURCES_DIR="$(realpath ../)"
MANUAL_VERSION_INPUT="$SOURCES_DIR/version"
VERSION_FILE="$SOURCES_DIR/.metadata/cas_version"
SUBMODULES=(
"ocf"
"test/functional/test-framework"
)
warning() {
echo -e "\e[33mWARNING\e[0m: $THIS: $*" >&2
}
error() {
echo -e "\e[31mERROR\e[0m: $THIS: $*" >&2
exit 1
}
# Check if we're inside a git repository
if [[ -d "$SOURCES_DIR/.git" ]] && which git &>/dev/null &&\
(cd "$SOURCES_DIR" && git rev-parse --is-inside-work-tree &>/dev/null); then
if [[ ! -r "$MANUAL_VERSION_INPUT" ]]; then
error "can't read version input file"
fi
. "$MANUAL_VERSION_INPUT"
if [[ ! "$CAS_VERSION_MAIN" || ! "$CAS_VERSION_MAJOR" || ! "$CAS_VERSION_MINOR" ]]; then
error "wrong version input file format"
fi
CAS_VERSION_BUILD=$(cd "$SOURCES_DIR" && git log --merges --oneline | wc -l)
LAST_COMMIT_HASH=$(cd "$SOURCES_DIR" && git log -1 --pretty=format:%H)
LAST_COMMIT_HASH_ABBR=$(cd "$SOURCES_DIR" && git log -1 --pretty=format:%h)
LAST_COMMIT_DATE=$(cd "$SOURCES_DIR" && git log -1 --pretty=format:%ci |\
sed "s/ /T/" | sed "s/ //" | sed "s/00$/:00/")
LAST_COMMIT_TIMESTAMP=$(cd "$SOURCES_DIR" && git log -1 --pretty=format:%ct)
for SUBMOD in ${SUBMODULES[@]}; do
LAST_SUB_COMMIT_HASHES+=($(cd "$SOURCES_DIR/$SUBMOD" && git log -1 --pretty=format:%H))
LAST_SUB_COMMIT_HASHES_ABBR+=($(cd "$SOURCES_DIR/$SUBMOD" && git log -1 --pretty=format:%h))
done
if [[ $(cd "$SOURCES_DIR" && git tag --points-at HEAD) ]]; then
CAS_VERSION_RELEASE="release"
elif [[ $(cd "$SOURCES_DIR" && git log -1 --pretty=format:%H)\
== $(cd "$SOURCES_DIR" && git log -1 --merges --pretty=format:%H) ]]; then
CAS_VERSION_RELEASE="master"
else
CAS_VERSION_RELEASE="devel"
fi
CAS_VERSION=$(printf "%02d.%02d.%01d.%04d.%s" $CAS_VERSION_MAIN $CAS_VERSION_MAJOR\
$CAS_VERSION_MINOR $CAS_VERSION_BUILD $CAS_VERSION_RELEASE)
mkdir -p $(dirname "$VERSION_FILE")
if ! touch "$VERSION_FILE"; then
error "couldn't create version file"
fi
echo "CAS_VERSION_MAIN=$CAS_VERSION_MAIN" > "$VERSION_FILE"
echo "CAS_VERSION_MAJOR=$CAS_VERSION_MAJOR" >> "$VERSION_FILE"
echo "CAS_VERSION_MINOR=$CAS_VERSION_MINOR" >> "$VERSION_FILE"
echo "CAS_VERSION_BUILD=$CAS_VERSION_BUILD" >> "$VERSION_FILE"
echo "CAS_VERSION_RELEASE=$CAS_VERSION_RELEASE" >> "$VERSION_FILE"
echo "CAS_VERSION=$CAS_VERSION" >> "$VERSION_FILE"
echo "LAST_COMMIT_HASH=$LAST_COMMIT_HASH" >> "$VERSION_FILE"
echo "LAST_COMMIT_HASH_ABBR=$LAST_COMMIT_HASH_ABBR" >> "$VERSION_FILE"
echo "LAST_COMMIT_DATE=$LAST_COMMIT_DATE" >> "$VERSION_FILE"
echo "LAST_COMMIT_TIMESTAMP=$LAST_COMMIT_TIMESTAMP" >> "$VERSION_FILE"
echo "LAST_SUB_COMMIT_HASHES=(${LAST_SUB_COMMIT_HASHES[@]})" >> "$VERSION_FILE"
echo "LAST_SUB_COMMIT_HASHES_ABBR=(${LAST_SUB_COMMIT_HASHES_ABBR[@]})" >> "$VERSION_FILE"
FILE_CREATION_DATE=$(date --iso-8601=seconds)
FILE_CREATION_TIMESTAMP=$(date +%s)
echo "FILE_CREATION_DATE=$FILE_CREATION_DATE" >> "$VERSION_FILE"
echo "FILE_CREATION_TIMESTAMP=$FILE_CREATION_TIMESTAMP" >> "$VERSION_FILE"
elif [[ -r "$VERSION_FILE" ]]; then
. "$VERSION_FILE" >/dev/null
if [[ ! "$CAS_VERSION" ]]; then
error "wrong version file format"
fi
else
error "couldn't obtain CAS version - no git tree nor readable version file found"
fi
# Check if this script was called during building of OpenCAS...
if [[ "$1" == "build" ]]; then
if ! touch "$VERSION_FILE"; then
warning "couldn't edit version file"
fi
# ...and if so, add (or substitute if exist) a build time to version file
CAS_BUILD_DATE=$(date --iso-8601=seconds)
CAS_BUILD_TIMESTAMP=$(date +%s)
if grep CAS_BUILD_DATE "$VERSION_FILE" &>/dev/null; then
sed -i "s/CAS_BUILD_DATE=.*/CAS_BUILD_DATE=$CAS_BUILD_DATE/" "$VERSION_FILE"
sed -i "s/CAS_BUILD_TIMESTAMP=.*/CAS_BUILD_TIMESTAMP=$CAS_BUILD_TIMESTAMP/" "$VERSION_FILE"
else
echo "CAS_BUILD_DATE=$CAS_BUILD_DATE" >> "$VERSION_FILE"
echo "CAS_BUILD_TIMESTAMP=$CAS_BUILD_TIMESTAMP" >> "$VERSION_FILE"
fi
fi

View File

@ -17,12 +17,12 @@
Name: open-cas-linux Name: open-cas-linux
Version: <CAS_VERSION> Version: <CAS_VERSION>
Release: <RPM_RELEASE> Release: 1%{?dist}
Summary: Open Cache Acceleration Software Summary: Open Cache Acceleration Software
Group: System Group: System
License: BSD-3-Clause License: BSD-3-Clause
URL: https://open-cas.github.io/ URL: https://open-cas.github.io/
Source0: https://github.com/Open-CAS/open-cas-linux/releases/download/v%{version}/%{name}-v%{version}.tar.gz Source0: https://github.com/Open-CAS/open-cas-linux/releases/download/v%{version}/%{name}-%{version}.tar.gz
BuildRequires: gcc BuildRequires: gcc
BuildRequires: kernel-devel BuildRequires: kernel-devel
BuildRequires: kernel-headers BuildRequires: kernel-headers
@ -56,7 +56,7 @@ This package contains CAS kernel modules.
%prep %prep
%setup -q -n %{name}-v%{version} %setup -q
%build %build
@ -111,8 +111,10 @@ fi
%doc README.md %doc README.md
%dir /etc/opencas/ %dir /etc/opencas/
%dir /lib/opencas/ %dir /lib/opencas/
%dir /var/lib/opencas
%config /etc/opencas/opencas.conf %config /etc/opencas/opencas.conf
/etc/opencas/ioclass-config.csv /etc/opencas/ioclass-config.csv
/var/lib/opencas/cas_version
/lib/opencas/casctl /lib/opencas/casctl
/lib/opencas/open-cas-loader /lib/opencas/open-cas-loader
/lib/opencas/opencas.py /lib/opencas/opencas.py
@ -137,6 +139,10 @@ fi
%changelog %changelog
* Wed Jun 10 2020 Rafal Stefanowski <rafal.stefanowski@intel.com> - 20.06-1
- Add cas_version file
- Join Release into Version
- Simplify prep setup
* Tue Feb 25 2020 Rafal Stefanowski <rafal.stefanowski@intel.com> - 20.3-1 * Tue Feb 25 2020 Rafal Stefanowski <rafal.stefanowski@intel.com> - 20.3-1
- Minor improvements in SPEC file - Minor improvements in SPEC file
- Update files list for releases > 20.1 - Update files list for releases > 20.1

View File

@ -33,7 +33,7 @@ SUBMODULES=(
# Unset all variables that may be checked for existence: # Unset all variables that may be checked for existence:
unset ${!GENERATE_*} ARCHIVE_PREPARED DEBUG FAILED_DEPS OUTPUT_DIR RPM_BUILT\ unset ${!GENERATE_*} ARCHIVE_PREPARED DEBUG FAILED_DEPS OUTPUT_DIR RPM_BUILT\
SOURCES_DIR SUBMODULES_MISSING TAR_CREATED VERSION_ONLY SOURCES_DIR SUBMODULES_MISSING TAR_CREATED
usage() { usage() {
@ -47,8 +47,8 @@ print_help() {
echo "Generate OpenCAS packages." echo "Generate OpenCAS packages."
echo "$(usage)" echo "$(usage)"
echo echo
echo "This script generates various OpenCAS packages like release archives (tar, zip)," echo "This script generates various OpenCAS packages like"
echo "RPMs (source and binary) as well as creates version file with metadata." echo "release archives (tar, zip) and RPMs (source and binary)."
echo echo
echo "Mandatory arguments to long options are mandatory for short options too." echo "Mandatory arguments to long options are mandatory for short options too."
echo echo
@ -57,12 +57,10 @@ print_help() {
echo " zip generate zip archive" echo " zip generate zip archive"
echo " rpm generate RPM packages" echo " rpm generate RPM packages"
echo " srpm generate SRPM package" echo " srpm generate SRPM package"
echo " version-only create only version file and exit;"
echo echo
echo "Options:" echo "Options:"
echo " -o, --output-dir <DIR> put all created files in the given directory;" echo " -o, --output-dir <DIR> put all created files in the given directory;"
echo " by default all files (except version file)" echo " default: 'SOURCES_PATH/packages/'"
echo " will be put in 'SOURCES_PATH/packages/'"
echo " -d, --debug create all debug files and packages as well" echo " -d, --debug create all debug files and packages as well"
echo " -c, --clean clean all temporary files and folders that" echo " -c, --clean clean all temporary files and folders that"
echo " may have been left around if $THIS ended" echo " may have been left around if $THIS ended"
@ -80,10 +78,6 @@ info() {
echo -e "\e[33m$*\e[0m" echo -e "\e[33m$*\e[0m"
} }
success() {
echo -e "\n\e[32m=== ALL DONE ===\e[0m\n\nYou can find your fresh packages in '$OUTPUT_DIR'\n"
}
error() { error() {
echo -e "\e[31mERROR\e[0m: $THIS: $*" >&2 echo -e "\e[31mERROR\e[0m: $THIS: $*" >&2
exit 1 exit 1
@ -105,34 +99,27 @@ clean_all() {
if ls "/tmp/${TEMP_TEMPLATE}."* &>/dev/null; then if ls "/tmp/${TEMP_TEMPLATE}."* &>/dev/null; then
# This function on the other hand is called only by a '-c' option # This function on the other hand is called only by a '-c' option
# so we may throw an error here and exit. # so we may throw an error here and exit.
error "Cleanup failed" error "cleanup failed"
fi fi
} }
check_options() { check_options() {
if [ ! "$SOURCES_DIR" ]; then if [ ! "$SOURCES_DIR" ]; then
invalid_usage "No mandatory SOURCES_PATH provided" invalid_usage "no mandatory SOURCES_PATH provided"
elif [[ $(head -n 1 "$SOURCES_DIR/README.md" 2>/dev/null) != *Open*CAS*Linux* ]]; then elif [[ $(head -n 1 "$SOURCES_DIR/README.md" 2>/dev/null) != *Open*CAS*Linux* ]]; then
invalid_usage "'$SOURCES_DIR' does not point to the root directory of CAS sources" invalid_usage "'$SOURCES_DIR' does not point to the root directory of CAS sources"
elif [ ! "${!GENERATE_*}" ] && [ ! "$VERSION_ONLY" ]; then elif [ ! "${!GENERATE_*}" ]; then
invalid_usage "Nothing to do - no command provided" invalid_usage "nothing to do - no command provided"
fi fi
} }
check_version() { check_version() {
(cd "$TEMP_DIR" && sh "$CAS_VERSION_GEN" >/dev/null) if ! (cd $(dirname "$CAS_VERSION_GEN") && ./$(basename "$CAS_VERSION_GEN")); then
if [ ! -f "$TEMP_DIR/$CAS_VERSION_GEN_FILE" ]; then error "failed to obtain CAS version"
error "Couldn't create CAS_VERSION file"
fi fi
while IFS= read -r line; do . "$VERSION_FILE"
case "$line" in
CAS_VERSION_MAIN*) CAS_VERSION_MAIN="${line##*=}";;
CAS_VERSION_MAJOR*) CAS_VERSION_MAJOR="$(printf %02d ${line##*=})";;
CAS_VERSION_MINOR*) CAS_VERSION_MINOR="${line##*=}";;
esac
done < "$TEMP_DIR/$CAS_VERSION_GEN_FILE"
VERSION_SHORT="${CAS_VERSION_MAIN}.${CAS_VERSION_MAJOR}" VERSION_SHORT="${CAS_VERSION_MAIN}.$(printf %02d ${CAS_VERSION_MAJOR})"
if [ $CAS_VERSION_MINOR -ne 0 ]; then if [ $CAS_VERSION_MINOR -ne 0 ]; then
VERSION_SHORT+=".${CAS_VERSION_MINOR}" VERSION_SHORT+=".${CAS_VERSION_MINOR}"
fi fi
@ -150,34 +137,6 @@ check_version() {
if [ "$SUBMODULES_MISSING" ]; then if [ "$SUBMODULES_MISSING" ]; then
error "There are missing submodules:\n${SUBMODULES_MISSING}\nUpdate submodules and try again!" error "There are missing submodules:\n${SUBMODULES_MISSING}\nUpdate submodules and try again!"
fi fi
if [ -d "$SOURCES_DIR/.git" ]; then
CAS_VERSION_BUILD=$(printf %04d $(cd "$SOURCES_DIR" && git log --merges --oneline | wc -l))
LAST_COMMIT_HASH=$(cd "$SOURCES_DIR" && git log -1 --pretty=format:%H)
LAST_COMMIT_HASH_ABBR=$(cd "$SOURCES_DIR" && git log -1 --pretty=format:%h)
LAST_COMMIT_DATE=$(cd "$SOURCES_DIR" && git log -1 --pretty=format:%ci |\
sed "s/ /T/" | sed "s/ //" | sed "s/00$/:00/")
LAST_COMMIT_TIMESTAMP=$(cd "$SOURCES_DIR" && git log -1 --pretty=format:%ct)
for SUBMOD in ${SUBMODULES[@]}; do
LAST_SUB_COMMIT_HASHES+=($(cd "$SOURCES_DIR/$SUBMOD" && git log -1 --pretty=format:%H))
LAST_SUB_COMMIT_HASHES_ABBR+=($(cd "$SOURCES_DIR/$SUBMOD" && git log -1 --pretty=format:%h))
done
if [ $(cd "$SOURCES_DIR" && git tag --points-at HEAD) ]; then
CAS_RELEASE="release"
elif [ $(cd "$SOURCES_DIR" && git log -1 --pretty=format:%H)\
== $(cd "$SOURCES_DIR" && git log -1 --merges --pretty=format:%H) ]; then
CAS_RELEASE="master"
else
CAS_RELEASE="devel.${LAST_COMMIT_TIMESTAMP}"
fi
elif [ -f "$VERSION_FILE" ]; then
source "$VERSION_FILE" &>/dev/null
else
error "Couldn't obtain CAS version - no git tree nor version file within given sources"
fi
VERSION="${CAS_VERSION_MAIN}.${CAS_VERSION_MAJOR}.${CAS_VERSION_MINOR}.${CAS_VERSION_BUILD}"
} }
check_dependencies() { check_dependencies() {
@ -200,41 +159,17 @@ check_dependencies() {
create_dir() { create_dir() {
mkdir -p "$*" mkdir -p "$*"
if [ ! -d "$*" ] || [ ! -w "$*" ]; then if [ ! -d "$*" ] || [ ! -w "$*" ]; then
error "No access to '$*'" error "no access to '$*'"
fi fi
} }
create_temp() { create_temp() {
TEMP_DIR=$(mktemp -d -t ${TEMP_TEMPLATE}.XXXXXXXXXX) TEMP_DIR=$(mktemp -d -t ${TEMP_TEMPLATE}.XXXXXXXXXX)
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
error "Couldn't create temporary directory" error "couldn't create temporary directory"
fi fi
} }
create_version_file() {
echo "--- Creating version file"
mkdir -p $(dirname "$VERSION_FILE")
if ! touch "$VERSION_FILE"; then
error "Couldn't create version file"
fi
CREATION_DATE=$(date --iso-8601=seconds)
CREATION_TIMESTAMP=$(date +%s)
echo "CREATION_DATE=$CREATION_DATE" > "$VERSION_FILE"
echo "CREATION_TIMESTAMP=$CREATION_TIMESTAMP" >> "$VERSION_FILE"
echo "CAS_VERSION_MAIN=$CAS_VERSION_MAIN" >> "$VERSION_FILE"
echo "CAS_VERSION_MAJOR=$CAS_VERSION_MAJOR" >> "$VERSION_FILE"
echo "CAS_VERSION_MINOR=$CAS_VERSION_MINOR" >> "$VERSION_FILE"
echo "CAS_VERSION_BUILD=$CAS_VERSION_BUILD" >> "$VERSION_FILE"
echo "CAS_RELEASE=$CAS_RELEASE" >> "$VERSION_FILE"
echo "LAST_COMMIT_HASH=$LAST_COMMIT_HASH" >> "$VERSION_FILE"
echo "LAST_COMMIT_HASH_ABBR=$LAST_COMMIT_HASH_ABBR" >> "$VERSION_FILE"
echo "LAST_COMMIT_DATE=$LAST_COMMIT_DATE" >> "$VERSION_FILE"
echo "LAST_COMMIT_TIMESTAMP=$LAST_COMMIT_TIMESTAMP" >> "$VERSION_FILE"
echo "LAST_SUB_COMMIT_HASHES=(${LAST_SUB_COMMIT_HASHES[@]})" >> "$VERSION_FILE"
echo "LAST_SUB_COMMIT_HASHES_ABBR=(${LAST_SUB_COMMIT_HASHES_ABBR[@]})" >> "$VERSION_FILE"
}
archive_prepare() { archive_prepare() {
if [ "$ARCHIVE_PREPARED" ]; then if [ "$ARCHIVE_PREPARED" ]; then
return 0 return 0
@ -256,7 +191,7 @@ generate_tar() {
tar -C "$TEMP_DIR" -zcf "$TEMP_DIR/$SOURCES_TAR_NAME" "$CAS_FILENAME" tar -C "$TEMP_DIR" -zcf "$TEMP_DIR/$SOURCES_TAR_NAME" "$CAS_FILENAME"
if [ $? -ne 0 ] || [ ! -f "$TEMP_DIR/$SOURCES_TAR_NAME" ]; then if [ $? -ne 0 ] || [ ! -f "$TEMP_DIR/$SOURCES_TAR_NAME" ]; then
rm -rf "$TEMP_DIR/$SOURCES_TAR_NAME" rm -rf "$TEMP_DIR/$SOURCES_TAR_NAME"
error "Couldn't create tar archive" error "couldn't create tar archive"
fi fi
TAR_CREATED="tar_created" TAR_CREATED="tar_created"
@ -273,7 +208,7 @@ generate_zip() {
(cd "$TEMP_DIR" && zip -qr - "$CAS_FILENAME") > "$OUTPUT_DIR/$SOURCES_ZIP_NAME" (cd "$TEMP_DIR" && zip -qr - "$CAS_FILENAME") > "$OUTPUT_DIR/$SOURCES_ZIP_NAME"
if [ $? -ne 0 ] || [ ! -f "$OUTPUT_DIR/$SOURCES_ZIP_NAME" ]; then if [ $? -ne 0 ] || [ ! -f "$OUTPUT_DIR/$SOURCES_ZIP_NAME" ]; then
rm -rf "$OUTPUT_DIR/$SOURCES_ZIP_NAME" rm -rf "$OUTPUT_DIR/$SOURCES_ZIP_NAME"
error "Couldn't create zip archive" error "couldn't create zip archive"
fi fi
} }
@ -281,7 +216,7 @@ rpm_create_tree() {
echo "--- Creating directory tree for building RPMs" echo "--- Creating directory tree for building RPMs"
mkdir -p "$RPM_BUILD_DIR/"{BUILD,RPMS,SOURCES,SPECS,SRPMS} mkdir -p "$RPM_BUILD_DIR/"{BUILD,RPMS,SOURCES,SPECS,SRPMS}
if [ $? -ne 0 ] || [ ! -w "$RPM_BUILD_DIR" ]; then if [ $? -ne 0 ] || [ ! -w "$RPM_BUILD_DIR" ]; then
error "Couldn't create directory tree for building RPMs" error "couldn't create directory tree for building RPMs"
fi fi
} }
@ -291,7 +226,7 @@ rpm_obtain_sources() {
cp -v "$TEMP_DIR/$SOURCES_TAR_NAME" "$RPM_SOURCES_DIR" cp -v "$TEMP_DIR/$SOURCES_TAR_NAME" "$RPM_SOURCES_DIR"
if [ ! -f "$RPM_SOURCES_DIR/$SOURCES_TAR_NAME" ]; then if [ ! -f "$RPM_SOURCES_DIR/$SOURCES_TAR_NAME" ]; then
error "Couldn't obtain $SOURCES_TAR_NAME sources tarball!" error "couldn't obtain $SOURCES_TAR_NAME sources tarball!"
fi fi
} }
@ -302,15 +237,14 @@ rpm_spec_prepare() {
fi fi
cp -v "$BASE_SPEC" "$RPM_SPECS_DIR/$NAME.spec" cp -v "$BASE_SPEC" "$RPM_SPECS_DIR/$NAME.spec"
sed -i "s/<CAS_VERSION>/$VERSION/g" "$RPM_SPECS_DIR/$NAME.spec" sed -i "s/<CAS_VERSION>/$CAS_VERSION/g" "$RPM_SPECS_DIR/$NAME.spec"
sed -i "s/<RPM_RELEASE>/$CAS_RELEASE/g" "$RPM_SPECS_DIR/$NAME.spec"
if [ "$DEBUG" ]; then if [ "$DEBUG" ]; then
echo "--- Debug RPMs will be built as well" echo "--- Debug RPMs will be built as well"
sed -i "s/%define debug_package %{nil}//g" "$RPM_SPECS_DIR/$NAME.spec" sed -i "s/%define debug_package %{nil}//g" "$RPM_SPECS_DIR/$NAME.spec"
fi fi
if [ ! -f "$RPM_SPECS_DIR/$NAME.spec" ]; then if [ ! -f "$RPM_SPECS_DIR/$NAME.spec" ]; then
error "Couldn't create a SPEC file" error "couldn't create a SPEC file"
fi fi
} }
@ -327,7 +261,7 @@ generate_rpm() {
echo "--- Building binary RPM packages" echo "--- Building binary RPM packages"
(HOME="$TEMP_DIR"; rpmbuild -bb "$RPM_SPECS_DIR/$NAME.spec") (HOME="$TEMP_DIR"; rpmbuild -bb "$RPM_SPECS_DIR/$NAME.spec")
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
error "Couldn't create RPM packages" error "couldn't create RPM packages"
fi fi
mv -t "$OUTPUT_DIR" "$RPM_RPMS_DIR/$ARCH"/* mv -t "$OUTPUT_DIR" "$RPM_RPMS_DIR/$ARCH"/*
fi fi
@ -335,7 +269,7 @@ generate_rpm() {
echo "--- Building source SRPM package" echo "--- Building source SRPM package"
(HOME="$TEMP_DIR"; rpmbuild -bs "$RPM_SPECS_DIR/$NAME.spec") (HOME="$TEMP_DIR"; rpmbuild -bs "$RPM_SPECS_DIR/$NAME.spec")
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
error "Couldn't create SRPM package" error "couldn't create SRPM package"
fi fi
mv -t "$OUTPUT_DIR" "$RPM_SRPMS_DIR"/* mv -t "$OUTPUT_DIR" "$RPM_SRPMS_DIR"/*
fi fi
@ -343,7 +277,7 @@ generate_rpm() {
echo "--- Building source and binary RPM packages" echo "--- Building source and binary RPM packages"
(HOME="$TEMP_DIR"; rpmbuild -ba "$RPM_SPECS_DIR/$NAME.spec") (HOME="$TEMP_DIR"; rpmbuild -ba "$RPM_SPECS_DIR/$NAME.spec")
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
error "Couldn't create RPM packages" error "couldn't create RPM packages"
fi fi
mv -t "$OUTPUT_DIR" "$RPM_SRPMS_DIR"/* mv -t "$OUTPUT_DIR" "$RPM_SRPMS_DIR"/*
mv -t "$OUTPUT_DIR" "$RPM_RPMS_DIR/$ARCH"/* mv -t "$OUTPUT_DIR" "$RPM_RPMS_DIR/$ARCH"/*
@ -375,9 +309,6 @@ while (( $# )); do
srpm) srpm)
GENERATE_SRPM="generate_srpm" GENERATE_SRPM="generate_srpm"
;; ;;
version-only)
VERSION_ONLY="version_only"
;;
--output-dir|-o) --output-dir|-o)
OUTPUT_DIR="$2" OUTPUT_DIR="$2"
if ! dirname $OUTPUT_DIR &>/dev/null; then if ! dirname $OUTPUT_DIR &>/dev/null; then
@ -417,22 +348,21 @@ create_temp
# By default all created packages will be put in: # By default all created packages will be put in:
: ${OUTPUT_DIR:="$SOURCES_DIR/packages"} : ${OUTPUT_DIR:="$SOURCES_DIR/packages"}
# Version file location:
VERSION_FILE="$SOURCES_DIR/.metadata/cas_version"
# RPM building directories: # RPM building directories:
RPM_BUILD_DIR="$TEMP_DIR/rpmbuild" RPM_BUILD_DIR="$TEMP_DIR/rpmbuild"
RPM_SOURCES_DIR="$RPM_BUILD_DIR/SOURCES" RPM_SOURCES_DIR="$RPM_BUILD_DIR/SOURCES"
RPM_SPECS_DIR="$RPM_BUILD_DIR/SPECS" RPM_SPECS_DIR="$RPM_BUILD_DIR/SPECS"
RPM_RPMS_DIR="$RPM_BUILD_DIR/RPMS" RPM_RPMS_DIR="$RPM_BUILD_DIR/RPMS"
RPM_SRPMS_DIR="$RPM_BUILD_DIR/SRPMS" RPM_SRPMS_DIR="$RPM_BUILD_DIR/SRPMS"
# CAS version generator location and output file name: # Version file location:
CAS_VERSION_GEN="$SOURCES_DIR/modules/CAS_VERSION_GEN" VERSION_FILE="$SOURCES_DIR/.metadata/cas_version"
CAS_VERSION_GEN_FILE="CAS_VERSION" # CAS version generator location:
CAS_VERSION_GEN="$SOURCES_DIR/utils/cas_version_gen"
check_version check_version
# CAS naming convention: # CAS naming convention:
CAS_FILENAME="$NAME-v$VERSION" CAS_FILENAME="$NAME-$CAS_VERSION"
# CAS sources archives filenames: # CAS sources archives filenames:
SOURCES_TAR_NAME="$CAS_FILENAME.tar.gz" SOURCES_TAR_NAME="$CAS_FILENAME.tar.gz"
SOURCES_ZIP_NAME="$CAS_FILENAME.zip" SOURCES_ZIP_NAME="$CAS_FILENAME.zip"
@ -443,12 +373,7 @@ SOURCES_ZIP_NAME="$CAS_FILENAME.zip"
# Run the package generator script # Run the package generator script
# #
info "\n=== Running OpenCAS '$VERSION-$CAS_RELEASE' package generator ===\n" info "\n=== Running OpenCAS '$CAS_VERSION' package generator ===\n"
if [ "$VERSION_ONLY" ]; then
create_version_file
exit 0
fi
echo -n "Packages that will be built: " echo -n "Packages that will be built: "
for package in ${!GENERATE_*}; do for package in ${!GENERATE_*}; do
@ -457,9 +382,9 @@ done
echo -e "\n" echo -e "\n"
check_dependencies check_dependencies
create_version_file
create_dir "$OUTPUT_DIR" create_dir "$OUTPUT_DIR"
for package in ${!GENERATE_*}; do for package in ${!GENERATE_*}; do
${package,,} ${package,,}
done done
success
echo -e "\n\e[32m=== ALL DONE ===\e[0m\n\nYou can find your fresh packages in '$OUTPUT_DIR'\n"

3
version Normal file
View File

@ -0,0 +1,3 @@
CAS_VERSION_MAIN=20
CAS_VERSION_MAJOR=6
CAS_VERSION_MINOR=0