Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Versioning Support from version.txt #3140

Merged
merged 31 commits into from
Feb 21, 2025
Merged
Show file tree
Hide file tree
Changes from 21 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
5779779
single source of truth for version identifier
ahnaf-tahmid-chowdhury Sep 24, 2024
104dfb0
Follow PyPA compliant
ahnaf-tahmid-chowdhury Sep 27, 2024
cb849ee
move version file to root-level
ahnaf-tahmid-chowdhury Sep 27, 2024
0ce318c
add get_version_info function
ahnaf-tahmid-chowdhury Sep 27, 2024
0eff6a4
Merge remote-tracking branch 'upstream/develop' into version
ahnaf-tahmid-chowdhury Oct 3, 2024
dd6e579
Merge remote-tracking branch 'upstream/develop' into version
ahnaf-tahmid-chowdhury Oct 16, 2024
23b93e3
add export config
ahnaf-tahmid-chowdhury Oct 16, 2024
31e3692
remove version file
ahnaf-tahmid-chowdhury Oct 16, 2024
d6be0ff
Ensure the version string matches a standard format
ahnaf-tahmid-chowdhury Oct 16, 2024
8bc99cd
set fetch depth to zero
ahnaf-tahmid-chowdhury Oct 16, 2024
2eb6c93
Merge branch 'develop' into version
shimwell Jan 11, 2025
5219406
add hash
ahnaf-tahmid-chowdhury Jan 12, 2025
d4b37cf
Add more log
ahnaf-tahmid-chowdhury Jan 12, 2025
160bf43
clang format
ahnaf-tahmid-chowdhury Jan 12, 2025
2b47355
Find git at the beginning
ahnaf-tahmid-chowdhury Jan 12, 2025
923f84a
add VERSION_COMMIT_COUNT
ahnaf-tahmid-chowdhury Jan 19, 2025
07c65a3
Increment release number for dev versions
ahnaf-tahmid-chowdhury Jan 23, 2025
940c571
Merge remote-tracking branch 'upstream/develop' into version
ahnaf-tahmid-chowdhury Jan 23, 2025
21594d6
Move versioning to a separate file, as suggested by @gonuke
ahnaf-tahmid-chowdhury Jan 26, 2025
14e678f
add more info
ahnaf-tahmid-chowdhury Jan 26, 2025
075f92b
Merge remote-tracking branch 'upstream/develop' into version
ahnaf-tahmid-chowdhury Jan 26, 2025
dc28e2a
Update cmake/Modules/GetVersionFromGit.cmake
ahnaf-tahmid-chowdhury Jan 27, 2025
e2a64d7
Update cmake/Modules/GetVersionFromGit.cmake
ahnaf-tahmid-chowdhury Jan 27, 2025
1603dc5
add more variables
ahnaf-tahmid-chowdhury Jan 27, 2025
9dc344e
Update cmake/Modules/GetVersionFromGit.cmake
ahnaf-tahmid-chowdhury Jan 29, 2025
efc43ba
Merge branch 'develop' into version
ahnaf-tahmid-chowdhury Feb 17, 2025
a2942f6
Don't use PROJECT_ variable names
paulromano Feb 20, 2025
727a0ae
Get rid of unused variables
paulromano Feb 20, 2025
8440b2c
Fix fetch-depth
paulromano Feb 20, 2025
8ddcb06
Set fetch-depth to 0 as before
paulromano Feb 20, 2025
ece247a
Update cmake/Modules/GetVersionFromGit.cmake
paulromano Feb 21, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .git_archival.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
commit: $Format:%H$
commit-date: $Format:%cI$
describe-name: $Format:%(describe:tags=true,match=*[0-9]*)$
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.git_archival.txt export-subst
7 changes: 5 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,11 @@ jobs:
RDMAV_FORK_SAFE: 1

steps:
- uses: actions/checkout@v4

- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
Expand Down
35 changes: 13 additions & 22 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,21 +1,26 @@
cmake_minimum_required(VERSION 3.16 FATAL_ERROR)
project(openmc C CXX)

# Set version numbers
set(OPENMC_VERSION_MAJOR 0)
set(OPENMC_VERSION_MINOR 15)
set(OPENMC_VERSION_RELEASE 1)
set(OPENMC_VERSION ${OPENMC_VERSION_MAJOR}.${OPENMC_VERSION_MINOR}.${OPENMC_VERSION_RELEASE})
# Set module path
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules)

include(GetVersionFromGit)

# Output version information
message(STATUS "OpenMC version: ${PROJECT_VERSION}")
message(STATUS "OpenMC dev state: ${PROJECT_DEV_STATE}")
message(STATUS "OpenMC commit hash: ${PROJECT_COMMIT_HASH}")
message(STATUS "OpenMC commit count: ${PROJECT_COMMIT_COUNT}")
message(STATUS "OpenMC dirty state: ${PROJECT_DIRTY_STATE}")

# Generate version.h
configure_file(include/openmc/version.h.in "${CMAKE_BINARY_DIR}/include/openmc/version.h" @ONLY)

# Setup output directories
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

# Set module path
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules)

# Enable correct usage of CXX_EXTENSIONS
if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.22)
cmake_policy(SET CMP0128 NEW)
Expand Down Expand Up @@ -221,8 +226,6 @@ endif()
#===============================================================================
# Update git submodules as needed
#===============================================================================

find_package(Git)
if(GIT_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git")
option(GIT_SUBMODULE "Check submodules during build" ON)
if(GIT_SUBMODULE)
Expand Down Expand Up @@ -484,18 +487,6 @@ if (OPENMC_USE_MPI)
target_compile_definitions(libopenmc PUBLIC -DOPENMC_MPI)
endif()

# Set git SHA1 hash as a compile definition
if(GIT_FOUND)
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
RESULT_VARIABLE GIT_SHA1_SUCCESS
OUTPUT_VARIABLE GIT_SHA1
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
if(GIT_SHA1_SUCCESS EQUAL 0)
target_compile_definitions(libopenmc PRIVATE -DGIT_SHA1="${GIT_SHA1}")
endif()
endif()

# target_link_libraries treats any arguments starting with - but not -l as
# linker flags. Thus, we can pass both linker flags and libraries together.
target_link_libraries(libopenmc ${ldflags} ${HDF5_LIBRARIES} ${HDF5_HL_LIBRARIES}
Expand Down
119 changes: 119 additions & 0 deletions cmake/Modules/GetVersionFromGit.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
# GetVersionFromGit.cmake
# Standalone script to retrieve versioning information from Git or .git_archival.txt.
# Customizable for any project by setting variables before including this file.

# Configurable variables (set these in your main CMakeLists.txt if needed):
# - VERSION_PREFIX: Prefix for version tags (default: "v").
# - VERSION_SURFIX: Suffix for version tags (default: "[~+-]([a-zA-Z0-9]+)").
# - VERSION_REGEX: Regex to extract version (default: "(?[0-9]+\\.[0-9]+\\.[0-9]+)").
# - ARCHIVAL_FILE: Path to .git_archival.txt (default: "${CMAKE_SOURCE_DIR}/.git_archival.txt").

# Default Format Example: 1.2.3 v1.2.3 v1.2.3-rc1

set(VERSION_PREFIX "v" CACHE STRING "Prefix used in version tags")
set(VERSION_SURFIX "[~+-]([a-zA-Z0-9]+)" CACHE STRING "Suffix used in version tags")
set(VERSION_REGEX "?([0-9]+\\.[0-9]+\\.[0-9]+)" CACHE STRING "Regex for extracting version")
set(ARCHIVAL_FILE "${CMAKE_SOURCE_DIR}/.git_archival.txt" CACHE STRING "Path to .git_archival.txt")


set(VERSION_REGEX_WITH_PREFIX "^${VERSION_PREFIX}${VERSION_REGEX}")

# Ensure Git is available
find_package(Git REQUIRED)

# Attempt to retrieve version from Git
if(EXISTS "${CMAKE_SOURCE_DIR}/.git" AND GIT_FOUND)
message(STATUS "Using git describe for versioning")

# Extract the version string
execute_process(
COMMAND git describe --tags --dirty
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE VERSION_STRING
OUTPUT_STRIP_TRAILING_WHITESPACE
)

# Extract the commit hash
execute_process(
COMMAND git rev-parse HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE COMMIT_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
else()
message(STATUS "Using archival file for versioning: ${ARCHIVAL_FILE}")
if(EXISTS "${ARCHIVAL_FILE}")
file(READ "${ARCHIVAL_FILE}" ARCHIVAL_CONTENT)

# Extract the describe-name line
string(REGEX MATCH "describe-name: ([^\\n]+)" VERSION_STRING "${ARCHIVAL_CONTENT}")
if(VERSION_STRING MATCHES "describe-name: (.*)")
set(VERSION_STRING "${CMAKE_MATCH_1}")
else()
message(FATAL_ERROR "Could not extract version from ${ARCHIVAL_FILE}")
endif()

# Extract the commit hash
string(REGEX MATCH "commit: ([a-f0-9]+)" COMMIT_HASH "${ARCHIVAL_CONTENT}")
if(COMMIT_HASH MATCHES "commit: ([a-f0-9]+)")
set(COMMIT_HASH "${CMAKE_MATCH_1}")
else()
message(FATAL_ERROR "Could not extract commit hash from ${ARCHIVAL_FILE}")
endif()
else()
message(FATAL_ERROR "Neither git describe nor ${ARCHIVAL_FILE} is available for versioning.")
endif()
endif()

# Ensure version string format
if(VERSION_STRING MATCHES "${VERSION_REGEX_WITH_PREFIX}")
set(VERSION_NO_SUFFIX "${CMAKE_MATCH_1}")
else()
message(FATAL_ERROR "Invalid version format: Missing base version in ${VERSION_STRING}")
endif()

# Check for development state
if(VERSION_STRING MATCHES "-([0-9]+)-g([0-9a-f]+)")
set(DEV_STATE "true")
set(COMMIT_COUNT "${CMAKE_MATCH_1}")
string(REGEX REPLACE "-([0-9]+)-g([0-9a-f]+)" "" VERSION_WITHOUT_META "${VERSION_STRING}")
else()
set(DEV_STATE "false")
set(VERSION_WITHOUT_META "${VERSION_STRING}")
endif()

# Check for dirty state
if(VERSION_STRING MATCHES "-dirty")
set(DIRTY_STATE "true")
else()
set(DIRTY_STATE "false")
endif()

# Check for extra version
if(VERSION_WITHOUT_META MATCHES "${VERSION_SURFIX}")
set(VERSION_EXTRA "${CMAKE_MATCH_1}")
else()
set(VERSION_EXTRA "")
endif()

# Split and set version components
string(REPLACE "." ";" VERSION_LIST "${VERSION_NO_SUFFIX}")
list(GET VERSION_LIST 0 VERSION_MAJOR)
list(GET VERSION_LIST 1 VERSION_MINOR)
list(GET VERSION_LIST 2 VERSION_PATCH)

# Increment patch number for dev versions
if(DEV_STATE)
math(EXPR VERSION_PATCH "${VERSION_PATCH} + 1")
endif()

# Export variables
set(PROJECT_VERSION_MAJOR "${VERSION_MAJOR}")
set(PROJECT_VERSION_MINOR "${VERSION_MINOR}")
set(PROJECT_VERSION_PATCH "${VERSION_PATCH}")
set(PROJECT_VERSION_EXTRA "${VERSION_EXTRA}")
set(PROJECT_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
set(PROJECT_COMMIT_HASH "${COMMIT_HASH}")
set(PROJECT_DIRTY_STATE "${DIRTY_STATE}")
set(PROJECT_DEV_STATE "${DEV_STATE}")
set(PROJECT_COMMIT_COUNT "${COMMIT_COUNT}")
8 changes: 6 additions & 2 deletions docs/source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,14 @@
# |version| and |release|, also used in various other places throughout the
# built documents.
#

import openmc

# The short X.Y version.
version = "0.15"
version = ".".join(openmc.__version__.split('.')[:2])

# The full version, including alpha/beta/rc tags.
release = "0.15.1-dev"
release = openmc.__version__

# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
Expand Down
10 changes: 6 additions & 4 deletions include/openmc/version.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@ namespace openmc {

// OpenMC major, minor, and release numbers
// clang-format off
constexpr int VERSION_MAJOR {@OPENMC_VERSION_MAJOR@};
constexpr int VERSION_MINOR {@OPENMC_VERSION_MINOR@};
constexpr int VERSION_RELEASE {@OPENMC_VERSION_RELEASE@};
constexpr bool VERSION_DEV {true};
constexpr int VERSION_MAJOR {@PROJECT_VERSION_MAJOR@};
constexpr int VERSION_MINOR {@PROJECT_VERSION_MINOR@};
constexpr int VERSION_RELEASE {@PROJECT_VERSION_PATCH@};
constexpr bool VERSION_DEV {@PROJECT_DEV_STATE@};
constexpr const char* VERSION_COMMIT_COUNT = "@PROJECT_COMMIT_COUNT@";
constexpr const char* VERSION_COMMIT_HASH = "@PROJECT_COMMIT_HASH@";
constexpr std::array<int, 3> VERSION {VERSION_MAJOR, VERSION_MINOR, VERSION_RELEASE};
// clang-format on

Expand Down
6 changes: 4 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[build-system]
requires = ["setuptools", "wheel"]
requires = ["setuptools", "setuptools-scm", "wheel"]
build-backend = "setuptools.build_meta"

[project]
Expand All @@ -8,7 +8,7 @@ authors = [
{name = "The OpenMC Development Team", email = "openmc@anl.gov"},
]
description = "OpenMC"
version = "0.15.1-dev"
dynamic = ["version"]
requires-python = ">=3.11"
license = {file = "LICENSE"}
classifiers = [
Expand Down Expand Up @@ -67,6 +67,8 @@ exclude = ['tests*']
"openmc.data" = ["*.txt", "*.DAT", "*.json", "*.h5"]
"openmc.lib" = ["libopenmc.dylib", "libopenmc.so"]

[tool.setuptools_scm]

[project.scripts]
openmc-ace-to-hdf5 = "scripts.openmc_ace_to_hdf5:main"
openmc-plot-mesh-tally = "scripts.openmc_plot_mesh_tally:main"
Expand Down
4 changes: 2 additions & 2 deletions src/mcpl_interface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -207,8 +207,8 @@ void write_mcpl_source_point(const char* filename,
if (mpi::master) {
file_id = mcpl_create_outfile(filename_.c_str());
if (VERSION_DEV) {
line = fmt::format("OpenMC {0}.{1}.{2}-development", VERSION_MAJOR,
VERSION_MINOR, VERSION_RELEASE);
line = fmt::format("OpenMC {0}.{1}.{2}-dev{3}", VERSION_MAJOR,
VERSION_MINOR, VERSION_RELEASE, VERSION_COMMIT_COUNT);
} else {
line = fmt::format(
"OpenMC {0}.{1}.{2}", VERSION_MAJOR, VERSION_MINOR, VERSION_RELEASE);
Expand Down
21 changes: 9 additions & 12 deletions src/output.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,13 +75,12 @@ void title()
// Write version information
fmt::print(
" | The OpenMC Monte Carlo Code\n"
" Copyright | 2011-2024 MIT, UChicago Argonne LLC, and contributors\n"
" Copyright | 2011-2025 MIT, UChicago Argonne LLC, and contributors\n"
" License | https://docs.openmc.org/en/latest/license.html\n"
" Version | {}.{}.{}{}\n",
VERSION_MAJOR, VERSION_MINOR, VERSION_RELEASE, VERSION_DEV ? "-dev" : "");
#ifdef GIT_SHA1
fmt::print(" Git SHA1 | {}\n", GIT_SHA1);
#endif
" Version | {}.{}.{}{}{}\n",
VERSION_MAJOR, VERSION_MINOR, VERSION_RELEASE, VERSION_DEV ? "-dev" : "",
VERSION_COMMIT_COUNT);
fmt::print(" Commit Hash | {}\n", VERSION_COMMIT_HASH);

// Write the date and time
fmt::print(" Date/Time | {}\n", time_stamp());
Expand Down Expand Up @@ -291,12 +290,10 @@ void print_usage()
void print_version()
{
if (mpi::master) {
fmt::print("OpenMC version {}.{}.{}\n", VERSION_MAJOR, VERSION_MINOR,
VERSION_RELEASE);
#ifdef GIT_SHA1
fmt::print("Git SHA1: {}\n", GIT_SHA1);
#endif
fmt::print("Copyright (c) 2011-2024 MIT, UChicago Argonne LLC, and "
fmt::print("OpenMC version {}.{}.{}{}{}\n", VERSION_MAJOR, VERSION_MINOR,
VERSION_RELEASE, VERSION_DEV ? "-dev" : "", VERSION_COMMIT_COUNT);
fmt::print("Commit hash: {}\n", VERSION_COMMIT_HASH);
fmt::print("Copyright (c) 2011-2025 MIT, UChicago Argonne LLC, and "
"contributors\nMIT/X license at "
"<https://docs.openmc.org/en/latest/license.html>\n");
}
Expand Down
Loading