forked from NOAA-EMC/global-workflow
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'NOAA-EMC:develop' into feature/gmi_on
- Loading branch information
Showing
14 changed files
with
104 additions
and
36 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,7 +5,7 @@ def cases = '' | |
def GH = 'none' | ||
// Location of the custom workspaces for each machine in the CI system. They are persitent for each iteration of the PR. | ||
def NodeName = [hera: 'Hera-EMC', orion: 'Orion-EMC', hercules: 'Hercules-EMC', gaea: 'Gaea'] | ||
def custom_workspace = [hera: '/scratch1/NCEPDEV/global/CI', orion: '/work2/noaa/stmp/CI/ORION', hercules: '/work2/noaa/stmp/CI/HERCULES', gaea: '/gpfs/f5/epic/proj-shared/global/CI'] | ||
def custom_workspace = [hera: '/scratch1/NCEPDEV/global/CI', orion: '/work2/noaa/stmp/CI/ORION', hercules: '/work2/noaa/global/CI/HERCULES', gaea: '/gpfs/f5/epic/proj-shared/global/CI'] | ||
def repo_url = '[email protected]:NOAA-EMC/global-workflow.git' | ||
def STATUS = 'Passed' | ||
|
||
|
@@ -101,9 +101,10 @@ pipeline { | |
stages { | ||
stage('Building') { | ||
steps { | ||
catchError(buildResult: 'UNSTABLE', stageResult: 'FAILURE') { | ||
catchError(buildResult: 'UNSTABLE', stageResult: 'FAILURE') { | ||
script { | ||
def HOMEgfs = "${CUSTOM_WORKSPACE}/${system}" // local HOMEgfs is used to build the system on per system basis under the custome workspace for each buile system | ||
env.HOME_GFS = HOMEgfs // setting path in HOMEgfs as an environment variable HOME_GFS for some systems that using the path in its .bashrc | ||
sh(script: "mkdir -p ${HOMEgfs}") | ||
ws(HOMEgfs) { | ||
if (fileExists("${HOMEgfs}/sorc/BUILT_semaphor")) { // if the system is already built, skip the build in the case of re-runs | ||
|
@@ -172,9 +173,10 @@ pipeline { | |
} | ||
if (system == 'gfs') { | ||
cases = sh(script: "${HOMEgfs}/ci/scripts/utils/get_host_case_list.py ${machine}", returnStdout: true).trim().split() | ||
echo "Cases to run: ${cases}" | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
|
@@ -192,32 +194,34 @@ pipeline { | |
def parallelStages = cases.collectEntries { caseName -> | ||
["${caseName}": { | ||
stage("Create ${caseName}") { | ||
catchError(buildResult: 'UNSTABLE', stageResult: 'FAILURE') { | ||
script { | ||
sh(script: "sed -n '/{.*}/!p' ${CUSTOM_WORKSPACE}/gfs/ci/cases/pr/${caseName}.yaml > ${CUSTOM_WORKSPACE}/gfs/ci/cases/pr/${caseName}.yaml.tmp") | ||
def yaml_case = readYaml file: "${CUSTOM_WORKSPACE}/gfs/ci/cases/pr/${caseName}.yaml.tmp" | ||
system = yaml_case.experiment.system | ||
def HOMEgfs = "${CUSTOM_WORKSPACE}/${system}" // local HOMEgfs is used to populate the XML on per system basis | ||
env.RUNTESTS = "${CUSTOM_WORKSPACE}/RUNTESTS" | ||
try { | ||
error_output = sh(script: "${HOMEgfs}/ci/scripts/utils/ci_utils_wrapper.sh create_experiment ${HOMEgfs}/ci/cases/pr/${caseName}.yaml", returnStdout: true).trim() | ||
} catch (Exception error_create) { | ||
sh(script: """${GH} pr comment ${env.CHANGE_ID} --repo ${repo_url} --body "${Case} **FAILED** to create experment on ${Machine} in BUILD# ${env.BUILD_NUMBER}\n with the error:\n\\`\\`\\`\n${error_output}\\`\\`\\`" """) | ||
error("Case ${caseName} failed to create experment directory") | ||
} | ||
script { | ||
sh(script: "sed -n '/{.*}/!p' ${CUSTOM_WORKSPACE}/gfs/ci/cases/pr/${caseName}.yaml > ${CUSTOM_WORKSPACE}/gfs/ci/cases/pr/${caseName}.yaml.tmp") | ||
def yaml_case = readYaml file: "${CUSTOM_WORKSPACE}/gfs/ci/cases/pr/${caseName}.yaml.tmp" | ||
def build_system = yaml_case.experiment.system | ||
def HOMEgfs = "${CUSTOM_WORKSPACE}/${build_system}" // local HOMEgfs is used to populate the XML on per system basis | ||
env.HOME_GFS = HOMEgfs // setting path in HOMEgfs as an environment variable HOME_GFS for some systems that using the path in its .bashrc | ||
env.RUNTESTS = "${CUSTOM_WORKSPACE}/RUNTESTS" | ||
try { | ||
error_output = sh(script: "${HOMEgfs}/ci/scripts/utils/ci_utils_wrapper.sh create_experiment ${HOMEgfs}/ci/cases/pr/${caseName}.yaml", returnStdout: true).trim() | ||
} catch (Exception error_create) { | ||
sh(script: """${GH} pr comment ${env.CHANGE_ID} --repo ${repo_url} --body "${Case} **FAILED** to create experment on ${Machine} in BUILD# ${env.BUILD_NUMBER}\n with the error:\n\\`\\`\\`\n${error_output}\\`\\`\\`" """) | ||
error("Case ${caseName} failed to create experment directory") | ||
} | ||
} | ||
} | ||
} | ||
|
||
stage("Running ${caseName}") { | ||
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') { | ||
script { | ||
HOMEgfs = "${CUSTOM_WORKSPACE}/gfs" // common HOMEgfs is used to launch the scripts that run the experiments | ||
env.HOME_GFS = HOMEgfs // setting path in HOMEgfs as an environment variable HOME_GFS for some systems that using the path in its .bashrc | ||
def pslot = sh(script: "${HOMEgfs}/ci/scripts/utils/ci_utils_wrapper.sh get_pslot ${CUSTOM_WORKSPACE}/RUNTESTS ${caseName}", returnStdout: true).trim() | ||
def error_file = "${CUSTOM_WORKSPACE}/RUNTESTS/${pslot}_error.logs" | ||
sh(script: " rm -f ${error_file}") | ||
def yaml_case = readYaml file: "${CUSTOM_WORKSPACE}/gfs/ci/cases/pr/${caseName}.yaml.tmp" | ||
def build_system = yaml_case.experiment.system | ||
try { | ||
sh(script: "${HOMEgfs}/ci/scripts/run-check_ci.sh ${CUSTOM_WORKSPACE} ${pslot} ${system}") | ||
sh(script: "${HOMEgfs}/ci/scripts/run-check_ci.sh ${CUSTOM_WORKSPACE} ${pslot} ${build_system}") | ||
} catch (Exception error_experment) { | ||
sh(script: "${HOMEgfs}/ci/scripts/utils/ci_utils_wrapper.sh cancel_batch_jobs ${pslot}") | ||
ws(CUSTOM_WORKSPACE) { | ||
|
@@ -268,11 +272,11 @@ pipeline { | |
} | ||
} | ||
|
||
|
||
stage( '5. FINALIZE' ) { | ||
agent { label NodeName[machine].toLowerCase() } | ||
steps { | ||
script { | ||
env.HOME_GFS = "${CUSTOM_WORKSPACE}/gfs" // setting path to HOMEgfs as an environment variable HOME_GFS for some systems that using the path in its .bashrc | ||
sh(script: """ | ||
labels=\$(${GH} pr view ${env.CHANGE_ID} --repo ${repo_url} --json labels --jq '.labels[].name') | ||
for label in \$labels; do | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12,6 +12,7 @@ Code managers | |
|
||
* Kate Friedman - @KateFriedman-NOAA / [email protected] | ||
* Walter Kolczynski - @WalterKolczynski-NOAA / [email protected] | ||
* David Huber - @DavidHuber-NOAA / [email protected] | ||
|
||
.. _development: | ||
|
||
|
@@ -70,7 +71,29 @@ The following steps should be followed in order to make changes to the develop b | |
Development Tools | ||
================= | ||
|
||
See the ``/test`` folder in global-workflow for available development and testing tools. | ||
Two sets of testing are available for use by developers. The first is the capability to run continuous integration tests locally and the second are a set of comparison tools. | ||
|
||
--------------------------- | ||
Continuous Integration (CI) | ||
--------------------------- | ||
|
||
The global workflow comes fitted with a suite of system tests that run various types of workflow. These tests are commonly run for pull requests before they may be merged into the develop branch. At a minimum, developers are expected to run the CI test(s) that will be impacted by their changes on at least one platform. | ||
|
||
The commonly run tests are written in YAML format and can be found in the ``ci/cases/pr`` directory. The ``workflow/generate_workflows.sh`` tool is available to aid running these cases. See the help documentation by running ``./generate_workflows.sh -h``. The script has the capability to prepare the EXPDIR and COMROOT directories for a specified or implied suite of CI tests (see :doc:`setup` for details on these directories). The script also has options to automatically build and run all tests for a given system (i.e. GFS or GEFS and a placeholder for SFS). For instance, to build the workflow and run all of the GFS tests, one would execute | ||
|
||
:: | ||
|
||
cd workflow | ||
./generate_workflows.sh -A "your_hpc_account" -b -G -c /path/to/root/directory | ||
|
||
where: | ||
|
||
* ``-A`` is used to specify the HPC (slurm or PBS) account to use | ||
* ``-b`` indicates that the workflow should be built fresh | ||
* ``-G`` specifies that all of the GFS cases should be run (this also influences the build flags to use) | ||
* ``-c`` tells the tool to append the rocotorun commands for each experiment to your crontab | ||
|
||
More details on how to use the tool are provided by running ``generate_workflows.sh -h``. | ||
|
||
---------------- | ||
Comparison Tools | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -90,9 +90,9 @@ Optimizing the global workflow on S4 | |
|
||
The S4 cluster is relatively small and so optimizations are recommended to improve cycled runtimes. Please contact Innocent Souopgui ([email protected]) if you are planning on running a cycled experiment on this system to obtain optimized configuration files. | ||
|
||
======================================== | ||
================================================== | ||
Stacksize on R&Ds (Hera, Orion, Hercules, Jet, S4) | ||
======================================== | ||
================================================== | ||
|
||
Some GFS components, like the UPP, need an unlimited stacksize. Add the following setting into your appropriate .*rc file to support these components: | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.