diff --git a/CMakeLists.txt b/CMakeLists.txt index 3a0abbb6..3f5b3410 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,9 @@ cmake_minimum_required(VERSION 3.16) -project(one VERSION 6.3.0 LANGUAGES C CXX) +file(READ "${CMAKE_CURRENT_LIST_DIR}/VERSION" ONE_PROJECT_VERSION) +set_property(DIRECTORY APPEND PROPERTY + CMAKE_CONFIGURE_DEPENDS "${CMAKE_CURRENT_LIST_DIR}/VERSION") +string(STRIP "${ONE_PROJECT_VERSION}" ONE_PROJECT_VERSION) +project(one VERSION "${ONE_PROJECT_VERSION}" LANGUAGES C CXX) list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") include(DebugSymbols) @@ -118,7 +122,11 @@ sourcemeta_target_clang_format(SOURCES test/*.h test/*.cc enterprise/*.h enterprise/*.cc) sourcemeta_target_shellcheck(SOURCES - test/*.sh docker/*.sh enterprise/scripts/*.sh benchmark/*.sh) + release.sh + test/*.sh + docker/*.sh + enterprise/scripts/*.sh + benchmark/*.sh) if(ONE_TESTS) enable_testing() diff --git a/Dockerfile b/Dockerfile index 6fe639ba..7fea4186 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,6 +11,7 @@ COPY src /source/src COPY contrib /source/contrib COPY vendor /source/vendor COPY CMakeLists.txt /source/CMakeLists.txt +COPY VERSION /source/VERSION # For testing COPY test/cli /source/test/cli diff --git a/VERSION b/VERSION new file mode 100644 index 00000000..798e3899 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +6.3.0 diff --git a/enterprise/Dockerfile b/enterprise/Dockerfile index 6bb56a6f..42dfbea9 100644 --- a/enterprise/Dockerfile +++ b/enterprise/Dockerfile @@ -28,6 +28,7 @@ COPY contrib /source/contrib COPY vendor /source/vendor COPY DEPENDENCIES /source/DEPENDENCIES COPY CMakeLists.txt /source/CMakeLists.txt +COPY VERSION /source/VERSION COPY enterprise /source/enterprise # For testing diff --git a/release.sh b/release.sh new file mode 100755 index 00000000..d027dbcd --- /dev/null +++ b/release.sh @@ -0,0 +1,51 @@ +#!/bin/sh + +set -o errexit +set -o nounset + +usage() { + echo "Usage: $0 " 1>&2 + exit 1 +} + +if [ "$#" -ne 1 ]; then + usage +fi + +BUMP_TYPE="$1" + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +VERSION_FILE="${SCRIPT_DIR}/VERSION" + +CURRENT_VERSION="$(cat "$VERSION_FILE")" +MAJOR="$(echo "$CURRENT_VERSION" | cut -d . -f1)" +MINOR="$(echo "$CURRENT_VERSION" | cut -d . -f2)" +PATCH="$(echo "$CURRENT_VERSION" | cut -d . -f3)" + +case "$BUMP_TYPE" in + major) + MAJOR=$((MAJOR + 1)) + MINOR=0 + PATCH=0 + ;; + minor) + MINOR=$((MINOR + 1)) + PATCH=0 + ;; + patch) + PATCH=$((PATCH + 1)) + ;; + *) + usage + ;; +esac + +NEW_VERSION="${MAJOR}.${MINOR}.${PATCH}" +echo "Bumping version: ${CURRENT_VERSION} -> ${NEW_VERSION}" + +echo "$NEW_VERSION" > "$VERSION_FILE" + +git -C "$SCRIPT_DIR" commit --only --gpg-sign --signoff \ + --message "v${NEW_VERSION}" -- VERSION +git -C "$SCRIPT_DIR" tag --sign "v${NEW_VERSION}" --message "v${NEW_VERSION}" +git -C "$SCRIPT_DIR" log -1 --patch