Skip to content

Commit 0d958c4

Browse files
committed
remove git dependency from local version calculation
1 parent 4766e11 commit 0d958c4

File tree

1 file changed

+108
-100
lines changed

1 file changed

+108
-100
lines changed

cmake/IsaacTeleopVersion.cmake

Lines changed: 108 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -14,87 +14,19 @@
1414
# * RC (CI + branch release/X.Y.x): branch must match base version; Python version X.Y.PATCHrc, no local.
1515
# * Local working copy (non-CI): Python version X.Y+local and CMake version X.Y (patch omitted).
1616
function(isaac_teleop_read_version version_file out_cmake_version_var out_pyproject_version_var)
17-
find_package(Git REQUIRED)
1817
get_filename_component(_isaac_teleop_version_file "${version_file}" ABSOLUTE)
1918
if(NOT EXISTS "${_isaac_teleop_version_file}")
2019
message(FATAL_ERROR "Version file not found: ${_isaac_teleop_version_file}")
2120
endif()
2221
file(READ "${_isaac_teleop_version_file}" _isaac_teleop_version_base)
2322
string(STRIP "${_isaac_teleop_version_base}" _isaac_teleop_version_base)
2423

25-
execute_process(
26-
COMMAND "${GIT_EXECUTABLE}" -C "${CMAKE_CURRENT_SOURCE_DIR}" rev-parse --show-toplevel
27-
OUTPUT_VARIABLE _isaac_teleop_git_root
28-
OUTPUT_STRIP_TRAILING_WHITESPACE
29-
ERROR_QUIET
30-
RESULT_VARIABLE _isaac_teleop_git_root_result
31-
)
32-
if(NOT _isaac_teleop_git_root_result EQUAL 0 OR _isaac_teleop_git_root STREQUAL "")
33-
message(FATAL_ERROR "Failed to determine git root. Ensure this is a git repository and git is available.")
34-
endif()
35-
execute_process(
36-
COMMAND "${GIT_EXECUTABLE}" -C "${_isaac_teleop_git_root}" rev-list -n 1 HEAD -- "${_isaac_teleop_version_file}"
37-
OUTPUT_VARIABLE _isaac_teleop_version_commit
38-
OUTPUT_STRIP_TRAILING_WHITESPACE
39-
ERROR_QUIET
40-
RESULT_VARIABLE _isaac_teleop_version_commit_result
41-
)
42-
if(NOT _isaac_teleop_version_commit_result EQUAL 0 OR _isaac_teleop_version_commit STREQUAL "")
43-
message(FATAL_ERROR "Failed to locate last commit for version file: ${_isaac_teleop_version_file}")
44-
endif()
45-
execute_process(
46-
COMMAND "${GIT_EXECUTABLE}" -C "${_isaac_teleop_git_root}" rev-list --count "${_isaac_teleop_version_commit}..HEAD"
47-
OUTPUT_VARIABLE _isaac_teleop_git_count
48-
OUTPUT_STRIP_TRAILING_WHITESPACE
49-
ERROR_QUIET
50-
RESULT_VARIABLE _isaac_teleop_git_count_result
51-
)
52-
if(NOT _isaac_teleop_git_count_result EQUAL 0)
53-
message(FATAL_ERROR "Failed to count commits since ${_isaac_teleop_version_commit}.")
54-
endif()
55-
if(NOT _isaac_teleop_git_count MATCHES "^[0-9]+$")
56-
message(FATAL_ERROR "Invalid git commit count: '${_isaac_teleop_git_count}'")
57-
endif()
58-
59-
execute_process(
60-
COMMAND "${GIT_EXECUTABLE}" -C "${_isaac_teleop_git_root}" rev-parse --abbrev-ref HEAD
61-
OUTPUT_VARIABLE _isaac_teleop_git_branch
62-
OUTPUT_STRIP_TRAILING_WHITESPACE
63-
ERROR_QUIET
64-
RESULT_VARIABLE _isaac_teleop_git_branch_result
65-
)
66-
if(NOT _isaac_teleop_git_branch_result EQUAL 0 OR _isaac_teleop_git_branch STREQUAL "")
67-
message(FATAL_ERROR "Failed to determine git branch name.")
68-
endif()
69-
if(_isaac_teleop_git_branch STREQUAL "HEAD")
70-
if(DEFINED ENV{GITHUB_REF_NAME} AND NOT "$ENV{GITHUB_REF_NAME}" STREQUAL "")
71-
set(_isaac_teleop_git_branch "$ENV{GITHUB_REF_NAME}")
72-
elseif(DEFINED ENV{GITHUB_HEAD_REF} AND NOT "$ENV{GITHUB_HEAD_REF}" STREQUAL "")
73-
set(_isaac_teleop_git_branch "$ENV{GITHUB_HEAD_REF}")
74-
elseif(DEFINED ENV{CI_COMMIT_REF_NAME} AND NOT "$ENV{CI_COMMIT_REF_NAME}" STREQUAL "")
75-
set(_isaac_teleop_git_branch "$ENV{CI_COMMIT_REF_NAME}")
76-
endif()
77-
endif()
78-
79-
execute_process(
80-
COMMAND "${GIT_EXECUTABLE}" -C "${_isaac_teleop_git_root}" describe --tags --exact-match
81-
OUTPUT_VARIABLE _isaac_teleop_git_tag
82-
OUTPUT_STRIP_TRAILING_WHITESPACE
83-
ERROR_QUIET
84-
RESULT_VARIABLE _isaac_teleop_git_tag_result
85-
)
86-
if(NOT _isaac_teleop_git_tag_result EQUAL 0)
87-
set(_isaac_teleop_git_tag "")
88-
endif()
89-
9024
string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.x" _isaac_teleop_version_match "${_isaac_teleop_version_base}")
9125
if(NOT _isaac_teleop_version_match)
9226
message(FATAL_ERROR "Base version must be in MAJOR.MINOR.x format; actual content: '${_isaac_teleop_version_base}'")
9327
endif()
9428
set(_isaac_teleop_version_major "${CMAKE_MATCH_1}")
9529
set(_isaac_teleop_version_minor "${CMAKE_MATCH_2}")
96-
set(_isaac_teleop_version_patch "${_isaac_teleop_git_count}")
97-
set(_isaac_teleop_version "${_isaac_teleop_version_major}.${_isaac_teleop_version_minor}.${_isaac_teleop_version_patch}")
9830

9931
set(_isaac_teleop_is_ci FALSE)
10032
if(DEFINED ENV{CI} AND NOT "$ENV{CI}" STREQUAL "")
@@ -104,46 +36,122 @@ function(isaac_teleop_read_version version_file out_cmake_version_var out_pyproj
10436
endif()
10537
endif()
10638

107-
set(_isaac_teleop_pyproject_version "")
39+
set(_isaac_teleop_git_count "0")
40+
set(_isaac_teleop_git_branch "")
41+
set(_isaac_teleop_git_tag "")
42+
set(_isaac_teleop_version "${_isaac_teleop_version_major}.${_isaac_teleop_version_minor}")
10843
set(_isaac_teleop_build_kind "local")
44+
set(_isaac_teleop_pyproject_version "${_isaac_teleop_version_major}.${_isaac_teleop_version_minor}+local")
45+
46+
if(_isaac_teleop_is_ci)
47+
find_package(Git REQUIRED)
10948

110-
if(_isaac_teleop_is_ci AND NOT _isaac_teleop_git_tag STREQUAL "")
111-
if(NOT _isaac_teleop_git_tag MATCHES "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)$")
112-
message(FATAL_ERROR "Invalid release tag format: '${_isaac_teleop_git_tag}' (expected vMAJOR.MINOR.PATCH)")
49+
execute_process(
50+
COMMAND "${GIT_EXECUTABLE}" -C "${CMAKE_CURRENT_SOURCE_DIR}" rev-parse --show-toplevel
51+
OUTPUT_VARIABLE _isaac_teleop_git_root
52+
OUTPUT_STRIP_TRAILING_WHITESPACE
53+
ERROR_QUIET
54+
RESULT_VARIABLE _isaac_teleop_git_root_result
55+
)
56+
if(NOT _isaac_teleop_git_root_result EQUAL 0 OR _isaac_teleop_git_root STREQUAL "")
57+
message(FATAL_ERROR "Failed to determine git root. Ensure this is a git repository and git is available.")
11358
endif()
114-
set(_isaac_teleop_tag_version "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}")
115-
if(NOT _isaac_teleop_tag_version STREQUAL "${_isaac_teleop_version}")
116-
message(FATAL_ERROR "Release tag ${_isaac_teleop_git_tag} does not match calculated version ${_isaac_teleop_version}.")
59+
execute_process(
60+
COMMAND "${GIT_EXECUTABLE}" -C "${_isaac_teleop_git_root}" rev-list -n 1 HEAD -- "${_isaac_teleop_version_file}"
61+
OUTPUT_VARIABLE _isaac_teleop_version_commit
62+
OUTPUT_STRIP_TRAILING_WHITESPACE
63+
ERROR_QUIET
64+
RESULT_VARIABLE _isaac_teleop_version_commit_result
65+
)
66+
if(NOT _isaac_teleop_version_commit_result EQUAL 0 OR _isaac_teleop_version_commit STREQUAL "")
67+
message(FATAL_ERROR "Failed to locate last commit for version file: ${_isaac_teleop_version_file}")
11768
endif()
118-
set(_isaac_teleop_pyproject_version "${_isaac_teleop_tag_version}")
119-
set(_isaac_teleop_build_kind "release")
120-
elseif(_isaac_teleop_is_ci AND _isaac_teleop_git_branch MATCHES "^release/([0-9]+)\\.([0-9]+)\\.x$")
121-
if(NOT "${CMAKE_MATCH_1}" STREQUAL "${_isaac_teleop_version_major}" OR NOT "${CMAKE_MATCH_2}" STREQUAL "${_isaac_teleop_version_minor}")
122-
message(FATAL_ERROR "Release branch ${_isaac_teleop_git_branch} does not match base version ${_isaac_teleop_version_base}.")
69+
execute_process(
70+
COMMAND "${GIT_EXECUTABLE}" -C "${_isaac_teleop_git_root}" rev-list --count "${_isaac_teleop_version_commit}..HEAD"
71+
OUTPUT_VARIABLE _isaac_teleop_git_count
72+
OUTPUT_STRIP_TRAILING_WHITESPACE
73+
ERROR_QUIET
74+
RESULT_VARIABLE _isaac_teleop_git_count_result
75+
)
76+
if(NOT _isaac_teleop_git_count_result EQUAL 0)
77+
message(FATAL_ERROR "Failed to count commits since ${_isaac_teleop_version_commit}.")
12378
endif()
124-
set(_isaac_teleop_pyproject_version "${_isaac_teleop_version_major}.${_isaac_teleop_version_minor}.${_isaac_teleop_version_patch}rc1")
125-
set(_isaac_teleop_build_kind "rc")
126-
elseif(_isaac_teleop_is_ci AND _isaac_teleop_git_branch STREQUAL "main")
127-
set(_isaac_teleop_pyproject_version "${_isaac_teleop_version_major}.${_isaac_teleop_version_minor}.${_isaac_teleop_version_patch}a1")
128-
set(_isaac_teleop_build_kind "alpha")
129-
elseif(_isaac_teleop_is_ci)
130-
string(TOLOWER "${_isaac_teleop_git_branch}" _isaac_teleop_label)
131-
string(REGEX REPLACE "[^a-z0-9._-]" "." _isaac_teleop_label "${_isaac_teleop_label}") # replace disallowed chars with dots
132-
string(REGEX REPLACE "[._-]+" "." _isaac_teleop_label "${_isaac_teleop_label}") # collapse separator runs to a single dot
133-
string(REGEX REPLACE "^[._-]+" "" _isaac_teleop_label "${_isaac_teleop_label}") # trim leading separators
134-
string(REGEX REPLACE "[._-]+$" "" _isaac_teleop_label "${_isaac_teleop_label}") # trim trailing separators
135-
if(_isaac_teleop_label STREQUAL "")
136-
set(_isaac_teleop_label "unknown")
79+
if(NOT _isaac_teleop_git_count MATCHES "^[0-9]+$")
80+
message(FATAL_ERROR "Invalid git commit count: '${_isaac_teleop_git_count}'")
81+
endif()
82+
83+
execute_process(
84+
COMMAND "${GIT_EXECUTABLE}" -C "${_isaac_teleop_git_root}" rev-parse --abbrev-ref HEAD
85+
OUTPUT_VARIABLE _isaac_teleop_git_branch
86+
OUTPUT_STRIP_TRAILING_WHITESPACE
87+
ERROR_QUIET
88+
RESULT_VARIABLE _isaac_teleop_git_branch_result
89+
)
90+
if(NOT _isaac_teleop_git_branch_result EQUAL 0 OR _isaac_teleop_git_branch STREQUAL "")
91+
message(FATAL_ERROR "Failed to determine git branch name.")
92+
endif()
93+
if(_isaac_teleop_git_branch STREQUAL "HEAD")
94+
if(DEFINED ENV{GITHUB_REF_NAME} AND NOT "$ENV{GITHUB_REF_NAME}" STREQUAL "")
95+
set(_isaac_teleop_git_branch "$ENV{GITHUB_REF_NAME}")
96+
elseif(DEFINED ENV{GITHUB_HEAD_REF} AND NOT "$ENV{GITHUB_HEAD_REF}" STREQUAL "")
97+
set(_isaac_teleop_git_branch "$ENV{GITHUB_HEAD_REF}")
98+
elseif(DEFINED ENV{CI_COMMIT_REF_NAME} AND NOT "$ENV{CI_COMMIT_REF_NAME}" STREQUAL "")
99+
set(_isaac_teleop_git_branch "$ENV{CI_COMMIT_REF_NAME}")
100+
endif()
101+
endif()
102+
103+
execute_process(
104+
COMMAND "${GIT_EXECUTABLE}" -C "${_isaac_teleop_git_root}" describe --tags --exact-match
105+
OUTPUT_VARIABLE _isaac_teleop_git_tag
106+
OUTPUT_STRIP_TRAILING_WHITESPACE
107+
ERROR_QUIET
108+
RESULT_VARIABLE _isaac_teleop_git_tag_result
109+
)
110+
if(NOT _isaac_teleop_git_tag_result EQUAL 0)
111+
set(_isaac_teleop_git_tag "")
112+
endif()
113+
114+
set(_isaac_teleop_version_patch "${_isaac_teleop_git_count}")
115+
set(_isaac_teleop_version "${_isaac_teleop_version_major}.${_isaac_teleop_version_minor}.${_isaac_teleop_version_patch}")
116+
117+
if(NOT _isaac_teleop_git_tag STREQUAL "")
118+
if(NOT _isaac_teleop_git_tag MATCHES "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)$")
119+
message(FATAL_ERROR "Invalid release tag format: '${_isaac_teleop_git_tag}' (expected vMAJOR.MINOR.PATCH)")
120+
endif()
121+
set(_isaac_teleop_tag_version "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}")
122+
if(NOT _isaac_teleop_tag_version STREQUAL "${_isaac_teleop_version}")
123+
message(FATAL_ERROR "Release tag ${_isaac_teleop_git_tag} does not match calculated version ${_isaac_teleop_version}.")
124+
endif()
125+
set(_isaac_teleop_pyproject_version "${_isaac_teleop_tag_version}")
126+
set(_isaac_teleop_build_kind "release")
127+
elseif(_isaac_teleop_git_branch MATCHES "^release/([0-9]+)\\.([0-9]+)\\.x$")
128+
if(NOT "${CMAKE_MATCH_1}" STREQUAL "${_isaac_teleop_version_major}" OR NOT "${CMAKE_MATCH_2}" STREQUAL "${_isaac_teleop_version_minor}")
129+
message(FATAL_ERROR "Release branch ${_isaac_teleop_git_branch} does not match base version ${_isaac_teleop_version_base}.")
130+
endif()
131+
set(_isaac_teleop_pyproject_version "${_isaac_teleop_version_major}.${_isaac_teleop_version_minor}.${_isaac_teleop_version_patch}rc1")
132+
set(_isaac_teleop_build_kind "rc")
133+
elseif(_isaac_teleop_git_branch STREQUAL "main")
134+
set(_isaac_teleop_pyproject_version "${_isaac_teleop_version_major}.${_isaac_teleop_version_minor}.${_isaac_teleop_version_patch}a1")
135+
set(_isaac_teleop_build_kind "alpha")
136+
else()
137+
string(TOLOWER "${_isaac_teleop_git_branch}" _isaac_teleop_label)
138+
string(REGEX REPLACE "[^a-z0-9._-]" "." _isaac_teleop_label "${_isaac_teleop_label}") # replace disallowed chars with dots
139+
string(REGEX REPLACE "[._-]+" "." _isaac_teleop_label "${_isaac_teleop_label}") # collapse separator runs to a single dot
140+
string(REGEX REPLACE "^[._-]+" "" _isaac_teleop_label "${_isaac_teleop_label}") # trim leading separators
141+
string(REGEX REPLACE "[._-]+$" "" _isaac_teleop_label "${_isaac_teleop_label}") # trim trailing separators
142+
if(_isaac_teleop_label STREQUAL "")
143+
set(_isaac_teleop_label "unknown")
144+
endif()
145+
set(_isaac_teleop_pyproject_version "${_isaac_teleop_version_major}.${_isaac_teleop_version_minor}.${_isaac_teleop_version_patch}.dev0+${_isaac_teleop_label}")
146+
set(_isaac_teleop_build_kind "dev")
137147
endif()
138-
set(_isaac_teleop_pyproject_version "${_isaac_teleop_version_major}.${_isaac_teleop_version_minor}.${_isaac_teleop_version_patch}.dev0+${_isaac_teleop_label}")
139-
set(_isaac_teleop_build_kind "dev")
140-
else()
141-
set(_isaac_teleop_pyproject_version "${_isaac_teleop_version_major}.${_isaac_teleop_version_minor}+local")
142-
set(_isaac_teleop_build_kind "local")
143-
set(_isaac_teleop_version "${_isaac_teleop_version_major}.${_isaac_teleop_version_minor}")
144148
endif()
145149

146150
set(${out_cmake_version_var} "${_isaac_teleop_version}" PARENT_SCOPE)
147151
set(${out_pyproject_version_var} "${_isaac_teleop_pyproject_version}" PARENT_SCOPE)
148-
message(STATUS "IsaacTeleop version: ${_isaac_teleop_version} (${_isaac_teleop_version_base} + ${_isaac_teleop_git_count} commits) python: ${_isaac_teleop_pyproject_version} kind: ${_isaac_teleop_build_kind}")
152+
if(_isaac_teleop_is_ci)
153+
message(STATUS "IsaacTeleop version: ${_isaac_teleop_version} (${_isaac_teleop_version_base} + ${_isaac_teleop_git_count} commits) python: ${_isaac_teleop_pyproject_version} kind: ${_isaac_teleop_build_kind}")
154+
else()
155+
message(STATUS "IsaacTeleop version: ${_isaac_teleop_version} (${_isaac_teleop_version_base}; local build) python: ${_isaac_teleop_pyproject_version} kind: ${_isaac_teleop_build_kind}")
156+
endif()
149157
endfunction()

0 commit comments

Comments
 (0)