diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ffc1e675d93d35689edc53c5be695f28af47f187..366a851af491167a2ec98cef2038c58353f0091b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -250,7 +250,7 @@ doc:doc: before_script: - mkdir -p build && pushd build - ../CMake/generate.py -wm - - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .. -GNinja + - cmake -DBUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .. -GNinja - popd allow_failure: true # TODO: Remove dependencies: [] diff --git a/CMake/Modules/CompilerFlags.cmake b/CMake/Modules/CompilerFlags.cmake index dedde77c5f92cc7c36315cac4d0f7f805a631aed..b1d6a68d0a1bcaebda0eea43e2f681980749f650 100644 --- a/CMake/Modules/CompilerFlags.cmake +++ b/CMake/Modules/CompilerFlags.cmake @@ -31,6 +31,14 @@ if(BACKTRACE_EXISTS) add_definitions(-DBACKTRACE) endif() +if(BUILD_TYPE STREQUAL "Debug") + add_definitions(-DREL_DEBUG) +elseif(BUILD_TYPE STREQUAL "Release") + add_definitions(-DREL_RELEASE) +elseif(BUILD_TYPE STREQUAL "Snapshot") + add_definitions(-DREL_SNAPSHOT) +endif() + if (CMAKE_BUILD_TYPE STREQUAL "Debug") add_definitions(-DDEBUG) diff --git a/CMake/Modules/git.cmake b/CMake/Modules/git.cmake index 478f67b8c956d6edba6d567e4f26ca5b4aec82f6..032e42627ce3294e55a2f351debc8c8ae3a1c72e 100644 --- a/CMake/Modules/git.cmake +++ b/CMake/Modules/git.cmake @@ -1,42 +1,50 @@ -# Get the current working commit hash function(set_git_version) - find_package(Git) + find_package(Git) - if (Git_FOUND) - execute_process ( - COMMAND ${GIT_EXECUTABLE} describe --tags HEAD - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE ALIB_GIT_DESCRIBE - RESULT_VARIABLE RET_CODE - OUTPUT_STRIP_TRAILING_WHITESPACE - ) + if (NOT Git_FOUND) + message ( "[Git] Git not found" ) + endif() - if("${RET_CODE}" STREQUAL "0") + execute_process ( + COMMAND ${GIT_EXECUTABLE} describe --tags --match "v*" HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE ALIB_GIT_DESCRIBE + RESULT_VARIABLE RET_CODE + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + if("${RET_CODE}" STREQUAL "0") message ( "[Git] Describe: '${ALIB_GIT_DESCRIBE}'" ) SET ( ALIB_GIT_DESCRIBE "${ALIB_GIT_DESCRIBE}" PARENT_SCOPE ) - else() + else() message ( WARNING "[Git] Failed retrieving current commit (return code ${RET_CODE})" ) SET ( ALIB_GIT_DESCRIBE "<unknown commit>" PARENT_SCOPE ) return() - endif() + endif() - execute_process ( - COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE ALIB_GIT_BRANCH - RESULT_VARIABLE RET_CODE - OUTPUT_STRIP_TRAILING_WHITESPACE - ) + execute_process ( + COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE ALIB_GIT_BRANCH + RESULT_VARIABLE RET_CODE + OUTPUT_STRIP_TRAILING_WHITESPACE + ) - if("${RET_CODE}" STREQUAL "0") + if("${RET_CODE}" STREQUAL "0") message ( "[Git] Branch: '${ALIB_GIT_BRANCH}'" ) SET ( ALIB_GIT_BRANCH "${ALIB_GIT_BRANCH}" PARENT_SCOPE ) - else() + else() message ( WARNING "[Git] Failed retrieving current branch (return code ${RET_CODE})" ) SET ( ALIB_GIT_BRANCH "<unknown branch>" PARENT_SCOPE ) return() - endif() - else() - message ( "[Git] Git not found" ) - endif() + endif() endfunction(set_git_version) + +function(set_git_snapshot_version) + set(ALIB_SNAPSHOT_VERSION ${ALIB_GIT_DESCRIBE}) + string(REGEX REPLACE "^v" "" ALIB_SNAPSHOT_VERSION ${ALIB_SNAPSHOT_VERSION}) + string(REGEX REPLACE "\([^-]*-g\)" "r\\1" ALIB_SNAPSHOT_VERSION ${ALIB_SNAPSHOT_VERSION}) + string(REPLACE "-" "." ALIB_SNAPSHOT_VERSION ${ALIB_SNAPSHOT_VERSION}) + set(ALIB_SNAPSHOT_VERSION "${ALIB_SNAPSHOT_VERSION}" PARENT_SCOPE ) + message("[Git] Snapshot version: ${ALIB_SNAPSHOT_VERSION}") +endfunction(set_git_snapshot_version) diff --git a/CMake/Modules/versioning.cmake b/CMake/Modules/versioning.cmake index da2b95197e8174439b6382eccf01b35e452c75cd..dd57d812d7f3ab0872398e30c50169a4c13f14c7 100644 --- a/CMake/Modules/versioning.cmake +++ b/CMake/Modules/versioning.cmake @@ -4,9 +4,24 @@ message("[Versioning] Current version is ${PROJECT_VERSION}") include(git) -if(CMAKE_BUILD_TYPE STREQUAL "Debug") + +if(BUILD_TYPE MATCHES "(Debug|Snapshot)") + # sets ALIB_GIT_BRANCH + # sets ALIB_GIT_DESCRIBE set_git_version() endif() +if(BUILD_TYPE STREQUAL "Snapshot") + # sets ALIB_SNAPSHOT_VERSION + set_git_snapshot_version() +endif() + +if(BUILD_TYPE STREQUAL "Debug") + set(ALIB_VERSION_INFO "${PROJECT_VERSION} | Debug build @ ${ALIB_GIT_BRANCH} ${ALIB_GIT_DESCRIBE}" ) +elseif(BUILD_TYPE STREQUAL "Release") + set(ALIB_VERSION_INFO "${PROJECT_VERSION}") +elseif(BUILD_TYPE STREQUAL "Snapshot") + set(ALIB_VERSION_INFO "${ALIB_SNAPSHOT_VERSION}") +endif() configure_file ( ${CONFIGURE_HEADERS_SRC_DIR}/version.hpp.in diff --git a/CMake/headers/version.hpp.in b/CMake/headers/version.hpp.in index 15d1aeebf61c5d911f0f5f19d5b319dec5a60c0f..4686f638c36b39f34eeff1f3c5d9961df3c8b263 100644 --- a/CMake/headers/version.hpp.in +++ b/CMake/headers/version.hpp.in @@ -1,19 +1,12 @@ #ifndef __VERSION_HPP_ #define __VERSION_HPP_ -#define ALIB_VERSION "${PROJECT_VERSION}" -#define ALIB_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}" -#define ALIB_VERSION_MINOR "${PROJECT_VERSION_MINOR}" -#define ALIB_VERSION_PATCH "${PROJECT_VERSION_PATCH}" +#define ALIB_VERSION "${PROJECT_VERSION}" +#define ALIB_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}" +#define ALIB_VERSION_MINOR "${PROJECT_VERSION_MINOR}" +#define ALIB_VERSION_PATCH "${PROJECT_VERSION_PATCH}" #define ALIB_VERSION_STAMP ${PROJECT_VERSION_MAJOR} * 10000 + ${PROJECT_VERSION_MINOR} * 100 + ${PROJECT_VERSION_PATCH} - -#ifdef DEBUG - #cmakedefine ALIB_GIT_BRANCH "${ALIB_GIT_BRANCH}" - #cmakedefine ALIB_GIT_DESCRIBE "${ALIB_GIT_DESCRIBE}" - #define ALIB_VERSION_INFO ALIB_VERSION " | Build: Debug | Git: " ALIB_GIT_BRANCH " @ " ALIB_GIT_DESCRIBE -#else // release - #define ALIB_VERSION_INFO ALIB_VERSION -#endif +#cmakedefine ALIB_VERSION_INFO "${ALIB_VERSION_INFO}" #endif // __VERSION_HPP_ diff --git a/CMake/templates/CMakeLists_root.txt b/CMake/templates/CMakeLists_root.txt index 3960c0822263c378c189aaebb29571b733073e46..4d912294ad9c4bb4cb01da4b73c519c0d94f48b2 100644 --- a/CMake/templates/CMakeLists_root.txt +++ b/CMake/templates/CMakeLists_root.txt @@ -19,12 +19,18 @@ if (NOT UNIX) endif () # If not specified whether Debug or Release, select debug. Fail if invalid. -# cmake -DCMAKE_BUILD_TYPE={{Release,Debug}} -if (NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE Debug) -endif () -if (NOT CMAKE_BUILD_TYPE MATCHES "(Release|Debug)") - message(FATAL_ERROR "Unsupported build type (${{CMAKE_BUILD_TYPE}})") +# cmake -DBUILD_TYPE={{Release,Snapshot,Debug}} +if (NOT BUILD_TYPE) + set(BUILD_TYPE Debug) +endif() +if(NOT BUILD_TYPE MATCHES "(Release|Snapshot|Debug)") + message(FATAL_ERROR "Unsupported build type (${{BUILD_TYPE}}). Valid values: Release | Snapshot | Debug ") +elseif(BUILD_TYPE MATCHES "Release") + set(CMAKE_BUILD_TYPE Release) +elseif(BUILD_TYPE MATCHES "Snapshot") + set(CMAKE_BUILD_TYPE Release) +elseif(BUILD_TYPE MATCHES "Debug") + set(CMAKE_BUILD_TYPE Debug) endif() if(DEFINED ENV{{CMAKE_BUILD_PARALLEL_LEVEL}}) diff --git a/extra/docker/Dockerfile.master b/extra/docker/Dockerfile.snapshot similarity index 96% rename from extra/docker/Dockerfile.master rename to extra/docker/Dockerfile.snapshot index ecc4e35d29d414a6deb008b5e16dd463020ce7fd..dc05592cbeb6b2517808def00551c6b49952bff1 100644 --- a/extra/docker/Dockerfile.master +++ b/extra/docker/Dockerfile.snapshot @@ -11,7 +11,7 @@ ADD . /build WORKDIR /build/release RUN ../CMake/generate.py -wm -g cli && \ cmake \ - -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_TYPE=Snapshot \ -DCMAKE_INSTALL_PREFIX=/build/install \ .. && \ make -j $(grep -c processor /proc/cpuinfo) && \ @@ -43,7 +43,7 @@ RUN apk add --update \ libexecinfo-dev libxml2-dev tclap-dev readline-dev qt5-qtbase-dev graphviz-dev jsoncpp-dev && \ ../CMake/generate.py -wm && \ cmake \ - -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_TYPE=Snapshot \ -DCMAKE_INSTALL_PREFIX=/build/install \ .. && \ make -j $(grep -c processor /proc/cpuinfo) && \ diff --git a/extra/docker/Dockerfile.stable b/extra/docker/Dockerfile.stable new file mode 100644 index 0000000000000000000000000000000000000000..20ee37142ad839cc49740f64582c6ef309ff3764 --- /dev/null +++ b/extra/docker/Dockerfile.stable @@ -0,0 +1,72 @@ +# ------------------------------------------------------------------------------------------------- +# build-cli stage + +FROM alpine:3.9 AS build-cli + +RUN apk add --update \ + curl bash g++ make cmake python3 \ + libexecinfo-dev libxml2-dev tclap-dev readline-dev + +ADD . /build +WORKDIR /build/release +RUN ../CMake/generate.py -wm -g cli && \ + cmake \ + -DBUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/build/install \ + .. && \ + make -j $(grep -c processor /proc/cpuinfo) && \ + make test ARGS="-j $(grep -c processor /proc/cpuinfo) --output-on-failure" && \ + make install + +# ------------------------------------------------------------------------------------------------- +# deploy-cli stage + +FROM alpine:3.9 AS deploy-cli +LABEL maintainer="peckato1@fit.cvut.cz" + +RUN apk add --update \ + bash libstdc++ \ + libexecinfo libxml2 tclap readline + +COPY --from=build-cli /build/install /usr +CMD /usr/bin/aql2 + +# ------------------------------------------------------------------------------------------------- +# build-all stage + +FROM alpine:3.9 AS build-all +COPY --from=build-cli /build /build +WORKDIR /build/release + +RUN apk add --update \ + curl bash g++ make cmake python3 \ + libexecinfo-dev libxml2-dev tclap-dev readline-dev qt5-qtbase-dev graphviz-dev jsoncpp-dev && \ + ../CMake/generate.py -wm && \ + cmake \ + -DBUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/build/install \ + .. && \ + make -j $(grep -c processor /proc/cpuinfo) && \ + make test ARGS="-j $(grep -c processor /proc/cpuinfo) --output-on-failure" && \ + make install + +# ------------------------------------------------------------------------------------------------- +# deploy-all stage + +FROM alpine:3.9 AS deploy-all +LABEL maintainer="peckato1@fit.cvut.cz" + +RUN apk add --update \ + bash \ + libstdc++ \ + \ + libexecinfo \ + libxml2 \ + tclap \ + readline \ + qt5-qtbase-x11 \ + graphviz \ + jsoncpp + +COPY --from=build-all /build/install /usr +CMD /usr/bin/aql2 diff --git a/extra/scripts/CD/distrofiles/arch/snapshot/PKGBUILD b/extra/scripts/CD/distrofiles/arch/snapshot/PKGBUILD index affca0c97d32701e5e585f9f7dcf4814cb3fcb5c..04eab8d2810f3ac5ccf32a69b06e628bb53aef92 100644 --- a/extra/scripts/CD/distrofiles/arch/snapshot/PKGBUILD +++ b/extra/scripts/CD/distrofiles/arch/snapshot/PKGBUILD @@ -35,7 +35,7 @@ build() { cd "$pkgbase/build" python ../CMake/generate.py -wm cmake .. \ - -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_TYPE=Snapshot \ -DCMAKE_INSTALL_PREFIX=/usr make } diff --git a/extra/scripts/CD/distrofiles/arch/stable/PKGBUILD b/extra/scripts/CD/distrofiles/arch/stable/PKGBUILD index 87232ac3bc74ef69bf73e38fc9d459fd30aae613..03268e35870a1473f035d759ba76c20a256ba81b 100644 --- a/extra/scripts/CD/distrofiles/arch/stable/PKGBUILD +++ b/extra/scripts/CD/distrofiles/arch/stable/PKGBUILD @@ -30,7 +30,7 @@ build() { cd "$pkgbase-v$pkgver/build" python ../CMake/generate.py -wm cmake .. \ - -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr make } diff --git a/extra/scripts/CD/distrofiles/deb/snapshot/debian/rules b/extra/scripts/CD/distrofiles/deb/snapshot/debian/rules index bd4eae84f989dc1d2076d8380f9bef4b6b49fd46..43fc5fa8473dc80ecbd4e6b94fffee286fecce87 100755 --- a/extra/scripts/CD/distrofiles/deb/snapshot/debian/rules +++ b/extra/scripts/CD/distrofiles/deb/snapshot/debian/rules @@ -22,7 +22,7 @@ override_dh_strip: override_dh_auto_configure: ./CMake/generate.py -wm - dh_auto_configure -- -DCMAKE_BUILD_TYPE=Release + dh_auto_configure -- -DBUILD_TYPE=Snapshot #override_dh_auto_test: # echo "Skipping tests" diff --git a/extra/scripts/CD/packaging/package-docker.sh b/extra/scripts/CD/packaging/package-docker.sh index f31b504d895ba8d7585b6ce33d1e3ba979b3533b..93f61e7d3556bd4318a329022f5450b7b38090be 100644 --- a/extra/scripts/CD/packaging/package-docker.sh +++ b/extra/scripts/CD/packaging/package-docker.sh @@ -15,8 +15,14 @@ package () { BUILD_ALL=all_build BUILD_CLI=cli_build - docker build --target=deploy-cli -f $GIT_ROOT/extra/docker/Dockerfile.master -t $BUILD_CLI . - docker build --target=deploy-all -f $GIT_ROOT/extra/docker/Dockerfile.master -t $BUILD_ALL . + if [[ $TYPE == "snapshot" ]]; then + DOCKERFILE="Dockerfile.snapshot" + elif [[ $TYPE == "stable" ]]; then + DOCKERFILE="Dockerfile.stable" + fi + + docker build --target=deploy-cli -f $GIT_ROOT/extra/docker/$DOCKERFILE -t $BUILD_CLI . + docker build --target=deploy-all -f $GIT_ROOT/extra/docker/$DOCKERFILE -t $BUILD_ALL . docker run $BUILD_CLI /usr/bin/aql2 --help docker run $BUILD_ALL /usr/bin/aql2 --help @@ -35,7 +41,7 @@ package () { docker tag "$BUILD_CLI" "$IMAGE_CLI:$TAG_STABLE" docker tag "$BUILD_CLI" "$IMAGE_CLI:$TAG_LATEST" docker tag "$BUILD_ALL" "$IMAGE_GUI:$TAG_STABLE" # gui-version is now only a symlink to all-version - docker tag "$BUILD_ALL" "$IMAGE_GUI:$TAG_LATEST" # gui-version is now only a symlink to all-version + docker tag "$BUILD_ALL" "$IMAGE_GUI:$TAG_LATEST" # gui-version is now only a symlink to all-version docker tag "$BUILD_ALL" "$IMAGE_ALL:$TAG_STABLE" docker tag "$BUILD_ALL" "$IMAGE_ALL:$TAG_LATEST" diff --git a/extra/scripts/build.sh b/extra/scripts/build.sh index aa8254b4a4b835d34880c62fe070396778c92f21..f4c8c1b727618df611c5bbc7a9912a2b59a38c52 100755 --- a/extra/scripts/build.sh +++ b/extra/scripts/build.sh @@ -59,10 +59,10 @@ installed_or_exit "make" "ninja" # check if shortcut ARGS_SHORTCUT= -if [[ $# -ge 1 ]] && [[ $1 == "release" || $1 == "debug" ]]; then +if [[ $# -ge 1 ]] && [[ $1 == "release" || $1 == "debug" || $1 == "snapshot" ]]; then ARGS_SHORTCUT=1 - if [[ $1 == "release" ]]; then + if [[ $1 == "release" || $1 == "snapshot" ]]; then BUILD_DIR="release" BUILD_MODE="Release" elif [[ $1 == "debug" ]]; then @@ -89,6 +89,8 @@ while getopts "d:m:j:n" arg; do BUILD_MODE="Debug" elif [[ "$TMP" == "release" ]]; then BUILD_MODE="Release" + elif [[ "$TMP" == "snapshot" ]]; then + BUILD_MODE="Snapshot" else usage_and_exit fi @@ -157,7 +159,7 @@ else fi -CMAKE_FLAGS="-DCMAKE_BUILD_TYPE=$BUILD_MODE -DCMAKE_EXPORT_COMPILE_COMMANDS=ON" +CMAKE_FLAGS="-DBUILD_TYPE=$BUILD_MODE -DCMAKE_EXPORT_COMPILE_COMMANDS=ON" if [[ $BUILD_SYSTEM == "ninja" ]]; then CMAKE_FLAGS="$CMAKE_FLAGS -GNinja" fi