Skip to content

Commit 9b22b00

Browse files
nileshnegiclaude
andauthored
Embed git branch and commit hash in version string (#312)
Print git branch and short commit hash alongside the existing version number whenever any TransferBench command is run, e.g.: TransferBench v1.67.00 (foo/my-branch:6f5ea52) ... Co-authored-by: Claude <claude@anthropic.com>
1 parent 479408d commit 9b22b00

5 files changed

Lines changed: 88 additions & 1 deletion

File tree

CMakeLists.txt

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,47 @@ message(STATUS "TransferBench version: ${VERSION_STRING}")
140140

141141
project(TransferBench VERSION ${VERSION_STRING} LANGUAGES CXX)
142142

143+
# Git metadata: branch + short commit hash
144+
# Priority: git rev-parse > GIT_VERSION file (populated by packaging scripts) > "unknown"
145+
if(GIT_FOUND)
146+
execute_process(
147+
COMMAND "${GIT_EXECUTABLE}" rev-parse --abbrev-ref HEAD
148+
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
149+
OUTPUT_VARIABLE TB_GIT_BRANCH
150+
OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET
151+
RESULT_VARIABLE _tb_git_branch_result
152+
)
153+
execute_process(
154+
COMMAND "${GIT_EXECUTABLE}" rev-parse --short HEAD
155+
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
156+
OUTPUT_VARIABLE TB_GIT_COMMIT
157+
OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET
158+
RESULT_VARIABLE _tb_git_commit_result
159+
)
160+
endif()
161+
if(NOT TB_GIT_BRANCH OR TB_GIT_BRANCH STREQUAL "" OR
162+
NOT TB_GIT_COMMIT OR TB_GIT_COMMIT STREQUAL "")
163+
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/GIT_VERSION")
164+
file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/GIT_VERSION" _tb_version_lines LIMIT_COUNT 2)
165+
list(LENGTH _tb_version_lines _tb_version_line_count)
166+
if(_tb_version_line_count GREATER 0)
167+
list(GET _tb_version_lines 0 TB_GIT_BRANCH)
168+
else()
169+
set(TB_GIT_BRANCH "unknown")
170+
endif()
171+
if(_tb_version_line_count GREATER 1)
172+
list(GET _tb_version_lines 1 TB_GIT_COMMIT)
173+
else()
174+
set(TB_GIT_COMMIT "unknown")
175+
endif()
176+
else()
177+
set(TB_GIT_BRANCH "unknown")
178+
set(TB_GIT_COMMIT "unknown")
179+
endif()
180+
endif()
181+
message(STATUS "TransferBench ${VERSION_STRING} (${TB_GIT_BRANCH}:${TB_GIT_COMMIT})")
182+
183+
143184
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
144185
message(STATUS "Setting build type to 'Release' as none was specified.")
145186
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE)
@@ -497,6 +538,11 @@ if(POD_COMM_FOUND)
497538
target_compile_definitions(TransferBench PRIVATE POD_COMM_ENABLED)
498539
endif()
499540

541+
target_compile_definitions(TransferBench PRIVATE
542+
TB_GIT_BRANCH="${TB_GIT_BRANCH}"
543+
TB_GIT_COMMIT="${TB_GIT_COMMIT}"
544+
)
545+
500546
check_cxx_compiler_flag(-parallel-jobs=12 HAVE_PARALLEL_JOBS)
501547
if(HAVE_PARALLEL_JOBS)
502548
message(STATUS "Enabling parallel compile jobs: -parallel-jobs=12")
@@ -635,6 +681,17 @@ if(BUILD_RELOCATABLE_PACKAGE)
635681
set(CPACK_ARCHIVE_FILE_NAME "${_tb_archive_name}")
636682
set(CPACK_PACKAGE_FILE_NAME "${_tb_archive_name}")
637683

684+
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.20")
685+
configure_file(
686+
cmake/WriteGitVersion.cmake.in
687+
${CMAKE_BINARY_DIR}/WriteGitVersion.cmake
688+
@ONLY
689+
)
690+
set(CPACK_PRE_BUILD_SCRIPTS "${CMAKE_BINARY_DIR}/WriteGitVersion.cmake")
691+
elseif(NOT TB_GIT_BRANCH STREQUAL "unknown")
692+
file(WRITE "${CMAKE_CURRENT_SOURCE_DIR}/GIT_VERSION" "${TB_GIT_BRANCH}\n${TB_GIT_COMMIT}\n")
693+
endif()
694+
638695
set(CPACK_GENERATOR "DEB;RPM;TGZ")
639696
include(CPack)
640697
else()
@@ -650,6 +707,17 @@ else()
650707
set(PACKAGE_NAME TB)
651708
set(LIBRARY_NAME TransferBench)
652709

710+
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.20")
711+
configure_file(
712+
cmake/WriteGitVersion.cmake.in
713+
${CMAKE_BINARY_DIR}/WriteGitVersion.cmake
714+
@ONLY
715+
)
716+
set(CPACK_PRE_BUILD_SCRIPTS "${CMAKE_BINARY_DIR}/WriteGitVersion.cmake")
717+
elseif(NOT TB_GIT_BRANCH STREQUAL "unknown")
718+
file(WRITE "${CMAKE_CURRENT_SOURCE_DIR}/GIT_VERSION" "${TB_GIT_BRANCH}\n${TB_GIT_COMMIT}\n")
719+
endif()
720+
653721
rocm_create_package(
654722
NAME ${LIBRARY_NAME}
655723
DESCRIPTION "TransferBench package"

GIT_VERSION

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
unknown
2+
unknown

Makefile

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,13 @@ ifeq ($(filter clean,$(MAKECMDGOALS)),)
295295
endif
296296
endif
297297
endif
298+
299+
# Git metadata (branch + short commit hash)
300+
# Priority: git rev-parse > GIT_VERSION file (populated by packaging scripts) > "unknown"
301+
_TB_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST))))
302+
TB_GIT_BRANCH := $(shell git -C "$(_TB_DIR)" rev-parse --abbrev-ref HEAD 2>/dev/null || sed -n '1p' "$(_TB_DIR)GIT_VERSION" 2>/dev/null || echo unknown)
303+
TB_GIT_COMMIT := $(shell git -C "$(_TB_DIR)" rev-parse --short HEAD 2>/dev/null || sed -n '2p' "$(_TB_DIR)GIT_VERSION" 2>/dev/null || echo unknown)
304+
COMMON_FLAGS += -DTB_GIT_BRANCH='"$(TB_GIT_BRANCH)"' -DTB_GIT_COMMIT='"$(TB_GIT_COMMIT)"'
298305
endif
299306

300307
.PHONY : all clean

cmake/WriteGitVersion.cmake.in

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Generated by CMakeLists.txt at configure time — do not edit.
2+
# CPack runs this via CPACK_PRE_BUILD_SCRIPTS before creating the package,
3+
# so source tarballs built without .git still carry the correct version info.
4+
file(WRITE "@CMAKE_CURRENT_SOURCE_DIR@/GIT_VERSION" "@TB_GIT_BRANCH@\n@TB_GIT_COMMIT@\n")

src/client/Client.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,13 @@ void DisplayVersion()
253253
case COMM_MPI: multiNodeMode = " (Multi-node via MPI)"; break;
254254
}
255255

256-
Print("TransferBench v%s.%s%s%s\n", VERSION, CLIENT_VERSION, support.c_str(), multiNodeMode.c_str());
256+
#ifndef TB_GIT_BRANCH
257+
#define TB_GIT_BRANCH "unknown"
258+
#endif
259+
#ifndef TB_GIT_COMMIT
260+
#define TB_GIT_COMMIT "unknown"
261+
#endif
262+
Print("TransferBench v%s.%s (%s:%s)%s%s\n", VERSION, CLIENT_VERSION, TB_GIT_BRANCH, TB_GIT_COMMIT, support.c_str(), multiNodeMode.c_str());
257263
Print("=============================================================================================================\n");
258264
}
259265

0 commit comments

Comments
 (0)