From beb5634baaad05241057fd84f12e2082f756da38 Mon Sep 17 00:00:00 2001 From: Jordan Evens Date: Mon, 16 Mar 2026 11:58:44 +0000 Subject: [PATCH 01/16] use git hash when possible and denote file hash with "file:" in version --- .docker/Dockerfile | 1 + cmake/Version.cmake | 37 +++++++++++++++++++++++++++++++++---- src/cpp/firestarr.cpp | 24 +++++++++++++----------- 3 files changed, 47 insertions(+), 15 deletions(-) diff --git a/.docker/Dockerfile b/.docker/Dockerfile index 248e513465..a713913ea8 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -56,6 +56,7 @@ RUN --mount=type=bind,source=./cmake,target=./cmake \ --mount=type=bind,source=./.clang-format,target=./.clang-format \ --mount=type=bind,source=./.clang-tidy,target=./.clang-tidy \ --mount=type=bind,source=./.env,target=./.env \ + --mount=type=bind,source=./.git,target=./.git \ --mount=type=bind,source=./src/cpp,target=./src/cpp \ --mount=type=bind,source=./test/data,target=./test/data \ --mount=type=bind,source=./test/input,target=./test/input \ diff --git a/cmake/Version.cmake b/cmake/Version.cmake index 92502e8846..33c8907efb 100644 --- a/cmake/Version.cmake +++ b/cmake/Version.cmake @@ -43,12 +43,41 @@ foreach(file_path IN LISTS FILES_USED) set(MODIFIED_TIME "${LAST_MOD_TIME}") endif() endforeach() -list(JOIN HASHES "" ALL_HASHES) -string(SHA512 FULL_HASH ${ALL_HASHES}) -string(TIMESTAMP COMPILE_TIME "${FMT_TIME}" UTC) -string(SUBSTRING ${FULL_HASH} 0 8 HASH) +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") + message("Using hash from git") + if(EXISTS "${FILE_ENV}") + execute_process(COMMAND git log -n1 --pretty=%h ${FILE_ENV} OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE HASH_ENV) + endif() + execute_process(COMMAND git rev-parse --verify HEAD OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE FULL_HASH) + execute_process(COMMAND git diff-index --quiet HEAD RESULT_VARIABLE GIT_CHANGED) + if (NOT "${HASH_ENV}" STREQUAL "${HASH}") + # add + to version if .env isn't from current commit + set(VERSION "${VERSION}+") + endif() + # is anything in git changed? + if ("${GIT_CHANGED}" STREQUAL "0") + # use time from git commit since nothing is different + execute_process(COMMAND git log -1 --pretty=%ad --date=format:%Y-%m-%dT%H:%M:%SZ OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE MODIFIED_TIME) + else() + # either changed or git didn't work + if (NOT "" STREQUAL "${HASH}") + # add + to hash if modified from committed version + set(HASH "${HASH}+") + set(FULL_HASH "${FULL_HASH}+") + endif() + endif() + set(HASH_PREFIX "") +else() + set(HASH_PREFIX "file:") + list(JOIN HASHES "" ALL_HASHES) + string(SHA512 FULL_HASH ${ALL_HASHES}) +endif() + +string(SUBSTRING ${FULL_HASH} 0 10 HASH) +set(HASH "${HASH_PREFIX}${HASH}") +string(TIMESTAMP COMPILE_TIME "${FMT_TIME}" UTC) set(COMPILED_ON "${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_SYSTEM}-${CMAKE_CXX_COMPILER_ID}") diff --git a/src/cpp/firestarr.cpp b/src/cpp/firestarr.cpp index 626f918dda..8f58c48b47 100644 --- a/src/cpp/firestarr.cpp +++ b/src/cpp/firestarr.cpp @@ -44,22 +44,24 @@ int main(const int argc, const char* const argv[]) printf("FireSTARR %s\n\n", SPECIFIC_REVISION); MainArgumentParser parser{argc, argv}; parser.parse_args(); - // HACK: check here so verbosity can affect showing compile info - if (parser.help_requested()) - { - show_help_and_exit(); - } auto result = -1; #ifdef NDEBUG try { #endif - fs::logging::check_fatal( - !Log::openLogFile(parser.log_file.c_str()), "Can't open log file %s", parser.log_file.c_str() - ); - fs::logging::note("Specific revision is %s", SPECIFIC_REVISION); - fs::logging::debug("Full hash of all sources is: %s", FULL_HASH); - fs::logging::debug("Compiled on: %s", COMPILED_ON); + const auto opened_log = Log::openLogFile(parser.log_file.c_str()); + // HACK: check here so verbosity can affect showing compile info + if (parser.help_requested()) + { + fs::logging::note("Specific revision is %s", SPECIFIC_REVISION); + fs::logging::debug("Full hash is: %s", FULL_HASH); + fs::logging::debug("Compiled on: %s", COMPILED_ON); + show_help_and_exit(); + } + if (!opened_log) + { + logging::fatal("Can't open log file %s", parser.log_file.c_str()); + } fs::logging::note("Output directory is %s", parser.output_directory.c_str()); fs::logging::note("Output log is %s", parser.log_file.c_str()); // at this point we've parsed positional args and know we're not in test mode From a64e89fe15108287707f93d64990cf6d9fbd0398 Mon Sep 17 00:00:00 2001 From: Jordan Evens Date: Mon, 16 Mar 2026 14:10:27 +0000 Subject: [PATCH 02/16] fix '+' not being appended to hash when different from committed version --- cmake/Version.cmake | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/cmake/Version.cmake b/cmake/Version.cmake index 33c8907efb..7e441fe4d6 100644 --- a/cmake/Version.cmake +++ b/cmake/Version.cmake @@ -45,6 +45,8 @@ foreach(file_path IN LISTS FILES_USED) endforeach() +set(HASH_PREFIX "") +set(HASH_SUFFIX "") if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") message("Using hash from git") if(EXISTS "${FILE_ENV}") @@ -61,22 +63,18 @@ if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") # use time from git commit since nothing is different execute_process(COMMAND git log -1 --pretty=%ad --date=format:%Y-%m-%dT%H:%M:%SZ OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE MODIFIED_TIME) else() - # either changed or git didn't work - if (NOT "" STREQUAL "${HASH}") - # add + to hash if modified from committed version - set(HASH "${HASH}+") - set(FULL_HASH "${FULL_HASH}+") - endif() + set(HASH_SUFFIX "+") endif() - set(HASH_PREFIX "") else() + # will never have a '+' for HASH_SUFFIX because it's based on exact files set(HASH_PREFIX "file:") list(JOIN HASHES "" ALL_HASHES) string(SHA512 FULL_HASH ${ALL_HASHES}) endif() string(SUBSTRING ${FULL_HASH} 0 10 HASH) -set(HASH "${HASH_PREFIX}${HASH}") +set(HASH "${HASH_PREFIX}${HASH}${HASH_SUFFIX}") +set(FULL_HASH "${HASH_PREFIX}${FULL_HASH}${HASH_SUFFIX}") string(TIMESTAMP COMPILE_TIME "${FMT_TIME}" UTC) set(COMPILED_ON "${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_SYSTEM}-${CMAKE_CXX_COMPILER_ID}") From 19fe5ec32e143883cf2dc34288f81b52a678f8c3 Mon Sep 17 00:00:00 2001 From: Jordan Evens Date: Wed, 18 Mar 2026 17:57:11 +0000 Subject: [PATCH 03/16] only care about git diff-index for same files as used for file hash --- cmake/Version.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/Version.cmake b/cmake/Version.cmake index 7e441fe4d6..fa469f2cac 100644 --- a/cmake/Version.cmake +++ b/cmake/Version.cmake @@ -53,7 +53,7 @@ if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") execute_process(COMMAND git log -n1 --pretty=%h ${FILE_ENV} OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE HASH_ENV) endif() execute_process(COMMAND git rev-parse --verify HEAD OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE FULL_HASH) - execute_process(COMMAND git diff-index --quiet HEAD RESULT_VARIABLE GIT_CHANGED) + execute_process(COMMAND git diff-index --quiet HEAD ${FILES_USED} RESULT_VARIABLE GIT_CHANGED) if (NOT "${HASH_ENV}" STREQUAL "${HASH}") # add + to version if .env isn't from current commit set(VERSION "${VERSION}+") From 038f2104cfdce152657a1966c6858c9f20a6f4f8 Mon Sep 17 00:00:00 2001 From: Jordan Evens Date: Wed, 18 Mar 2026 18:13:22 +0000 Subject: [PATCH 04/16] fix hash comparison --- cmake/Version.cmake | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/cmake/Version.cmake b/cmake/Version.cmake index fa469f2cac..d119c87d40 100644 --- a/cmake/Version.cmake +++ b/cmake/Version.cmake @@ -50,19 +50,27 @@ set(HASH_SUFFIX "") if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") message("Using hash from git") if(EXISTS "${FILE_ENV}") - execute_process(COMMAND git log -n1 --pretty=%h ${FILE_ENV} OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE HASH_ENV) + execute_process(COMMAND git log -n1 --pretty=%H ${FILE_ENV} OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE HASH_ENV) endif() execute_process(COMMAND git rev-parse --verify HEAD OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE FULL_HASH) - execute_process(COMMAND git diff-index --quiet HEAD ${FILES_USED} RESULT_VARIABLE GIT_CHANGED) - if (NOT "${HASH_ENV}" STREQUAL "${HASH}") + message("HASH_ENV = ${HASH_ENV}") + message("FULL_HASH = ${FULL_HASH}") + if (NOT "${HASH_ENV}" STREQUAL "${FULL_HASH}") + message("Hashes not equal") # add + to version if .env isn't from current commit set(VERSION "${VERSION}+") + else() + message("Hashes are equal") endif() # is anything in git changed? + execute_process(COMMAND git diff-index --quiet HEAD ${FILES_USED} RESULT_VARIABLE GIT_CHANGED) + message("GIT_CHANGED = ${GIT_CHANGED}") if ("${GIT_CHANGED}" STREQUAL "0") + message("Using git time since no change") # use time from git commit since nothing is different execute_process(COMMAND git log -1 --pretty=%ad --date=format:%Y-%m-%dT%H:%M:%SZ OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE MODIFIED_TIME) else() + message("Git has changed") set(HASH_SUFFIX "+") endif() else() From ca83dff3f5aec14c525bbd6e7553083056f20694 Mon Sep 17 00:00:00 2001 From: Jordan Evens Date: Wed, 18 Mar 2026 18:18:51 +0000 Subject: [PATCH 05/16] docker quiet --- .docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.docker/Dockerfile b/.docker/Dockerfile index a713913ea8..20673f3cc3 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -62,7 +62,7 @@ RUN --mount=type=bind,source=./cmake,target=./cmake \ --mount=type=bind,source=./test/input,target=./test/input \ --mount=type=bind,source=./fuel.lut,target=./fuel.lut \ --mount=type=bind,source=./settings.ini,target=./settings.ini \ - cmake --preset Release \ + cmake --preset Release -DQUIET_MAKEFILE=1 \ && cmake --build --parallel --preset Release \ && ctest --preset Release # COPY ./cmake cmake/ From 65852988e92731d1f16f0324aabbba3c4ae3b7e9 Mon Sep 17 00:00:00 2001 From: Jordan Evens Date: Wed, 18 Mar 2026 18:22:25 +0000 Subject: [PATCH 06/16] only hash/get modified time from files if not set by git commit --- cmake/Version.cmake | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/cmake/Version.cmake b/cmake/Version.cmake index d119c87d40..0d0c5d6a75 100644 --- a/cmake/Version.cmake +++ b/cmake/Version.cmake @@ -26,27 +26,9 @@ list(APPEND FILES_USED ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt ${CMAKE_CURREN set(FILE_VERSION_CPP ${CMAKE_BINARY_DIR}/version.cpp) -# calculate hash from files that matter -set(HASHES) -# if modified from committed version then look at file timestamps -foreach(file_path IN LISTS FILES_USED) - file(SHA512 ${file_path} HASH_FILE) - if(NOT CMAKE_QUIET_MAKEFILE) - message("${file_path} ${HASH_FILE}") - endif() - list(APPEND HASHES ${HASH_FILE}) - file(TIMESTAMP "${file_path}" LAST_MOD_TIME "${FMT_TIME}") - if ("${LAST_MOD_TIME}" STRGREATER "${MODIFIED_TIME}") - if(NOT CMAKE_QUIET_MAKEFILE) - message("Change in ${file_path}") - endif() - set(MODIFIED_TIME "${LAST_MOD_TIME}") - endif() -endforeach() - - set(HASH_PREFIX "") set(HASH_SUFFIX "") +set(MODIFIED_TIME "") if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") message("Using hash from git") if(EXISTS "${FILE_ENV}") @@ -80,6 +62,23 @@ else() string(SHA512 FULL_HASH ${ALL_HASHES}) endif() +if(NOT MODIFIED_TIME) + # calculate hash from files that matter + set(HASHES) + # if modified from committed version then look at file timestamps + foreach(file_path IN LISTS FILES_USED) + file(SHA512 ${file_path} HASH_FILE) + if(NOT CMAKE_QUIET_MAKEFILE) + message("${file_path} ${HASH_FILE}") + endif() + list(APPEND HASHES ${HASH_FILE}) + file(TIMESTAMP "${file_path}" LAST_MOD_TIME "${FMT_TIME}") + if ("${LAST_MOD_TIME}" STRGREATER "${MODIFIED_TIME}") + set(MODIFIED_TIME "${LAST_MOD_TIME}") + endif() + endforeach() +endif() + string(SUBSTRING ${FULL_HASH} 0 10 HASH) set(HASH "${HASH_PREFIX}${HASH}${HASH_SUFFIX}") set(FULL_HASH "${HASH_PREFIX}${FULL_HASH}${HASH_SUFFIX}") From 3d4b4e9df917d558f95523c502bdc36b2fd4fb7b Mon Sep 17 00:00:00 2001 From: Jordan Evens Date: Wed, 18 Mar 2026 18:23:56 +0000 Subject: [PATCH 07/16] quiet makefile --- .docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.docker/Dockerfile b/.docker/Dockerfile index 20673f3cc3..3921383858 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -62,7 +62,7 @@ RUN --mount=type=bind,source=./cmake,target=./cmake \ --mount=type=bind,source=./test/input,target=./test/input \ --mount=type=bind,source=./fuel.lut,target=./fuel.lut \ --mount=type=bind,source=./settings.ini,target=./settings.ini \ - cmake --preset Release -DQUIET_MAKEFILE=1 \ + cmake --preset Release -DCMAKE_QUIET_MAKEFILE=1 \ && cmake --build --parallel --preset Release \ && ctest --preset Release # COPY ./cmake cmake/ From e81e0410a8ea17343ae6dae1adc840eae3c31718 Mon Sep 17 00:00:00 2001 From: Jordan Evens Date: Wed, 18 Mar 2026 18:27:17 +0000 Subject: [PATCH 08/16] show git diff-index --- cmake/Version.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmake/Version.cmake b/cmake/Version.cmake index 0d0c5d6a75..fcd3574e80 100644 --- a/cmake/Version.cmake +++ b/cmake/Version.cmake @@ -45,7 +45,8 @@ if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") message("Hashes are equal") endif() # is anything in git changed? - execute_process(COMMAND git diff-index --quiet HEAD ${FILES_USED} RESULT_VARIABLE GIT_CHANGED) + message("execute_process(COMMAND git diff-index HEAD ${FILES_USED} RESULT_VARIABLE GIT_CHANGED)") + execute_process(COMMAND git diff-index HEAD ${FILES_USED} RESULT_VARIABLE GIT_CHANGED) message("GIT_CHANGED = ${GIT_CHANGED}") if ("${GIT_CHANGED}" STREQUAL "0") message("Using git time since no change") From 157b5e3ddad60ed3d9cbb1a6db7453e6e4817230 Mon Sep 17 00:00:00 2001 From: Jordan Evens Date: Wed, 18 Mar 2026 18:32:54 +0000 Subject: [PATCH 09/16] copy to docker --- .docker/Dockerfile | 54 +++++++++++++++++++++++++-------------------- cmake/Version.cmake | 5 +++-- 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/.docker/Dockerfile b/.docker/Dockerfile index 3921383858..d4f0547f58 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -47,32 +47,38 @@ RUN vcpkg/vcpkg install # build and test FROM vcpkg-installed AS firestarr-build WORKDIR /appl/firestarr +# copy so git hash check is correct +COPY . . +COPY .* . +RUN cmake --preset Release -DCMAKE_QUIET_MAKEFILE=1 \ + && cmake --build --parallel --preset Release \ + && ctest --preset Release # vcpkg-installed should update when this file does # COPY ./vcpkg*.json . -# mount instead of copy to minimize layers -RUN --mount=type=bind,source=./cmake,target=./cmake \ - --mount=type=bind,source=./CMakeLists.txt,target=./CMakeLists.txt \ - --mount=type=bind,source=./CMakePresets.json,target=./CMakePresets.json \ - --mount=type=bind,source=./.clang-format,target=./.clang-format \ - --mount=type=bind,source=./.clang-tidy,target=./.clang-tidy \ - --mount=type=bind,source=./.env,target=./.env \ - --mount=type=bind,source=./.git,target=./.git \ - --mount=type=bind,source=./src/cpp,target=./src/cpp \ - --mount=type=bind,source=./test/data,target=./test/data \ - --mount=type=bind,source=./test/input,target=./test/input \ - --mount=type=bind,source=./fuel.lut,target=./fuel.lut \ - --mount=type=bind,source=./settings.ini,target=./settings.ini \ - cmake --preset Release -DCMAKE_QUIET_MAKEFILE=1 \ - && cmake --build --parallel --preset Release \ - && ctest --preset Release -# COPY ./cmake cmake/ -# COPY ./.env ./CMake* ./.clang-* . -# COPY ./src/cpp src/cpp/ -# RUN cmake --preset Release -# RUN cmake --build --parallel --preset Release -# COPY ./test test/ -# COPY ./fuel.lut ./settings.ini . -# RUN ctest --preset Release +# # mount instead of copy to minimize layers +# RUN --mount=type=bind,source=./cmake,target=./cmake \ +# --mount=type=bind,source=./CMakeLists.txt,target=./CMakeLists.txt \ +# --mount=type=bind,source=./CMakePresets.json,target=./CMakePresets.json \ +# --mount=type=bind,source=./.clang-format,target=./.clang-format \ +# --mount=type=bind,source=./.clang-tidy,target=./.clang-tidy \ +# --mount=type=bind,source=./.env,target=./.env \ +# --mount=type=bind,source=./.git,target=./.git \ +# --mount=type=bind,source=./src/cpp,target=./src/cpp \ +# --mount=type=bind,source=./test/data,target=./test/data \ +# --mount=type=bind,source=./test/input,target=./test/input \ +# --mount=type=bind,source=./fuel.lut,target=./fuel.lut \ +# --mount=type=bind,source=./settings.ini,target=./settings.ini \ +# cmake --preset Release -DCMAKE_QUIET_MAKEFILE=1 \ +# && cmake --build --parallel --preset Release \ +# && ctest --preset Release +# # COPY ./cmake cmake/ +# # COPY ./.env ./CMake* ./.clang-* . +# # COPY ./src/cpp src/cpp/ +# # RUN cmake --preset Release +# # RUN cmake --build --parallel --preset Release +# # COPY ./test test/ +# # COPY ./fuel.lut ./settings.ini . +# # RUN ctest --preset Release FROM --platform=linux/amd64 ${BASE_DISTROLESS} AS distroless-amd64 diff --git a/cmake/Version.cmake b/cmake/Version.cmake index fcd3574e80..d76b5fb927 100644 --- a/cmake/Version.cmake +++ b/cmake/Version.cmake @@ -45,8 +45,9 @@ if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") message("Hashes are equal") endif() # is anything in git changed? - message("execute_process(COMMAND git diff-index HEAD ${FILES_USED} RESULT_VARIABLE GIT_CHANGED)") - execute_process(COMMAND git diff-index HEAD ${FILES_USED} RESULT_VARIABLE GIT_CHANGED) + list(JOIN FILES_USED " " FILES_USED_STRING) + message("execute_process(COMMAND git diff-index HEAD -- ${FILES_USED_STRING} RESULT_VARIABLE GIT_CHANGED)") + execute_process(COMMAND git diff-index HEAD -- ${FILES_USED_STRING} RESULT_VARIABLE GIT_CHANGED) message("GIT_CHANGED = ${GIT_CHANGED}") if ("${GIT_CHANGED}" STREQUAL "0") message("Using git time since no change") From 799320b2d9dba92487815837ed01d17cd245c5bb Mon Sep 17 00:00:00 2001 From: Jordan Evens Date: Wed, 18 Mar 2026 18:37:51 +0000 Subject: [PATCH 10/16] mount instead of copy --- .docker/Dockerfile | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/.docker/Dockerfile b/.docker/Dockerfile index d4f0547f58..d00732815b 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -47,30 +47,31 @@ RUN vcpkg/vcpkg install # build and test FROM vcpkg-installed AS firestarr-build WORKDIR /appl/firestarr +# NOTE: was mounting instead of copy to minimize layers, but broke git diff-index # copy so git hash check is correct -COPY . . -COPY .* . -RUN cmake --preset Release -DCMAKE_QUIET_MAKEFILE=1 \ - && cmake --build --parallel --preset Release \ - && ctest --preset Release +# COPY . . +# COPY .* . +# RUN cmake --preset Release -DCMAKE_QUIET_MAKEFILE=1 \ +# && cmake --build --parallel --preset Release \ +# && ctest --preset Release # vcpkg-installed should update when this file does # COPY ./vcpkg*.json . -# # mount instead of copy to minimize layers -# RUN --mount=type=bind,source=./cmake,target=./cmake \ -# --mount=type=bind,source=./CMakeLists.txt,target=./CMakeLists.txt \ -# --mount=type=bind,source=./CMakePresets.json,target=./CMakePresets.json \ -# --mount=type=bind,source=./.clang-format,target=./.clang-format \ -# --mount=type=bind,source=./.clang-tidy,target=./.clang-tidy \ -# --mount=type=bind,source=./.env,target=./.env \ -# --mount=type=bind,source=./.git,target=./.git \ -# --mount=type=bind,source=./src/cpp,target=./src/cpp \ -# --mount=type=bind,source=./test/data,target=./test/data \ -# --mount=type=bind,source=./test/input,target=./test/input \ -# --mount=type=bind,source=./fuel.lut,target=./fuel.lut \ -# --mount=type=bind,source=./settings.ini,target=./settings.ini \ -# cmake --preset Release -DCMAKE_QUIET_MAKEFILE=1 \ -# && cmake --build --parallel --preset Release \ -# && ctest --preset Release +# mount instead of copy to minimize layers +RUN --mount=type=bind,source=./cmake,target=./cmake \ + --mount=type=bind,source=./CMakeLists.txt,target=./CMakeLists.txt \ + --mount=type=bind,source=./CMakePresets.json,target=./CMakePresets.json \ + --mount=type=bind,source=./.clang-format,target=./.clang-format \ + --mount=type=bind,source=./.clang-tidy,target=./.clang-tidy \ + --mount=type=bind,source=./.env,target=./.env \ + --mount=type=bind,source=./.git,target=./.git \ + --mount=type=bind,source=./src/cpp,target=./src/cpp \ + --mount=type=bind,source=./test/data,target=./test/data \ + --mount=type=bind,source=./test/input,target=./test/input \ + --mount=type=bind,source=./fuel.lut,target=./fuel.lut \ + --mount=type=bind,source=./settings.ini,target=./settings.ini \ + cmake --preset Release -DCMAKE_QUIET_MAKEFILE=1 \ + && cmake --build --parallel --preset Release \ + && ctest --preset Release # # COPY ./cmake cmake/ # # COPY ./.env ./CMake* ./.clang-* . # # COPY ./src/cpp src/cpp/ From 022a233f868136144e634ce6e1da3b264d92d033 Mon Sep 17 00:00:00 2001 From: Jordan Evens Date: Wed, 18 Mar 2026 18:38:03 +0000 Subject: [PATCH 11/16] rename HASH_ENV to VERSION_HASH --- cmake/Version.cmake | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/cmake/Version.cmake b/cmake/Version.cmake index d76b5fb927..ae86da9c87 100644 --- a/cmake/Version.cmake +++ b/cmake/Version.cmake @@ -32,12 +32,13 @@ set(MODIFIED_TIME "") if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") message("Using hash from git") if(EXISTS "${FILE_ENV}") - execute_process(COMMAND git log -n1 --pretty=%H ${FILE_ENV} OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE HASH_ENV) + # check when .env last changed - if not this commit then this is version+ + execute_process(COMMAND git log -n1 --pretty=%H ${FILE_ENV} OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE VERSION_HASH) endif() execute_process(COMMAND git rev-parse --verify HEAD OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE FULL_HASH) - message("HASH_ENV = ${HASH_ENV}") + message("VERSION_HASH = ${VERSION_HASH}") message("FULL_HASH = ${FULL_HASH}") - if (NOT "${HASH_ENV}" STREQUAL "${FULL_HASH}") + if (NOT "${VERSION_HASH}" STREQUAL "${FULL_HASH}") message("Hashes not equal") # add + to version if .env isn't from current commit set(VERSION "${VERSION}+") From 891e25518a8cc502bcfbc33236e7092aa31b11ce Mon Sep 17 00:00:00 2001 From: Jordan Evens Date: Wed, 18 Mar 2026 18:39:18 +0000 Subject: [PATCH 12/16] cleanup dockerfile --- .docker/Dockerfile | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/.docker/Dockerfile b/.docker/Dockerfile index d00732815b..9cabc621dc 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -47,15 +47,6 @@ RUN vcpkg/vcpkg install # build and test FROM vcpkg-installed AS firestarr-build WORKDIR /appl/firestarr -# NOTE: was mounting instead of copy to minimize layers, but broke git diff-index -# copy so git hash check is correct -# COPY . . -# COPY .* . -# RUN cmake --preset Release -DCMAKE_QUIET_MAKEFILE=1 \ -# && cmake --build --parallel --preset Release \ -# && ctest --preset Release -# vcpkg-installed should update when this file does -# COPY ./vcpkg*.json . # mount instead of copy to minimize layers RUN --mount=type=bind,source=./cmake,target=./cmake \ --mount=type=bind,source=./CMakeLists.txt,target=./CMakeLists.txt \ @@ -72,14 +63,6 @@ RUN --mount=type=bind,source=./cmake,target=./cmake \ cmake --preset Release -DCMAKE_QUIET_MAKEFILE=1 \ && cmake --build --parallel --preset Release \ && ctest --preset Release -# # COPY ./cmake cmake/ -# # COPY ./.env ./CMake* ./.clang-* . -# # COPY ./src/cpp src/cpp/ -# # RUN cmake --preset Release -# # RUN cmake --build --parallel --preset Release -# # COPY ./test test/ -# # COPY ./fuel.lut ./settings.ini . -# # RUN ctest --preset Release FROM --platform=linux/amd64 ${BASE_DISTROLESS} AS distroless-amd64 From 04d83936ecd7bcc127084c6202357c3b1c4c1637 Mon Sep 17 00:00:00 2001 From: Jordan Evens Date: Wed, 18 Mar 2026 18:45:07 +0000 Subject: [PATCH 13/16] don't use DCMAKE_QUIET_MAKEFILE=1 --- .docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.docker/Dockerfile b/.docker/Dockerfile index 9cabc621dc..bd200abb73 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -60,7 +60,7 @@ RUN --mount=type=bind,source=./cmake,target=./cmake \ --mount=type=bind,source=./test/input,target=./test/input \ --mount=type=bind,source=./fuel.lut,target=./fuel.lut \ --mount=type=bind,source=./settings.ini,target=./settings.ini \ - cmake --preset Release -DCMAKE_QUIET_MAKEFILE=1 \ + cmake --preset Release \ && cmake --build --parallel --preset Release \ && ctest --preset Release From 1f82b25c7ce6e72eb2cd70d98e6e840fc2fb97e0 Mon Sep 17 00:00:00 2001 From: Jordan Evens Date: Wed, 18 Mar 2026 18:47:20 +0000 Subject: [PATCH 14/16] remove extra messages --- cmake/Version.cmake | 7 ------- 1 file changed, 7 deletions(-) diff --git a/cmake/Version.cmake b/cmake/Version.cmake index ae86da9c87..7adb5a18b9 100644 --- a/cmake/Version.cmake +++ b/cmake/Version.cmake @@ -30,7 +30,6 @@ set(HASH_PREFIX "") set(HASH_SUFFIX "") set(MODIFIED_TIME "") if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") - message("Using hash from git") if(EXISTS "${FILE_ENV}") # check when .env last changed - if not this commit then this is version+ execute_process(COMMAND git log -n1 --pretty=%H ${FILE_ENV} OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE VERSION_HASH) @@ -39,23 +38,17 @@ if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") message("VERSION_HASH = ${VERSION_HASH}") message("FULL_HASH = ${FULL_HASH}") if (NOT "${VERSION_HASH}" STREQUAL "${FULL_HASH}") - message("Hashes not equal") # add + to version if .env isn't from current commit set(VERSION "${VERSION}+") - else() - message("Hashes are equal") endif() # is anything in git changed? list(JOIN FILES_USED " " FILES_USED_STRING) - message("execute_process(COMMAND git diff-index HEAD -- ${FILES_USED_STRING} RESULT_VARIABLE GIT_CHANGED)") execute_process(COMMAND git diff-index HEAD -- ${FILES_USED_STRING} RESULT_VARIABLE GIT_CHANGED) message("GIT_CHANGED = ${GIT_CHANGED}") if ("${GIT_CHANGED}" STREQUAL "0") - message("Using git time since no change") # use time from git commit since nothing is different execute_process(COMMAND git log -1 --pretty=%ad --date=format:%Y-%m-%dT%H:%M:%SZ OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE MODIFIED_TIME) else() - message("Git has changed") set(HASH_SUFFIX "+") endif() else() From 3654139aa6411b95b33ea985222aecde6636863d Mon Sep 17 00:00:00 2001 From: Jordan Evens Date: Wed, 18 Mar 2026 18:48:02 +0000 Subject: [PATCH 15/16] only show hashes if CMAKE_VERBOSE_MAKEFILE=1 --- cmake/Version.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/Version.cmake b/cmake/Version.cmake index 7adb5a18b9..511eb24c73 100644 --- a/cmake/Version.cmake +++ b/cmake/Version.cmake @@ -64,7 +64,7 @@ if(NOT MODIFIED_TIME) # if modified from committed version then look at file timestamps foreach(file_path IN LISTS FILES_USED) file(SHA512 ${file_path} HASH_FILE) - if(NOT CMAKE_QUIET_MAKEFILE) + if(CMAKE_VERBOSE_MAKEFILE) message("${file_path} ${HASH_FILE}") endif() list(APPEND HASHES ${HASH_FILE}) From 87bff21412da018b20438b3d372cd3f2d4617445 Mon Sep 17 00:00:00 2001 From: Jordan Evens Date: Wed, 18 Mar 2026 18:49:59 +0000 Subject: [PATCH 16/16] change to have CMAKE_VERBOSE_OPTIMIZATIONS to turn on -fopt-info-vec-all --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a77b81577d..b5b3ea667e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -79,7 +79,7 @@ if (WIN32) add_compile_options( "$<$:/bigobj>") else() - if(CMAKE_VERBOSE_MAKEFILE) + if(CMAKE_VERBOSE_OPTIMIZATIONS) add_compile_options(-fopt-info-vec-all) endif() add_compile_options(