Fix builds from CI showing up as modified (#4384)
This change also adds a new environment variable used while building: `CHATTERINO_REQUIRE_CLEAN_GIT` which, if set, will error out during your build's GIT stage. This is used in CI to ensure we don't accidentally introduce a change that would result in builds showing up as "modified" again. Co-authored-by: Rasmus Karlsson <rasmus.karlsson@pajlada.com>
This commit is contained in:
+46
-38
@@ -9,7 +9,7 @@
|
||||
# If the git binary is found and the git work tree is intact, GIT_RELEASE is worked out using the `git describe` command
|
||||
# The value of GIT_RELEASE can be overriden by defining the GIT_RELEASE environment variable
|
||||
# GIT_MODIFIED
|
||||
# If the git binary is found and the git work tree is intact, GIT_MODIFIED is worked out by checking if output of `git status --porcelain -z` command is empty
|
||||
# If the git binary is found and the git work tree is intact, GIT_MODIFIED is worked out by checking if output of `git status --porcelain -z` command is empty
|
||||
# The value of GIT_MODIFIED cannot be overriden
|
||||
|
||||
find_package(Git)
|
||||
@@ -19,67 +19,75 @@ set(GIT_COMMIT "GIT-REPOSITORY-NOT-FOUND")
|
||||
set(GIT_RELEASE "${PROJECT_VERSION}")
|
||||
set(GIT_MODIFIED 0)
|
||||
|
||||
if (DEFINED ENV{CHATTERINO_SKIP_GIT_GEN})
|
||||
if(DEFINED ENV{CHATTERINO_SKIP_GIT_GEN})
|
||||
return()
|
||||
endif ()
|
||||
endif()
|
||||
|
||||
if (GIT_EXECUTABLE)
|
||||
if(GIT_EXECUTABLE)
|
||||
execute_process(
|
||||
COMMAND ${GIT_EXECUTABLE} rev-parse --is-inside-work-tree
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
RESULT_VARIABLE GIT_REPOSITORY_NOT_FOUND
|
||||
OUTPUT_QUIET
|
||||
ERROR_QUIET
|
||||
COMMAND ${GIT_EXECUTABLE} rev-parse --is-inside-work-tree
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
RESULT_VARIABLE GIT_REPOSITORY_NOT_FOUND
|
||||
OUTPUT_QUIET
|
||||
ERROR_QUIET
|
||||
)
|
||||
if (GIT_REPOSITORY_NOT_FOUND)
|
||||
|
||||
if(GIT_REPOSITORY_NOT_FOUND)
|
||||
set(GIT_REPOSITORY_FOUND 0)
|
||||
else ()
|
||||
else()
|
||||
set(GIT_REPOSITORY_FOUND 1)
|
||||
endif()
|
||||
|
||||
if (GIT_REPOSITORY_FOUND)
|
||||
if(GIT_REPOSITORY_FOUND)
|
||||
execute_process(
|
||||
COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE GIT_HASH
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE GIT_HASH
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
execute_process(
|
||||
COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE GIT_COMMIT
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE GIT_COMMIT
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
execute_process(
|
||||
COMMAND ${GIT_EXECUTABLE} describe
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE GIT_RELEASE
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
COMMAND ${GIT_EXECUTABLE} describe
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE GIT_RELEASE
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
execute_process(
|
||||
COMMAND ${GIT_EXECUTABLE} status --porcelain -z
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE GIT_MODIFIED_OUTPUT
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
COMMAND ${GIT_EXECUTABLE} status --porcelain -z
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE GIT_MODIFIED_OUTPUT
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
endif (GIT_REPOSITORY_FOUND)
|
||||
endif (GIT_EXECUTABLE)
|
||||
endif(GIT_REPOSITORY_FOUND)
|
||||
endif(GIT_EXECUTABLE)
|
||||
|
||||
if(GIT_MODIFIED_OUTPUT)
|
||||
if(DEFINED ENV{CHATTERINO_REQUIRE_CLEAN_GIT})
|
||||
message(STATUS "git status --porcelain -z\n${GIT_MODIFIED_OUTPUT}")
|
||||
message(FATAL_ERROR "Git repository was expected to be clean, but modifications were found!")
|
||||
endif()
|
||||
|
||||
if (GIT_MODIFIED_OUTPUT)
|
||||
set(GIT_MODIFIED 1)
|
||||
endif ()
|
||||
endif()
|
||||
|
||||
if (DEFINED ENV{GIT_HASH})
|
||||
if(DEFINED ENV{GIT_HASH})
|
||||
set(GIT_HASH "$ENV{GIT_HASH}")
|
||||
endif ()
|
||||
if (DEFINED ENV{GIT_COMMIT})
|
||||
endif()
|
||||
|
||||
if(DEFINED ENV{GIT_COMMIT})
|
||||
set(GIT_COMMIT "$ENV{GIT_COMMIT}")
|
||||
endif ()
|
||||
if (DEFINED ENV{GIT_RELEASE})
|
||||
endif()
|
||||
|
||||
if(DEFINED ENV{GIT_RELEASE})
|
||||
set(GIT_RELEASE "$ENV{GIT_RELEASE}")
|
||||
endif ()
|
||||
endif()
|
||||
|
||||
message(STATUS "Injected git values: ${GIT_COMMIT} (${GIT_RELEASE}) modified: ${GIT_MODIFIED}")
|
||||
|
||||
Reference in New Issue
Block a user