From 3186bdd9864dd2c1a7ff2acc4b31470a35616aa4 Mon Sep 17 00:00:00 2001 From: JulieSchramm Date: Tue, 28 Sep 2021 08:39:05 -0600 Subject: [PATCH 1/8] Remove Julie from CODEOWNERS (#181) --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 40196de744..c05ae70791 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -3,7 +3,7 @@ # These owners will be the default owners for everything in the repo. #* @defunkt -* @JulieSchramm @mkavulich @gsketefian @JeffBeck-NOAA @RatkoVasic-NOAA @BenjaminBlake-NOAA +* @mkavulich @gsketefian @JeffBeck-NOAA @RatkoVasic-NOAA @BenjaminBlake-NOAA # Order is important. The last matching pattern has the most precedence. # So if a pull request only touches javascript files, only these owners From 453e1952097a2f55a683835a450866bad2e3205f Mon Sep 17 00:00:00 2001 From: Christina Holt <56881914+christinaholtNOAA@users.noreply.github.com> Date: Tue, 19 Oct 2021 17:15:16 -0600 Subject: [PATCH 2/8] Add support for Rocoto with generic LINUX platform (#184) * Point to CRH branch. * Adding rocoto where it wasn't present. * Change Externals.cfg back to default. --- env/wflow_jet.env | 2 ++ env/wflow_orion.env | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/env/wflow_jet.env b/env/wflow_jet.env index dd1e74548a..f543bed8f1 100644 --- a/env/wflow_jet.env +++ b/env/wflow_jet.env @@ -1,5 +1,7 @@ # Python environment for workflow on Jet +module load rocoto + module use -a /contrib/miniconda3/modulefiles module load miniconda3 conda activate regional_workflow diff --git a/env/wflow_orion.env b/env/wflow_orion.env index dca666ef12..48f17cc5d3 100644 --- a/env/wflow_orion.env +++ b/env/wflow_orion.env @@ -1,6 +1,6 @@ # Python environment for workflow on Orion -module load rocoto +module load contrib rocoto module use -a /apps/contrib/miniconda3-noaa-gsl/modulefiles module load miniconda3 From ca1a12b5675dcb41ea84bbe8f71bcde1aaa7c067 Mon Sep 17 00:00:00 2001 From: "Chan-Hoo.Jeon-NOAA" <60152248+chan-hoo@users.noreply.github.com> Date: Fri, 22 Oct 2021 15:46:55 -0400 Subject: [PATCH 3/8] Update build and workflow environment for Orion (#183) * Modify workflow environment for orion * update build env for orion * Update env scripts * Update hash of regional workflow Co-authored-by: Chan-Hoo Jeon Co-authored-by: Chan-Hoo Jeon --- Externals.cfg | 2 +- env/build_orion_intel.env | 25 +++++++++++++------------ env/wflow_orion.env | 2 +- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/Externals.cfg b/Externals.cfg index 4d5cc9597d..cce601d5e2 100644 --- a/Externals.cfg +++ b/Externals.cfg @@ -3,7 +3,7 @@ protocol = git repo_url = https://github.com/NOAA-EMC/regional_workflow # Specify either a branch name or a hash but not both. #branch = develop -hash = 9bac8563 +hash = 7da0c46 local_path = regional_workflow required = True diff --git a/env/build_orion_intel.env b/env/build_orion_intel.env index c230ee4ebc..085d469be5 100644 --- a/env/build_orion_intel.env +++ b/env/build_orion_intel.env @@ -3,7 +3,7 @@ module load contrib noaatools module load cmake/3.18.1 -module load python/3.7.5 +module load python/3.9.2 module use /apps/contrib/NCEP/libs/hpc-stack/modulefiles/stack @@ -11,7 +11,17 @@ module load hpc/1.1.0 module load hpc-intel/2018.4 module load hpc-impi/2018.4 -module load jasper/2.0.22 +module load bacio/2.4.1 +module load g2/3.4.3 +module load g2tmpl/1.10.0 +module load ip/3.3.3 +module load sp/2.3.3 +module load w3nco/2.4.1 +module load w3emc/2.9.1 +module load crtm/2.3.0 +module load upp/10.0.10 + +module load jasper/2.0.25 module load zlib/1.2.11 module load png/1.6.35 module load hdf5/1.10.6 @@ -19,19 +29,10 @@ module load netcdf/4.7.4 module load pio/2.5.2 module load esmf/8_1_1 module load fms/2020.04.03 -module load bacio/2.4.1 -module load crtm/2.3.0 -module load g2/3.4.1 -module load g2tmpl/1.9.1 -module load ip/3.3.3 module load nemsio/2.5.2 -module load sp/2.3.3 -module load w3emc/2.7.3 -module load w3nco/2.4.1 -module load upp/10.0.6 - module load gfsio/1.4.1 module load sfcio/1.4.1 +module load sigio/2.3.2 module load landsfcutil/2.4.1 module load nemsiogfs/2.5.3 module load wgrib2/2.0.8 diff --git a/env/wflow_orion.env b/env/wflow_orion.env index 48f17cc5d3..64d7e598b3 100644 --- a/env/wflow_orion.env +++ b/env/wflow_orion.env @@ -3,5 +3,5 @@ module load contrib rocoto module use -a /apps/contrib/miniconda3-noaa-gsl/modulefiles -module load miniconda3 +module load miniconda3/3.8 conda activate regional_workflow From 28c95be48645ac607df41fc407118404f6541ad3 Mon Sep 17 00:00:00 2001 From: "Chan-Hoo.Jeon-NOAA" <60152248+chan-hoo@users.noreply.github.com> Date: Mon, 25 Oct 2021 12:18:33 -0400 Subject: [PATCH 4/8] update build-env for wcoss cray (#189) --- env/build_wcoss_cray_intel.env | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/env/build_wcoss_cray_intel.env b/env/build_wcoss_cray_intel.env index 43ed9d6776..ec010ab2af 100644 --- a/env/build_wcoss_cray_intel.env +++ b/env/build_wcoss_cray_intel.env @@ -15,7 +15,6 @@ module use /usrx/local/dev/modulefiles module load NetCDF-intel-sandybridge/4.7.4 module load HDF5-parallel-intel-sandybridge/1.10.6 -## WCOSS cray for WW3 module load jasper-gnu-sandybridge/1.900.1 module load zlib-intel-sandybridge/1.2.7 module load png-intel-sandybridge/1.2.49 @@ -40,7 +39,9 @@ module load sp/2.3.3 module load upp/10.0.6 module load w3emc/2.7.3 module load w3nco/2.4.1 -module load wgrib2/2.0.8 + +module use /gpfs/hps/nco/ops/nwprod/lib/modulefiles +module load wgrib2-intel/2.0.8 module swap pmi pmi/5.0.11 From 2f4094050c90690c909fb2866b894f99b3052d70 Mon Sep 17 00:00:00 2001 From: JeffBeck-NOAA <55201531+JeffBeck-NOAA@users.noreply.github.com> Date: Mon, 25 Oct 2021 16:10:56 -0600 Subject: [PATCH 5/8] Update manage_externals (#185) --- manage_externals/.travis.yml | 3 +- manage_externals/manic/checkout.py | 15 ++- .../manic/externals_description.py | 21 ++- manage_externals/manic/repository_git.py | 29 ++-- manage_externals/manic/sourcetree.py | 16 +-- manage_externals/test/test_sys_checkout.py | 126 ++++++++++++++++-- .../test/test_unit_repository_git.py | 2 +- 7 files changed, 168 insertions(+), 44 deletions(-) diff --git a/manage_externals/.travis.yml b/manage_externals/.travis.yml index 1990cb9604..d9b24c584d 100644 --- a/manage_externals/.travis.yml +++ b/manage_externals/.travis.yml @@ -1,7 +1,6 @@ language: python os: linux -python: - - "2.7" +python: - "3.4" - "3.5" - "3.6" diff --git a/manage_externals/manic/checkout.py b/manage_externals/manic/checkout.py index 222065553e..90169bd226 100755 --- a/manage_externals/manic/checkout.py +++ b/manage_externals/manic/checkout.py @@ -380,19 +380,19 @@ def main(args): if args.status: # user requested status-only - for comp in sorted(tree_status.keys()): + for comp in sorted(tree_status): tree_status[comp].log_status_message(args.verbose) else: # checkout / update the external repositories. safe_to_update = check_safe_to_update_repos(tree_status) if not safe_to_update: # print status - for comp in sorted(tree_status.keys()): + for comp in sorted(tree_status): tree_status[comp].log_status_message(args.verbose) # exit gracefully msg = """The external repositories labeled with 'M' above are not in a clean state. -The following are three options for how to proceed: +The following are four options for how to proceed: (1) Go into each external that is not in a clean state and issue either a 'git status' or an 'svn status' command (depending on whether the external is managed by git or @@ -412,12 +412,17 @@ def main(args): {program_name}. Excluding externals labeled with 'M' will allow {program_name} to update the other, non-excluded externals. +(4) As a last resort, if you are confident that there is no work that needs to be saved + from a given external, you can remove that external (via "rm -rf [directory]") and + then rerun the {program_name} tool. This option is mainly useful as a workaround for + issues with this tool (such as https://github.com/ESMCI/manage_externals/issues/157). + The external repositories labeled with '?' above are not under version control using the expected protocol. If you are sure you want to switch protocols, and you don't have any work you need to save from this -directory, then run "rm -rf [directory]" before re-running the -checkout_externals tool. +directory, then run "rm -rf [directory]" before rerunning the +{program_name} tool. """.format(program_name=program_name, config_file=args.externals) printlog('-' * 70) diff --git a/manage_externals/manic/externals_description.py b/manage_externals/manic/externals_description.py index 498d8d11ce..42755e1a52 100644 --- a/manage_externals/manic/externals_description.py +++ b/manage_externals/manic/externals_description.py @@ -193,6 +193,9 @@ def parse_submodules_desc_section(section_items, file_path): def read_gitmodules_file(root_dir, file_name): # pylint: disable=deprecated-method # Disabling this check because the method is only used for python2 + # pylint: disable=too-many-locals + # pylint: disable=too-many-branches + # pylint: disable=too-many-statements """Read a .gitmodules file and convert it to be compatible with an externals description. """ @@ -253,9 +256,21 @@ def read_gitmodules_file(root_dir, file_name): ExternalsDescription.REPO_URL, url) externals_description.set(sec_name, ExternalsDescription.REQUIRED, 'True') - git_hash = submods[sec_name]['hash'] - externals_description.set(sec_name, - ExternalsDescription.HASH, git_hash) + if sec_name in submods: + submod_name = sec_name + else: + # The section name does not have to match the path + submod_name = path + + if submod_name in submods: + git_hash = submods[submod_name]['hash'] + externals_description.set(sec_name, + ExternalsDescription.HASH, + git_hash) + else: + emsg = "submodule status has no section, '{}'" + emsg += "\nCheck section names in externals config file" + fatal_error(emsg.format(submod_name)) # Required items externals_description.add_section(DESCRIPTION_SECTION) diff --git a/manage_externals/manic/repository_git.py b/manage_externals/manic/repository_git.py index f986051001..3a6a0f1716 100644 --- a/manage_externals/manic/repository_git.py +++ b/manage_externals/manic/repository_git.py @@ -109,27 +109,21 @@ def _clone_repo(self, base_dir_path, repo_dir_name, verbosity): def _current_ref(self): """Determine the *name* associated with HEAD. - If we're on a branch, then returns the branch name; otherwise, - if we're on a tag, then returns the tag name; otherwise, returns + If we're on a tag, then returns the tag name; otherwise, returns the current hash. Returns an empty string if no reference can be determined (e.g., if we're not actually in a git repository). + + If we're on a branch, then the branch name is also included in + the returned string (in addition to the tag / hash). """ ref_found = False - # If we're on a branch, then use that as the current ref - branch_found, branch_name = self._git_current_branch() - if branch_found: - current_ref = branch_name + # If we're exactly at a tag, use that as the current ref + tag_found, tag_name = self._git_current_tag() + if tag_found: + current_ref = tag_name ref_found = True - if not ref_found: - # Otherwise, if we're exactly at a tag, use that as the - # current ref - tag_found, tag_name = self._git_current_tag() - if tag_found: - current_ref = tag_name - ref_found = True - if not ref_found: # Otherwise, use current hash as the current ref hash_found, hash_name = self._git_current_hash() @@ -137,7 +131,12 @@ def _current_ref(self): current_ref = hash_name ref_found = True - if not ref_found: + if ref_found: + # If we're on a branch, include branch name in current ref + branch_found, branch_name = self._git_current_branch() + if branch_found: + current_ref = "{} (branch {})".format(current_ref, branch_name) + else: # If we still can't find a ref, return empty string. This # can happen if we're not actually in a git repo current_ref = '' diff --git a/manage_externals/manic/sourcetree.py b/manage_externals/manic/sourcetree.py index b9c9c21082..54de763c30 100644 --- a/manage_externals/manic/sourcetree.py +++ b/manage_externals/manic/sourcetree.py @@ -331,12 +331,14 @@ def checkout(self, verbosity, load_all, load_comp=None): printlog('Checking out externals: ', end='') if load_all: - load_comps = self._all_components.keys() + tmp_comps = self._all_components.keys() elif load_comp is not None: - load_comps = [load_comp] + tmp_comps = [load_comp] else: - load_comps = self._required_compnames - + tmp_comps = self._required_compnames + # Sort by path so that if paths are nested the + # parent repo is checked out first. + load_comps = sorted(tmp_comps, key=lambda comp: self._all_components[comp].get_local_path()) # checkout the primary externals for comp in load_comps: if verbosity < VERBOSITY_VERBOSE: @@ -346,8 +348,6 @@ def checkout(self, verbosity, load_all, load_comp=None): # output a newline printlog(EMPTY_STR) self._all_components[comp].checkout(verbosity, load_all) - printlog('') - - # now give each external an opportunitity to checkout it's externals. - for comp in load_comps: + # now give each external an opportunitity to checkout it's externals. self._all_components[comp].checkout_externals(verbosity, load_all) + printlog('') diff --git a/manage_externals/test/test_sys_checkout.py b/manage_externals/test/test_sys_checkout.py index 007f5e4897..9889feba0c 100644 --- a/manage_externals/test/test_sys_checkout.py +++ b/manage_externals/test/test_sys_checkout.py @@ -85,6 +85,8 @@ CFG_SUB_NAME = 'sub-externals.cfg' README_NAME = 'readme.txt' REMOTE_BRANCH_FEATURE2 = 'feature2' +NESTED_NAME = ['./fred', './fred/wilma', './fred/wilma/barney'] + SVN_TEST_REPO = 'https://github.com/escomp/cesm' @@ -160,6 +162,23 @@ def container_simple_required(self, dest_dir): self.write_config(dest_dir) + def container_nested_required(self, dest_dir, order): + """Create a container externals file with only simple externals. + + """ + self.create_config() + self.create_section(SIMPLE_REPO_NAME, 'simp_tag', nested=True, + tag='tag1', path=NESTED_NAME[order[0]]) + + self.create_section(SIMPLE_REPO_NAME, 'simp_branch', nested=True, + branch=REMOTE_BRANCH_FEATURE2, path=NESTED_NAME[order[1]]) + + self.create_section(SIMPLE_REPO_NAME, 'simp_hash', nested=True, + ref_hash='60b1cc1a38d63', path=NESTED_NAME[order[2]]) + + self.write_config(dest_dir) + + def container_simple_optional(self, dest_dir): """Create a container externals file with optional simple externals @@ -261,7 +280,7 @@ def create_metadata(self): def create_section(self, repo_type, name, tag='', branch='', ref_hash='', required=True, path=EXTERNALS_NAME, externals='', repo_path=None, from_submodule=False, - sparse=''): + sparse='', nested=False): # pylint: disable=too-many-branches """Create a config section with autofilling some items and handling optional items. @@ -270,8 +289,11 @@ def create_section(self, repo_type, name, tag='', branch='', # pylint: disable=R0913 self._config.add_section(name) if not from_submodule: - self._config.set(name, ExternalsDescription.PATH, - os.path.join(path, name)) + if nested: + self._config.set(name, ExternalsDescription.PATH, path) + else: + self._config.set(name, ExternalsDescription.PATH, + os.path.join(path, name)) self._config.set(name, ExternalsDescription.PROTOCOL, ExternalsDescription.PROTOCOL_GIT) @@ -535,12 +557,26 @@ def setUp(self): self._test_id = self.id().split('.')[-1] + # find root + if os.path.exists(os.path.join(os.getcwd(), 'checkout_externals')): + root_dir = os.path.abspath(os.getcwd()) + else: + # maybe we are in a subdir, search up + root_dir = os.path.abspath(os.path.join(os.getcwd(), os.pardir)) + while os.path.basename(root_dir): + if os.path.exists(os.path.join(root_dir, 'checkout_externals')): + break + root_dir = os.path.dirname(root_dir) + + if not os.path.exists(os.path.join(root_dir, 'checkout_externals')): + raise RuntimeError('Cannot find checkout_externals') + # path to the executable - self._checkout = os.path.join('../checkout_externals') - self._checkout = os.path.abspath(self._checkout) + self._checkout = os.path.join(root_dir, 'checkout_externals') # directory where we have test repositories - self._bare_root = os.path.join(os.getcwd(), BARE_REPO_ROOT_NAME) + test_dir = os.path.join(root_dir, 'test') + self._bare_root = os.path.join(test_dir, BARE_REPO_ROOT_NAME) self._bare_root = os.path.abspath(self._bare_root) # set into the environment so var will be expanded in externals files @@ -671,10 +707,16 @@ def _check_simple_tag_empty(self, tree, directory=EXTERNALS_NAME): name = './{0}/simp_tag'.format(directory) self._check_generic_empty_default_required(tree, name) + def _check_nested_tag_empty(self, tree, name=EXTERNALS_NAME): + self._check_generic_empty_default_required(tree, name) + def _check_simple_tag_ok(self, tree, directory=EXTERNALS_NAME): name = './{0}/simp_tag'.format(directory) self._check_generic_ok_clean_required(tree, name) + def _check_nested_tag_ok(self, tree, name=EXTERNALS_NAME): + self._check_generic_ok_clean_required(tree, name) + def _check_simple_tag_dirty(self, tree, directory=EXTERNALS_NAME): name = './{0}/simp_tag'.format(directory) self._check_generic_ok_dirty_required(tree, name) @@ -687,10 +729,16 @@ def _check_simple_branch_empty(self, tree, directory=EXTERNALS_NAME): name = './{0}/simp_branch'.format(directory) self._check_generic_empty_default_required(tree, name) + def _check_nested_branch_empty(self, tree, name=EXTERNALS_NAME): + self._check_generic_empty_default_required(tree, name) + def _check_simple_branch_ok(self, tree, directory=EXTERNALS_NAME): name = './{0}/simp_branch'.format(directory) self._check_generic_ok_clean_required(tree, name) + def _check_nested_branch_ok(self, tree, name=EXTERNALS_NAME): + self._check_generic_ok_clean_required(tree, name) + def _check_simple_branch_modified(self, tree, directory=EXTERNALS_NAME): name = './{0}/simp_branch'.format(directory) self._check_generic_modified_ok_required(tree, name) @@ -699,10 +747,16 @@ def _check_simple_hash_empty(self, tree, directory=EXTERNALS_NAME): name = './{0}/simp_hash'.format(directory) self._check_generic_empty_default_required(tree, name) + def _check_nested_hash_empty(self, tree, name=EXTERNALS_NAME): + self._check_generic_empty_default_required(tree, name) + def _check_simple_hash_ok(self, tree, directory=EXTERNALS_NAME): name = './{0}/simp_hash'.format(directory) self._check_generic_ok_clean_required(tree, name) + def _check_nested_hash_ok(self, tree, name=EXTERNALS_NAME): + self._check_generic_ok_clean_required(tree, name) + def _check_simple_hash_modified(self, tree, directory=EXTERNALS_NAME): name = './{0}/simp_hash'.format(directory) self._check_generic_modified_ok_required(tree, name) @@ -754,6 +808,12 @@ def _check_container_simple_required_pre_checkout(self, overall, tree): self._check_simple_branch_empty(tree) self._check_simple_hash_empty(tree) + def _check_container_nested_required_pre_checkout(self, overall, tree, order): + self.assertEqual(overall, 0) + self._check_nested_tag_empty(tree, name=NESTED_NAME[order[0]]) + self._check_nested_branch_empty(tree, name=NESTED_NAME[order[1]]) + self._check_nested_hash_empty(tree, name=NESTED_NAME[order[2]]) + def _check_container_simple_required_checkout(self, overall, tree): # Note, this is the internal tree status just before checkout self.assertEqual(overall, 0) @@ -761,12 +821,25 @@ def _check_container_simple_required_checkout(self, overall, tree): self._check_simple_branch_empty(tree) self._check_simple_hash_empty(tree) + def _check_container_nested_required_checkout(self, overall, tree, order): + # Note, this is the internal tree status just before checkout + self.assertEqual(overall, 0) + self._check_nested_tag_empty(tree, name=NESTED_NAME[order[0]]) + self._check_nested_branch_empty(tree, name=NESTED_NAME[order[1]]) + self._check_nested_hash_empty(tree, name=NESTED_NAME[order[2]]) + def _check_container_simple_required_post_checkout(self, overall, tree): self.assertEqual(overall, 0) self._check_simple_tag_ok(tree) self._check_simple_branch_ok(tree) self._check_simple_hash_ok(tree) + def _check_container_nested_required_post_checkout(self, overall, tree, order): + self.assertEqual(overall, 0) + self._check_nested_tag_ok(tree, name=NESTED_NAME[order[0]]) + self._check_nested_branch_ok(tree, name=NESTED_NAME[order[1]]) + self._check_nested_hash_ok(tree, name=NESTED_NAME[order[2]]) + def _check_container_simple_required_out_of_sync(self, overall, tree): self.assertEqual(overall, 0) self._check_simple_tag_modified(tree) @@ -964,6 +1037,37 @@ def test_container_simple_required(self): self.status_args) self._check_container_simple_required_post_checkout(overall, tree) + def test_container_nested_required(self): + """Verify that a container with nested subrepos + generates the correct initial status. + Tests over all possible permutations + """ + + orders = [[0, 1, 2], [1, 2, 0], [2, 0, 1], + [0, 2, 1], [2, 1, 0], [1, 0, 2]] + for n, order in enumerate(orders): + # create repo + dest_dir = os.path.join(os.environ[MANIC_TEST_TMP_REPO_ROOT], + self._test_id, "test"+str(n)) + under_test_dir = self.setup_test_repo(CONTAINER_REPO_NAME, + dest_dir_in=dest_dir) + self._generator.container_nested_required(under_test_dir, order) + + # status of empty repo + overall, tree = self.execute_cmd_in_dir(under_test_dir, + self.status_args) + self._check_container_nested_required_pre_checkout(overall, tree, order) + + # checkout + overall, tree = self.execute_cmd_in_dir(under_test_dir, + self.checkout_args) + self._check_container_nested_required_checkout(overall, tree, order) + + # status clean checked out + overall, tree = self.execute_cmd_in_dir(under_test_dir, + self.status_args) + self._check_container_nested_required_post_checkout(overall, tree, order) + def test_container_simple_optional(self): """Verify that container with an optional simple subrepos generates the correct initial status. @@ -1591,7 +1695,7 @@ def setUp(self): """ # Run the basic setup - super(TestSubrepoCheckout, self).setUp() + super().setUp() # create test repo # We need to do this here (rather than have a static repo) because # git submodules do not allow for variables in .gitmodules files @@ -1610,8 +1714,9 @@ def setUp(self): cwd = os.getcwd() fork_repo_dir = os.path.join(self._bare_root, SIMPLE_FORK_NAME) simple_repo_dir = os.path.join(self._bare_root, SIMPLE_REPO_NAME) - self._simple_ext_fork_name = SIMPLE_FORK_NAME.split('.')[0] - self._simple_ext_name = SIMPLE_REPO_NAME.split('.')[0] + self._simple_ext_fork_name = os.path.splitext(SIMPLE_FORK_NAME)[0] + self._simple_ext_name = os.path.join('sourc', + os.path.splitext(SIMPLE_REPO_NAME)[0]) os.chdir(self._repo_dir) # Add a branch with a subrepo cmd = ['git', 'branch', self._bare_branch_name, 'master'] @@ -1632,7 +1737,8 @@ def setUp(self): execute_subprocess(cmd) cmd = ['git', 'checkout', self._config_branch_name] execute_subprocess(cmd) - cmd = ['git', 'submodule', 'add', simple_repo_dir] + cmd = ['git', 'submodule', 'add', '--name', SIMPLE_REPO_NAME, + simple_repo_dir, self._simple_ext_name] execute_subprocess(cmd) # Checkout feature2 os.chdir(self._simple_ext_name) diff --git a/manage_externals/test/test_unit_repository_git.py b/manage_externals/test/test_unit_repository_git.py index 4a0a334bb1..b153e556a9 100644 --- a/manage_externals/test/test_unit_repository_git.py +++ b/manage_externals/test/test_unit_repository_git.py @@ -101,7 +101,7 @@ def test_ref_branch(self): True, 'feature3') self._repo._git_current_tag = self._git_current_tag(True, 'foo_tag') self._repo._git_current_hash = self._git_current_hash(True, 'abc123') - expected = 'feature3' + expected = 'foo_tag (branch feature3)' result = self._repo._current_ref() self.assertEqual(result, expected) From f23ffacae3ff2a0b827cc63bd4d0c8aef51dbeb8 Mon Sep 17 00:00:00 2001 From: JeffBeck-NOAA <55201531+JeffBeck-NOAA@users.noreply.github.com> Date: Tue, 26 Oct 2021 12:22:12 -0600 Subject: [PATCH 6/8] Change references from NOAA-EMC/UFS_UTILS to ufs-community/UFS_UTILS (#187) --- .github/PULL_REQUEST_TEMPLATE | 2 +- Externals.cfg | 2 +- docs/UsersGuide/source/CodeReposAndDirs.rst | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE b/.github/PULL_REQUEST_TEMPLATE index d0deea8bbe..993b96ef3b 100644 --- a/.github/PULL_REQUEST_TEMPLATE +++ b/.github/PULL_REQUEST_TEMPLATE @@ -19,7 +19,7 @@ Explicitly state what tests were run on these changes, or if any are still pendi ## DEPENDENCIES: Add any links to external PRs (e.g. regional_workflow and/or UFS PRs). For example: - NOAA-EMC/regional_workflow/pull/ -- NOAA-EMC/UFS_UTILS/pull/ +- ufs-community/UFS_UTILS/pull/ - ufs-community/ufs-weather-model/pull/ ## DOCUMENTATION: diff --git a/Externals.cfg b/Externals.cfg index cce601d5e2..995b039913 100644 --- a/Externals.cfg +++ b/Externals.cfg @@ -9,7 +9,7 @@ required = True [ufs_utils] protocol = git -repo_url = https://github.com/NOAA-EMC/UFS_UTILS +repo_url = https://github.com/ufs-community/UFS_UTILS # Specify either a branch name or a hash but not both. #branch = develop hash = ea821358 diff --git a/docs/UsersGuide/source/CodeReposAndDirs.rst b/docs/UsersGuide/source/CodeReposAndDirs.rst index c5f429b0c5..3776b1a891 100644 --- a/docs/UsersGuide/source/CodeReposAndDirs.rst +++ b/docs/UsersGuide/source/CodeReposAndDirs.rst @@ -33,7 +33,7 @@ repositories associated with this umbrella repo (see :numref:`Table %s Date: Tue, 26 Oct 2021 12:22:24 -0600 Subject: [PATCH 7/8] Add sigio module and upgrade version of w3emc module. (#186) --- env/build_hera_intel.env | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/env/build_hera_intel.env b/env/build_hera_intel.env index 53cdf6cf02..664079ee66 100644 --- a/env/build_hera_intel.env +++ b/env/build_hera_intel.env @@ -26,7 +26,8 @@ module load g2tmpl/1.10.0 module load ip/3.3.3 module load nemsio/2.5.2 module load sp/2.3.3 -module load w3emc/2.7.3 +module load w3emc/2.9.1 +module load sigio/2.3.2 module load w3nco/2.4.1 module load upp/10.0.6 From 866cbf900bf9ee30e0e60d5d5d70c939df272506 Mon Sep 17 00:00:00 2001 From: "Chan-Hoo.Jeon-NOAA" <60152248+chan-hoo@users.noreply.github.com> Date: Mon, 15 Nov 2021 17:25:01 -0500 Subject: [PATCH 8/8] Add rocoto to workflow env files for WCOSS (#191) * Add rocoto to env for wcoss * Update hash of regional workflow --- Externals.cfg | 2 +- env/wflow_wcoss_cray.env | 4 ++++ env/wflow_wcoss_dell_p3.env | 4 ++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Externals.cfg b/Externals.cfg index 995b039913..4adeee52ee 100644 --- a/Externals.cfg +++ b/Externals.cfg @@ -3,7 +3,7 @@ protocol = git repo_url = https://github.com/NOAA-EMC/regional_workflow # Specify either a branch name or a hash but not both. #branch = develop -hash = 7da0c46 +hash = bf733c1 local_path = regional_workflow required = True diff --git a/env/wflow_wcoss_cray.env b/env/wflow_wcoss_cray.env index b7a51ba12e..0d06d99817 100644 --- a/env/wflow_wcoss_cray.env +++ b/env/wflow_wcoss_cray.env @@ -1,5 +1,9 @@ # Python environment for workflow on WCOSS_cray +module load xt-lsfhpc/9.1.3 +module use -a /usrx/local/emc_rocoto/modulefiles +module load rocoto/1.3.0rc2 + module unload python/2.7.14 module load python/3.6.3 module use /usrx/local/nceplibs/modulefiles diff --git a/env/wflow_wcoss_dell_p3.env b/env/wflow_wcoss_dell_p3.env index 7dc9051526..8b834cfe77 100644 --- a/env/wflow_wcoss_dell_p3.env +++ b/env/wflow_wcoss_dell_p3.env @@ -1,5 +1,9 @@ # Python environment for workflow on WCOSS_dell_p3 +module load lsf/10.1 +module use /gpfs/dell3/usrx/local/dev/emc_rocoto/modulefiles/ +module load ruby/2.5.1 rocoto/1.3.0rc2 + module load python/3.6.3 module use /usrx/local/nceplibs/dev/modulefiles module load srw-app-python/1.0.0