diff --git a/.github/actions/build-asset-unix.sh b/.github/actions/build-asset-unix.sh index d96f234f..2505d10d 100755 --- a/.github/actions/build-asset-unix.sh +++ b/.github/actions/build-asset-unix.sh @@ -45,7 +45,6 @@ fi set -x mkdir build-${target} && cd build-${target} cmake .. -DCMAKE_BUILD_TYPE=Release -bash -eo pipefail ../embed-version.sh cmake --build . --config Release --target $target -j $thread_count chmod +x ./${exe_name} diff --git a/.github/actions/get-version.sh b/.github/actions/get-version.sh index 16c51dda..9f3e4f3f 100755 --- a/.github/actions/get-version.sh +++ b/.github/actions/get-version.sh @@ -1,4 +1,4 @@ -#! /usr/bin/env bash +#!/usr/bin/env bash # NOTE: This is meant to be run from the repo root dir # set -eo pipefail @@ -6,31 +6,48 @@ set -eo pipefail os=$1 arch=$2 -shift $# - -# version_cmp=($(./extract-version.sh)) -. ./extract-version.sh - -ver_maj=$bb_ver_maj -ver_min=$bb_ver_min -ver_rev=$bb_ver_rev -ver_suffix=$bb_version_suffix - -version="${ver_maj}.${ver_min}.${ver_rev}${ver_suffix}" +version_file="./VERSION" +if [ ! -f "$version_file" ]; then + echo "VERSION file not found!" + exit 1 +fi -# echo "Ref name: '$GITHUB_REF_NAME'" -# if [[ "$GITHUB_REF_NAME" != "master" ]]; then -# suffix="-${GITHUB_REF_NAME}" -# fi +# Read VERSION file into an array +declare -a version_info=() +while IFS= read -r line; do + line=$(echo -n "$line" | tr -d '\r') + version_info+=("$line") +done < "$version_file" + +# Extract major, minor, and revision numbers +IFS='.' read -ra ver_parts <<< "${version_info[0]}" +major="${ver_parts[0]}" +minor="${ver_parts[1]}" +revision="${ver_parts[2]}" + +# Set suffix +suffix="${version_info[1]}" +if [ -z "$CI" ]; then + suffix="-dev" +elif [[ -n "$suffix" ]] && [[ "${suffix:0:1}" != "-" ]]; then + suffix="-${suffix}" +fi +# Set artifact extension ext="tar.gz" - if [[ "$os" == "windows" ]]; then ext="zip" fi -echo "BB_VERSION=$version" >> $GITHUB_ENV -echo "BB_ARTIFACT_NAME=bladebit-v${version}-${os}-${arch}.${ext}" >> $GITHUB_ENV -echo "BB_ARTIFACT_NAME_CUDA=bladebit-cuda-v${version}-${os}-${arch}.${ext}" >> $GITHUB_ENV - - +# Create a full version string +version="${major}.${minor}.${revision}${suffix}" + +if [[ -n $CI ]]; then + echo "BB_VERSION=$version" >> "$GITHUB_ENV" + echo "BB_ARTIFACT_NAME=bladebit-v${version}-${os}-${arch}.${ext}" >> "$GITHUB_ENV" + echo "BB_ARTIFACT_NAME_CUDA=bladebit-cuda-v${version}-${os}-${arch}.${ext}" >> "$GITHUB_ENV" +else + echo "BB_VERSION=$version" + echo "BB_ARTIFACT_NAME=bladebit-v${version}-${os}-${arch}.${ext}" + echo "BB_ARTIFACT_NAME_CUDA=bladebit-cuda-v${version}-${os}-${arch}.${ext}" +fi diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml index 0cfc70cc..b021dbbc 100644 --- a/.github/workflows/build-release.yml +++ b/.github/workflows/build-release.yml @@ -449,7 +449,6 @@ jobs: run: | mkdir build && cd build cmake .. - bash -eo pipefail ../embed-version.sh cat ../src/Version.h cmake --build . --target bladebit --config Release @@ -519,7 +518,6 @@ jobs: run: | mkdir build_cuda && cd build_cuda cmake .. - bash -eo pipefail ../embed-version.sh cat ../src/Version.h cmake --build . --target bladebit_cuda --config Release diff --git a/cmake_modules/EmbedVersion.cmake b/cmake_modules/EmbedVersion.cmake index 1c346632..852da1cc 100644 --- a/cmake_modules/EmbedVersion.cmake +++ b/cmake_modules/EmbedVersion.cmake @@ -1,50 +1,41 @@ - -if((NOT DEFINED ENV{CI}) AND (NOT DEFINED CACHE{bb_version_embedded})) - message("Embedding local build version") - - set(cmd_shell bash) - set(cmd_ext sh) - if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - - find_program(bash_path NAMES bash.exe NO_CACHE) - - if(${bash_path} MATCHES "-NOTFOUND") - set(cmd_shell powershell) - set(cmd_ext ps1) - else() - set(cmd_shell "${bash_path}") - endif() - endif() - - execute_process(COMMAND ${cmd_shell} ${CMAKE_SOURCE_DIR}/extract-version.${cmd_ext} major OUTPUT_VARIABLE bb_ver_maj WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND_ERROR_IS_FATAL ANY) - execute_process(COMMAND ${cmd_shell} ${CMAKE_SOURCE_DIR}/extract-version.${cmd_ext} minor OUTPUT_VARIABLE bb_ver_min WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND_ERROR_IS_FATAL ANY) - execute_process(COMMAND ${cmd_shell} ${CMAKE_SOURCE_DIR}/extract-version.${cmd_ext} revision OUTPUT_VARIABLE bb_ver_rev WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND_ERROR_IS_FATAL ANY) - execute_process(COMMAND ${cmd_shell} ${CMAKE_SOURCE_DIR}/extract-version.${cmd_ext} suffix OUTPUT_VARIABLE bb_ver_suffix WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND_ERROR_IS_FATAL ANY) - execute_process(COMMAND ${cmd_shell} ${CMAKE_SOURCE_DIR}/extract-version.${cmd_ext} commit OUTPUT_VARIABLE bb_ver_commit WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND_ERROR_IS_FATAL ANY) - - # Remove trailing whitespace incurred in windows gitbash - string(STRIP "${bb_ver_maj}" bb_ver_maj) - string(STRIP "${bb_ver_min}" bb_ver_min) - string(STRIP "${bb_ver_rev}" bb_ver_rev) - string(STRIP "${bb_ver_suffix}" bb_ver_suffix) - string(STRIP "${bb_ver_commit}" bb_ver_commit) - - set(bb_ver_suffix ${bb_ver_suffix}-dev) - - # This is slow on windows, so let's cache them - set(bb_ver_maj ${bb_ver_maj} CACHE STRING "") - set(bb_ver_min ${bb_ver_min} CACHE STRING "") - set(bb_ver_rev ${bb_ver_rev} CACHE STRING "") - set(bb_ver_suffix ${bb_ver_suffix} CACHE STRING "") - set(bb_ver_commit ${bb_ver_commit} CACHE STRING "") +# Read the version from the file +file(READ "${CMAKE_SOURCE_DIR}/VERSION" version_file_content) +string(STRIP "${version_file_content}" version_file_content) +string(REPLACE "\n" ";" version_file_lines "${version_file_content}") + +# Parse major, minor, and revision numbers +list(GET version_file_lines 0 version_str) +string(REPLACE "." ";" version_numbers "${version_str}") +list(GET version_numbers 0 bb_ver_maj) +list(GET version_numbers 1 bb_ver_min) +list(GET version_numbers 2 bb_ver_rev) + +# Parse the optional suffix +list(LENGTH version_file_lines version_file_lines_length) +if(${version_file_lines_length} GREATER 1) + list(GET version_file_lines 1 bb_ver_suffix) +else() + set(bb_ver_suffix "") endif() -if(NOT DEFINED ENV{CI}) - add_compile_definitions(BLADEBIT_VERSION_MAJ=${bb_ver_maj}) - add_compile_definitions(BLADEBIT_VERSION_MIN=${bb_ver_min}) - add_compile_definitions(BLADEBIT_VERSION_REV=${bb_ver_rev}) - add_compile_definitions(BLADEBIT_VERSION_SUFFIX="${bb_ver_suffix}") - add_compile_definitions(BLADEBIT_GIT_COMMIT="${bb_ver_commit}") +# Determine if we are in a CI environment +if(DEFINED ENV{CI}) + # CI build; use the suffix from the VERSION file + set(bb_ver_suffix_final "-${bb_ver_suffix}") +else() + # Local build; use "-dev" as the suffix + set(bb_ver_suffix_final "-dev") endif() -set(bb_version_embedded on CACHE BOOL "Version embedding has already happened.") \ No newline at end of file +# Get the Git commit hash +execute_process(COMMAND git rev-parse HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE bb_ver_commit + OUTPUT_STRIP_TRAILING_WHITESPACE) + +# Set compile definitions +add_compile_definitions(BLADEBIT_VERSION_MAJ=${bb_ver_maj}) +add_compile_definitions(BLADEBIT_VERSION_MIN=${bb_ver_min}) +add_compile_definitions(BLADEBIT_VERSION_REV=${bb_ver_rev}) +add_compile_definitions(BLADEBIT_VERSION_SUFFIX="${bb_ver_suffix_final}") +add_compile_definitions(BLADEBIT_GIT_COMMIT="${bb_ver_commit}") diff --git a/embed-version.sh b/embed-version.sh deleted file mode 100755 index f9c8d834..00000000 --- a/embed-version.sh +++ /dev/null @@ -1,28 +0,0 @@ -#! /usr/bin/env bash -set -eo pipefail -cd "$(cd "$(dirname "${BASH_SOURCE[0]}")" &> /dev/null && pwd)" - -# version=($(./extract-version.sh)) -. ./extract-version.sh - -ver_maj=$bb_ver_maj -ver_min=$bb_ver_min -ver_rev=$bb_ver_rev -ver_suffix=$bb_version_suffix -git_commit=$bb_git_commit - -echo "Version: $ver_maj.$ver_min.$ver_rev$ver_suffix" -echo "Commit : $git_commit" - -sed_inline= -if [[ $OSTYPE == 'darwin'* ]]; then - sed_inline="\'\'" -fi - -version_header='src/Version.h' -sed -i ${sed_inline} -E -r "s/([[:space:]]*#define[[:space:]]+BLADEBIT_VERSION_MAJ[[:space:]]+)([0-9]+)/\1$ver_maj/g" $version_header -sed -i ${sed_inline} -E -r "s/([[:space:]]*#define[[:space:]]+BLADEBIT_VERSION_MIN[[:space:]]+)([0-9]+)/\1$ver_min/g" $version_header -sed -i ${sed_inline} -E -r "s/([[:space:]]*#define[[:space:]]+BLADEBIT_VERSION_REV[[:space:]]+)([0-9]+)/\1$ver_rev/g" $version_header -sed -i ${sed_inline} -E -r "s/([[:space:]]*#define[[:space:]]+BLADEBIT_VERSION_SUFFIX[[:space:]]+)(\".*\")/\1\"$ver_suffix\"/g" $version_header -sed -i ${sed_inline} -E -r "s/([[:space:]]*#define[[:space:]]+BLADEBIT_GIT_COMMIT[[:space:]]+)(\".*\")/\1\"$git_commit\"/g" $version_header - diff --git a/extract-version.ps1 b/extract-version.ps1 deleted file mode 100644 index c26d1c70..00000000 --- a/extract-version.ps1 +++ /dev/null @@ -1,60 +0,0 @@ -# Navigate to the script's directory -$scriptPath = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent -Set-Location -Path $scriptPath - -# Arguments -$ver_component = $args[0] # The user-specified component from the full version - -# Read the version from the file -$version_str = (Get-Content 'VERSION' | Select-Object -First 1 | Out-String).Trim() -$bb_version_suffix = (Get-Content 'VERSION' | Select-Object -Last 1 | Out-String).Trim() -$version_header = 'src\Version.h' - -if ($version_str -eq $bb_version_suffix) { - $bb_version_suffix = "" -} - -# Prepend a '-' to the suffix, if necessary -if (-Not [string]::IsNullOrEmpty($bb_version_suffix) -and $bb_version_suffix[0] -ne '-') { - $bb_version_suffix = "-$bb_version_suffix" -} - -# Parse the major, minor, and revision numbers -$bb_ver_maj, $bb_ver_min, $bb_ver_rev = $version_str -split '\.' | ForEach-Object { $_.Trim() } - -# Get the Git commit hash -$bb_git_commit = $env:GITHUB_SHA -if ([string]::IsNullOrEmpty($bb_git_commit)) { - $bb_git_commit = & git rev-parse HEAD -} - -if ([string]::IsNullOrEmpty($bb_git_commit)) { - $bb_git_commit = "unknown" -} - -# Check if the user wants a specific component -if (-Not [string]::IsNullOrEmpty($ver_component)) { - switch ($ver_component) { - "major" { - Write-Host -NoNewline $bb_ver_maj - } - "minor" { - Write-Host -NoNewline $bb_ver_min - } - "revision" { - Write-Host -NoNewline $bb_ver_rev - } - "suffix" { - Write-Host -NoNewline $bb_version_suffix - } - "commit" { - Write-Host -NoNewline $bb_git_commit - } - default { - Write-Error "Invalid version component '$ver_component'" - exit 1 - } - } - exit 0 -} - diff --git a/extract-version.sh b/extract-version.sh deleted file mode 100755 index 2321a128..00000000 --- a/extract-version.sh +++ /dev/null @@ -1,81 +0,0 @@ -#! /usr/bin/env bash -set -eo pipefail -_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd)" -cd $_dir - -# Arguments -ver_component=$1 # The user specified a specified component from the full verison. - # See the case switch below. - -# Grab version specified in the file -_IFS=IFS -IFS= -version_str=$(cat VERSION | head -n 1 | xargs) -bb_version_suffix=$(cat VERSION | tail -n 1 | xargs) -version_header='src/Version.h' -IFS=$_IFS - -if [[ "$version_str" == "$bb_version_suffix" ]]; then - bb_version_suffix= -fi - -# prepend a '-' to the suffix, if necessarry -if [[ -n "$bb_version_suffix" ]] && [[ "${bb_version_suffix:0:1}" != "-" ]]; then - bb_version_suffix="-${bb_version_suffix}" -fi - -bb_ver_maj=$(printf $version_str | sed -E 's/([0-9]+)\.([0-9]+)\.([0-9]+)/\1/' | xargs) -bb_ver_min=$(printf $version_str | sed -E 's/([0-9]+)\.([0-9]+)\.([0-9]+)/\2/' | xargs) -bb_ver_rev=$(printf $version_str | sed -E 's/([0-9]+)\.([0-9]+)\.([0-9]+)/\3/' | xargs) - -bb_git_commit=$GITHUB_SHA -if [[ -z $bb_git_commit ]]; then - set +e - bb_git_commit=$(git rev-parse HEAD) - set -e -fi - -if [[ -z $bb_git_commit ]]; then - bb_git_commit="unknown" -fi - -# Check if the user wants a specific component -if [[ -n $ver_component ]]; then - - case "$ver_component" in - - "major") - echo -n $bb_ver_maj - ;; - - "minor") - echo -n $bb_ver_min - ;; - - "revision") - echo -n $bb_ver_rev - ;; - - "suffix") - echo -n $bb_version_suffix - ;; - - "commit") - echo -n $bb_git_commit - ;; - - *) - >&2 echo "Invalid version component '${ver_component}'" - exit 1 - ;; - esac - exit 0 -fi - -# Emit all version components -# echo "MAJ: $bb_ver_maj" -# echo "MIN: $bb_ver_min" -# echo "REV: $bb_ver_rev" -# echo "SUF: $bb_version_suffix" -# echo "COM: $bb_git_commit" -