diff --git a/CMakeLists.txt b/CMakeLists.txt index d5fe777b2..4d4ed0832 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,7 +31,7 @@ find_package( ecbuild 3.4 REQUIRED HINTS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CUR # Project # ========================================================================================= -project( ecflow LANGUAGES CXX VERSION 5.13.6 ) +project( ecflow LANGUAGES CXX VERSION 5.13.7 ) # # Important: # The CMake project version is used, as generated CMake variables, to filter .../ecflow/core/ecflow_version.h.in diff --git a/docs/conf.py b/docs/conf.py index 71d3c1683..01e6db859 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -93,7 +93,7 @@ def get_ecflow_version(): - version = "5.13.6" + version = "5.13.7" ecflow_version = version.split(".") print("Extracted ecflow version '" + str(ecflow_version)) return ecflow_version diff --git a/docs/release_notes/version_5.13.rst b/docs/release_notes/version_5.13.rst index ab89490bd..79e347f46 100644 --- a/docs/release_notes/version_5.13.rst +++ b/docs/release_notes/version_5.13.rst @@ -6,6 +6,30 @@ Version 5.13 updates .. role:: jiraissue :class: hidden + +Version 5.13.7 +============== + +* `Released `__\ on 2025-02-06 + +General +------- + +- **Improvement** allow requesting explicit execution of ecflow_start.sh :jiraissue:`ECFLOW-1991` +- **Improvement** enable mirror of non-generated inherited variables :jiraissue:`ECFLOW-1999` +- **Fix** replace use of deprecated functions to build with Boost 1.87 :jiraissue:`ECFLOW-1997` + +ecFlow UI +--------- + +- **Fix** correct handling of Repeat DateTime values :jiraissue:`ECFLOW-1993` +- **Fix** correct selection in suite filter after Suite replacement :jiraissue:`ECFLOW-1994` + +Documentation +------------- + +- **Improvement** clarify use of attributes date and cron :jiraissue:`ECFLOW-1996` + Version 5.13.6 ============== diff --git a/docs/ug/cookbook/index.rst b/docs/ug/cookbook/index.rst index dccb92910..bca559728 100644 --- a/docs/ug/cookbook/index.rst +++ b/docs/ug/cookbook/index.rst @@ -12,7 +12,7 @@ This cookbook will provide real examples of using the ecFlow :ref:`python_api`. **Contents** .. toctree:: - :maxdepth: 2 + :maxdepth: 1 intro print_all_states diff --git a/docs/ug/elearning.rst b/docs/ug/elearning.rst index e41f87000..22fb5c9ca 100644 --- a/docs/ug/elearning.rst +++ b/docs/ug/elearning.rst @@ -3,4 +3,4 @@ eLearning ================ -The ecFlow eLearning material is available `here `_. +The ecFlow eLearning material is available `here `_. diff --git a/docs/ug/user_manual/text_based_suite_definition/dependencies/cron/index.rst b/docs/ug/user_manual/text_based_suite_definition/dependencies/cron/index.rst index 3124735ab..39c457941 100644 --- a/docs/ug/user_manual/text_based_suite_definition/dependencies/cron/index.rst +++ b/docs/ug/user_manual/text_based_suite_definition/dependencies/cron/index.rst @@ -16,6 +16,9 @@ but one that will be repeated indefinitely. It is **highly discouraged** to create completion :term:`triggers ` on nodes/suites containing :term:`cron` attributes. +Consider combining the cron attribute together with event and complete attributes to avoid the suite never completing +-- see more about this usage pattern :ref:`here `. + If the task aborts, the :term:`ecflow_server` will not schedule it again. A :term:`cron` can be parameterised as follows: diff --git a/docs/ug/user_manual/text_based_suite_definition/dependencies/date.rst b/docs/ug/user_manual/text_based_suite_definition/dependencies/date.rst index 7aa660ad9..d2c9d7739 100644 --- a/docs/ug/user_manual/text_based_suite_definition/dependencies/date.rst +++ b/docs/ug/user_manual/text_based_suite_definition/dependencies/date.rst @@ -20,6 +20,8 @@ expressed with a wildcard \* to mean any valid value. For example, **Extreme care** is advised when creating completion :term:`triggers ` on nodes/suites containing :term:`date` attributes. +Consider combining the date attribute together with event and complete attributes to avoid the suite never completing +-- see more about this usage pattern :ref:`here `. Currently, a range of values cannot be used to specify any of the three numeric fields in a date. See :ref:`text_based_def_day` for a way to specify the first seven days. diff --git a/libs/server/src/ecflow/server/ServerEnvironment.cpp b/libs/server/src/ecflow/server/ServerEnvironment.cpp index cf150b3d7..9e4e26f83 100644 --- a/libs/server/src/ecflow/server/ServerEnvironment.cpp +++ b/libs/server/src/ecflow/server/ServerEnvironment.cpp @@ -546,62 +546,30 @@ void ServerEnvironment::read_config_file(std::string& log_file_name, const std:: // read the environment from the config file. // **** Port *must* be read before log file, and check pt files po::options_description config_file_options("Configuration"); - config_file_options.add_options()( - "ECF_HOME", po::value(&ecfHome_)->default_value("."), "ECF_HOME, the home for all ECF files")( - "ECF_PORT", - po::value(&serverPort_)->default_value(3141), - "The port number. Clients must use same port.")( - "ECF_CHECK", - po::value(&ecf_checkpt_file_)->default_value(Ecf::CHECKPT()), - "Check point file name")( - "ECF_CHECKOLD", - po::value(&ecf_backup_checkpt_file_)->default_value(Ecf::BACKUP_CHECKPT()), - "Backup checkpoint file name")( - "ECF_LOG", po::value(&log_file_name)->default_value(Ecf::LOG_FILE()), "Log file name")( - "ECF_CHECKINTERVAL", - po::value(&checkPtInterval_)->default_value(CheckPt::default_interval()), - "The interval in seconds to save check point file")( - "ECF_INTERVAL", - po::value(&submitJobsInterval_)->default_value(defaultSubmitJobsInterval), - "Check time dependencies and submit any jobs")( - "ECF_CHECKMODE", - po::value(&theCheckMode), - "The check mode, must be one of CHECK_NEVER, CHECK_ON_TIME, CHECK_ALWAYS")( - "ECF_JOB_CMD", - po::value(&ecf_cmd_)->default_value(Ecf::JOB_CMD()), - "Command to be executed to submit a job.")( - "ECF_KILL_CMD", - po::value(&killCmd_)->default_value(Ecf::KILL_CMD()), - "Command to be executed to kill a job.")( - "ECF_STATUS_CMD", - po::value(&statusCmd_)->default_value(Ecf::STATUS_CMD()), - "Command to be obtain the job status from server.")( - "ECF_CHECK_CMD", - po::value(&checkCmd_)->default_value(Ecf::CHECK_CMD()), - "Command to be obtain the job status from client.")( - "ECF_URL_CMD", - po::value(&urlCmd_)->default_value(Ecf::URL_CMD()), - "Command to be obtain url.")( - "ECF_URL_BASE", po::value(&urlBase_)->default_value(Ecf::URL_BASE()), "Defines url base.")( - "ECF_URL", po::value(&url_)->default_value(Ecf::URL()), "The default url.")( - "ECF_MICRODEF", - po::value(&ecf_micro_)->default_value(Ecf::MICRO()), - "Preprocessor character for variable substitution and including files")( - "ECF_LISTS", - po::value(&ecf_white_list_file_)->default_value(Str::WHITE_LIST_FILE()), - "Path name to file the list valid users and their access rights")( - "ECF_PASSWD", - po::value(&ecf_passwd_file_)->default_value(ecf::environment::ECF_PASSWD), - "Path name to passwd file")( - "ECF_CUSTOM_PASSWD", - po::value(&ecf_passwd_custom_file_)->default_value(ecf::environment::ECF_CUSTOM_PASSWD), - "Path name to custom passwd file, for user who don't use login name")( - "ECF_TASK_THRESHOLD", - po::value(&the_task_threshold)->default_value(JobProfiler::task_threshold_default()), - "The defaults thresholds when profiling job generation")( - "ECF_PRUNE_NODE_LOG", - po::value(&ecf_prune_node_log_)->default_value(30), - "Node log, older than 180 days automatically pruned when checkpoint file loaded"); + // clang-format off + config_file_options.add_options() + ("ECF_HOME", po::value(&ecfHome_)->default_value("."), "ECF_HOME, the home for all ECF files") + ("ECF_PORT", po::value(&serverPort_)->default_value(3141), "The port number. Clients must use same port.") + ("ECF_CHECK", po::value(&ecf_checkpt_file_)->default_value(Ecf::CHECKPT()), "Check point file name") + ("ECF_CHECKOLD", po::value(&ecf_backup_checkpt_file_)->default_value(Ecf::BACKUP_CHECKPT()), "Backup checkpoint file name") + ("ECF_LOG", po::value(&log_file_name)->default_value(Ecf::LOG_FILE()), "Log file name") + ("ECF_CHECKINTERVAL", po::value(&checkPtInterval_)->default_value(CheckPt::default_interval()), "The interval in seconds to save check point file") + ("ECF_INTERVAL", po::value(&submitJobsInterval_)->default_value(defaultSubmitJobsInterval), "Check time dependencies and submit any jobs") + ("ECF_CHECKMODE", po::value(&theCheckMode), "The check mode, must be one of CHECK_NEVER, CHECK_ON_TIME, CHECK_ALWAYS") + ("ECF_JOB_CMD", po::value(&ecf_cmd_)->default_value(Ecf::JOB_CMD()), "Command to be executed to submit a job.") + ("ECF_KILL_CMD", po::value(&killCmd_)->default_value(Ecf::KILL_CMD()), "Command to be executed to kill a job.") + ("ECF_STATUS_CMD", po::value(&statusCmd_)->default_value(Ecf::STATUS_CMD()), "Command to be obtain the job status from server.") + ("ECF_CHECK_CMD", po::value(&checkCmd_)->default_value(Ecf::CHECK_CMD()), "Command to be obtain the job status from client.") + ("ECF_URL_CMD", po::value(&urlCmd_)->default_value(Ecf::URL_CMD()), "Command to be obtain url.") + ("ECF_URL_BASE", po::value(&urlBase_)->default_value(Ecf::URL_BASE()), "Defines url base.") + ("ECF_URL", po::value(&url_)->default_value(Ecf::URL()), "The default url.") + ("ECF_MICRODEF", po::value(&ecf_micro_)->default_value(Ecf::MICRO()), "Preprocessor character for variable substitution and including files") + ("ECF_LISTS", po::value(&ecf_white_list_file_)->default_value(Str::WHITE_LIST_FILE()), "Path name to file the list valid users and their access rights") + ("ECF_PASSWD", po::value(&ecf_passwd_file_)->default_value(ecf::environment::ECF_PASSWD), "Path name to passwd file") + ("ECF_CUSTOM_PASSWD", po::value(&ecf_passwd_custom_file_)->default_value(ecf::environment::ECF_CUSTOM_PASSWD), "Path name to custom passwd file, for user who don't use login name") + ("ECF_TASK_THRESHOLD", po::value(&the_task_threshold)->default_value(JobProfiler::task_threshold_default()), "The defaults thresholds when profiling job generation") + ("ECF_PRUNE_NODE_LOG", po::value(&ecf_prune_node_log_)->default_value(30), "Node log, older than 180 days automatically pruned when checkpoint file loaded"); + // clang-format on ifstream ifs(path_to_config_file.c_str()); if (!ifs) {