Skip to content

Commit ad36bbd

Browse files
authored
Add git hash in release string (#4774)
* add git hash to release message * define PROJ_GITHUB_SHA in docker runs * remove unneeded code from emscripten/build_wasm.sh * set docker build-arg PROJ_GITHUB_SHA
1 parent df810ea commit ad36bbd

10 files changed

Lines changed: 70 additions & 24 deletions

File tree

.github/workflows/clang_linux.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,4 @@ jobs:
5454
restore-keys: ${{ runner.os }}-cache-clang-${{ matrix.id }}-
5555

5656
- name: Run
57-
run: docker run -e CI -e TRAVIS_BUILD_DIR="$PWD" -e PROJ_CMAKE_BUILD_OPTIONS="$PROJ_CMAKE_BUILD_OPTIONS" -e WORK_DIR="$PWD" -e TRAVIS_OS_NAME=linux -e BUILD_NAME=linux_clang -v $PWD:$PWD ubuntu:20.04 $PWD/.github/workflows/clang_linux/start.sh
57+
run: docker run -e PROJ_GITHUB_SHA=${{ github.sha }} -e CI -e TRAVIS_BUILD_DIR="$PWD" -e PROJ_CMAKE_BUILD_OPTIONS="$PROJ_CMAKE_BUILD_OPTIONS" -e WORK_DIR="$PWD" -e TRAVIS_OS_NAME=linux -e BUILD_NAME=linux_clang -v $PWD:$PWD ubuntu:20.04 $PWD/.github/workflows/clang_linux/start.sh

.github/workflows/docker.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,8 @@ jobs:
160160
builder: ${{ steps.buildx.outputs.name }}
161161
context: .
162162
file: ${{ matrix.dockerfile }}
163+
build-args: |
164+
PROJ_GITHUB_SHA=${{ github.sha }}
163165
platforms: linux/${{ steps.prep.outputs.ARCH }}
164166
tags: ${{ steps.prep_tags.outputs.tags }}
165167
labels: |

.github/workflows/emscripten.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ jobs:
3535
- name: Run docker build
3636
run: |
3737
docker run --user $(id -u):$(id -g) --rm \
38-
-e GITHUB_SHA=${{ github.sha }} \
38+
-e PROJ_GITHUB_SHA=${{ github.sha }} \
3939
-v "$PWD":/build/proj_src \
4040
-v "$PWD"/wasm_out:/build/install \
4141
proj-emscripten-builder

.github/workflows/fedora_rawhide.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,4 @@ jobs:
3434
restore-keys: ${{ runner.os }}-cache-fedora_rawhide-
3535

3636
- name: Run
37-
run: docker run -e CI -e WORK_DIR="$PWD" -v $PWD:$PWD fedora:rawhide $PWD/.github/workflows/fedora_rawhide/start.sh
37+
run: docker run -e PROJ_GITHUB_SHA=${{ github.sha }} -e CI -e WORK_DIR="$PWD" -v $PWD:$PWD fedora:rawhide $PWD/.github/workflows/fedora_rawhide/start.sh

.github/workflows/linux_gcc_32bit.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,4 @@ jobs:
3434
restore-keys: ${{ runner.os }}-cache-gcc32bit-
3535

3636
- name: Run
37-
run: docker run -e CI -e WORK_DIR="$PWD" -v $PWD:$PWD ubuntu:20.04 $PWD/.github/workflows/linux_gcc_32bit/start.sh
37+
run: docker run -e PROJ_GITHUB_SHA=${{ github.sha }} -e CI -e WORK_DIR="$PWD" -v $PWD:$PWD ubuntu:20.04 $PWD/.github/workflows/linux_gcc_32bit/start.sh

.github/workflows/mingw_w64.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,4 @@ jobs:
3434
restore-keys: ${{ runner.os }}-cache-mingw_w64-
3535

3636
- name: Build
37-
run: docker run -e CI -e TRAVIS_OS_NAME=linux -e BUILD_NAME=mingw_w64 -e WORK_DIR="$PWD" -v $PWD:$PWD ubuntu:22.04 $PWD/.github/workflows/mingw_w64/start.sh
37+
run: docker run -e PROJ_GITHUB_SHA=${{ github.sha }} -e CI -e TRAVIS_OS_NAME=linux -e BUILD_NAME=mingw_w64 -e WORK_DIR="$PWD" -v $PWD:$PWD ubuntu:22.04 $PWD/.github/workflows/mingw_w64/start.sh

Dockerfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ LABEL maintainer="Howard Butler <howard@hobu.co>"
77

88
ARG DESTDIR="/build"
99

10+
ARG PROJ_GITHUB_SHA
11+
1012
# Setup build env
1113
RUN apt-get update \
1214
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --fix-missing --no-install-recommends \

cmake/ProjConfig.cmake

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,54 @@ if(EXISTS ${AUTOCONF_PROJ_CONFIG_H})
5151
"before CMake's build.")
5252
endif()
5353

54+
# Get the git hash to write it in the release message.
55+
set(PROJ_GIT_HASH "")
56+
if(DEFINED ENV{PROJ_GITHUB_SHA})
57+
string(SUBSTRING "$ENV{PROJ_GITHUB_SHA}" 0 7 PROJ_GIT_HASH)
58+
else()
59+
find_package(Git QUIET)
60+
if(Git_FOUND AND EXISTS "${PROJ_SOURCE_DIR}/.git")
61+
# Get the short hash
62+
execute_process(
63+
COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
64+
WORKING_DIRECTORY "${PROJ_SOURCE_DIR}"
65+
RESULT_VARIABLE GIT_REV_RESULT
66+
OUTPUT_VARIABLE PROJ_GIT_HASH
67+
OUTPUT_STRIP_TRAILING_WHITESPACE
68+
ERROR_QUIET
69+
)
70+
71+
if(GIT_REV_RESULT EQUAL 0)
72+
# Check if the working directory is dirty
73+
execute_process(
74+
COMMAND ${GIT_EXECUTABLE} status --porcelain --untracked-files=no
75+
WORKING_DIRECTORY "${PROJ_SOURCE_DIR}"
76+
RESULT_VARIABLE GIT_STATUS_RESULT
77+
OUTPUT_VARIABLE GIT_STATUS_OUTPUT
78+
OUTPUT_STRIP_TRAILING_WHITESPACE
79+
ERROR_QUIET
80+
)
81+
82+
# If the command succeeds and outputs anything, the tree is dirty
83+
if(GIT_STATUS_RESULT EQUAL 0 AND NOT GIT_STATUS_OUTPUT STREQUAL "")
84+
string(APPEND PROJ_GIT_HASH "*")
85+
endif()
86+
else()
87+
set(PROJ_GIT_HASH "")
88+
endif()
89+
endif()
90+
endif()
91+
if(PROJ_GIT_HASH)
92+
add_compile_definitions(PROJ_GIT_HASH=\"${PROJ_GIT_HASH}\")
93+
endif()
94+
message(PROJ_GIT_HASH=\"${PROJ_GIT_HASH}\")
95+
96+
# Tell CMake to re-configure if the Git HEAD or index changes
97+
if(Git_FOUND AND EXISTS "${PROJ_SOURCE_DIR}/.git")
98+
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS
99+
"${PROJ_SOURCE_DIR}/.git/HEAD" # for the hash
100+
"${PROJ_SOURCE_DIR}/.git/index" # for the *
101+
)
102+
endif()
103+
54104
configure_file(cmake/proj_config.cmake.in src/proj_config.h)

scripts/ci/emscripten/build_wasm.sh

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -250,17 +250,6 @@ fi
250250
# Helper functions to extract some info from PROJ in C and C++
251251
log_step "6.5 Creating C Wrapper Functions"
252252

253-
# --- Determine Git Revision ---
254-
GIT_REV=""
255-
if [ -n "${GITHUB_SHA}" ]; then
256-
GIT_REV="${GITHUB_SHA}"
257-
else
258-
if git rev-parse HEAD >/dev/null 2>&1; then
259-
GIT_REV=$(git rev-parse HEAD)
260-
fi
261-
fi
262-
echo "GIT_REV=${GIT_REV}"
263-
264253
WRAPPER_FILE="${TEMP_BUILD_DIR}/proj_wrappers.cpp"
265254
WRAPPER_OBJ_FILE="${TEMP_BUILD_DIR}/proj_wrappers.o"
266255

@@ -319,10 +308,6 @@ const char* get_compilation_date() {
319308
return "$DDD" ;
320309
}
321310
322-
const char* get_build_git_revision() {
323-
return "${GIT_REV}";
324-
}
325-
326311
int get_ptr_size() {
327312
return sizeof(void*);
328313
}
@@ -349,7 +334,7 @@ FINAL_LIBS="${INSTALL_DIR}/lib/libproj.a \
349334
${WRAPPER_OBJ_FILE}"
350335

351336
# include all exported symbols
352-
echo -e "_malloc\n_free\n_get_compilation_date\n_get_build_git_revision\n_get_ptr_size" > ${INSTALL_DIR}/exported_symbols.txt
337+
echo -e "_malloc\n_free\n_get_compilation_date\n_get_ptr_size" > ${INSTALL_DIR}/exported_symbols.txt
353338
grep "^proj_\|^geod_" ${PROJ_SRC_DIR}/scripts/reference_exported_symbols.txt | grep -v "(" | sed 's/^/_/' >> ${INSTALL_DIR}/exported_symbols.txt
354339
head ${INSTALL_DIR}/exported_symbols.txt
355340

src/release.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,15 @@
66
#define STR_HELPER(x) #x
77
#define STR(x) STR_HELPER(x)
88

9-
char const pj_release[] = "Rel. " STR(PROJ_VERSION_MAJOR) "." STR(
10-
PROJ_VERSION_MINOR) "." STR(PROJ_VERSION_PATCH) ", "
11-
"September 15th, 2026";
9+
#ifdef PROJ_GIT_HASH
10+
#define PROJ_GIT_REV_STR " (" PROJ_GIT_HASH ")"
11+
#else
12+
#define PROJ_GIT_REV_STR ""
13+
#endif
14+
15+
char const pj_release[] =
16+
"Rel. " STR(PROJ_VERSION_MAJOR) "." STR(PROJ_VERSION_MINOR) "." STR(
17+
PROJ_VERSION_PATCH) PROJ_GIT_REV_STR ", "
18+
"September 15th, 2026";
1219

1320
const char *pj_get_release() { return pj_release; }

0 commit comments

Comments
 (0)