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).
1616function (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 ()
149157endfunction ()
0 commit comments