From 0d82967c69da0b48651a6751e2e4ad297b2b6e4a Mon Sep 17 00:00:00 2001 From: Hilary James Oliver Date: Tue, 21 Mar 2017 23:24:07 +0000 Subject: [PATCH 1/5] Refactored doc source; added suite design guide. --- .gitignore | 5 + Makefile | 4 +- doc/Makefile | 71 +- doc/README | 28 +- doc/index.css | 85 --- doc/scripts/make-index.sh | 155 ----- doc/src/cylc-logo.png | Bin 0 -> 3823 bytes doc/src/cylc-user-guide/Makefile | 69 ++ doc/src/cylc-user-guide/README | 15 + doc/{ => src/cylc-user-guide}/abstract.tex | 0 doc/{ => src/cylc-user-guide}/cug-html.cfg | 0 doc/{ => src/cylc-user-guide}/cug-html.tex | 0 doc/{ => src/cylc-user-guide}/cug-pdf.tex | 0 doc/{ => src/cylc-user-guide}/cug.tex | 36 +- doc/{ => src/cylc-user-guide}/gcylcrc.tex | 0 doc/{ => src/cylc-user-guide}/gpl-3.0.tex | 0 .../png/orig/QuickStartA-ControlRunning.png | Bin .../png/orig/QuickStartA-ControlStalled.png | Bin .../png/orig/QuickStartA-ControlStart00.png | Bin .../png/orig/QuickStartA-ControlStart06.png | Bin .../png/orig/QuickStartA-ModelState.png | Bin .../graphics/png/orig/QuickStartA-graph18.png | Bin .../graphics/png/orig/QuickStartB-graph18.png | Bin .../png/orig/conditional-triggers.png | Bin .../graphics/png/orig/dep-eg-1.png | Bin .../graphics/png/orig/dep-multi-cycle.png | Bin .../graphics/png/orig/dep-one-cycle.png | Bin .../png/orig/dep-two-cycles-linked.png | Bin .../graphics/png/orig/dep-two-cycles.png | Bin .../graphics/png/orig/ecox-1.png | Bin .../graphics/png/orig/eg2-dynamic.png | Bin .../graphics/png/orig/eg2-static.png | Bin .../png/orig/gcylc-graph-and-dot-views.png | Bin .../graphics/png/orig/gcylc-text-view.png | Bin .../graphics/png/orig/gscan.png | Bin .../graphics/png/orig/inherit-2.png | Bin .../graphics/png/orig/inherit-3.png | Bin .../graphics/png/orig/inherit-4.png | Bin .../graphics/png/orig/inherit-5.png | Bin .../graphics/png/orig/inherit-6.png | Bin .../graphics/png/orig/inherit-7.png | Bin .../png/orig/jinja2-ensemble-graph.png | Bin .../graphics/png/orig/jinja2-suite-graph.png | Bin .../graphics/png/orig/logo.png | Bin .../graphics/png/orig/niwa-colour-small.png | Bin .../graphics/png/orig/niwa-colour.png | Bin .../graphics/png/orig/params1.png | Bin .../graphics/png/orig/satellite.png | Bin .../graphics/png/orig/suicide.png | Bin .../graphics/png/orig/suite-log.png | Bin .../graphics/png/orig/suite-output.png | Bin .../graphics/png/orig/suiterc-jinja2.png | Bin .../graphics/png/orig/task-pool.png | Bin .../graphics/png/orig/test1.png | Bin .../graphics/png/orig/test2.png | Bin .../graphics/png/orig/test4.png | Bin .../graphics/png/orig/test5.png | Bin .../graphics/png/orig/test6.png | Bin .../graphics/png/orig/timeline-one-a.png | Bin .../graphics/png/orig/timeline-one-c.png | Bin .../graphics/png/orig/timeline-one.png | Bin .../graphics/png/orig/timeline-three.png | Bin .../png/orig/timeline-two-cycles-optimal.png | Bin .../graphics/png/orig/timeline-two.png | Bin .../graphics/png/orig/timeline-zero.png | Bin .../graphics/png/orig/tut-cyc-int.png | Bin .../graphics/png/orig/tut-four.png | Bin .../graphics/png/orig/tut-hello-multi-1.png | Bin .../graphics/png/orig/tut-hello-multi-2.png | Bin .../graphics/png/orig/tut-hello-multi-3.png | Bin .../graphics/png/orig/tut-one.png | Bin .../graphics/png/orig/tut-three.png | Bin .../graphics/png/orig/tut-two.png | Bin .../png/scaled/QuickStartA-ControlRunning.png | Bin .../png/scaled/QuickStartA-ControlStalled.png | Bin .../png/scaled/QuickStartA-ControlStart00.png | Bin .../png/scaled/QuickStartA-ControlStart06.png | Bin .../png/scaled/QuickStartA-ModelState.png | Bin .../png/scaled/QuickStartA-graph18.png | Bin .../png/scaled/QuickStartB-graph18.png | Bin .../png/scaled/conditional-triggers.png | Bin .../graphics/png/scaled/dep-eg-1.png | Bin .../graphics/png/scaled/dep-multi-cycle.png | Bin .../graphics/png/scaled/dep-one-cycle.png | Bin .../png/scaled/dep-two-cycles-linked.png | Bin .../graphics/png/scaled/dep-two-cycles.png | Bin .../graphics/png/scaled/ecox-1.png | Bin .../graphics/png/scaled/eg2-dynamic.png | Bin .../graphics/png/scaled/eg2-static.png | Bin .../png/scaled/gcylc-graph-and-dot-views.png | Bin .../graphics/png/scaled/gcylc-text-view.png | Bin .../graphics/png/scaled/gscan.png | Bin .../graphics/png/scaled/inherit-2.png | Bin .../graphics/png/scaled/inherit-3.png | Bin .../graphics/png/scaled/inherit-4.png | Bin .../graphics/png/scaled/inherit-5.png | Bin .../graphics/png/scaled/inherit-6.png | Bin .../graphics/png/scaled/inherit-7.png | Bin .../png/scaled/jinja2-ensemble-graph.png | Bin .../png/scaled/jinja2-suite-graph.png | Bin .../graphics/png/scaled/logo.png | Bin .../graphics/png/scaled/niwa-colour-small.png | Bin .../graphics/png/scaled/niwa-colour.png | Bin .../graphics/png/scaled/params1.png | Bin .../graphics/png/scaled/satellite.png | Bin .../graphics/png/scaled/suicide.png | Bin .../graphics/png/scaled/suite-log.png | Bin .../graphics/png/scaled/suite-output.png | Bin .../graphics/png/scaled/suiterc-jinja2.png | Bin .../graphics/png/scaled/task-pool.png | Bin .../graphics/png/scaled/test1.png | Bin .../graphics/png/scaled/test2.png | Bin .../graphics/png/scaled/test4.png | Bin .../graphics/png/scaled/test5.png | Bin .../graphics/png/scaled/test6.png | Bin .../graphics/png/scaled/timeline-one-a.png | Bin .../graphics/png/scaled/timeline-one-c.png | Bin .../graphics/png/scaled/timeline-one.png | Bin .../graphics/png/scaled/timeline-three.png | Bin .../scaled/timeline-two-cycles-optimal.png | Bin .../graphics/png/scaled/timeline-two.png | Bin .../graphics/png/scaled/timeline-zero.png | Bin .../graphics/png/scaled/tut-cyc-int.png | Bin .../graphics/png/scaled/tut-four.png | Bin .../graphics/png/scaled/tut-hello-multi-1.png | Bin .../graphics/png/scaled/tut-hello-multi-2.png | Bin .../graphics/png/scaled/tut-hello-multi-3.png | Bin .../graphics/png/scaled/tut-one.png | Bin .../graphics/png/scaled/tut-three.png | Bin .../graphics/png/scaled/tut-two.png | Bin .../cylc-user-guide}/graphics/scale-images.sh | 0 .../graphics/vector/README.txt | 0 .../graphics/vector/eps/dep-multi-cycle.eps | 0 .../graphics/vector/eps/dep-one-cycle.eps | 0 .../vector/eps/dep-two-cycles-linked.eps | 0 .../graphics/vector/eps/dep-two-cycles.eps | 0 .../graphics/vector/eps/task-pool.eps | 0 .../graphics/vector/eps/timeline-one-a.eps | 0 .../graphics/vector/eps/timeline-one-c.eps | 0 .../graphics/vector/eps/timeline-one.eps | 0 .../graphics/vector/eps/timeline-three.eps | 0 .../eps/timeline-two-cycles-optimal.eps | 0 .../graphics/vector/eps/timeline-two.eps | 0 .../graphics/vector/eps/timeline-zero.eps | 0 .../graphics/vector/svg/dep-multi-cycle.svg | 0 .../graphics/vector/svg/dep-one-cycle.svg | 0 .../vector/svg/dep-two-cycles-linked.svg | 0 .../graphics/vector/svg/dep-two-cycles.svg | 0 .../graphics/vector/svg/task-pool.svg | 0 .../graphics/vector/svg/timeline-one-a.svg | 0 .../graphics/vector/svg/timeline-one-c.svg | 0 .../graphics/vector/svg/timeline-one.svg | 0 .../graphics/vector/svg/timeline-three-0.svg | 0 .../graphics/vector/svg/timeline-three.svg | 0 .../svg/timeline-two-cycles-optimal.svg | 0 .../graphics/vector/svg/timeline-two.svg | 0 .../graphics/vector/svg/timeline-zero.svg | 0 doc/{ => src/cylc-user-guide}/graphviz.txt | 0 doc/{ => src/cylc-user-guide}/gscanrc.tex | 0 .../cylc-user-guide}/scripts/get-deps.sh | 7 +- .../cylc-user-guide}/scripts/make-commands.sh | 2 +- .../cylc-user-guide}/scripts/make-html.sh | 3 +- .../cylc-user-guide}/scripts/make-pdf.sh | 3 +- doc/{ => src/cylc-user-guide}/siterc.tex | 0 doc/{ => src/cylc-user-guide}/suiterc.tex | 0 doc/{ => src/cylc-user-guide}/titlepic.sty | 0 doc/{ => src/cylc-user-guide}/titlepic/README | 0 .../titlepic/titlepic-manual.pdf | Bin .../titlepic/titlepic-manual.tex | 0 .../cylc-user-guide}/titlepic/titlepic.sty | 0 doc/src/index.css | 86 +++ doc/src/make-index.sh | 165 +++++ doc/src/suite-design-guide/Makefile | 29 + doc/src/suite-design-guide/document.tex | 11 + doc/src/suite-design-guide/efficiency.tex | 355 ++++++++++ .../suite-design-guide/general-principles.tex | 652 ++++++++++++++++++ doc/src/suite-design-guide/introduction.tex | 28 + .../suite-design-guide/portable-suites.tex | 492 +++++++++++++ doc/src/suite-design-guide/preamble.tex | 87 +++ .../resources/png/failure-recovery.png | Bin 0 -> 10003 bytes .../resources/png/fam-to-fam-1.png | Bin 0 -> 54466 bytes .../resources/png/fam-to-fam-2.png | Bin 0 -> 53147 bytes .../resources/png/param-1.png | Bin 0 -> 74693 bytes .../resources/png/param-2.png | Bin 0 -> 129846 bytes .../resources/png/rose-logo.png | Bin 0 -> 19084 bytes .../resources/tex/cylc-logo.pdf | Bin 0 -> 6186 bytes doc/src/suite-design-guide/roadmap.tex | 75 ++ doc/src/suite-design-guide/style-guide.tex | 264 +++++++ doc/src/suite-design-guide/title-page.tex | 16 + lib/cylc/cfgspec/globalcfg.py | 10 +- 190 files changed, 2421 insertions(+), 332 deletions(-) delete mode 100644 doc/index.css delete mode 100755 doc/scripts/make-index.sh create mode 100644 doc/src/cylc-logo.png create mode 100644 doc/src/cylc-user-guide/Makefile create mode 100644 doc/src/cylc-user-guide/README rename doc/{ => src/cylc-user-guide}/abstract.tex (100%) rename doc/{ => src/cylc-user-guide}/cug-html.cfg (100%) rename doc/{ => src/cylc-user-guide}/cug-html.tex (100%) rename doc/{ => src/cylc-user-guide}/cug-pdf.tex (100%) rename doc/{ => src/cylc-user-guide}/cug.tex (99%) rename doc/{ => src/cylc-user-guide}/gcylcrc.tex (100%) rename doc/{ => src/cylc-user-guide}/gpl-3.0.tex (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/QuickStartA-ControlRunning.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/QuickStartA-ControlStalled.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/QuickStartA-ControlStart00.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/QuickStartA-ControlStart06.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/QuickStartA-ModelState.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/QuickStartA-graph18.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/QuickStartB-graph18.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/conditional-triggers.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/dep-eg-1.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/dep-multi-cycle.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/dep-one-cycle.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/dep-two-cycles-linked.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/dep-two-cycles.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/ecox-1.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/eg2-dynamic.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/eg2-static.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/gcylc-graph-and-dot-views.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/gcylc-text-view.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/gscan.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/inherit-2.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/inherit-3.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/inherit-4.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/inherit-5.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/inherit-6.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/inherit-7.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/jinja2-ensemble-graph.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/jinja2-suite-graph.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/logo.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/niwa-colour-small.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/niwa-colour.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/params1.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/satellite.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/suicide.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/suite-log.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/suite-output.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/suiterc-jinja2.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/task-pool.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/test1.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/test2.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/test4.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/test5.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/test6.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/timeline-one-a.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/timeline-one-c.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/timeline-one.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/timeline-three.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/timeline-two-cycles-optimal.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/timeline-two.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/timeline-zero.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/tut-cyc-int.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/tut-four.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/tut-hello-multi-1.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/tut-hello-multi-2.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/tut-hello-multi-3.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/tut-one.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/tut-three.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/orig/tut-two.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/QuickStartA-ControlRunning.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/QuickStartA-ControlStalled.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/QuickStartA-ControlStart00.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/QuickStartA-ControlStart06.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/QuickStartA-ModelState.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/QuickStartA-graph18.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/QuickStartB-graph18.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/conditional-triggers.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/dep-eg-1.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/dep-multi-cycle.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/dep-one-cycle.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/dep-two-cycles-linked.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/dep-two-cycles.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/ecox-1.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/eg2-dynamic.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/eg2-static.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/gcylc-graph-and-dot-views.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/gcylc-text-view.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/gscan.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/inherit-2.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/inherit-3.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/inherit-4.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/inherit-5.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/inherit-6.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/inherit-7.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/jinja2-ensemble-graph.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/jinja2-suite-graph.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/logo.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/niwa-colour-small.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/niwa-colour.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/params1.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/satellite.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/suicide.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/suite-log.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/suite-output.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/suiterc-jinja2.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/task-pool.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/test1.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/test2.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/test4.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/test5.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/test6.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/timeline-one-a.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/timeline-one-c.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/timeline-one.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/timeline-three.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/timeline-two-cycles-optimal.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/timeline-two.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/timeline-zero.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/tut-cyc-int.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/tut-four.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/tut-hello-multi-1.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/tut-hello-multi-2.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/tut-hello-multi-3.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/tut-one.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/tut-three.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/png/scaled/tut-two.png (100%) rename doc/{ => src/cylc-user-guide}/graphics/scale-images.sh (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/README.txt (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/eps/dep-multi-cycle.eps (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/eps/dep-one-cycle.eps (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/eps/dep-two-cycles-linked.eps (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/eps/dep-two-cycles.eps (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/eps/task-pool.eps (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/eps/timeline-one-a.eps (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/eps/timeline-one-c.eps (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/eps/timeline-one.eps (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/eps/timeline-three.eps (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/eps/timeline-two-cycles-optimal.eps (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/eps/timeline-two.eps (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/eps/timeline-zero.eps (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/svg/dep-multi-cycle.svg (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/svg/dep-one-cycle.svg (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/svg/dep-two-cycles-linked.svg (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/svg/dep-two-cycles.svg (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/svg/task-pool.svg (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/svg/timeline-one-a.svg (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/svg/timeline-one-c.svg (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/svg/timeline-one.svg (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/svg/timeline-three-0.svg (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/svg/timeline-three.svg (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/svg/timeline-two-cycles-optimal.svg (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/svg/timeline-two.svg (100%) rename doc/{ => src/cylc-user-guide}/graphics/vector/svg/timeline-zero.svg (100%) rename doc/{ => src/cylc-user-guide}/graphviz.txt (100%) rename doc/{ => src/cylc-user-guide}/gscanrc.tex (100%) rename doc/{ => src/cylc-user-guide}/scripts/get-deps.sh (63%) rename doc/{ => src/cylc-user-guide}/scripts/make-commands.sh (98%) rename doc/{ => src/cylc-user-guide}/scripts/make-html.sh (98%) rename doc/{ => src/cylc-user-guide}/scripts/make-pdf.sh (97%) rename doc/{ => src/cylc-user-guide}/siterc.tex (100%) rename doc/{ => src/cylc-user-guide}/suiterc.tex (100%) rename doc/{ => src/cylc-user-guide}/titlepic.sty (100%) rename doc/{ => src/cylc-user-guide}/titlepic/README (100%) rename doc/{ => src/cylc-user-guide}/titlepic/titlepic-manual.pdf (100%) rename doc/{ => src/cylc-user-guide}/titlepic/titlepic-manual.tex (100%) rename doc/{ => src/cylc-user-guide}/titlepic/titlepic.sty (100%) create mode 100644 doc/src/index.css create mode 100755 doc/src/make-index.sh create mode 100644 doc/src/suite-design-guide/Makefile create mode 100644 doc/src/suite-design-guide/document.tex create mode 100644 doc/src/suite-design-guide/efficiency.tex create mode 100644 doc/src/suite-design-guide/general-principles.tex create mode 100644 doc/src/suite-design-guide/introduction.tex create mode 100644 doc/src/suite-design-guide/portable-suites.tex create mode 100644 doc/src/suite-design-guide/preamble.tex create mode 100644 doc/src/suite-design-guide/resources/png/failure-recovery.png create mode 100644 doc/src/suite-design-guide/resources/png/fam-to-fam-1.png create mode 100644 doc/src/suite-design-guide/resources/png/fam-to-fam-2.png create mode 100644 doc/src/suite-design-guide/resources/png/param-1.png create mode 100644 doc/src/suite-design-guide/resources/png/param-2.png create mode 100644 doc/src/suite-design-guide/resources/png/rose-logo.png create mode 100644 doc/src/suite-design-guide/resources/tex/cylc-logo.pdf create mode 100644 doc/src/suite-design-guide/roadmap.tex create mode 100644 doc/src/suite-design-guide/style-guide.tex create mode 100644 doc/src/suite-design-guide/title-page.tex diff --git a/.gitignore b/.gitignore index 056a2d5c3c2..13f9bccee76 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,11 @@ doc/html/ doc/pdf/ doc/index.html doc/cylc-version.txt +*.aux +*.out +*.pdf +*.log +*.toc # VERSION FILE VERSION diff --git a/Makefile b/Makefile index 7577cf092fc..7012f1087cf 100644 --- a/Makefile +++ b/Makefile @@ -14,12 +14,12 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -all: version docs +all: version documentation version: admin/create-version-file -docs: +documentation: cd doc && $(MAKE) clean: diff --git a/doc/Makefile b/doc/Makefile index 4ac08b994ef..9b6801267e6 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -16,63 +16,38 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -CYLC=$(dir $(abspath $(lastword $(MAKEFILE_LIST))))../bin/cylc +.PHONY: all cug sdg cug-pdf cug-html clean install installclean -.PHONY: all index clean html html-multi html-single pdf +all: sdg cug install -DEPS := $(shell ./scripts/get-deps.sh) +sdg: src/suite-design-guide/document.pdf -all: index +cug: cug-pdf cug-html + +cug-pdf: src/cylc-user-guide/pdf/cug-pdf.pdf -index: $(DEPS) - ./scripts/make-index.sh +cug-html: src/cylc-user-guide/html/single/cug-html.html \ + src/cylc-user-guide/html/multi/cug-html.html -html: html-multi html-single +src/suite-design-guide/document.pdf: + cd src/suite-design-guide && $(MAKE) -html-multi: html/multi/cug-html.html +src/cylc-user-guide/pdf/cug-pdf.pdf: + cd src/cylc-user-guide && $(MAKE) pdf -html-single: html/single/cug-html.html +src/cylc-user-guide/html/single/cug-html.html: + cd src/cylc-user-guide && $(MAKE) html-single -pdf: pdf/cug-pdf.pdf +src/cylc-user-guide/html/multi/cug-html.html: + cd src/cylc-user-guide && $(MAKE) html-multi +install: + ./src/make-index.sh -cylc.txt: ../bin/cylc - $< --help > $@ - -cats = $(shell ../bin/cylc categories) -catx = $(cats:%=categories/%.txt) - -cmds = $(shell ../bin/cylc commands) -cmdx = $(cmds:%=commands/%.txt) - -$(cmdx): commands/%.txt: ../bin/cylc-% - if test ! -d commands; then mkdir -p commands/; fi - $(patsubst ../bin/cylc-%,../bin/cylc %,$<) --help > $@ - -$(catx): categories/%.txt: ../bin/cylc - if test ! -d categories; then mkdir -p categories/; fi - cylc $(subst .txt,,$(subst categories/,,$@)) --help > $@ - -commands.tex: $(cmdx) $(catx) cylc.txt - ./scripts/make-commands.sh - -html/multi/cug-html.html: commands.tex cug-html.tex cug.tex suiterc.tex siterc.tex gcylcrc.tex cug-html.cfg - ./scripts/make-html.sh multi - -html/single/cug-html.html: commands.tex cug-html.tex cug.tex suiterc.tex siterc.tex gcylcrc.tex cug-html.cfg - ./scripts/make-html.sh single - -pdf/cug-pdf.pdf: commands.tex cug-pdf.tex cug.tex suiterc.tex siterc.tex gcylcrc.tex - ./scripts/make-pdf.sh - -# delete all generated files: clean: - rm -r pdf \ - html \ - cylc.txt \ - commands \ - categories \ - commands.tex \ - index.html \ - cylc-version.txt + cd src/suite-design-guide && $(MAKE) clean + cd src/cylc-user-guide && $(MAKE) clean + +installclean: + rm -r install diff --git a/doc/README b/doc/README index f3b3f9d10fb..359780380f9 100644 --- a/doc/README +++ b/doc/README @@ -1,15 +1,23 @@ +------------------------------------------ +Cylc document generation from LaTeX source +------------------------------------------ -To generate pdf and html (single and multi-page) Cylc User Guides: +cug = Cylc User Guide +sdg = Suite Design Guide - | cd $CYLC_DIR/doc - | make +make all - create cug and sdg, and install to 'doc/install/' -The following make targets are also avaialable: - | make pdf - | make html - | make html-single - | make html-multi +make sdg - just create sdg (PDF) -This will generate the documents under pdf/ and html/ sub-directories, -and an index.html file at the top level that links to them. +make cug - just create cug (PDF and HTML) +make cug-pdf - just create cug-pdf +make cug-html - just create cug-html (single and multi-page versions) +make install - install created docs to 'doc/install/', create index.html +make clean - remove all generated files (except those in 'doc/install/') +make installclean - remove the 'doc/install/' directory + +----------------------------------------------------------------------- +NOTE 'doc/install/' can be moved wholesale to another location (add the +new location to your global.rc so that 'cylc doc' works properly). +----------------------------------------------------------------------- diff --git a/doc/index.css b/doc/index.css deleted file mode 100644 index bf418c2b20d..00000000000 --- a/doc/index.css +++ /dev/null @@ -1,85 +0,0 @@ - -body { - background:#bbc; -} - -div.uberpage { - border:2px solid #bbc; - margin:0 auto; - width:700px; - background-image:url(images/niwa-colour-small.png); - background-repeat:no-repeat; - background-position: bottom right; -} - -div.page { - background:#ffffff; - border:2px solid #0a0; - margin:0 auto; - margin-top:20px; - padding:50px; - width:600px; -} - -.lbox { - width: 60%; -} - -.rbox { - float:right; - /* font-size:80%;*/ -} - -.info { - color:#666; - font-size:80%; -} - - -a:link, a:visited { - font-weight:bold; - color: #04a; -} - -h1 { - border-bottom:2px solid #0a0; - margin-top:0; - color:#0a0; -} -h2 { - border-bottom:2px solid #00cc00; - margin-right:25%; - margin-left:30px; - color:#0a0; -} -h3 { - border-bottom:1px solid #080; - color:#080; - margin-right:50%; - margin-left:60px; - padding-top:20px; -} - -code { - color:#ff0033; - font-family: "Courier 10 Pitch", Courier, monospace; - font-size: 90%; - font-weight:bold; -} - -pre.code { - display:block; - /*color:#3e7c63;*/ - color:#ff0033; - margin-top:-10px; - padding:10px; - font-family: "Courier 10 Pitch", Courier, monospace; - font-size: 90%; - font-weight:bold; - white-space: pre-wrap; /* css-3 */ - white-space: -moz-pre-wrap !important; - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - word-wrap: break-word; /* Internet Explorer 5.5+ */ -} - diff --git a/doc/scripts/make-index.sh b/doc/scripts/make-index.sh deleted file mode 100755 index bcfd435971d..00000000000 --- a/doc/scripts/make-index.sh +++ /dev/null @@ -1,155 +0,0 @@ -#!/bin/bash - -# THIS FILE IS PART OF THE CYLC SUITE ENGINE. -# Copyright (C) 2008-2017 NIWA -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# This script generates an HTML index page linking to cylc -# documentation. It is intended to be executed automatically -# during the document generation process (see Makefile). The resulting -# index file will link to whichever documentation formats have been -# generated (PDF and/or HTML single page and/or HTML multi-page). -# It can however be executed manually from within the doc directory. - -set -e - -echo "Updating index.html" - -CYLC_VERSION=$($(dirname $0)/../../bin/cylc --version) -INDEX=index.html - -cat > $INDEX < - - - Cylc Documentation Index - - - - - -
-
- -
- -END - -echo $CYLC_VERSION >> $INDEX - -cat >> $INDEX < -
- -

Cylc Documentation

- -

Run the cylc documentation command to get here -(see cylc doc --help).

- - -

-

Command Help

-
-cylc --help
-cylc COMMAND --help
-
-

Misc

- -
- -
-

User Guide

-

For this cylc version: -END -echo $CYLC_VERSION >> $INDEX - -cat >> $INDEX < -

    -END - -if [[ -f pdf/cug-pdf.pdf ]]; then - cat >> $INDEX < PDF format -END -else - cat >> $INDEX <PDF format (not generated) -END -fi - -if [[ -f html/single/cug-html.html ]]; then - cat >> $INDEX < HTML single-page -END -else - cat >> $INDEX < HTML single page (not generated) -END - -fi - -if [[ -f html/multi/cug-html.html ]]; then - cat >> $INDEX < HTML multi-page -END -else - cat >> $INDEX < HTML multi-page (not generated) -END -fi - -cat >> $INDEX < -
- -
-

Internet

-

For the latest cylc release

- -
-
- -
-

Document generation:

-
    -
  • user: -END -whoami >> $INDEX -cat >> $INDEX <
  • -
  • host: -END -hostname -f >> $INDEX -cat >> $INDEX <
  • -
  • date: -END -date >> $INDEX - -cat >> $INDEX < -
- - - -END - diff --git a/doc/src/cylc-logo.png b/doc/src/cylc-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9654cc427a237d153faa537e93c8917355043f54 GIT binary patch literal 3823 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 literal 0 HcmV?d00001 diff --git a/doc/src/cylc-user-guide/Makefile b/doc/src/cylc-user-guide/Makefile new file mode 100644 index 00000000000..b972cdf6614 --- /dev/null +++ b/doc/src/cylc-user-guide/Makefile @@ -0,0 +1,69 @@ +#!/usr/bin/make -f + +# THIS FILE IS PART OF THE CYLC SUITE ENGINE. +# Copyright (C) 2008-2017 NIWA +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +.PHONY: all pdf html html-multi html-single clean + +DEPS := $(shell ./scripts/get-deps.sh) + +all: $(DEPS) + +pdf: pdf/cug-pdf.pdf + +html: html-multi html-single + +html-multi: html/multi/cug-html.html + +html-single: html/single/cug-html.html + +cylc.txt: ../../../bin/cylc + $< --help > $@ + +cats = $(shell ../../../bin/cylc categories) +catx = $(cats:%=categories/%.txt) + +cmds = $(shell ../../../bin/cylc commands) +cmdx = $(cmds:%=commands/%.txt) + +$(cmdx): commands/%.txt: ../../../bin/cylc-% + if test ! -d commands; then mkdir -p commands/; fi + $(patsubst ../../../bin/cylc-%,../../../bin/cylc %,$<) --help > $@ + +$(catx): categories/%.txt: ../../../bin/cylc + if test ! -d categories; then mkdir -p categories/; fi + ../../../bin/cylc $(subst .txt,,$(subst categories/,,$@)) --help > $@ + +commands.tex: $(cmdx) $(catx) cylc.txt + ./scripts/make-commands.sh + +html/multi/cug-html.html: commands.tex cug-html.tex cug.tex suiterc.tex siterc.tex gcylcrc.tex cug-html.cfg + - ./scripts/make-html.sh multi + +html/single/cug-html.html: commands.tex cug-html.tex cug.tex suiterc.tex siterc.tex gcylcrc.tex cug-html.cfg + - ./scripts/make-html.sh single + +pdf/cug-pdf.pdf: commands.tex cug-pdf.tex cug.tex suiterc.tex siterc.tex gcylcrc.tex + - ./scripts/make-pdf.sh + +clean: + rm -r pdf \ + html \ + cylc.txt \ + commands \ + categories \ + commands.tex \ + cylc-version.txt diff --git a/doc/src/cylc-user-guide/README b/doc/src/cylc-user-guide/README new file mode 100644 index 00000000000..f3b3f9d10fb --- /dev/null +++ b/doc/src/cylc-user-guide/README @@ -0,0 +1,15 @@ + +To generate pdf and html (single and multi-page) Cylc User Guides: + + | cd $CYLC_DIR/doc + | make + +The following make targets are also avaialable: + | make pdf + | make html + | make html-single + | make html-multi + +This will generate the documents under pdf/ and html/ sub-directories, +and an index.html file at the top level that links to them. + diff --git a/doc/abstract.tex b/doc/src/cylc-user-guide/abstract.tex similarity index 100% rename from doc/abstract.tex rename to doc/src/cylc-user-guide/abstract.tex diff --git a/doc/cug-html.cfg b/doc/src/cylc-user-guide/cug-html.cfg similarity index 100% rename from doc/cug-html.cfg rename to doc/src/cylc-user-guide/cug-html.cfg diff --git a/doc/cug-html.tex b/doc/src/cylc-user-guide/cug-html.tex similarity index 100% rename from doc/cug-html.tex rename to doc/src/cylc-user-guide/cug-html.tex diff --git a/doc/cug-pdf.tex b/doc/src/cylc-user-guide/cug-pdf.tex similarity index 100% rename from doc/cug-pdf.tex rename to doc/src/cylc-user-guide/cug-pdf.tex diff --git a/doc/cug.tex b/doc/src/cylc-user-guide/cug.tex similarity index 99% rename from doc/cug.tex rename to doc/src/cylc-user-guide/cug.tex index 49c92c5cf1b..b5682cee3cc 100644 --- a/doc/cug.tex +++ b/doc/src/cylc-user-guide/cug.tex @@ -1,5 +1,5 @@ \lstset{language=transcript} - + \section{Introduction: How Cylc Works} \label{HowCylcWorks} @@ -856,7 +856,7 @@ \subsection{Hello World in Cylc} Here's the traditional {\em Hello World} program rendered as a cylc suite: \lstset{language=suiterc} -\lstinputlisting{../examples/tutorial/oneoff/basic/suite.rc} +\lstinputlisting{../../../examples/tutorial/oneoff/basic/suite.rc} \lstset{language=transcript} Cylc suites feature a clean separation of scheduling configuration, @@ -877,7 +877,7 @@ \subsection{Hello World in Cylc} the suite host. In fact cylc even provides a default task implementation that makes the entire \lstinline=[runtime]= section technically optional: \lstset{language=suiterc} -\lstinputlisting{../examples/tutorial/oneoff/minimal/suite.rc} +\lstinputlisting{../../../examples/tutorial/oneoff/minimal/suite.rc} \lstset{language=transcript} (the resulting {\em dummy task} just prints out some identifying information and exits). @@ -1386,7 +1386,7 @@ \subsection{Runtime Inheritance} family}. This allows common configuration to be factored out of related tasks very efficiently. \lstset{language=suiterc} -\lstinputlisting{../examples/tutorial/oneoff/inherit/suite.rc} +\lstinputlisting{../../../examples/tutorial/oneoff/inherit/suite.rc} The \lstinline=[root]= namespace provides defaults for all tasks in the suite. Here both tasks inherit \lstinline=script= from \lstinline=root=, which they customize with different values of the environment variable @@ -1425,7 +1425,7 @@ \subsection{Triggering Families} \lstinline=GREETERS= at once. Here's the full suite with runtime hierarchy shown: \lstset{language=suiterc} -\lstinputlisting{../examples/tutorial/oneoff/ftrigger1/suite.rc} +\lstinputlisting{../../../examples/tutorial/oneoff/ftrigger1/suite.rc} (Note that we recommend given ALL-CAPS names to task families to help distinguish them from task names. However, this is just a convention). @@ -1557,11 +1557,11 @@ \subsection{External Task Scripts} \lstinline=hello= out to a file \lstinline=hello.sh= in the suite bin directory: \lstset{language=bash} -\lstinputlisting{../examples/tutorial/oneoff/external/bin/hello.sh} +\lstinputlisting{../../../examples/tutorial/oneoff/external/bin/hello.sh} Make the task script executable, and change the \lstinline=hello= task runtime section to invoke it: \lstset{language=suiterc} -\lstinputlisting{../examples/tutorial/oneoff/external/suite.rc} +\lstinputlisting{../../../examples/tutorial/oneoff/external/suite.rc} If you run the suite now the new greeting from the external task script should appear in the \lstinline=hello= task stdout log. This works @@ -1598,7 +1598,7 @@ \subsection{Cycling Tasks} Open the \lstinline=tut/cycling/one= suite: \lstset{language=suiterc} -\lstinputlisting{../examples/tutorial/cycling/one/suite.rc} +\lstinputlisting{../../../examples/tutorial/cycling/one/suite.rc} The difference between cycling and non-cycling suites is all in the \lstinline=[scheduling]= section, so we will leave the \lstinline=[runtime]= section alone for now (this will result in @@ -1800,7 +1800,7 @@ \subsubsection{Integer Cycling} Open the \lstinline=tut/cycling/integer= suite, which is plotted in Figure~\ref{fig-tut-int}. \lstset{language=suiterc} -\lstinputlisting{../examples/tutorial/cycling/integer/suite.rc} +\lstinputlisting{../../../examples/tutorial/cycling/integer/suite.rc} \begin{figure} \begin{center} @@ -1840,7 +1840,7 @@ \subsection{Jinja2} of a logical switch; and iteratively generating dependencies and runtime configuration for groups of related tasks: \lstset{language=suiterc} -\lstinputlisting{../examples/tutorial/oneoff/jinja2/suite.rc} +\lstinputlisting{../../../examples/tutorial/oneoff/jinja2/suite.rc} To view the result of Jinja2 processing with the Jinja2 flag \lstinline@MULTI@ set to \lstinline=False=: @@ -1893,7 +1893,7 @@ \subsection{Task Retry On Failure} from $1$ on each successive try, and is passed to the task to allow different behaviour on the retry: \lstset{language=suiterc} -\lstinputlisting{../examples/tutorial/oneoff/retry/suite.rc} +\lstinputlisting{../../../examples/tutorial/oneoff/retry/suite.rc} When a task with configured retries fails, its cylc task proxy goes into the {\em retrying} state until the next retry delay is up, then it @@ -3070,7 +3070,7 @@ \subsubsection{Trigger Types} message triggering. \lstset{language=suiterc} -\lstinputlisting{../examples/message-triggers/suite.rc} +\lstinputlisting{../../../examples/message-triggers/suite.rc} \paragraph{Job Submission Triggers} @@ -3948,7 +3948,7 @@ \subsubsection{Runtime Inheritance - Single} illustrates basic runtime inheritance with single parents. \lstset{language=suiterc} -\lstinputlisting{../examples/inherit/single/one/suite.rc} +\lstinputlisting{../../../examples/inherit/single/one/suite.rc} \lstset{language=transcript} \subsubsection{Runtime Inheritance - Multiple} @@ -3967,7 +3967,7 @@ \subsubsection{Runtime Inheritance - Multiple} multiple inheritance: \lstset{language=suiterc} -\lstinputlisting{../examples/inherit/multi/one/suite.rc} +\lstinputlisting{../../../examples/inherit/multi/one/suite.rc} \lstset{language=transcript} \lstinline=cylc get-suite-config= provides an easy way to check the result of @@ -4863,7 +4863,7 @@ \subsection{Jinja2} Figure~\ref{fig-jinja2-cities}. \lstset{language=suiterc} -\lstinputlisting{../examples/jinja2/cities/suite.rc} +\lstinputlisting{../../../examples/jinja2/cities/suite.rc} \lstset{language=transcript} \begin{figure} @@ -6409,7 +6409,7 @@ \subsection{Limiting Active Tasks With Internal Queues} running two task trees side by side (as seen in the graph GUI) each limited to 2 and 3 tasks respectively: \lstset{language=suiterc} -\lstinputlisting{../examples/queues/suite.rc} +\lstinputlisting{../../../examples/queues/suite.rc} \subsection{Automatic Task Retry On Failure} \label{TaskRetries} @@ -7587,12 +7587,12 @@ \section{The gcylc Graph View} \section{Cylc README File} -\lstinputlisting{../README.md} +\lstinputlisting{../../../README.md} \section{Cylc INSTALL File} \label{INSTALL} -\lstinputlisting{../INSTALL.md} +\lstinputlisting{../../../INSTALL.md} \section{Cylc Development History - Major Changes} diff --git a/doc/gcylcrc.tex b/doc/src/cylc-user-guide/gcylcrc.tex similarity index 100% rename from doc/gcylcrc.tex rename to doc/src/cylc-user-guide/gcylcrc.tex diff --git a/doc/gpl-3.0.tex b/doc/src/cylc-user-guide/gpl-3.0.tex similarity index 100% rename from doc/gpl-3.0.tex rename to doc/src/cylc-user-guide/gpl-3.0.tex diff --git a/doc/graphics/png/orig/QuickStartA-ControlRunning.png b/doc/src/cylc-user-guide/graphics/png/orig/QuickStartA-ControlRunning.png similarity index 100% rename from doc/graphics/png/orig/QuickStartA-ControlRunning.png rename to doc/src/cylc-user-guide/graphics/png/orig/QuickStartA-ControlRunning.png diff --git a/doc/graphics/png/orig/QuickStartA-ControlStalled.png b/doc/src/cylc-user-guide/graphics/png/orig/QuickStartA-ControlStalled.png similarity index 100% rename from doc/graphics/png/orig/QuickStartA-ControlStalled.png rename to doc/src/cylc-user-guide/graphics/png/orig/QuickStartA-ControlStalled.png diff --git a/doc/graphics/png/orig/QuickStartA-ControlStart00.png b/doc/src/cylc-user-guide/graphics/png/orig/QuickStartA-ControlStart00.png similarity index 100% rename from doc/graphics/png/orig/QuickStartA-ControlStart00.png rename to doc/src/cylc-user-guide/graphics/png/orig/QuickStartA-ControlStart00.png diff --git a/doc/graphics/png/orig/QuickStartA-ControlStart06.png b/doc/src/cylc-user-guide/graphics/png/orig/QuickStartA-ControlStart06.png similarity index 100% rename from doc/graphics/png/orig/QuickStartA-ControlStart06.png rename to doc/src/cylc-user-guide/graphics/png/orig/QuickStartA-ControlStart06.png diff --git a/doc/graphics/png/orig/QuickStartA-ModelState.png b/doc/src/cylc-user-guide/graphics/png/orig/QuickStartA-ModelState.png similarity index 100% rename from doc/graphics/png/orig/QuickStartA-ModelState.png rename to doc/src/cylc-user-guide/graphics/png/orig/QuickStartA-ModelState.png diff --git a/doc/graphics/png/orig/QuickStartA-graph18.png b/doc/src/cylc-user-guide/graphics/png/orig/QuickStartA-graph18.png similarity index 100% rename from doc/graphics/png/orig/QuickStartA-graph18.png rename to doc/src/cylc-user-guide/graphics/png/orig/QuickStartA-graph18.png diff --git a/doc/graphics/png/orig/QuickStartB-graph18.png b/doc/src/cylc-user-guide/graphics/png/orig/QuickStartB-graph18.png similarity index 100% rename from doc/graphics/png/orig/QuickStartB-graph18.png rename to doc/src/cylc-user-guide/graphics/png/orig/QuickStartB-graph18.png diff --git a/doc/graphics/png/orig/conditional-triggers.png b/doc/src/cylc-user-guide/graphics/png/orig/conditional-triggers.png similarity index 100% rename from doc/graphics/png/orig/conditional-triggers.png rename to doc/src/cylc-user-guide/graphics/png/orig/conditional-triggers.png diff --git a/doc/graphics/png/orig/dep-eg-1.png b/doc/src/cylc-user-guide/graphics/png/orig/dep-eg-1.png similarity index 100% rename from doc/graphics/png/orig/dep-eg-1.png rename to doc/src/cylc-user-guide/graphics/png/orig/dep-eg-1.png diff --git a/doc/graphics/png/orig/dep-multi-cycle.png b/doc/src/cylc-user-guide/graphics/png/orig/dep-multi-cycle.png similarity index 100% rename from doc/graphics/png/orig/dep-multi-cycle.png rename to doc/src/cylc-user-guide/graphics/png/orig/dep-multi-cycle.png diff --git a/doc/graphics/png/orig/dep-one-cycle.png b/doc/src/cylc-user-guide/graphics/png/orig/dep-one-cycle.png similarity index 100% rename from doc/graphics/png/orig/dep-one-cycle.png rename to doc/src/cylc-user-guide/graphics/png/orig/dep-one-cycle.png diff --git a/doc/graphics/png/orig/dep-two-cycles-linked.png b/doc/src/cylc-user-guide/graphics/png/orig/dep-two-cycles-linked.png similarity index 100% rename from doc/graphics/png/orig/dep-two-cycles-linked.png rename to doc/src/cylc-user-guide/graphics/png/orig/dep-two-cycles-linked.png diff --git a/doc/graphics/png/orig/dep-two-cycles.png b/doc/src/cylc-user-guide/graphics/png/orig/dep-two-cycles.png similarity index 100% rename from doc/graphics/png/orig/dep-two-cycles.png rename to doc/src/cylc-user-guide/graphics/png/orig/dep-two-cycles.png diff --git a/doc/graphics/png/orig/ecox-1.png b/doc/src/cylc-user-guide/graphics/png/orig/ecox-1.png similarity index 100% rename from doc/graphics/png/orig/ecox-1.png rename to doc/src/cylc-user-guide/graphics/png/orig/ecox-1.png diff --git a/doc/graphics/png/orig/eg2-dynamic.png b/doc/src/cylc-user-guide/graphics/png/orig/eg2-dynamic.png similarity index 100% rename from doc/graphics/png/orig/eg2-dynamic.png rename to doc/src/cylc-user-guide/graphics/png/orig/eg2-dynamic.png diff --git a/doc/graphics/png/orig/eg2-static.png b/doc/src/cylc-user-guide/graphics/png/orig/eg2-static.png similarity index 100% rename from doc/graphics/png/orig/eg2-static.png rename to doc/src/cylc-user-guide/graphics/png/orig/eg2-static.png diff --git a/doc/graphics/png/orig/gcylc-graph-and-dot-views.png b/doc/src/cylc-user-guide/graphics/png/orig/gcylc-graph-and-dot-views.png similarity index 100% rename from doc/graphics/png/orig/gcylc-graph-and-dot-views.png rename to doc/src/cylc-user-guide/graphics/png/orig/gcylc-graph-and-dot-views.png diff --git a/doc/graphics/png/orig/gcylc-text-view.png b/doc/src/cylc-user-guide/graphics/png/orig/gcylc-text-view.png similarity index 100% rename from doc/graphics/png/orig/gcylc-text-view.png rename to doc/src/cylc-user-guide/graphics/png/orig/gcylc-text-view.png diff --git a/doc/graphics/png/orig/gscan.png b/doc/src/cylc-user-guide/graphics/png/orig/gscan.png similarity index 100% rename from doc/graphics/png/orig/gscan.png rename to doc/src/cylc-user-guide/graphics/png/orig/gscan.png diff --git a/doc/graphics/png/orig/inherit-2.png b/doc/src/cylc-user-guide/graphics/png/orig/inherit-2.png similarity index 100% rename from doc/graphics/png/orig/inherit-2.png rename to doc/src/cylc-user-guide/graphics/png/orig/inherit-2.png diff --git a/doc/graphics/png/orig/inherit-3.png b/doc/src/cylc-user-guide/graphics/png/orig/inherit-3.png similarity index 100% rename from doc/graphics/png/orig/inherit-3.png rename to doc/src/cylc-user-guide/graphics/png/orig/inherit-3.png diff --git a/doc/graphics/png/orig/inherit-4.png b/doc/src/cylc-user-guide/graphics/png/orig/inherit-4.png similarity index 100% rename from doc/graphics/png/orig/inherit-4.png rename to doc/src/cylc-user-guide/graphics/png/orig/inherit-4.png diff --git a/doc/graphics/png/orig/inherit-5.png b/doc/src/cylc-user-guide/graphics/png/orig/inherit-5.png similarity index 100% rename from doc/graphics/png/orig/inherit-5.png rename to doc/src/cylc-user-guide/graphics/png/orig/inherit-5.png diff --git a/doc/graphics/png/orig/inherit-6.png b/doc/src/cylc-user-guide/graphics/png/orig/inherit-6.png similarity index 100% rename from doc/graphics/png/orig/inherit-6.png rename to doc/src/cylc-user-guide/graphics/png/orig/inherit-6.png diff --git a/doc/graphics/png/orig/inherit-7.png b/doc/src/cylc-user-guide/graphics/png/orig/inherit-7.png similarity index 100% rename from doc/graphics/png/orig/inherit-7.png rename to doc/src/cylc-user-guide/graphics/png/orig/inherit-7.png diff --git a/doc/graphics/png/orig/jinja2-ensemble-graph.png b/doc/src/cylc-user-guide/graphics/png/orig/jinja2-ensemble-graph.png similarity index 100% rename from doc/graphics/png/orig/jinja2-ensemble-graph.png rename to doc/src/cylc-user-guide/graphics/png/orig/jinja2-ensemble-graph.png diff --git a/doc/graphics/png/orig/jinja2-suite-graph.png b/doc/src/cylc-user-guide/graphics/png/orig/jinja2-suite-graph.png similarity index 100% rename from doc/graphics/png/orig/jinja2-suite-graph.png rename to doc/src/cylc-user-guide/graphics/png/orig/jinja2-suite-graph.png diff --git a/doc/graphics/png/orig/logo.png b/doc/src/cylc-user-guide/graphics/png/orig/logo.png similarity index 100% rename from doc/graphics/png/orig/logo.png rename to doc/src/cylc-user-guide/graphics/png/orig/logo.png diff --git a/doc/graphics/png/orig/niwa-colour-small.png b/doc/src/cylc-user-guide/graphics/png/orig/niwa-colour-small.png similarity index 100% rename from doc/graphics/png/orig/niwa-colour-small.png rename to doc/src/cylc-user-guide/graphics/png/orig/niwa-colour-small.png diff --git a/doc/graphics/png/orig/niwa-colour.png b/doc/src/cylc-user-guide/graphics/png/orig/niwa-colour.png similarity index 100% rename from doc/graphics/png/orig/niwa-colour.png rename to doc/src/cylc-user-guide/graphics/png/orig/niwa-colour.png diff --git a/doc/graphics/png/orig/params1.png b/doc/src/cylc-user-guide/graphics/png/orig/params1.png similarity index 100% rename from doc/graphics/png/orig/params1.png rename to doc/src/cylc-user-guide/graphics/png/orig/params1.png diff --git a/doc/graphics/png/orig/satellite.png b/doc/src/cylc-user-guide/graphics/png/orig/satellite.png similarity index 100% rename from doc/graphics/png/orig/satellite.png rename to doc/src/cylc-user-guide/graphics/png/orig/satellite.png diff --git a/doc/graphics/png/orig/suicide.png b/doc/src/cylc-user-guide/graphics/png/orig/suicide.png similarity index 100% rename from doc/graphics/png/orig/suicide.png rename to doc/src/cylc-user-guide/graphics/png/orig/suicide.png diff --git a/doc/graphics/png/orig/suite-log.png b/doc/src/cylc-user-guide/graphics/png/orig/suite-log.png similarity index 100% rename from doc/graphics/png/orig/suite-log.png rename to doc/src/cylc-user-guide/graphics/png/orig/suite-log.png diff --git a/doc/graphics/png/orig/suite-output.png b/doc/src/cylc-user-guide/graphics/png/orig/suite-output.png similarity index 100% rename from doc/graphics/png/orig/suite-output.png rename to doc/src/cylc-user-guide/graphics/png/orig/suite-output.png diff --git a/doc/graphics/png/orig/suiterc-jinja2.png b/doc/src/cylc-user-guide/graphics/png/orig/suiterc-jinja2.png similarity index 100% rename from doc/graphics/png/orig/suiterc-jinja2.png rename to doc/src/cylc-user-guide/graphics/png/orig/suiterc-jinja2.png diff --git a/doc/graphics/png/orig/task-pool.png b/doc/src/cylc-user-guide/graphics/png/orig/task-pool.png similarity index 100% rename from doc/graphics/png/orig/task-pool.png rename to doc/src/cylc-user-guide/graphics/png/orig/task-pool.png diff --git a/doc/graphics/png/orig/test1.png b/doc/src/cylc-user-guide/graphics/png/orig/test1.png similarity index 100% rename from doc/graphics/png/orig/test1.png rename to doc/src/cylc-user-guide/graphics/png/orig/test1.png diff --git a/doc/graphics/png/orig/test2.png b/doc/src/cylc-user-guide/graphics/png/orig/test2.png similarity index 100% rename from doc/graphics/png/orig/test2.png rename to doc/src/cylc-user-guide/graphics/png/orig/test2.png diff --git a/doc/graphics/png/orig/test4.png b/doc/src/cylc-user-guide/graphics/png/orig/test4.png similarity index 100% rename from doc/graphics/png/orig/test4.png rename to doc/src/cylc-user-guide/graphics/png/orig/test4.png diff --git a/doc/graphics/png/orig/test5.png b/doc/src/cylc-user-guide/graphics/png/orig/test5.png similarity index 100% rename from doc/graphics/png/orig/test5.png rename to doc/src/cylc-user-guide/graphics/png/orig/test5.png diff --git a/doc/graphics/png/orig/test6.png b/doc/src/cylc-user-guide/graphics/png/orig/test6.png similarity index 100% rename from doc/graphics/png/orig/test6.png rename to doc/src/cylc-user-guide/graphics/png/orig/test6.png diff --git a/doc/graphics/png/orig/timeline-one-a.png b/doc/src/cylc-user-guide/graphics/png/orig/timeline-one-a.png similarity index 100% rename from doc/graphics/png/orig/timeline-one-a.png rename to doc/src/cylc-user-guide/graphics/png/orig/timeline-one-a.png diff --git a/doc/graphics/png/orig/timeline-one-c.png b/doc/src/cylc-user-guide/graphics/png/orig/timeline-one-c.png similarity index 100% rename from doc/graphics/png/orig/timeline-one-c.png rename to doc/src/cylc-user-guide/graphics/png/orig/timeline-one-c.png diff --git a/doc/graphics/png/orig/timeline-one.png b/doc/src/cylc-user-guide/graphics/png/orig/timeline-one.png similarity index 100% rename from doc/graphics/png/orig/timeline-one.png rename to doc/src/cylc-user-guide/graphics/png/orig/timeline-one.png diff --git a/doc/graphics/png/orig/timeline-three.png b/doc/src/cylc-user-guide/graphics/png/orig/timeline-three.png similarity index 100% rename from doc/graphics/png/orig/timeline-three.png rename to doc/src/cylc-user-guide/graphics/png/orig/timeline-three.png diff --git a/doc/graphics/png/orig/timeline-two-cycles-optimal.png b/doc/src/cylc-user-guide/graphics/png/orig/timeline-two-cycles-optimal.png similarity index 100% rename from doc/graphics/png/orig/timeline-two-cycles-optimal.png rename to doc/src/cylc-user-guide/graphics/png/orig/timeline-two-cycles-optimal.png diff --git a/doc/graphics/png/orig/timeline-two.png b/doc/src/cylc-user-guide/graphics/png/orig/timeline-two.png similarity index 100% rename from doc/graphics/png/orig/timeline-two.png rename to doc/src/cylc-user-guide/graphics/png/orig/timeline-two.png diff --git a/doc/graphics/png/orig/timeline-zero.png b/doc/src/cylc-user-guide/graphics/png/orig/timeline-zero.png similarity index 100% rename from doc/graphics/png/orig/timeline-zero.png rename to doc/src/cylc-user-guide/graphics/png/orig/timeline-zero.png diff --git a/doc/graphics/png/orig/tut-cyc-int.png b/doc/src/cylc-user-guide/graphics/png/orig/tut-cyc-int.png similarity index 100% rename from doc/graphics/png/orig/tut-cyc-int.png rename to doc/src/cylc-user-guide/graphics/png/orig/tut-cyc-int.png diff --git a/doc/graphics/png/orig/tut-four.png b/doc/src/cylc-user-guide/graphics/png/orig/tut-four.png similarity index 100% rename from doc/graphics/png/orig/tut-four.png rename to doc/src/cylc-user-guide/graphics/png/orig/tut-four.png diff --git a/doc/graphics/png/orig/tut-hello-multi-1.png b/doc/src/cylc-user-guide/graphics/png/orig/tut-hello-multi-1.png similarity index 100% rename from doc/graphics/png/orig/tut-hello-multi-1.png rename to doc/src/cylc-user-guide/graphics/png/orig/tut-hello-multi-1.png diff --git a/doc/graphics/png/orig/tut-hello-multi-2.png b/doc/src/cylc-user-guide/graphics/png/orig/tut-hello-multi-2.png similarity index 100% rename from doc/graphics/png/orig/tut-hello-multi-2.png rename to doc/src/cylc-user-guide/graphics/png/orig/tut-hello-multi-2.png diff --git a/doc/graphics/png/orig/tut-hello-multi-3.png b/doc/src/cylc-user-guide/graphics/png/orig/tut-hello-multi-3.png similarity index 100% rename from doc/graphics/png/orig/tut-hello-multi-3.png rename to doc/src/cylc-user-guide/graphics/png/orig/tut-hello-multi-3.png diff --git a/doc/graphics/png/orig/tut-one.png b/doc/src/cylc-user-guide/graphics/png/orig/tut-one.png similarity index 100% rename from doc/graphics/png/orig/tut-one.png rename to doc/src/cylc-user-guide/graphics/png/orig/tut-one.png diff --git a/doc/graphics/png/orig/tut-three.png b/doc/src/cylc-user-guide/graphics/png/orig/tut-three.png similarity index 100% rename from doc/graphics/png/orig/tut-three.png rename to doc/src/cylc-user-guide/graphics/png/orig/tut-three.png diff --git a/doc/graphics/png/orig/tut-two.png b/doc/src/cylc-user-guide/graphics/png/orig/tut-two.png similarity index 100% rename from doc/graphics/png/orig/tut-two.png rename to doc/src/cylc-user-guide/graphics/png/orig/tut-two.png diff --git a/doc/graphics/png/scaled/QuickStartA-ControlRunning.png b/doc/src/cylc-user-guide/graphics/png/scaled/QuickStartA-ControlRunning.png similarity index 100% rename from doc/graphics/png/scaled/QuickStartA-ControlRunning.png rename to doc/src/cylc-user-guide/graphics/png/scaled/QuickStartA-ControlRunning.png diff --git a/doc/graphics/png/scaled/QuickStartA-ControlStalled.png b/doc/src/cylc-user-guide/graphics/png/scaled/QuickStartA-ControlStalled.png similarity index 100% rename from doc/graphics/png/scaled/QuickStartA-ControlStalled.png rename to doc/src/cylc-user-guide/graphics/png/scaled/QuickStartA-ControlStalled.png diff --git a/doc/graphics/png/scaled/QuickStartA-ControlStart00.png b/doc/src/cylc-user-guide/graphics/png/scaled/QuickStartA-ControlStart00.png similarity index 100% rename from doc/graphics/png/scaled/QuickStartA-ControlStart00.png rename to doc/src/cylc-user-guide/graphics/png/scaled/QuickStartA-ControlStart00.png diff --git a/doc/graphics/png/scaled/QuickStartA-ControlStart06.png b/doc/src/cylc-user-guide/graphics/png/scaled/QuickStartA-ControlStart06.png similarity index 100% rename from doc/graphics/png/scaled/QuickStartA-ControlStart06.png rename to doc/src/cylc-user-guide/graphics/png/scaled/QuickStartA-ControlStart06.png diff --git a/doc/graphics/png/scaled/QuickStartA-ModelState.png b/doc/src/cylc-user-guide/graphics/png/scaled/QuickStartA-ModelState.png similarity index 100% rename from doc/graphics/png/scaled/QuickStartA-ModelState.png rename to doc/src/cylc-user-guide/graphics/png/scaled/QuickStartA-ModelState.png diff --git a/doc/graphics/png/scaled/QuickStartA-graph18.png b/doc/src/cylc-user-guide/graphics/png/scaled/QuickStartA-graph18.png similarity index 100% rename from doc/graphics/png/scaled/QuickStartA-graph18.png rename to doc/src/cylc-user-guide/graphics/png/scaled/QuickStartA-graph18.png diff --git a/doc/graphics/png/scaled/QuickStartB-graph18.png b/doc/src/cylc-user-guide/graphics/png/scaled/QuickStartB-graph18.png similarity index 100% rename from doc/graphics/png/scaled/QuickStartB-graph18.png rename to doc/src/cylc-user-guide/graphics/png/scaled/QuickStartB-graph18.png diff --git a/doc/graphics/png/scaled/conditional-triggers.png b/doc/src/cylc-user-guide/graphics/png/scaled/conditional-triggers.png similarity index 100% rename from doc/graphics/png/scaled/conditional-triggers.png rename to doc/src/cylc-user-guide/graphics/png/scaled/conditional-triggers.png diff --git a/doc/graphics/png/scaled/dep-eg-1.png b/doc/src/cylc-user-guide/graphics/png/scaled/dep-eg-1.png similarity index 100% rename from doc/graphics/png/scaled/dep-eg-1.png rename to doc/src/cylc-user-guide/graphics/png/scaled/dep-eg-1.png diff --git a/doc/graphics/png/scaled/dep-multi-cycle.png b/doc/src/cylc-user-guide/graphics/png/scaled/dep-multi-cycle.png similarity index 100% rename from doc/graphics/png/scaled/dep-multi-cycle.png rename to doc/src/cylc-user-guide/graphics/png/scaled/dep-multi-cycle.png diff --git a/doc/graphics/png/scaled/dep-one-cycle.png b/doc/src/cylc-user-guide/graphics/png/scaled/dep-one-cycle.png similarity index 100% rename from doc/graphics/png/scaled/dep-one-cycle.png rename to doc/src/cylc-user-guide/graphics/png/scaled/dep-one-cycle.png diff --git a/doc/graphics/png/scaled/dep-two-cycles-linked.png b/doc/src/cylc-user-guide/graphics/png/scaled/dep-two-cycles-linked.png similarity index 100% rename from doc/graphics/png/scaled/dep-two-cycles-linked.png rename to doc/src/cylc-user-guide/graphics/png/scaled/dep-two-cycles-linked.png diff --git a/doc/graphics/png/scaled/dep-two-cycles.png b/doc/src/cylc-user-guide/graphics/png/scaled/dep-two-cycles.png similarity index 100% rename from doc/graphics/png/scaled/dep-two-cycles.png rename to doc/src/cylc-user-guide/graphics/png/scaled/dep-two-cycles.png diff --git a/doc/graphics/png/scaled/ecox-1.png b/doc/src/cylc-user-guide/graphics/png/scaled/ecox-1.png similarity index 100% rename from doc/graphics/png/scaled/ecox-1.png rename to doc/src/cylc-user-guide/graphics/png/scaled/ecox-1.png diff --git a/doc/graphics/png/scaled/eg2-dynamic.png b/doc/src/cylc-user-guide/graphics/png/scaled/eg2-dynamic.png similarity index 100% rename from doc/graphics/png/scaled/eg2-dynamic.png rename to doc/src/cylc-user-guide/graphics/png/scaled/eg2-dynamic.png diff --git a/doc/graphics/png/scaled/eg2-static.png b/doc/src/cylc-user-guide/graphics/png/scaled/eg2-static.png similarity index 100% rename from doc/graphics/png/scaled/eg2-static.png rename to doc/src/cylc-user-guide/graphics/png/scaled/eg2-static.png diff --git a/doc/graphics/png/scaled/gcylc-graph-and-dot-views.png b/doc/src/cylc-user-guide/graphics/png/scaled/gcylc-graph-and-dot-views.png similarity index 100% rename from doc/graphics/png/scaled/gcylc-graph-and-dot-views.png rename to doc/src/cylc-user-guide/graphics/png/scaled/gcylc-graph-and-dot-views.png diff --git a/doc/graphics/png/scaled/gcylc-text-view.png b/doc/src/cylc-user-guide/graphics/png/scaled/gcylc-text-view.png similarity index 100% rename from doc/graphics/png/scaled/gcylc-text-view.png rename to doc/src/cylc-user-guide/graphics/png/scaled/gcylc-text-view.png diff --git a/doc/graphics/png/scaled/gscan.png b/doc/src/cylc-user-guide/graphics/png/scaled/gscan.png similarity index 100% rename from doc/graphics/png/scaled/gscan.png rename to doc/src/cylc-user-guide/graphics/png/scaled/gscan.png diff --git a/doc/graphics/png/scaled/inherit-2.png b/doc/src/cylc-user-guide/graphics/png/scaled/inherit-2.png similarity index 100% rename from doc/graphics/png/scaled/inherit-2.png rename to doc/src/cylc-user-guide/graphics/png/scaled/inherit-2.png diff --git a/doc/graphics/png/scaled/inherit-3.png b/doc/src/cylc-user-guide/graphics/png/scaled/inherit-3.png similarity index 100% rename from doc/graphics/png/scaled/inherit-3.png rename to doc/src/cylc-user-guide/graphics/png/scaled/inherit-3.png diff --git a/doc/graphics/png/scaled/inherit-4.png b/doc/src/cylc-user-guide/graphics/png/scaled/inherit-4.png similarity index 100% rename from doc/graphics/png/scaled/inherit-4.png rename to doc/src/cylc-user-guide/graphics/png/scaled/inherit-4.png diff --git a/doc/graphics/png/scaled/inherit-5.png b/doc/src/cylc-user-guide/graphics/png/scaled/inherit-5.png similarity index 100% rename from doc/graphics/png/scaled/inherit-5.png rename to doc/src/cylc-user-guide/graphics/png/scaled/inherit-5.png diff --git a/doc/graphics/png/scaled/inherit-6.png b/doc/src/cylc-user-guide/graphics/png/scaled/inherit-6.png similarity index 100% rename from doc/graphics/png/scaled/inherit-6.png rename to doc/src/cylc-user-guide/graphics/png/scaled/inherit-6.png diff --git a/doc/graphics/png/scaled/inherit-7.png b/doc/src/cylc-user-guide/graphics/png/scaled/inherit-7.png similarity index 100% rename from doc/graphics/png/scaled/inherit-7.png rename to doc/src/cylc-user-guide/graphics/png/scaled/inherit-7.png diff --git a/doc/graphics/png/scaled/jinja2-ensemble-graph.png b/doc/src/cylc-user-guide/graphics/png/scaled/jinja2-ensemble-graph.png similarity index 100% rename from doc/graphics/png/scaled/jinja2-ensemble-graph.png rename to doc/src/cylc-user-guide/graphics/png/scaled/jinja2-ensemble-graph.png diff --git a/doc/graphics/png/scaled/jinja2-suite-graph.png b/doc/src/cylc-user-guide/graphics/png/scaled/jinja2-suite-graph.png similarity index 100% rename from doc/graphics/png/scaled/jinja2-suite-graph.png rename to doc/src/cylc-user-guide/graphics/png/scaled/jinja2-suite-graph.png diff --git a/doc/graphics/png/scaled/logo.png b/doc/src/cylc-user-guide/graphics/png/scaled/logo.png similarity index 100% rename from doc/graphics/png/scaled/logo.png rename to doc/src/cylc-user-guide/graphics/png/scaled/logo.png diff --git a/doc/graphics/png/scaled/niwa-colour-small.png b/doc/src/cylc-user-guide/graphics/png/scaled/niwa-colour-small.png similarity index 100% rename from doc/graphics/png/scaled/niwa-colour-small.png rename to doc/src/cylc-user-guide/graphics/png/scaled/niwa-colour-small.png diff --git a/doc/graphics/png/scaled/niwa-colour.png b/doc/src/cylc-user-guide/graphics/png/scaled/niwa-colour.png similarity index 100% rename from doc/graphics/png/scaled/niwa-colour.png rename to doc/src/cylc-user-guide/graphics/png/scaled/niwa-colour.png diff --git a/doc/graphics/png/scaled/params1.png b/doc/src/cylc-user-guide/graphics/png/scaled/params1.png similarity index 100% rename from doc/graphics/png/scaled/params1.png rename to doc/src/cylc-user-guide/graphics/png/scaled/params1.png diff --git a/doc/graphics/png/scaled/satellite.png b/doc/src/cylc-user-guide/graphics/png/scaled/satellite.png similarity index 100% rename from doc/graphics/png/scaled/satellite.png rename to doc/src/cylc-user-guide/graphics/png/scaled/satellite.png diff --git a/doc/graphics/png/scaled/suicide.png b/doc/src/cylc-user-guide/graphics/png/scaled/suicide.png similarity index 100% rename from doc/graphics/png/scaled/suicide.png rename to doc/src/cylc-user-guide/graphics/png/scaled/suicide.png diff --git a/doc/graphics/png/scaled/suite-log.png b/doc/src/cylc-user-guide/graphics/png/scaled/suite-log.png similarity index 100% rename from doc/graphics/png/scaled/suite-log.png rename to doc/src/cylc-user-guide/graphics/png/scaled/suite-log.png diff --git a/doc/graphics/png/scaled/suite-output.png b/doc/src/cylc-user-guide/graphics/png/scaled/suite-output.png similarity index 100% rename from doc/graphics/png/scaled/suite-output.png rename to doc/src/cylc-user-guide/graphics/png/scaled/suite-output.png diff --git a/doc/graphics/png/scaled/suiterc-jinja2.png b/doc/src/cylc-user-guide/graphics/png/scaled/suiterc-jinja2.png similarity index 100% rename from doc/graphics/png/scaled/suiterc-jinja2.png rename to doc/src/cylc-user-guide/graphics/png/scaled/suiterc-jinja2.png diff --git a/doc/graphics/png/scaled/task-pool.png b/doc/src/cylc-user-guide/graphics/png/scaled/task-pool.png similarity index 100% rename from doc/graphics/png/scaled/task-pool.png rename to doc/src/cylc-user-guide/graphics/png/scaled/task-pool.png diff --git a/doc/graphics/png/scaled/test1.png b/doc/src/cylc-user-guide/graphics/png/scaled/test1.png similarity index 100% rename from doc/graphics/png/scaled/test1.png rename to doc/src/cylc-user-guide/graphics/png/scaled/test1.png diff --git a/doc/graphics/png/scaled/test2.png b/doc/src/cylc-user-guide/graphics/png/scaled/test2.png similarity index 100% rename from doc/graphics/png/scaled/test2.png rename to doc/src/cylc-user-guide/graphics/png/scaled/test2.png diff --git a/doc/graphics/png/scaled/test4.png b/doc/src/cylc-user-guide/graphics/png/scaled/test4.png similarity index 100% rename from doc/graphics/png/scaled/test4.png rename to doc/src/cylc-user-guide/graphics/png/scaled/test4.png diff --git a/doc/graphics/png/scaled/test5.png b/doc/src/cylc-user-guide/graphics/png/scaled/test5.png similarity index 100% rename from doc/graphics/png/scaled/test5.png rename to doc/src/cylc-user-guide/graphics/png/scaled/test5.png diff --git a/doc/graphics/png/scaled/test6.png b/doc/src/cylc-user-guide/graphics/png/scaled/test6.png similarity index 100% rename from doc/graphics/png/scaled/test6.png rename to doc/src/cylc-user-guide/graphics/png/scaled/test6.png diff --git a/doc/graphics/png/scaled/timeline-one-a.png b/doc/src/cylc-user-guide/graphics/png/scaled/timeline-one-a.png similarity index 100% rename from doc/graphics/png/scaled/timeline-one-a.png rename to doc/src/cylc-user-guide/graphics/png/scaled/timeline-one-a.png diff --git a/doc/graphics/png/scaled/timeline-one-c.png b/doc/src/cylc-user-guide/graphics/png/scaled/timeline-one-c.png similarity index 100% rename from doc/graphics/png/scaled/timeline-one-c.png rename to doc/src/cylc-user-guide/graphics/png/scaled/timeline-one-c.png diff --git a/doc/graphics/png/scaled/timeline-one.png b/doc/src/cylc-user-guide/graphics/png/scaled/timeline-one.png similarity index 100% rename from doc/graphics/png/scaled/timeline-one.png rename to doc/src/cylc-user-guide/graphics/png/scaled/timeline-one.png diff --git a/doc/graphics/png/scaled/timeline-three.png b/doc/src/cylc-user-guide/graphics/png/scaled/timeline-three.png similarity index 100% rename from doc/graphics/png/scaled/timeline-three.png rename to doc/src/cylc-user-guide/graphics/png/scaled/timeline-three.png diff --git a/doc/graphics/png/scaled/timeline-two-cycles-optimal.png b/doc/src/cylc-user-guide/graphics/png/scaled/timeline-two-cycles-optimal.png similarity index 100% rename from doc/graphics/png/scaled/timeline-two-cycles-optimal.png rename to doc/src/cylc-user-guide/graphics/png/scaled/timeline-two-cycles-optimal.png diff --git a/doc/graphics/png/scaled/timeline-two.png b/doc/src/cylc-user-guide/graphics/png/scaled/timeline-two.png similarity index 100% rename from doc/graphics/png/scaled/timeline-two.png rename to doc/src/cylc-user-guide/graphics/png/scaled/timeline-two.png diff --git a/doc/graphics/png/scaled/timeline-zero.png b/doc/src/cylc-user-guide/graphics/png/scaled/timeline-zero.png similarity index 100% rename from doc/graphics/png/scaled/timeline-zero.png rename to doc/src/cylc-user-guide/graphics/png/scaled/timeline-zero.png diff --git a/doc/graphics/png/scaled/tut-cyc-int.png b/doc/src/cylc-user-guide/graphics/png/scaled/tut-cyc-int.png similarity index 100% rename from doc/graphics/png/scaled/tut-cyc-int.png rename to doc/src/cylc-user-guide/graphics/png/scaled/tut-cyc-int.png diff --git a/doc/graphics/png/scaled/tut-four.png b/doc/src/cylc-user-guide/graphics/png/scaled/tut-four.png similarity index 100% rename from doc/graphics/png/scaled/tut-four.png rename to doc/src/cylc-user-guide/graphics/png/scaled/tut-four.png diff --git a/doc/graphics/png/scaled/tut-hello-multi-1.png b/doc/src/cylc-user-guide/graphics/png/scaled/tut-hello-multi-1.png similarity index 100% rename from doc/graphics/png/scaled/tut-hello-multi-1.png rename to doc/src/cylc-user-guide/graphics/png/scaled/tut-hello-multi-1.png diff --git a/doc/graphics/png/scaled/tut-hello-multi-2.png b/doc/src/cylc-user-guide/graphics/png/scaled/tut-hello-multi-2.png similarity index 100% rename from doc/graphics/png/scaled/tut-hello-multi-2.png rename to doc/src/cylc-user-guide/graphics/png/scaled/tut-hello-multi-2.png diff --git a/doc/graphics/png/scaled/tut-hello-multi-3.png b/doc/src/cylc-user-guide/graphics/png/scaled/tut-hello-multi-3.png similarity index 100% rename from doc/graphics/png/scaled/tut-hello-multi-3.png rename to doc/src/cylc-user-guide/graphics/png/scaled/tut-hello-multi-3.png diff --git a/doc/graphics/png/scaled/tut-one.png b/doc/src/cylc-user-guide/graphics/png/scaled/tut-one.png similarity index 100% rename from doc/graphics/png/scaled/tut-one.png rename to doc/src/cylc-user-guide/graphics/png/scaled/tut-one.png diff --git a/doc/graphics/png/scaled/tut-three.png b/doc/src/cylc-user-guide/graphics/png/scaled/tut-three.png similarity index 100% rename from doc/graphics/png/scaled/tut-three.png rename to doc/src/cylc-user-guide/graphics/png/scaled/tut-three.png diff --git a/doc/graphics/png/scaled/tut-two.png b/doc/src/cylc-user-guide/graphics/png/scaled/tut-two.png similarity index 100% rename from doc/graphics/png/scaled/tut-two.png rename to doc/src/cylc-user-guide/graphics/png/scaled/tut-two.png diff --git a/doc/graphics/scale-images.sh b/doc/src/cylc-user-guide/graphics/scale-images.sh similarity index 100% rename from doc/graphics/scale-images.sh rename to doc/src/cylc-user-guide/graphics/scale-images.sh diff --git a/doc/graphics/vector/README.txt b/doc/src/cylc-user-guide/graphics/vector/README.txt similarity index 100% rename from doc/graphics/vector/README.txt rename to doc/src/cylc-user-guide/graphics/vector/README.txt diff --git a/doc/graphics/vector/eps/dep-multi-cycle.eps b/doc/src/cylc-user-guide/graphics/vector/eps/dep-multi-cycle.eps similarity index 100% rename from doc/graphics/vector/eps/dep-multi-cycle.eps rename to doc/src/cylc-user-guide/graphics/vector/eps/dep-multi-cycle.eps diff --git a/doc/graphics/vector/eps/dep-one-cycle.eps b/doc/src/cylc-user-guide/graphics/vector/eps/dep-one-cycle.eps similarity index 100% rename from doc/graphics/vector/eps/dep-one-cycle.eps rename to doc/src/cylc-user-guide/graphics/vector/eps/dep-one-cycle.eps diff --git a/doc/graphics/vector/eps/dep-two-cycles-linked.eps b/doc/src/cylc-user-guide/graphics/vector/eps/dep-two-cycles-linked.eps similarity index 100% rename from doc/graphics/vector/eps/dep-two-cycles-linked.eps rename to doc/src/cylc-user-guide/graphics/vector/eps/dep-two-cycles-linked.eps diff --git a/doc/graphics/vector/eps/dep-two-cycles.eps b/doc/src/cylc-user-guide/graphics/vector/eps/dep-two-cycles.eps similarity index 100% rename from doc/graphics/vector/eps/dep-two-cycles.eps rename to doc/src/cylc-user-guide/graphics/vector/eps/dep-two-cycles.eps diff --git a/doc/graphics/vector/eps/task-pool.eps b/doc/src/cylc-user-guide/graphics/vector/eps/task-pool.eps similarity index 100% rename from doc/graphics/vector/eps/task-pool.eps rename to doc/src/cylc-user-guide/graphics/vector/eps/task-pool.eps diff --git a/doc/graphics/vector/eps/timeline-one-a.eps b/doc/src/cylc-user-guide/graphics/vector/eps/timeline-one-a.eps similarity index 100% rename from doc/graphics/vector/eps/timeline-one-a.eps rename to doc/src/cylc-user-guide/graphics/vector/eps/timeline-one-a.eps diff --git a/doc/graphics/vector/eps/timeline-one-c.eps b/doc/src/cylc-user-guide/graphics/vector/eps/timeline-one-c.eps similarity index 100% rename from doc/graphics/vector/eps/timeline-one-c.eps rename to doc/src/cylc-user-guide/graphics/vector/eps/timeline-one-c.eps diff --git a/doc/graphics/vector/eps/timeline-one.eps b/doc/src/cylc-user-guide/graphics/vector/eps/timeline-one.eps similarity index 100% rename from doc/graphics/vector/eps/timeline-one.eps rename to doc/src/cylc-user-guide/graphics/vector/eps/timeline-one.eps diff --git a/doc/graphics/vector/eps/timeline-three.eps b/doc/src/cylc-user-guide/graphics/vector/eps/timeline-three.eps similarity index 100% rename from doc/graphics/vector/eps/timeline-three.eps rename to doc/src/cylc-user-guide/graphics/vector/eps/timeline-three.eps diff --git a/doc/graphics/vector/eps/timeline-two-cycles-optimal.eps b/doc/src/cylc-user-guide/graphics/vector/eps/timeline-two-cycles-optimal.eps similarity index 100% rename from doc/graphics/vector/eps/timeline-two-cycles-optimal.eps rename to doc/src/cylc-user-guide/graphics/vector/eps/timeline-two-cycles-optimal.eps diff --git a/doc/graphics/vector/eps/timeline-two.eps b/doc/src/cylc-user-guide/graphics/vector/eps/timeline-two.eps similarity index 100% rename from doc/graphics/vector/eps/timeline-two.eps rename to doc/src/cylc-user-guide/graphics/vector/eps/timeline-two.eps diff --git a/doc/graphics/vector/eps/timeline-zero.eps b/doc/src/cylc-user-guide/graphics/vector/eps/timeline-zero.eps similarity index 100% rename from doc/graphics/vector/eps/timeline-zero.eps rename to doc/src/cylc-user-guide/graphics/vector/eps/timeline-zero.eps diff --git a/doc/graphics/vector/svg/dep-multi-cycle.svg b/doc/src/cylc-user-guide/graphics/vector/svg/dep-multi-cycle.svg similarity index 100% rename from doc/graphics/vector/svg/dep-multi-cycle.svg rename to doc/src/cylc-user-guide/graphics/vector/svg/dep-multi-cycle.svg diff --git a/doc/graphics/vector/svg/dep-one-cycle.svg b/doc/src/cylc-user-guide/graphics/vector/svg/dep-one-cycle.svg similarity index 100% rename from doc/graphics/vector/svg/dep-one-cycle.svg rename to doc/src/cylc-user-guide/graphics/vector/svg/dep-one-cycle.svg diff --git a/doc/graphics/vector/svg/dep-two-cycles-linked.svg b/doc/src/cylc-user-guide/graphics/vector/svg/dep-two-cycles-linked.svg similarity index 100% rename from doc/graphics/vector/svg/dep-two-cycles-linked.svg rename to doc/src/cylc-user-guide/graphics/vector/svg/dep-two-cycles-linked.svg diff --git a/doc/graphics/vector/svg/dep-two-cycles.svg b/doc/src/cylc-user-guide/graphics/vector/svg/dep-two-cycles.svg similarity index 100% rename from doc/graphics/vector/svg/dep-two-cycles.svg rename to doc/src/cylc-user-guide/graphics/vector/svg/dep-two-cycles.svg diff --git a/doc/graphics/vector/svg/task-pool.svg b/doc/src/cylc-user-guide/graphics/vector/svg/task-pool.svg similarity index 100% rename from doc/graphics/vector/svg/task-pool.svg rename to doc/src/cylc-user-guide/graphics/vector/svg/task-pool.svg diff --git a/doc/graphics/vector/svg/timeline-one-a.svg b/doc/src/cylc-user-guide/graphics/vector/svg/timeline-one-a.svg similarity index 100% rename from doc/graphics/vector/svg/timeline-one-a.svg rename to doc/src/cylc-user-guide/graphics/vector/svg/timeline-one-a.svg diff --git a/doc/graphics/vector/svg/timeline-one-c.svg b/doc/src/cylc-user-guide/graphics/vector/svg/timeline-one-c.svg similarity index 100% rename from doc/graphics/vector/svg/timeline-one-c.svg rename to doc/src/cylc-user-guide/graphics/vector/svg/timeline-one-c.svg diff --git a/doc/graphics/vector/svg/timeline-one.svg b/doc/src/cylc-user-guide/graphics/vector/svg/timeline-one.svg similarity index 100% rename from doc/graphics/vector/svg/timeline-one.svg rename to doc/src/cylc-user-guide/graphics/vector/svg/timeline-one.svg diff --git a/doc/graphics/vector/svg/timeline-three-0.svg b/doc/src/cylc-user-guide/graphics/vector/svg/timeline-three-0.svg similarity index 100% rename from doc/graphics/vector/svg/timeline-three-0.svg rename to doc/src/cylc-user-guide/graphics/vector/svg/timeline-three-0.svg diff --git a/doc/graphics/vector/svg/timeline-three.svg b/doc/src/cylc-user-guide/graphics/vector/svg/timeline-three.svg similarity index 100% rename from doc/graphics/vector/svg/timeline-three.svg rename to doc/src/cylc-user-guide/graphics/vector/svg/timeline-three.svg diff --git a/doc/graphics/vector/svg/timeline-two-cycles-optimal.svg b/doc/src/cylc-user-guide/graphics/vector/svg/timeline-two-cycles-optimal.svg similarity index 100% rename from doc/graphics/vector/svg/timeline-two-cycles-optimal.svg rename to doc/src/cylc-user-guide/graphics/vector/svg/timeline-two-cycles-optimal.svg diff --git a/doc/graphics/vector/svg/timeline-two.svg b/doc/src/cylc-user-guide/graphics/vector/svg/timeline-two.svg similarity index 100% rename from doc/graphics/vector/svg/timeline-two.svg rename to doc/src/cylc-user-guide/graphics/vector/svg/timeline-two.svg diff --git a/doc/graphics/vector/svg/timeline-zero.svg b/doc/src/cylc-user-guide/graphics/vector/svg/timeline-zero.svg similarity index 100% rename from doc/graphics/vector/svg/timeline-zero.svg rename to doc/src/cylc-user-guide/graphics/vector/svg/timeline-zero.svg diff --git a/doc/graphviz.txt b/doc/src/cylc-user-guide/graphviz.txt similarity index 100% rename from doc/graphviz.txt rename to doc/src/cylc-user-guide/graphviz.txt diff --git a/doc/gscanrc.tex b/doc/src/cylc-user-guide/gscanrc.tex similarity index 100% rename from doc/gscanrc.tex rename to doc/src/cylc-user-guide/gscanrc.tex diff --git a/doc/scripts/get-deps.sh b/doc/src/cylc-user-guide/scripts/get-deps.sh similarity index 63% rename from doc/scripts/get-deps.sh rename to doc/src/cylc-user-guide/scripts/get-deps.sh index 4e3391543c8..1f9eec1480e 100755 --- a/doc/scripts/get-deps.sh +++ b/doc/src/cylc-user-guide/scripts/get-deps.sh @@ -7,7 +7,7 @@ CONVERT=$( which convert 2> /dev/null ) WARNED=false if [[ -z $PDFLATEX ]]; then - echo "*** WARNING: to generate the PDF User Guide install LaTeX pdflatex ***" >&2 + echo "*** WARNING: to generate PDF Cylc documentation install LaTeX pdflatex ***" >&2 WARNED=true else DEPS="pdf" @@ -15,12 +15,12 @@ fi if [[ -z $HTLATEX ]]; then echo - echo "*** WARNING: to generate the HTML User Guides install LaTeX tex4ht ***" >&2 + echo "*** WARNING: to generate HTML Cylc documentation install LaTeX tex4ht ***" >&2 WARNED=true fi if [[ -z $CONVERT ]]; then - echo "*** WARNING: to generate the HTML User Guides install ImageMagick convert ***" >&2 + echo "*** WARNING: to generate HTML Cylc documentation install ImageMagick convert ***" >&2 WARNED=true fi @@ -34,4 +34,3 @@ if $WARNED; then fi echo $DEPS - diff --git a/doc/scripts/make-commands.sh b/doc/src/cylc-user-guide/scripts/make-commands.sh similarity index 98% rename from doc/scripts/make-commands.sh rename to doc/src/cylc-user-guide/scripts/make-commands.sh index 5e92e554e18..161699a6e3e 100755 --- a/doc/scripts/make-commands.sh +++ b/doc/src/cylc-user-guide/scripts/make-commands.sh @@ -16,7 +16,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -CYLC=../bin/cylc +CYLC=../../bin/cylc cat > commands.tex <. + +# Install to 'install/' and create an HTML index page to Cylc docs. + +set -e + +OUT=install +rm -rf $OUT +mkdir -p $OUT +cp src/index.css $OUT +cp -r src/cylc-user-guide/graphics $OUT +cp src/cylc-logo.png $OUT/graphics + +CYLC_VERSION=$($(dirname $0)/../../bin/cylc --version) +INDEX=$OUT/index.html + +CUG_PDF=src/cylc-user-guide/pdf/cug-pdf.pdf +CUG_HTML_SINGLE=src/cylc-user-guide/html/single/ +CUG_HTML_MULTI=src/cylc-user-guide/html/multi/ +SDG_PDF=src/suite-design-guide/document.pdf + +cat > $INDEX <<__END__ + + + + Cylc-${CYLC_VERSION} + + + + +
+
+ +

Cylc Documentation

+ +

cylc-${CYLC_VERSION}

+ +
+

Command Help

+
+cylc --help
+cylc COMMAND --help
+
+

Misc

+ +
+ +
+

User Guide

+
    +__END__ + +if [[ -f $CUG_PDF ]]; then + cp $CUG_PDF $OUT/cylc-user-guide.pdf + cat >> $INDEX <<__END__ +
  • PDF
  • +__END__ +else + cat >> $INDEX <<__END__ +
  • PDF (not generated)
  • +__END__ +fi + +mkdir -p $OUT/html +if [[ -f $CUG_HTML_SINGLE/cug-html.html ]]; then + cp -r $CUG_HTML_SINGLE $OUT/html/single + cat >> $INDEX <<__END__ +
  • HTML (single page)
  • +__END__ +else + cat >> $INDEX <<__END__ +
  • HTML single page (not generated)
  • +__END__ +fi + +if [[ -f $CUG_HTML_MULTI/cug-html.html ]]; then + cp -r $CUG_HTML_SINGLE $OUT/html/multi + cat >> $INDEX <<__END__ +
  • HTML (multi page)
  • +__END__ +else + cat >> $INDEX <<__END__ +
  • HTML multi page (not generated)
  • +__END__ +fi + +cat >> $INDEX <<__END__ +
+
+ +
+

Suite Design Guide

+
    +__END__ + +if [[ -f $SDG_PDF ]]; then + cp $SDG_PDF $OUT/suite-design-guide.pdf + cat >> $INDEX <<__END__ +
  • PDF
  • +__END__ +else + cat >> $INDEX <<__END__ +
  • PDF (not generated)
  • +__END__ +fi + +cat >> $INDEX <<__END__ +
+
+ +
+

Internet

+

For the latest cylc release

+ +
+
+ +
+

Document generation:

+
    +
  • user: +__END__ +whoami >> $INDEX +cat >> $INDEX <<__END__ +
  • +
  • host: +__END__ +hostname -f >> $INDEX +cat >> $INDEX <<__END__ +
  • +
  • date: +__END__ +date >> $INDEX + +cat >> $INDEX <<__END__ +
+
+ + + +__END__ diff --git a/doc/src/suite-design-guide/Makefile b/doc/src/suite-design-guide/Makefile new file mode 100644 index 00000000000..306c337f34f --- /dev/null +++ b/doc/src/suite-design-guide/Makefile @@ -0,0 +1,29 @@ +#!/usr/bin/make -f + +# THIS FILE IS PART OF THE CYLC SUITE ENGINE. +# Copyright (C) 2008-2017 NIWA +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +.PHONY: all + +all: document.pdf + +document.pdf: *.tex + - pdflatex document.tex + - pdflatex document.tex + - pdflatex document.tex + +clean: + rm -f *.aux *.out *.toc *.log *.pdf diff --git a/doc/src/suite-design-guide/document.tex b/doc/src/suite-design-guide/document.tex new file mode 100644 index 00000000000..d74d896fdc2 --- /dev/null +++ b/doc/src/suite-design-guide/document.tex @@ -0,0 +1,11 @@ +\include{preamble} +\begin{document} +\include{title-page} +\tableofcontents +\include{introduction} +\include{style-guide} +\include{general-principles} +\include{efficiency} +\include{portable-suites} +\include{roadmap} +\end{document} diff --git a/doc/src/suite-design-guide/efficiency.tex b/doc/src/suite-design-guide/efficiency.tex new file mode 100644 index 00000000000..252904ff0c2 --- /dev/null +++ b/doc/src/suite-design-guide/efficiency.tex @@ -0,0 +1,355 @@ +\section{Efficiency And Maintainability} +\label{Efficiency And Maintainability} + +Efficiency (in the sense of {\em economy of suite definition}) and +maintainability go hand in hand. This section describes techniques for clean +and efficient construction of complex workflows that are easy to understand, +maintain, and modify. + +\subsection{The Task Family Hierarchy} +\label{The Task Family Hierarchy} + +A properly designed family hierarchy fulfills three purposes in Cylc: + +\begin{itemize} + \item efficient sharing of all configuration common to groups of related + tasks + \item efficient bulk triggering, for clear scheduling graphs + \item clean suite visualization and monitoring, because families are + collapsible in the GUIs +\end{itemize} + +\subsubsection{Sharing By Inheritance} +\label{Sharing By Inheritance} + +Duplication is a maintenance risk because changes have to be repeated in +multiple places without mistakes. On the other hand, unnecessary sharing of +items via global variables is also bad because it is hard to be sure which +tasks are using which variables. A properly designed runtime inheritance +hierarchy can give every task exactly what it needs, and nothing that it +doesn't need. + +If a group of related tasks has some configuration in common, it can be +factored out into a task family inherited by all. + +\lstset{language=suiterc} +\begin{lstlisting} +[runtime] + [[OBSPROC]] + # Settings common to all obs processing tasks. + [[obs1]] + inherit = OBSPROC + [[obs2]] + inherit = OBSPROC +\end{lstlisting} + +If several families have settings in common, they can in turn can inherit +from higher-level families. + +Multiple inheritance allows efficient sharing even for overlapping categories +of tasks. For example consider that some obs processing tasks in the following +suite run parallel jobs and some serial: + +\lstset{language=suiterc} +\begin{lstlisting} +[runtime] + [[SERIAL]] + # Serial job settings. + [[PARALLEL]] + # Parallel job settings. + [[OBSPROC]] + # Settings for all obs processing tasks. + [[obs1, obs2, obs3]] + # Serial obs processing tasks. + inherit = OBSPROC, SERIAL + [[obs4, obs5]] + # Parallel obs processing tasks. + inherit = OBSPROC, PARALLEL +\end{lstlisting} + +Note that suite parameters should really be used to define family members +efficiently - see Section~\ref{Generating Tasks}. + +Cylc provides tools to help make sense of your inheritance hierarchy: + +\begin{itemize} + \item \lstinline=cylc graph -n/--namespaces= - plot the full multiple + inheritance graph (not the dependency graph) + \item \lstinline=cylc get-config SUITE= - print selected sections or items + after inheritance processing + \item \lstinline=cylc graph SUITE= - plot the dependency graph, with + collapsible first-parent families (see~\ref{Task Families And Visualization}) + \item \lstinline=cylc list -t/--tree SUITE= - print the first-parent + inheritance hierarchy + \item \lstinline=cylc list -m/--mro SUITE= - print the inheritance + precedence order for each runtime namespace +\end{itemize} + +\subsubsection{Family Triggering} + +Task families can be used to simplify the scheduling graph wherever many +tasks need to trigger at once: + +\lstset{language=suiterc} +\begin{lstlisting} +[scheduling] + [[dependencies]] + graph = pre => MODELS +[runtime] + [[MODELS]] + [[model1, model2, model3, ...]] + inherit = MODELS +\end{lstlisting} + +To trigger {\em off of} many tasks at once, family names need to be qualified +by \lstinline@-all@ or \lstinline@-any@ to indicate the desired +member-triggering semantics: + +\lstset{language=suiterc} +\begin{lstlisting} +[scheduling] + [[dependencies]] + graph = """pre => MODELS + MODELS:succeed-all => post""" +\end{lstlisting} + +Note that this can be simplified further because Cylc ignores trigger +qualifiers like \lstinline=:succeed-all= on the right of trigger arrows +to allow chaining of dependencies: + +\lstset{language=suiterc} +\begin{lstlisting} +[scheduling] + [[dependencies]] + graph = pre => MODELS:succeed-all => post +\end{lstlisting} + +\subsubsection{Family-to-Family Triggering} + +\lstset{language=suiterc} +\begin{lstlisting} +[scheduling] + [[dependencies]] + graph = BIG_FAM_1:succeed-all => BIG_FAM_2 +\end{lstlisting} + +This means every member of \lstinline=BIG_FAM_2= depends on every member +of \lstinline=BIG_FAM_1= succeeding. For very large families this can create so +many dependencies that it affects the performance of Cylc at run time, as +well as cluttering graph visualizations with unnecessary edges. Instead, +interpose a dummy task that signifies completion of the first family: + +\lstset{language=suiterc} +\begin{lstlisting} +[scheduling] + [[dependencies]] + graph = BIG_FAM_1:succeed-all => big_fam_1_done => BIG_FAM_2 +\end{lstlisting} + +For families with \lstinline=M= and \lstinline=N= members respectively, this +reduces the number of dependencies from \lstinline=M*N= to \lstinline=M+N= +without affecting the scheduling. + +\includegraphics[width=\textwidth]{resources/png/fam-to-fam-1.png} +\includegraphics[width=\textwidth]{resources/png/fam-to-fam-2.png} + +\subsubsection{Task Families And Visualization} +\label{Task Families And Visualization} + +{\em First parents} in the inheritance hierarchy double as collapsible summary +groups for visualization and monitoring. Tasks should generally be grouped into +visualization families that reflect their logical purpose in the suite rather +than technical detail such as inherited job submission or host settings. So in +the example under Section~\ref{Sharing By Inheritance} above all +\lstinline=obs= tasks collapse into \lstinline=OBSPROC= but not into +\lstinline=SERIAL= or \lstinline=PARALLEL=. + +If necessary you can introduce new namespaces just for visualization: + +\lstset{language=suiterc} +\begin{lstlisting} +[runtime] + [[MODEL]] + # (No settings here - just for visualization). + [[model1, model2]] + inherit = MODEL, HOSTX + [[model3, model4]] + inherit = MODEL, HOSTY +\end{lstlisting} + +To stop a solo parent being used in visualization, demote it to secondary with +a null parent like this: + +\lstset{language=suiterc} +\begin{lstlisting} +[runtime] + [[SERIAL]] + [[foo]] + # Inherit settings from SERIAL but don't use it in visualization. + inherit = None, SERIAL +\end{lstlisting} + +\subsection{Generating Tasks Automatically} +\label{Generating Tasks} + +Groups of tasks that are closely related such as an ensemble of model runs or +a family of obs processing tasks, or sections of workflow that are repeated +with minor variations, can be generated automatically by iterating over +some integer range (e.g.\ \lstinline=model= for \lstinline@n = 1..10@) or +list of strings (e.g.\ \lstinline=obs= for +\lstinline@type = ship, buoy, radiosonde, ...@). + +\subsubsection{Jinja2 Loops} + +Task generation was traditionally done in Cylc with explicit Jinja2 loops, +like this: +\lstset{language=suiterc} +\begin{lstlisting} +# Task generation the old way: Jinja2 loops (NO LONGER RECOMMENDED!) +{% set PARAMS = range(1,11) %} +[scheduling] + [[dependencies]] + graph = """ +{% for P in PARAMS %} + pre => model_p{{P}} => post + {% if P == 5 %} + model_p{{P}} => check + {% endif %} +{% endfor %} """ +[runtime] +{% for P in PARAMS %} + [[model_p{{P}}]] + script = echo "my parameter value is {{P}}" + {% if P == 1 %} + # special case... + {% endif %} +{% endfor %} +\end{lstlisting} + +Unfortunately this makes a mess of the suite definition, particularly the +scheduling graph, and it gets worse with nested loops over multiple parameters. + +\includegraphics[width=\textwidth]{resources/png/param-1.png} + +\subsubsection{Parameterized Tasks} +\label{Parameterized Tasks} + +Cylc-6.11 introduced built-in {\em suite parameters} for generating tasks +without destroying the clarity of the base suite definition. Here's the same +example using suite parameters instead of Jinja2 loops: + +\lstset{language=suiterc} +\begin{lstlisting} +# Task generation the new way: suite parameters. +[cylc] + [[parameters]] + p = 1..10 +[scheduling] + [[dependencies]] + graph = """pre => model

=> post + model => check""" +[runtime] + [[model

]] + script = echo "my parameter value is ${CYLC_TASK_PARAM_p}" + [[model]] + # special case ... +\end{lstlisting} + +Here \lstinline@model

@ expands to \lstinline@model_p7@ for \lstinline@p=7@, +and so on, via the default expansion template for integer-valued parameters, +but custom templates can be defined if necessary. Parameters can also be +defined as lists of strings, and you can define dependencies between different +values: \lstinline@chunk => chunk

@. Here's a multi-parameter example: + +\lstset{language=suiterc} +\begin{lstlisting} +[cylc] + [[parameters]] + run = a, b, c + m = 1..5 +[scheduling] + [[dependencies]] + graph = pre => init => sim => close => post +[runtime] + [[sim]] +\end{lstlisting} + +\includegraphics[width=\textwidth]{resources/png/param-2.png} + +If family members are defined by suite parameters, then parameterized +trigger expressions are equivalent to family \lstinline=:-all= triggers. +For example, this: + +\lstset{language=suiterc} +\begin{lstlisting} +[cylc] + [[parameters]] + n = 1..5 +[scheduling] + [[dependencies]] + graph = pre => model => post +[runtime] + [[MODELS]] + [[model]] + inherit = MODELS +\end{lstlisting} + +is equivalent to this: + +\lstset{language=suiterc} +\begin{lstlisting} +[cylc] + [[parameters]] + n = 1..5 +[scheduling] + [[dependencies]] + graph = pre => MODELS:succeed-all => post +[runtime] + [[MODELS]] + [[model]] + inherit = MODELS +\end{lstlisting} + +(but future plans for family triggering may make the second case more +efficient for very large families). + +For more information on parameterized tasks see the Cylc user guide. + +\subsection{Optional App Config Files} +\label{Optional App Config Files} + +Closely related tasks with few configuration differences between them - such as +multiple UM forecast and reconfiguration apps in the same suite - should use +the same Rose app configuration with the differences supplied by optional +configs, rather than duplicating the entire app for each task. + +Optional app configs should be valid on top of the main app config and not +dependent on the use of other optional app configs. This ensures they will +work correctly with macros and can therefore be upgraded automatically. + +\note{Currently optional configs don't work very well with UM STASH + configuration - see Section~\ref{UM STASH in Optional App Configs}.} + +Optional app configs can be loaded by command line switch: + +\begin{lstlisting} +rose task-run -O key1 -O key2 +\end{lstlisting} + +or by environment variable: + +\begin{lstlisting} +ROSE_APP_OPT_CONF_KEYS = key1 key2 +\end{lstlisting} + +The environment variable is generally preferred in suites because you don't +have to repeat and override the root-level script configuration: + +\begin{lstlisting} +[runtime] + [[root]] + script = rose task-run -v + [[foo]] + [[[environment]]] + ROSE_APP_OPT_CONF_KEYS = key1 key2 +\end{lstlisting} diff --git a/doc/src/suite-design-guide/general-principles.tex b/doc/src/suite-design-guide/general-principles.tex new file mode 100644 index 00000000000..ddb48890f16 --- /dev/null +++ b/doc/src/suite-design-guide/general-principles.tex @@ -0,0 +1,652 @@ +\section{Basic Principles} +\label{Basic Principles} + +This section covers general principles that should be kept in mind when writing +any suite. More advanced topics are covered later: {\em Efficiency And +Maintainability} (section~\ref{Efficiency And Maintainability}) and {\em +Portable Suites} (section~\ref{Portable Suites}). + +\subsection{UTC Mode} + +Cylc has full timezone support if needed, but real time NWP suites should use +UTC mode to avoid problems at the transition between local standard time and +daylight saving time, and to enable the same suite to run the same way in +different timezones. + +\lstset{language=suiterc} +\begin{lstlisting} +[cylc] + UTC mode = True +\end{lstlisting} +\subsection{Fine Or Coarse-Grained Suites} + +Suites can have many small simple tasks, fewer large complex tasks, or anything +in between. A task that runs many distinct processes can be split into many +distinct tasks. The fine-grained approach is more transparent and it allows +more task level concurrency and quicker failure recovery - you can rerun just +what failed without repeating anything unnecessarily. + +\subsubsection{rose bunch} + +One caveat to our fine-graining advice is that submitting a large number of +small tasks at once may be a problem on some platforms. If you have many +similar concurrent jobs you can use \lstinline=rose bunch= to pack them into a +single task with incremental rerun capability: retriggering the task will rerun +just the component jobs that did not successfully complete earlier. + +\subsection{Monolithic Or Interdependent Suites} +\label{Monolithic Or Interdependent Suites} + +When writing suites from scratch you may need to decide between putting +multiple loosely connected sub-workflows into a single large suite, or +constructing a more modular system of smaller suites that depend on each other +through inter-suite triggering. Each approach has its pros and cons, depending +on your requirements and preferences with respect to the complexity and +manageability of the resulting system. + +The \lstinline=cylc gscan= GUI lets you monitor multiple suites at a time, and +you can define virtual groups of suites that collapse into a single state +summary. + +\subsubsection{Inter-Suite Triggering} + +A task in one suite can explicitly trigger off of a task in another suite. The +full range of possible triggering conditions is supported, including custom +message triggers. Remote triggering involves repeatedly querying (``polling'') +the remote suite run database, not the suite daemon, so it works even if the +other suite is down at the time. + +There is special graph syntax to support triggering off of a task in another +suite, or you can call the underlying \lstinline=cylc suite-state= command +directly in task scripting. + +In real time suites you may want to use clock-triggers to delay the onset of +inter-suite polling until roughly the expected completion time of the remote +task. + +\subsection{Self-Contained Suites} +\label{Self-Contained Suites} + +All files generated by Cylc during a suite run are confined to the {\em suite +run directory} \lstinline=$HOME/cylc-run/=. However, Cylc has no control +over the locations of the programs, scripts, and files, that are executed, +read, or generated by your tasks at runtime. It is up to you to ensure that +all of this is confined to the suite run directory too, as far as possible. + +Self-contained suites are more robust, easier to work with, and more portable. +Multiple instances of the same suite (with different suite names) should be +able to run concurrently under the same user account without mutual +interference. + +\subsubsection{Avoiding External Files} + +Suites that use external scripts, executables, and files beyond the essential +system libraries and utilities are vulnerable to external changes: someone +else might interfere with these files without telling you. + +In some case you may need to symlink to large external files anyway, if space +or copy speed is a problem, but otherwise suites with private copies of all the +files they need are more robust. + +\subsubsection{Installing Files At Start-up} + +Use \lstinline=rose suite-run= {\em file creation mode} or \lstinline=R1= +install tasks to copy files to the self-contained suite run directory at +start-up. Install tasks are preferred for time-consuming installations because +they don't slow the suite start-up process, they can be monitored in the GUI, +they can run directly on target platforms, and you can rerun them later without +restarting the suite. + +\subsubsection{Confining Ouput To The Run Directory} + +Output files should be confined to the suite run directory tree. Then all +output is easy to find, multiple instances of the same suite can run +concurrently without interference, and other users should be able to copy and +run your suite with few modifications. Cylc provides a \lstinline@share@ +directory for generated files that are used by several tasks in a suite +(see~\ref{Shared Task IO Paths}). Archiving tasks can use \lstinline=rose arch= +to copy or move selected files to external locations as needed (see~\ref{Suite +Housekeeping}). + +\subsection{Task Host Selection} + +At sites with multiple task hosts to choose from, use +\lstinline=rose host-select= to dynamically select appropriate task hosts +rather than hard coding particular hostnames. This enables your suite to +adapt to particular machines being down or heavily overloaded by selecting +from a group of hosts based on a series of criteria. +\lstinline=rose host-select= will only return hosts that can be contacted by +non-interactive SSH. + +\subsection{Task Scripting} + +Non-trivial task scripting should be held in external files rather than +inlined in the suite.rc. This keeps the suite definition tidy, and it +allows proper shell-mode text editing and independent testing of task scripts. + +For automatic access by task jobs, task-specific scripts should be kept in +Rose app bin directories, and shared scripts kept in (or installed to) the +suite bin directory. + +\subsubsection{Coding Standards} + +When writing your own task scripts make consistent use of appropriate coding +standards such as: + +\begin{itemize} + \item PEP8 for Python - \url{https://www.python.org/dev/peps/pep-0008/} + \item Google Shell Style Guide for Bash - + \url{https://google.github.io/styleguide/shell.xml} +\end{itemize} + +\subsubsection{Basic Functionality} + +In consideration of future users who may not be expert on the internals of your +suite and its tasks, all task scripts should: + +\begin{itemize} + \item Print clear usage information if invoked incorrectly (and via the + standard options \lstinline=-h, --help=). + \item Print useful diagnostic messages in case of error. For example, if a + file was not found, the error message should contain the full path to the + expected location. + \item Always return correct shell exit status - zero for success, non-zero + for failure. This is used by Cylc job wrapper code to detect success and + failure and report it back to the suite daemon. + \item In shell scripts use \lstinline=set -u= to abort on any reference to + an undefined variable. If you really need an undefined variable to evaluate + to an empty string, make it explicit: \lstinline@FOO=${FOO:-}@. + \item In shell scripts use \lstinline=set -e= to abort on any error without + having to failure-check each command explicitly. +\end{itemize} + + +\subsection{Rose Apps} + +Rose apps allow all non-shared task configuration - which is not relevant to +workflow automation - to be moved from the suite definition into app config +files. This makes suites tidier and easier to understand, and it allows +\lstinline=rose edit= to provide a unified metadata-enhanced view of the suite +and its apps (see~\ref{Rose Metadata Compliance}). + +Rose apps are a clear winner for tasks with complex configuration requirements. +It matters less for those with little configuration, but for consistency and to +take full advantage of \lstinline=rose edit= it makes sense to use Rose apps +for most tasks. + +When most tasks are Rose apps, set the app-run command as a root-level default, +and override it for the occasional non Rose app task: + +\lstset{language=suiterc} +\begin{lstlisting} +[runtime] + [[root]] + script = rose task-run -v + [[rose-app1]] + #... + [[rose-app2]] + #... + [[hello-world]] # Not a Rose app. + script = echo "Hello World" +\end{lstlisting} + +\subsection{Rose Metadata Compliance} +\label{Rose Metadata Compliance} + +Rose metadata drives page layout and sort order in \lstinline=rose edit=, plus +help information, input validity checking, macros for advanced checking and app +version upgrades, and more. + +To ensure the suite and its constituent applications are being run as intended +it should be valid against any provided metadata: launch the +\lstinline=rose edit= GUI or run \lstinline=rose macro --validate= on the +command line to highlight any errors, and correct them prior to use. If errors +are flagged incorrectly you should endeavour to fix the metadata. + +When writing a new suite or application, consider creating metadata to +facilitate ease of use by others. + +\subsection{Task Independence} + +Essential dependencies must be encoded in the suite graph, but tasks should +not +rely unnecessarily on the action of other tasks. For example, tasks should +create their own output directories if they don't already exist, even if they +would normally be created by an earlier task in the workflow. This makes it is +easier to run tasks alone during development and testing. + + +\subsection{Clock-Triggered Tasks} +\label{Clock-Triggered Tasks} +Tasks that wait on real time data should use clock-triggers to delay job +submission until the expected data arrival time: + +\lstset{language=suiterc} +\begin{lstlisting} +[scheduling] + initial cycle point = now + [[special tasks]] + # Trigger 5 min after wall-clock time is equal to cycle point. + clock-trigger = get-data(PT5M) + [[dependencies]] + [[[T00]]] + graph = get-data => process-data +\end{lstlisting} + +Clock-triggered tasks typically have to handle late data arrival. Task +execution {\em retry delays} can be used to simply retrigger the task at +intervals until the data is found, but frequently retrying small tasks probably +should not go to a batch scheduler, and multiple task failures will be logged +for what is a essentially a normal condition (at least it is normal until the +data is really late). + +Rather than using task execution retry delays to repeatedly trigger a task that +checks for a file, it may be better to have the task itself repeatedly poll for +the data (see~\ref{Rose App File Polling} for example). + +\subsection{Rose App File Polling} +\label{Rose App File Polling} + +Rose apps have built-in polling functionality to check repeatedly for the +existence of files before executing the main app. See the \lstinline=[poll]= +section in Rose app config documentation. This is a good way to implement +check-and-wait functionality in clock-triggered tasks (\ref{Clock-Triggered +Tasks}), for example. + +It is important to note that frequent polling may be bad for some filesystems, +so be sure to configure a reasonable interval between polls. + +\subsection{Task Execution Time Limits} + +Instead of setting job wall clock limits directly in batch scheduler +directives, use the \lstinline=execution time limit= suite config item. +Cylc automatically derives the correct batch scheduler directives from this, +and it is also used to run \lstinline=background= and \lstinline=at= jobs via +the \lstinline=timeout= command, and to poll tasks that haven't reported in +finished by the configured time limit. + +\subsection{Restricting Suite Activity} +\label{Restricting Suite Activity} + +It may be possible for large suites to overwhelm a job host by submitting too +many jobs at once: + +\begin{itemize} + \item Large suites that are not sufficiently limited by real time clock + triggering or inter-cycle dependence may generate a lot of {\em runahead} + (this refers to Cylc's ability to run multiple cycles at once, restricted + only by the dependencies of individual tasks). + \item Some suites may have large families of tasks whose members all + become ready at the same time. +\end{itemize} + +These problems can be avoided with {\em runahead limiting} and {\em internal +queues}, respectively. + +\subsubsection{Runahead Limiting} +\label{Runahead Limiting} + +By default Cylc allows a maximum of three cycle points to be active at the same time, but this value is configurable: + +\lstset{language=suiterc} +\begin{lstlisting} +[scheduling] + initial cycle point = 2020-01-01T00 + # Don't allow any cycle interleaving: + max active cycle points = 1 +\end{lstlisting} + +\subsubsection{Internal Queues} + +Tasks can be assigned to named internal queues that limit the number of members +that can be active (i.e.\ submitted or running) at the same time: + +\lstset{language=suiterc} +\begin{lstlisting} +[scheduling] + initial cycle point = 2020-01-01T00 + [[queues]] + # Allow only 2 members of BIG_JOBS to run at once: + [[[big_jobs_queue]]] + limit = 2 + members = BIG_JOBS + [[dependencies]] + [[[T00]]] + graph = pre => BIG_JOBS +[runtime] + [[BIG_JOBS]] + [[foo, bar, baz, ...]] + inherit = BIG_JOBS +\end{lstlisting} + +\subsection{Suite Housekeeping} +\label{Suite Housekeeping} + +Ongoing cycling suites can generate an enormous number of output files and logs +so regular housekeeping is very important. Special housekeeping tasks, +typically the last tasks in each cycle, should be included to archive selected +important files and then delete everything at some offset from the current +cycle point. + +The Rose built-in apps \lstinline=rose_arch= and \lstinline=rose_prune= +provide an easy way to do this. They can be configured easily with +file-matching patterns and cycle point offsets to perform various housekeeping +operations on matched files. + +\subsection{Complex Jinja2 Code} + +The Jinja2 template processor provides general programming constructs, +extensible with custom Python filters, that can be used to {\em generate} the +suite definition. This makes it possible to write flexible multi-use +suites with structure and content that varies according to various input +switches. There is a cost to this flexibility however: excessive use of Jinja2 +can make a suite hard to understand and maintain. It is difficult to say +exactly where to draw the line, but we recommend erring on the side of +simplicity and clarity: write suites that are easy to understand and therefore +easy to modify for other purposes, rather than extremely complicated suites +that attempt do everything out of the box but are hard to maintain and modify. + +Note that use of Jinja2 loops for generating tasks is now deprecated in favour +of built-in parameterized tasks - see~\ref{Parameterized Tasks}. + +\subsection{Shared Configuration} + +Configuration that is common to multiple tasks should be defined in one +place and used by all, rather than duplicated in each task. Duplication is +a maintenance risk because changes have to be made consistently in several +places at once. + +\subsubsection{Jinja2 Variables} + +In simple cases you can share by passing a Jinja2 variable to all the tasks +that need it: + +\lstset{language=suiterc} +\begin{lstlisting} +{% set JOB_VERSION = 'A23' %} +[runtime] + [[foo]] + script = run-foo --version={{JOB_VERSION}} + [[bar]] + script = run-bar --version={{JOB_VERSION}} +\end{lstlisting} + +\subsubsection{Inheritance} + +Sharing by inheritance of task families is recommended when more than a few +configuration items are involved. + +The simplest application of inheritance is to set set global defaults in the +\lstinline=[[runtime]][root]= namespace that is inherited by all tasks. +However, this should only be done for settings that really are used +by the vast majority of tasks. Over-sharing of via root, particularly of +environment variables, is a maintenance risk because it can be very +difficult to be sure which tasks are {\em using} which global variables. + +Any \lstinline=[runtime]= settings can be shared - scripting, host +and batch scheduler configuration, environment variables, and so on - from +single items up to complete task or app configurations. At the latter extreme, +it is quite common to have several tasks that inherit the same complete +job configuration followed by minor task-specific additions: + +\lstset{language=suiterc} +\begin{lstlisting} +[runtime] + [[FILE-CONVERT]] + script = convert-netcdf + #... + [[convert-a]] + inherit = FILE-CONVERT + [[[environment]]] + FILE_IN = file-a + [[convert-b]] + inherit = FILE-CONVERT + [[[environment]]] + FILE_IN = file-b +\end{lstlisting} + +Inheritance is covered in more detail from an efficiency perspective in +Section~\ref{The Task Family Hierarchy}. + +\subsubsection{Shared Task IO Paths} +\label{Shared Task IO Paths} + +If one task uses files generated by another task (and both see the same +filesystem) a common IO path should normally be passed to both tasks via a +shared environment variable. As far as Cylc is concerned this is no different +to other shared configuration items, but there are some additional aspects +of usage worth addressing here. + +Primarily, for self-containment (see~\ref{Self-Contained Suites}) shared IO +paths should be under the {\em suite share directory}, the location of which is +passed to all tasks as \lstinline=$CYLC_SUITE_SHARE_PATH=. + +The \lstinline@rose task-env@ utility can provide additional environment +variables that refer to static and cyclepoint-specific locations under the +suite share directory. + +\lstset{language=suiterc} +\begin{lstlisting} +[runtime] + [[my-task]] + env-script = $(eval rose task-env -T P1D -T P2D) +\end{lstlisting} + +For a current cycle point of \lstinline=20170105= this will make the following +variables available to tasks: + +\lstset{language=sh} +\begin{lstlisting} +ROSE_DATA=$CYLC_SUITE_SHARE_PATH/data +ROSE_DATAC=$CYLC_SUITE_SHARE_PATH/cycle/20170105 +ROSE_DATACP1D=$CYLC_SUITE_SHARE_PATH/cycle/20170104 +ROSE_DATACP2D=$CYLC_SUITE_SHARE_PATH/cycle/20170103 +\end{lstlisting} + +Subdirectories of \lstinline@$ROSE_DATAC@ etc.\ should be agreed between +different sub-systems of the suite; typically they are named for the +file-generating tasks, and the file-consuming tasks should know to look there. + +The share-not-duplicate rule can be relaxed for shared files whose names are +agreed by convention, so long as their locations under the share directory are +proper shared suite variables. For instance the Unified Model uses a large +number of files whose conventional names (\lstinline=glu_snow=, for example) +can reasonably be expected not to change, so they are typically hardwired into +app configurations (as \lstinline=$ROSE_DATA/glu_snow=, for example) to avoid +cluttering the suite definition. + +Here two tasks share a workspace under the suite share directory by inheritance: + +\lstset{language=suiterc} +\begin{lstlisting} +# Sharing an I/O location via inheritance. +[scheduling] + [[dependencies]] + graph = write_data => read_data +[runtime] + [[root]] + env-script = $(eval rose task-env) + [[WORKSPACE]] + [[[environment]]] + DATA_DIR = ${ROSE_DATA}/png + [[write_data]] + inherit = WORKSPACE + script = """ +mkdir -p $DATA_DIR +write-data.exe -o ${DATA_DIR}""" + [[read_data]] + inherit = WORKSPACE + script = read-data.exe -i ${DATA_DIR} +\end{lstlisting} + +In simple cases where an appropriate family does not already exist paths can +be shared via Jinja variables: + +\lstset{language=suiterc} +\begin{lstlisting} +# Sharing an I/O location with Jinja2. +{% set DATA_DIR = '$ROSE_DATA/stuff' %} +[scheduling] + [[dependencies]] + graph = write_data => read_data +[runtime] + [[write_data]] + script = """ +mkdir -p {{DATA_DIR}} +write-data.exe -o {{DATA_DIR}}""" + [[read_data]] + script = read-data.exe -i {{DATA_DIR}} +\end{lstlisting} + +For completeness we note that it is also possible to configure multiple tasks +to use the same work directory so they can all share files in \lstinline@$PWD@. +(Cylc executes task jobs in special work directories that by default are unique +to each task). This may simplify the suite slightly, and it may be useful if +you are unfortunate enough to have executables that are designed for IO in +\lstinline@$PWD@, {\em but it is not recommended.} There is a higher risk +of interference between tasks; it will break \lstinline=rose task-run= +incremental file creation mode; and \lstinline=rose task-run --new= will in +effect delete the work directories of tasks other than its intended target. + +\lstset{language=suiterc} +\begin{lstlisting} +# Shared work directory: tasks can read and write in $PWD - use with caution! +[scheduling] + [[dependencies]] + graph = write_data => read_data +[runtime] + [[WORKSPACE]] + work sub-directory = datadir + [[write_data]] + inherit = WORKSPACE + script = write-data.exe + [[read_data]] + inherit = WORKSPACE + script = read-data.exe +\end{lstlisting} + +\subsection{Varying Behaviour By Cycle Point} + +To make a cycling job behave differently at different cycle points you {\em +could} use a single task with scripting that reacts to the cycle point it finds +itself running at, but it is better to use different tasks (in different +cycling sections) that inherit the same base job configuration. This results +in a more transparent suite that can be understood just by inspecting the +graph: + +\lstset{language=suiterc} +\begin{lstlisting} +# Run the same job differently at different cycle points. +[scheduling] + initial cycle point = 2020-01-01T00 + [[dependencies]] + [[[T00]]] + graph = pre => long_fc => post + [[[T12]]] + graph = pre => short_fc => post +[runtime] + [[MODEL]] + script = run-model.sh + [[long_fc]] + inherit = MODEL + [[[job]]] + execution time limit = PT30M + [[[environment]]] + RUN_LEN = PT48H + [[short_fc]] + inherit = MODEL + [[[job]]] + execution time limit = PT10M + [[[environment]]] + RUN_LEN = PT12H +\end{lstlisting} + +The few differences between \lstinline=short_fc= and \lstinline=long_fc=, +including batch scheduler resource requests, can be configured after common +settings are inherited. + +\subsubsection{At Start-Up} + +Similarly, if a cycling job needs special behaviour at the initial (or any other) +cycle point, just use a different logical task in an \lstinline=R1= graph and +have it inherit the same job as the general cycling task, not a single task +with scripting that behaves differently if it finds itself running at the +initial cycle point. + +\subsection{Automating Failure Recovery} + +\subsubsection{Job Submission Retries} + +When submitting jobs to a remote host, use job submission retries to +automatically resubmit tasks in the event of network outages. Note this is +distinct from job retries for job execution failure (just below). + +Job submission retries should normally be host (or host-group for +\lstinline=rose host-select=) specific, not task-specific, so configure them in +a host (or host-group) specific family. The following suite.rc fragment +configures all HPC jobs to retry on job submission failure up to 10 +times at 1 minute intervals, then another 5 times at 1 hour intervals: + +\lstset{language=suiterc} +\begin{lstlisting} +[runtime] + [[HPC]] # Inherited by all jobs submitted to HPC. + [[[job]]] + submission retry delays = 10*PT1M, 5*PT1H +\end{lstlisting} + +\subsubsection{Job Execution Retries} + +Automatic retry on job execution failure is useful if you have good reason to +believe that a simple retry will usually succeed. This may be the case if the +job host is known to be flaky, or if the job only ever fails for one known +reason that can be fixed on a retry. For example, if a model fails occasionally +with a numerical instability that can be remedied with a short timestep rerun, +then an automatic retry may be appropriate: + +\lstset{language=suiterc} +\begin{lstlisting} +[runtime] + [[model]] + script = """ +if [[ $CYLC_TASK_TRY_NUMBER > 1 ]]; then + SHORT_TIMESTEP=true +else + SHORT_TIMESTEP=false +fi +model.exe""" + [[[job]]] + execution retry delays = 1*PT0M +\end{lstlisting} + +\subsubsection{Failure Recovery Workflows} + +For recovery from failures that require explicit diagnosis you can configure +alternate routes through the workflow, together with {\em suicide triggers} +that remove the unused route. In the following example, if the model fails a +diagnosis task will trigger; if it determines the cause of the failure is a +known numerical instability (e.g.\ by parsing model job logs) it will succeed, +triggering a short timestep run. Postprocessing can proceed from either the +original or the short-step model run, and suicide triggers remove the unused +path from the workflow: + +%\begin{figure}[H] +%\noindent\begin{minipage}[b]{0.65\textwidth} % +\lstset{language=suiterc} +\begin{lstlisting} +[scheduling] + [[dependencies]] + graph = """ + model | model_short => postproc + model:fail => diagnose => model_short + # Clean up with suicide triggers: + model => ! diagnose & ! model_short + model_short => ! model""" +\end{lstlisting} +%\end{minipage}\hfill +%\begin{minipage}[b]{0.15\textwidth} + \includegraphics[width=0.18\textwidth]{resources/png/failure-recovery.png} +%\end{minipage} +%\end{figure} + + diff --git a/doc/src/suite-design-guide/introduction.tex b/doc/src/suite-design-guide/introduction.tex new file mode 100644 index 00000000000..762d7932651 --- /dev/null +++ b/doc/src/suite-design-guide/introduction.tex @@ -0,0 +1,28 @@ +\section{Introduction} +\label{Introduction} + +This document provides guidance on making complex Cylc + Rose workflows that +are clear, maintainable, and portable. Note that best practice advice may +evolve over time with the capabilities of Rose and Cylc. + +Content is drawn from the Rose and Cylc user guides, earlier Met Office suite +design and operational suite review documents, experience with real suites +across the Unified Model Consortium, and discussion among members of the UM +TISD (Technical Infrastructure Suite Design) working group. + +We start with the most general topics (coding style, general principles), +move on to more advanced topics (efficiency and maintainability, portable +suites), and end with some pointers to future developments. + +{\em A good working knowledge of Cylc and Rose is assumed}. + +\begin{itemize} + \item Cylc: \url{http://cylc.github.io/cylc/documentation.html} + \item Rose: \url{http://metomi.github.io/rose/doc/rose.html} +\end{itemize} + +\note{for non-Rose users: this document comes out of the Unified Model + Consortium wherein Cylc is used within the Rose {\em suite management + framework}. However, the bulk of the information in this guide is about +Cylc suite design; which parts are Rose-specific should be clear from +context.} diff --git a/doc/src/suite-design-guide/portable-suites.tex b/doc/src/suite-design-guide/portable-suites.tex new file mode 100644 index 00000000000..2dfb21ba039 --- /dev/null +++ b/doc/src/suite-design-guide/portable-suites.tex @@ -0,0 +1,492 @@ +\section{Portable Suites} +\label{Portable Suites} + +A {\em portable} or {\em interoperable} suite can run ``out of the box'' at +different sites, or in different environments such as research and operations +within a site. For convenience we just use the term {\em site portability}. + +Lack of portability is a major barrier to collaborative development when +sites need to run more or less the same workflow, because it is very +difficult to translate changes manually between large, complicated suites. + +Most suites are riddled with site-specific details such as local build +configurations, file paths, host names, and batch scheduler directives, etc.; +but it is possible to cleanly factor all this out to make a portable suite. +Significant variations in workflow structure can even be accommodated quite +easily. If the site workflows are {\em too different}, however, you may decide +that it is appropriate for each site to maintain separate suites. + +The recommended way to do this, which we expand on below, is: + +\begin{itemize} + \item Put all site-specific settings in include-files loaded at the end + of a generic ``core'' suite definition. + \item Use ``optional optional'' app config files for site-specific variations + in the core suite's Rose apps. + \item (Make minimal use of inlined site switches too, if necessary). +\end{itemize} + +The result should actually be tidier than the original in one respect: all +the messy platform-specific resource directives etc., will be hidden away in +the site include-files. + +\subsection{The Jinja2 SITE Variable} + +First a suite Jinja2 variable called \lstinline=SITE= should be set to the site +name, either in \lstinline=rose-suite.conf=, or in the suite definition itself +(perhaps automatically, by querying the local environment in some way). + +\lstset{language=suiterc} +\begin{lstlisting} +#!Jinja2 +{% set SITE = "niwa" %} +#... +\end{lstlisting} + +This will be used to select site-specific configuration, as described below. + +\subsection{Site Include-Files} + +If a section heading in a suite.rc file is repeated the items under it simply +add to or override those defined under the same section earlier in the file +(but note Section~\ref{List Item Override In Site Include-Files}). +For example, this task definition: + +\begin{lstlisting} +[runtime] + [[foo]] + script = run-foo.sh + [[[remote]]] + host = hpc1.niwa.co.nz +\end{lstlisting} + +can equally be written like this: + +\begin{lstlisting} +[runtime] # Part 1 (site-agnostic). + [[foo]] + script = run-foo.sh +[runtime] # Part 2 (site-specific). + [[foo]] + [[[remote]]] + host = hpc1.niwa.co.nz +\end{lstlisting} + +(Note that if Part 2 had also defined \lstinline=script= the new value would +override the original. It can sometimes be useful to set a widely used +default and override it in a few cases, but be aware that this can make it more +difficult to determine the origin of affected values.) + +In this way all site-specific \lstinline=[runtime]= settings, with their +respective sub-section headings, can be moved to the end of the file, and then +out into an include-file (file inclusion is essentially just literal inlining): + +\begin{lstlisting} +#... +{% set SITE = "niwa" %} + +# Core site-agnostic settings: +#... +[runtime] + [[foo]] + script = run-foo.sh +#... + +# Site-specific settings: +{% include 'site/' ~ SITE ~ '.rc' %} +\end{lstlisting} + +where the site include-file \lstinline=site/niwa.rc= contains: + +\begin{lstlisting} +# site/niwa.rc +[runtime] + [[foo]] + [[[remote]]] + host = hpc1.niwa.co.nz +\end{lstlisting} + +\subsection{Site-Specific Graphs} + +Repeated \lstinline=graph= strings under the same graph section headings are +always additive (graph strings are the only exception to the normal overriding +of repeated items). So, for instance, this graph: + +\begin{lstlisting} +[scheduling] + initial cycle point = 2025 + [[dependencies]] + [[[P1Y]]] + graph = "pre => model => post => niwa_archive" +\end{lstlisting} + +can be written like this: + +\begin{lstlisting} +[scheduling] + initial cycle point = 2025 + [[dependencies]] + [[[P1Y]]] + graph = "pre => model => post" + [[[P1Y]]] + graph = "post => niwa_archive" +\end{lstlisting} + +and again, the site-specific part can be taken out to a site include-file: + +\begin{lstlisting} +#... +{% set SITE = "niwa" %} + +# Core site-agnostic settings. +#... +[scheduling] + initial cycle point = 2025 + [[dependencies]] + [[[P1Y]]] + graph = "pre => model => post" +#... +# Site-specific settings: +{% include 'site/' ~ SITE ~ '.rc' %} +\end{lstlisting} + +where the site include-file \lstinline=site/niwa.rc= contains: + +\begin{lstlisting} +# site/niwa.rc +[scheduling] + [[dependencies]] + [[[P1Y]]] + graph = "post => niwa_archive" +\end{lstlisting} + +Note that the site-file graph needs to define the dependencies of the +site-specific tasks, and thus their points of connection to the core suite +- which is why the core task \lstinline=post= appears in the graph here (if +\lstinline=post= had any site-specific runtime settings, to get it to run at +this site, they would also be in the site-file). + +\subsection{Inlined Site-Switching} +\label{Inlined Site-Switching} + +It may be tempting to use inlined switch blocks throughout the suite instead of +site include-files, but {\em this is not recommended} - it is verbose and +untidy (the greater the number of supported sites, the bigger the +mess) and it exposes all site configuration to all users: + +\lstset{language=suiterc} +\begin{lstlisting} +#... +[runtime] + [[model]] + script = run-model.sh +{% if SITE == 'niwa' %} + [[[job]]] + batch system = loadleveler + [[[directives]]] + # NIWA Loadleveler directives... +{% elif SITE == 'metoffice' %} + [[[job]]] + batch system = pbs + [[[directives]]] + # Met Office PBS directives... +{% elif SITE == ... %} + #... +{% else %} + {{raise('Unsupported site: ' ~ SITE)}} +{% endif %} + #... +\end{lstlisting} + +Inlined switches can be used, however, to configure exceptional behaviour at +one site without requiring the other sites to duplicate the default behaviour. +But be wary of accumulating too many of these switches: + +\lstset{language=suiterc} +\begin{lstlisting} +# (core suite.rc file) +#... +{% if SITE == 'small' %} + {# We can't run 100 members... #} + {% set ENSEMBLE_SIZE = 25 %} +{% else %} + {# ...but everyone else can! #} + {% set ENSEMBLE_SIZE = 100 %} +{% endif %} +#... +\end{lstlisting} + +Inlined switches can also be used to temporarily isolate a site-specific +change to a hitherto non site-specific part of the suite, thereby avoiding the +need to update all site include-files before getting agreement from the suite +owner and collaborators. + +\subsection{Site-Specific Suite Variables} + +It can sometimes be useful to set site-specific values of suite variables that +aren't exposed to users via \lstinline=rose-suite.conf=. For example, consider +a suite that can run a special post-processing workflow of some kind at sites +where IDL is available. The IDL-dependence switch can be set per site like this: + +\lstset{language=suiterc} +\begin{lstlisting} +#... +{% set HAVE_IDL = False %} {# Default. #} +{% from SITE ~ '-vars.rc' import HAVE_IDL, OTHER_VAR %} +graph = """ + pre => model => post +{% if HAVE_IDL %} + post => idl-1 => idl-2 => idl-3 +{% endif %} + """ +\end{lstlisting} + +where for \lstinline@SITE = niwa@ the file \lstinline=niwa-vars.rc= contains: +\lstset{language=suiterc} +\begin{lstlisting} +{# niwa-vars.rc #} +{% set HAVE_IDL = True %} +\end{lstlisting} + +Note this really assumes a significantly smaller number of options (IDL or not, +in this case) than sites, otherwise the IDL workflow should just go in the site +include-files of the sites that need it. + +\subsection{Site-Specific Optional Suite Configs} + +During development and testing of a portable suite you can use an optional Rose +suite config file to automatically set site-specific suite inputs and thereby +avoid the need to make manual changes every time you check out and run a new +version. The site switch itself has to be set of course, but there may be other +settings too such as model parameters for a standard local test domain. Just +put these settings in \lstinline=opt/rose-suite-niwa.conf= (for site ``niwa'') +and run the suite with \lstinline=rose suite-run -O niwa=. + +\subsection{Site-Specific Optional App Configs} + +Typically a few but not all apps will need some site customization, e.g.\ for +local archive configuration, local science options, or whatever. To avoid +explicit site-customization of individual task-run command lines use Rose's +built-in {\em optional optional app config} capability: + +\lstset{language=suiterc} +\begin{lstlisting} +[runtime] + [[root]] + script = rose task-run -v -O '({{SITE}})' +\end{lstlisting} + +Normally a missing optional app config is considered to be an error, but the +round parentheses here mean the named optional config is optional - i.e.\ +use it if it exists, otherwise ignore. + +With this setting in place we can simply add a +\lstinline=opt/rose-app-niwa.conf= to any app that needs customization at +\lstinline@SITE = niwa@. + +\subsection{An Example} + +The following small suite is not portable because all of its tasks are +submitted to a NIWA HPC host; two task are entirely NIWA-specific in that they +respectively install files from a local database and upload products to a local +distribution system; and one task runs a somewhat NIWA-specific configuration +of a model. The remaining tasks are site-agnostic apart from local job host +and batch scheduler directives. + +\lstset{language=suiterc} +\begin{lstlisting} +[cylc] + UTC mode = True +[scheduling] + initial cycle point = 2017-01-01 + [[dependencies]] + [[[R1]]] + graph = install_niwa => preproc + [[[P1D]]] + graph = """ + preproc & model[-P1D] => model => postproc => upload_niwa + postproc => idl-1 => idl-2 => idl-3""" +[runtime] + [[root]] + script = rose task-run -v + [[HPC]] # NIWA job host and batch scheduler settings. + [[[remote]]] + host = hpc1.niwa.co.nz + [[[job]]] + batch system = loadleveler + [[[directives]]] + account_no = NWP1623 + class = General + job_type = serial # (most jobs in this suite are serial) + [[install_niwa]] # NIWA-specific file installation task. + inherit = HPC + [[preproc]] + inherit = HPC + [[model]] # Run the model on a local test domain. + inherit = HPC + [[[directives]]] # Override the serial job_type setting. + job_type = parallel + [[[environment]]] + SPEED = fast + [[postproc]] + inherit = HPC + [[upload_niwa]] # NIWA-specific product upload. + inherit = HPC +\end{lstlisting} + +To make this portable, refactor it into a core suite.rc file that contains the +clean site-independent workflow configuration and loads all site-specific +settings from an include-file at the end: + +\lstset{language=suiterc} +\begin{lstlisting} +# suite.rc: CORE SITE-INDEPENDENT CONFIGURATION. +{% set SITE = 'niwa' %} +{% from 'site/' ~ SITE ~ '-vars.rc' import HAVE_IDL %} +[cylc] + UTC mode = True +[scheduling] + initial cycle point = 2017-01-01 + [[dependencies]] + [[[P1D]]] + graph = """ +preproc & model[-P1D] => model => postproc +{% if HAVE_IDL %} + postproc => idl-1 => idl-2 => idl-3 +{% endif %} + """ +[runtime] + [[root]] + script = rose task-run -v -O '({{SITE}})' + [[preproc]] + inherit = HPC + [[preproc]] + inherit = HPC + [[model]] + inherit = HPC + [[[environment]]] + SPEED = fast +{% include 'site/' ~ SITE ~ '.rc' %} +\end{lstlisting} + +plus site files \lstinline=site/niwa-vars.rc=: + +\lstset{language=suiterc} +\begin{lstlisting} +# site/niwa-vars.rc: NIWA SITE SETTINGS FOR THE EXAMPLE SUITE. +{% set HAVE_IDL = True %} +\end{lstlisting} + +and \lstinline=site/niwa.rc=: + +\lstset{language=suiterc} +\begin{lstlisting} +# site/niwa.rc: NIWA SITE SETTINGS FOR THE EXAMPLE SUITE. +[scheduling] + [[dependencies]] + [[[R1]]] + graph = install_niwa => preproc + [[[P1D]]] + graph = postproc => upload_niwa +[runtime] + [[HPC]] + [[[remote]]] + host = hpc1.niwa.co.nz + [[[job]]] + batch system = loadleveler + [[[directives]]] + account_no = NWP1623 + class = General + job_type = serial # (most jobs in this suite are serial) + [[install_niwa]] # NIWA-specific file installation. + [[model]] + [[[directives]]] # Override the serial job_type setting. + job_type = parallel + [[upload_niwa]] # NIWA-specific product upload. +\end{lstlisting} + +and finally, an optional app config file for the local model domain: + +\lstset{language=bash} +\begin{lstlisting} +app/model/rose-app.conf # Main app config. +app/model/opt/rose-app-niwa.conf # NIWA site settings. +\end{lstlisting} + +Some points to note: + +\begin{itemize} + \item It is straightforward to extend support to a new site by copying an + existing site file(s) and adapting it to the new job host and batch + scheduler etc. + + \item Batch system directives should be considered site-specific unless + all supported sites have the same batch system and the same host + architecture (including CPU clock speed and memory size etc.). + + \item We've assumed that all tasks run on a single HPC host at both + sites. If that's not a valid assumption the \lstinline=HPC= family + inheritance relationships would have to become site-specific. + + \item Core task runtime configuration aren't needed in site files at all + if their job host and batch system settings can be defined in common + families that are (\lstinline=HPC= in this case). +\end{itemize} + + +\subsection{Collaborative Development Model} +\label{Collaborative Development Model} + +Official releases of a portable suite should be made from the suite trunk. + +Changes should be developed on feature branches so as not to affect other users +of the suite. + +Site-specific changes shouldn't touch the core suite.rc file, just the relevant +site include-file, and therefore should not need close scrutiny from other +sites. + +Changes to the core suite.rc file should be agreed by all stakeholders, and +should be carefully checked for effects on site include-files: + +\begin{itemize} + \item Changing the name of tasks or families in the core suite may break + sites that add configuration to the original runtime namespace. + \item Adding new tasks or families to the core suite may require + corresponding additions to the site files. + \item Deleting tasks or families from the core suite may require + corresponding parts of the site files to be removed. And also, check for + site-specific triggering off of deleted tasks or families. +\end{itemize} + +However, if the owner site has to get some changes into the trunk before all +collaborating sites have time to test them, version control will of course +protect those lagging behind from any immediate ill effects. + +When a new feature is complete and tested at the developer's site, the suite +owner should check out the branch, review and test it, and if necessary request +that other sites do the same and report back. The owner can then merge the +new feature to the trunk once satisfied. + +All planning and discussion associated with the change should be documented on +MOSRS Trac tickets associated with the suite. + +\subsection{Research-To-Operations Transition} + +Under this collaborative development model it is {\em possible} to use the +same suite in research and operations, largely eliminating the difficult +translation between the two environments. Where appropriate, this can save +a lot of work. + +Operations-specific parts of the suite should be factored out (as for site +portability) into include-files that are only loaded in the operational +environment. Improvements and upgrades can be developed on feature branches in +the research environment. Operations staff can check out completed feature +branches for testing in the operational environment before merging to trunk or +refering back to research if problems are found. After sufficient testing the +new suite version can be deployed into operations. + +\note{This obviously glosses over the myriad complexities of the technical + and scientific testing and validation of suite upgrades; it merely describes + what is possible from a suite design and collaborative development +perspective.} diff --git a/doc/src/suite-design-guide/preamble.tex b/doc/src/suite-design-guide/preamble.tex new file mode 100644 index 00000000000..e161b2567f3 --- /dev/null +++ b/doc/src/suite-design-guide/preamble.tex @@ -0,0 +1,87 @@ +% ---- PREAMBLE ---- +% layout +\documentclass{article} +\usepackage[margin=3cm, headheight=1cm]{geometry} + +% Font stuff. +\renewcommand{\familydefault}{\sfdefault} % sanz-serif +\usepackage{parskip} % regular paragraph separation + +% Imports. +\usepackage[usenames]{color} +\usepackage{graphicx} +\usepackage{listings} + \usepackage{courier} +\usepackage{hyperref} +\usepackage{textcomp} + +% Hyperlinks. +\definecolor{links}{rgb}{0.1,0.1,0.6} +\hypersetup{colorlinks=true, linkcolor=links, urlcolor=links} +\urlstyle{same} + +% Headers / Footers. +\usepackage{fancyhdr} +\lhead{Rose+Cylc Suite Design Best Practice Guide} % TODO: hardcoded !!! +\rhead{ + \includegraphics[width=0.15\textwidth]{resources/png/rose-logo} + \includegraphics[width=0.15\textwidth]{resources/tex/cylc-logo}} +\pagestyle{fancy} + +% Code listings: default style. +\definecolor{keywords}{rgb}{0.8,0.4,0.0} +\definecolor{comments}{rgb}{0.8,0.7,0.3} +\definecolor{identifiers}{rgb}{0.3,0.4,0.5} +\definecolor{strings}{rgb}{0.2,0.5,0.3} +\definecolor{basic}{rgb}{0.2,0.3,0.4} +\definecolor{command}{rgb}{0.0,0.2,0.1} +\definecolor{transcr}{rgb}{0.0,0.2,0.4} +\newcommand\mysmall{\fontsize{8}{9.2}\selectfont} + +% bold for courier font: +\renewcommand{\ttdefault}{pcr} + +\lstset{ +basicstyle=\color{basic}\mysmall\ttfamily\bfseries, +identifierstyle=\color{identifiers}, +keywordstyle=\color{keywords}, +commentstyle=\color{comments}, +stringstyle=\color{strings}, +showstringspaces=false, +upquote=true, +} + +% Code listings: suite.rc language support. +\definecolor{level1}{rgb}{0.0,0.2,0.6} +\definecolor{level2}{rgb}{0.0,0.3,0.7} +\definecolor{level3}{rgb}{0.0,0.4,0.8} +\definecolor{jinja2}{rgb}{0.1,0.7,0.4} +\lstdefinelanguage{suiterc} +{ +string=[b]{"}, +sensitive=true, +comment=[l]{\#}, +morecomment=[s][\color{level1}]{[}{]}, +morecomment=[s][\color{level2}]{[[}{]]}, +morecomment=[s][\color{level3}]{[[[}{]]]}, +morecomment=[s][\color{jinja2}]{\{\%}{\%\}}, +morecomment=[s][\color{jinja2}]{\{\{}{\}\}}, +morecomment=[s][\color{jinja2}]{\{\#}{\#\}}, +} + +\definecolor{note}{rgb}{0.6,0.6,0.6} +\newcommand{\note}[1]{{\color{note}\textbf{Note:} \textit{#1}}} + +\definecolor{terminology}{rgb}{0.7,0.5,0.2} +\newcommand{\terminology}[1]{{\color{terminology} \textit{#1}}} + +\definecolor{todo}{rgb}{1.0,1.0,0.0} +\newcommand{\TODO}[1]{{\colorbox{todo}{\textbf{TODO:} \textit{#1}}}} + +\usepackage{framed} +\definecolor{shadecolor}{rgb}{0.95,0.95,0.95} + +%\usepackage{draftwatermark} +%\SetWatermarkText{Draft 15/03/17} +%\SetWatermarkScale{5} +%\SetWatermarkColor[rgb]{0.95,0.90,0.90} diff --git a/doc/src/suite-design-guide/resources/png/failure-recovery.png b/doc/src/suite-design-guide/resources/png/failure-recovery.png new file mode 100644 index 0000000000000000000000000000000000000000..625a11bd3c47c325357f5d03fb205214ee25a9dc GIT binary patch literal 10003 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 literal 0 HcmV?d00001 diff --git a/doc/src/suite-design-guide/resources/png/fam-to-fam-1.png b/doc/src/suite-design-guide/resources/png/fam-to-fam-1.png new file mode 100644 index 0000000000000000000000000000000000000000..e263198d12aa5409da2e55520d2f46c78d40b138 GIT binary patch literal 54466 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

BE%Qr55Z2({C9km*+l_Q~FiP;!S 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%0Dm&Wbap1bsxDZ{2x`q|P-HqNTe7q$6w8bA# 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 TFGnjP@TH}uuUesO9sd6SH!F`3 literal 0 HcmV?d00001 diff --git a/doc/src/suite-design-guide/resources/png/param-1.png b/doc/src/suite-design-guide/resources/png/param-1.png new file mode 100644 index 0000000000000000000000000000000000000000..6f839b0bd282203a54f05e26c49aa0c49d6be4fe GIT binary patch literal 74693 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

l$AXZ!3iXqcF}Q#4@ff=VsKFxscE|V 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%0Dkb!)HO;P7=a{0ZMDK;C_QFlay;=X<1(yb8D4; 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 TnVMlxDRJS9qTD-K{rmq1lM*}7 literal 0 HcmV?d00001 diff --git a/doc/src/suite-design-guide/resources/png/param-2.png b/doc/src/suite-design-guide/resources/png/param-2.png new file mode 100644 index 0000000000000000000000000000000000000000..5c5245176f4297fce2872cffa7868124a64f027f GIT binary patch literal 129846 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

Ox3ha36=OTnsb-WJ( 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 literal 0 HcmV?d00001 diff --git a/doc/src/suite-design-guide/resources/png/rose-logo.png b/doc/src/suite-design-guide/resources/png/rose-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5007efebe9c1c4a09ad86af41eb8df4648cc4e38 GIT binary patch literal 19084 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 literal 0 HcmV?d00001 diff --git a/doc/src/suite-design-guide/roadmap.tex b/doc/src/suite-design-guide/roadmap.tex new file mode 100644 index 00000000000..60fc1c7a703 --- /dev/null +++ b/doc/src/suite-design-guide/roadmap.tex @@ -0,0 +1,75 @@ +\section{Roadmap} + +Several planned future developments in Rose and Cylc may have an impact on +suite design. + +\subsection{List Item Override In Site Include-Files} +\label{List Item Override In Site Include-Files} + +A few Cylc config items hold lists of task (or family) names, e.g.: + +\lstset{language=suiterc} +\begin{lstlisting} +[scheduling] + [[special tasks]] + clock-triggered = get-data-a, get-data-b + #... +#... +\end{lstlisting} + +Currently a repeated config item completely overrides a previously set value +(apart from graph strings which are always additive). This means a site +include-file (for example) can't add a new site-specific clock-triggered task +without writing out the complete list of all clock-triggered tasks in the +suite, which breaks the otherwise clean separation into core and site files. + +{\em In the future we plan to support add, subtract, unset, and override +semantics for all items - see \url{https://github.com/cylc/cylc/issues/1363}}. + +\subsection{UM STASH in Optional App Configs} +\label{UM STASH in Optional App Configs} + +A caveat to the advice on use of option app configs in Section~\ref{Optional +App Config Files}: in general you might need the ability to turn off or modify +some STASH requests in the main app, not just add additional site-specific +STASH. But overriding STASH in optional configs is fragile because STASH +namelists names are automatically generated from a {\em hash} of the precise +content of the namelist. This makes it possible to uniquely identify the same +STASH requests in different apps, but if any detail of a STASH request changes +in a main app its namelist name will change and any optional configs that refer +to it will become divorced from their intended target. + +Until this problem is solved we recommend that: + +\begin{itemize} + \item All STASH in main UM apps should be grouped into sensible {\em + packages} that can be turned on and off in optional configs without + referencing the individual STASH request namelists. + \item Or all STASH should be held in optional site configs and none in the + main app. Note however that STASH is difficult to configure outside of + \lstinline=rose edit=, and the editor does not yet allow you to edit + optional configs - see \url{https://github.com/metomi/rose/issues/1685}. +\end{itemize} + +\subsection{Modular Suite Design} + +The modular suite design concept is that we should be able to import common +workflow segments at install time rather than duplicating them in each suite: +\url{https://github.com/cylc/cylc/issues/1829}. The content of a suite module +will be encapsulated in a protected namespace to avoid clashing with the +importing suite, and selected inputs and outputs exposed via a proper +interface. + +This should aid portable suite design too by enabling site-specific parts of a +workflow (local product generation for example) to be stored and imported +on-site rather than polluting the source and revision control record of +the core suite that everyone sees. + +We note that this can already be done to a limited extent by using +\lstinline=rose suite-run= to install suite.rc fragments from an external +location. However, as a literal inlining mechanism with no encapsulation or +interface, the internals of the ``imported'' fragments would have to be +compatible with the suite definition in every respect. + +See also~\ref{Monolithic Or Interdependent Suites} on modular {\em systems of +suites} connected by inter-suite triggering. diff --git a/doc/src/suite-design-guide/style-guide.tex b/doc/src/suite-design-guide/style-guide.tex new file mode 100644 index 00000000000..a93a34030ab --- /dev/null +++ b/doc/src/suite-design-guide/style-guide.tex @@ -0,0 +1,264 @@ +\section{Style Guidelines} + +Coding style is largely subjective, but for collaborative development of +complex systems it is important to settle on a clear and consistent style to +avoid getting into a mess. The following style rules are recommended. + +\subsection{Tab Characters} + +Do not use tab characters. Tab width depends on editor settings, so a mixture +of tabs and spaces in the same file can render to a mess. + +Use \lstinline=grep -InPr "\t" *= to find tabs recursively in files in +a directory. + +In {\em vim} use \lstinline=%retab= to convert existing tabs to spaces, +and set \lstinline=expandtab= to automatically convert new tabs. + +In {\em emacs} use {\em whitespace-cleanup}. + +In {\em gedit}, use the {\em Draw Spaces} plugin to display tabs and spaces. + +\subsection{Trailing Whitespace} + +Trailing whitespace is untidy, it makes quick reformatting of paragraphs +difficult, and it can result in hard-to-find bugs (space after intended +line continuation markers). + +To remove existing trailing whitespace in a file use a \lstinline=sed= or +\lstinline=perl= one-liner: + +\lstset{language=sh} +\begin{lstlisting} +$ perl -pi -e "s/ +$//g" /path/to/file +# or: +$ sed --in-place 's/[[:space:]]\+$//' path/to/file +\end{lstlisting} + +Or do a similar search-and-replace operation in your editor. Editors like {\em +vim} and {\em emacs} can also be configured to highlight or automatically +remove trailing whitespace on the fly. + +\subsection{Indentation} + +Consistent indentation makes a suite definition more readable, it shows section +nesting clearly, and it makes block re-indentation operations easier in text +editors. Indent suite.rc syntax four spaces per nesting level: + +\subsubsection{Config Items} + +\lstset{language=suiterc} +\begin{lstlisting} +[SECTION] + # A comment. + title = the quick brown fox + [[SUBSECTION]] + # Another comment. + a short item = value1 + a very very long item = value2 +\end{lstlisting} + +Don't align \lstinline@item = value@ pairs on the \lstinline@=@ character +like this: + +\lstset{language=suiterc} +\begin{lstlisting} +[SECTION] # Avoid this. + a short item = value1 + a very very long item = value2 +\end{lstlisting} + +or like this: + +\lstset{language=suiterc} +\begin{lstlisting} +[SECTION] # Avoid this. + a short item = value1 + a very very long item = value2 +\end{lstlisting} + +because the whole block may need re-indenting after a single change, which will +pollute your revision history with spurious changes. + +Comments should be indented to the same level as the section or item they refer +to, and trailing comments should be preceded by two spaces, as shown above. + +\subsubsection{Script String Lines} + +Script strings are written verbatim to task job scripts and interpreted by the +job shell. They are subject to shell, not suite.rc, syntax rules and do not +have to be indented: + +\lstset{language=suiterc} +\begin{lstlisting} +[runtime] + [[foo]] + post-script = """ +if [[ $RESULT == "bad" ]]; then + echo Goodbye World! + exit 1 +fi""" +\end{lstlisting} + +Indentation is ignored by the shell, however, so script lines can be indented +as if part of the suite.rc syntax, or even out to the triple quotes, if you +feel it aids readability (but watch line length with large indents; +see~\ref{Line Length}): + +\lstset{language=suiterc} +\begin{lstlisting} +[runtime] + [[foo]] + post-script = """ + if [[ $RESULT == "bad" ]]; then + echo Goodbye World! + exit 1 + fi""" +\end{lstlisting} + +Both styles are acceptable; choose one and use it consistently. + +\subsubsection{Graph String Lines} + +Multiline \lstinline@graph@ strings can be entirely free-form: + +\lstset{language=suiterc} +\begin{lstlisting} +[scheduling] + [[dependencies]] + graph = """ + # Main workflow: + FAMILY:succeed-all => bar & baz => qux + + # Housekeeping: + qux => rose_arch => rose_prune""" +\end{lstlisting} + +Whitespace is ignored in graph string parsing, however, so internal graph lines +can be indented as if part of the suite.rc syntax, or even out to the triple +quotes, if you feel it aids readability (but watch line length with large +indents; see~\ref{Line Length}): + +\lstset{language=suiterc} +\begin{lstlisting} +[scheduling] + [[dependencies]] + graph = """ + # Main workflow: + FAMILY:succeed-all => bar & baz => qux + + # Housekeeping: + qux => rose_arch => rose_prune""" +\end{lstlisting} + +Both styles are acceptable; choose one and use it consistently. + +\subsubsection{Jinja2 Code} + +A suite.rc file with embedded Jinja2 code is essentially a Jinja2 program to +generate a Cylc suite definition. It is not possible to consistently indent the +Jinja2 as if it were part of the suite.rc syntax (which to the Jinja2 processor +is just arbitrary text), so it should be indented from the left margin on +its own terms: + +\lstset{language=suiterc} +\begin{lstlisting} +[runtime] + [[OPS]] +{% for T in OPS_TASKS %} + {% for M in range(M_MAX) %} + [[ops_{{T}}_{{M}}]] + inherit = OPS + {% endfor %} +{% endfor %} +\end{lstlisting} + +\subsection{Comments} + +Comments should be minimal, but not too minimal. If context and clear +task and variable names will do, leave it at that. Extremely verbose comments +tend to get out of sync with the code they describe, which can be worse +than having no comments. + +Avoid long lists of numbered comments - future changes may require mass +renumbering. + +Avoid page-width ``section divider'' comments, especially if they are not +strictly limited to the standard line length (see~\ref{Line Length}). + +Indent comments to the same level as the config items they describe. + +\subsection{Titles, Descriptions, And URLs} + +Document the suite and its tasks with \lstinline=title=, +\lstinline=description=, and \lstinline=url= items instead of comments. These +can be displayed, or linked to, by the GUI at runtime. + +\subsection{Line Length And Continuation} +\label{Line Length} + +Keep to the standard maximum line length of 79 characters where possible. Very +long lines affect readability and make side-by-side diffs hard to view. + +Backslash line continuation markers can be used anywhere in the suite.rc file +but should be avoided if possible because they are easily broken by invisible +trailing whitespace. + +Continuation markers are not needed in graph strings where trailing +trigger arrows imply line continuation: + +\lstset{language=suiterc} +\begin{lstlisting} +[scheduling] + [[dependencies]] + # No line continuation marker is needed here. + graph = """prep => one => two => three => + four => five six => seven => eight""" +[runtime] + [[MY_TASKS]] + # A line continuation marker *is* needed here: + [[one, two, three, four, five, six, seven, eight, nine, ten, \ + eleven, twelve, thirteen ]] + inherit = MY_TASKS +\end{lstlisting} + +\subsection{Task Naming Conventions} + +Use \lstinline=UPPERCASE= for family names and \lstinline=lowercase= +for tasks, so you can distinguish them at a glance. + +Choose a convention for multi-component names and use it consistently. Put the +most general name components first for natural grouping in the GUI, e.g.\ +\lstinline=obs_sonde=, \lstinline=obs_radar= (not \lstinline=sonde_obs= etc.) + +Within your convention keep names as short as possible. + +\subsubsection{UM System Task Names} + +For UM System suites we recommend the following full task naming convention: + +\lstset{language=suiterc} +\begin{lstlisting} +model_system_function[_member] +\end{lstlisting} + +For example, \lstinline=glu_ops_process_scatwind= where \lstinline=glu= refers +to the global (deterministic model) update run, \lstinline=ops= is the system +that owns the task, and \lstinline=process_scatwind= is the function it +performs. The optional \lstinline=member= suffix is intended for use with +ensembles as needed. + +Within this convention keep names as short as possible, e.g.\ use +\lstinline=fcst= instead of \lstinline=forecast=. + +UM forecast apps should be given names that reflect their general science +configuration rather than geographic domain, to allow use on other model +domains without causing confusion. + +\subsection{Rose Config Files} + +Use \lstinline=rose config-dump= to load and re-save new Rose .conf files. This +puts the files in a standard format (ordering of lines etc.) to ensure that +spurious changes aren't generated when you next use \lstinline=rose edit=. + +See also~\ref{Optional App Config Files} on optional app config files. diff --git a/doc/src/suite-design-guide/title-page.tex b/doc/src/suite-design-guide/title-page.tex new file mode 100644 index 00000000000..70921b68899 --- /dev/null +++ b/doc/src/suite-design-guide/title-page.tex @@ -0,0 +1,16 @@ +\thispagestyle{empty} + +\begin{titlepage} + \begin{center} + \includegraphics[width=0.3\textwidth]{resources/png/rose-logo} + \includegraphics[width=0.3\textwidth]{resources/tex/cylc-logo} + + \Huge{Cylc Rose Suite Design\\Best Practice Guide} + + \small{Version 1.0 - 23 March 2017} + + \small{Last updated for: Cylc-7.2.0 and Rose-2017.02.0} + + \large{Hilary Oliver, Dave Matthews, Andy Clark, and Contributors} + \end{center} +\end{titlepage} diff --git a/lib/cylc/cfgspec/globalcfg.py b/lib/cylc/cfgspec/globalcfg.py index a83f82081b6..c55a8377a9e 100644 --- a/lib/cylc/cfgspec/globalcfg.py +++ b/lib/cylc/cfgspec/globalcfg.py @@ -95,19 +95,19 @@ 'documentation': { 'files': { 'html index': vdr( - vtype='string', default="$CYLC_DIR/doc/index.html"), + vtype='string', default="$CYLC_DIR/doc/install/index.html"), 'pdf user guide': vdr( - vtype='string', default="$CYLC_DIR/doc/pdf/cug-pdf.pdf"), + vtype='string', default="$CYLC_DIR/doc/install/cylc-user-guide.pdf"), 'multi-page html user guide': vdr( vtype='string', - default="$CYLC_DIR/doc/html/multi/cug-html.html"), + default="$CYLC_DIR/doc/install/html/multi/cug-html.html"), 'single-page html user guide': vdr( vtype='string', - default="$CYLC_DIR/doc/html/single/cug-html.html"), + default="$CYLC_DIR/doc/install/html/single/cug-html.html"), }, 'urls': { 'internet homepage': vdr( - vtype='string', default="http://cylc.github.com/cylc/"), + vtype='string', default="http://cylc.github.io/cylc/"), 'local index': vdr(vtype='string', default=None), }, }, From aa9d7df04410f825a82fbb461a484ab36db814fe Mon Sep 17 00:00:00 2001 From: Hilary James Oliver Date: Wed, 22 Mar 2017 03:22:52 +0000 Subject: [PATCH 2/5] Removed obsolete CUG suite design section. --- doc/src/cylc-user-guide/cug.tex | 552 -------------------------------- 1 file changed, 552 deletions(-) diff --git a/doc/src/cylc-user-guide/cug.tex b/doc/src/cylc-user-guide/cug.tex index b5682cee3cc..91a2c9103d5 100644 --- a/doc/src/cylc-user-guide/cug.tex +++ b/doc/src/cylc-user-guide/cug.tex @@ -6979,558 +6979,6 @@ \subsection{Rose} \item Rose source repository: \url{https://github.com/metomi/rose} \end{myitemize} - -\section{Suite Design Principles} -\label{SuiteDesignPrinciples} - -%Simplicity, flexibility, efficiency, and portability of cylc suites. - -\subsection{Make Fine-Grained Suites} -\label{Granularity} - -A suite can contain a small number of large, internally complex tasks; a -large number of small, simple tasks; or anything in between. Cylc can -easily handle a large number of tasks, however, so there are definite -advantages to fine-graining: - -\begin{myitemize} - \item A more modular and transparent suite. - - \item More functional parallelism (multiple tasks running - at once). - - \item Faster debugging and failure recovery: rerun just the tasks(s) - that failed. - - \item More code reuse: similar tasks may be able to call the same - underlying script or command with differing input parameters. - -\end{myitemize} - -\subsection{Make Tasks Re-runnable} - -It should be possible to rerun a task by simply resubmitting it for the -same cycle point. In other words, failure at any point during execution -of a task should not render a rerun impossible by corrupting the state -of some internal-use file, or whatever. It is difficult to overstate the -usefulness of being able to rerun the same task multiple times, -either outside of the suite with \lstinline=cylc submit=, or by -re-triggering it within the running suite, when debugging a problem. - -\subsection{Make Models Re-runnable} - -If a warm-cycled model uses the exact same file names for its restart files -regardless of current cycle point, the only cycle point that can subsequently -run successfully is the next one. Instead, restart files should be labelled -with current cycle point and maintained in a simple rolling archive. Then you -can easily rerun the task for any cycle point still in the archive. - -\subsection{Avoid False Dependence} -\label{LimitPID} - -If a task does not depend on files generated by another task then generally -speaking it should not trigger off that task in the suite scheduling graph. -Unnecessary dependence between tasks restricts functional parallelism at run -time, and it makes the suite more difficult to understand. If you need to -restrict the number of tasks that are active at once, use runahead limiting -(\ref{RunaheadLimit}) and internal queues (\ref{InternalQueues}). - - -\subsection{Put Task Cycle Point In Output File Paths} -\label{PutCycleTimeinIO} - -Putting task cycle point in output file or directory names makes archiving and -cleanup easier, and it facilitates re-runnability by ensuring that important -files do not get overwritten from one cycle to the next. - -The \lstinline=cylc cycle-point= command computes offsets from a given or -current cycle point, and can insert the resulting computed date-time into -a filename template string. - -\subsection{Managing Input/Output File Dependencies} -\label{HandlingDependencies} - -Dependence between tasks usually, although not always, take the form of -files generated by one task and used by others. It is possible to manage these -files across a suite without compromising suite flexibility and portability with -hard wired I/O locations. - -\subsubsection{Common I/O Workspaces} - -You may be able to have all tasks, or groups of tasks that need to cooperate, -read and write from a common workspace, thereby avoiding the need to explicitly -move files around. The suite share directory -(\lstinline=$CYLC_SUITE_SHARE_DIR=) is provided for this purpose. -Similarly, task work directories are private to each task by default but they -can be shared to allow multiple tasks to simply read and write from their -current working directory. Even if you use other custom I/O directories, define -their locations in the suite.rc file rather than hard wiring them into task -implementation. Shared workspace locations can be passed to tasks as needed -without modifying the task implementation, like this: - -\lstset{language=suiterc} -\begin{lstlisting} -[runtime] - [[SHARE]] - [[[environment]]] - WORKDIR = $CYLC_SUITE_SHARE_DIR/workspace1 - [[foo]] - inherit = SHARE - script = generate-data.exe - [[[environment]]] - MY_OUTPUT_DIR = $WORKDIR - [[bar]] - inherit = SHARE - script = use-data.exe - [[[environment]]] - MY_INPUT_DIR = $WORKDIR -\end{lstlisting} - -\subsubsection{Connector Tasks} - -Special tasks can be used to move files around, from one task's output -directory to another's input directory. This should only be necessary across -host or filesystem boundaries, however; otherwise simply reference shared -locations as shown above. - -\subsection{Reuse Task Implementation} - -If your suite contains multiple logically distinct tasks that have similar -functionality (e.g.\ tasks that move files around or generate similar products -from different datasets) just have them all call the same underlying command, -script, or executable, but provide different input parameters as required. - - -\subsection{Make Suites Portable} - -If all I/O is automatically done in suite-specific locations, such as the under -suite share and work directories (\lstinline=$CYLC_SUITE_SHARE_DIRECTORY= -and \lstinline=$CYLC_TASK_WORK_DIRECTORY=), you should be able to run multiple -copies of the same suite without interference between them, and other users -should be able to copy and run your suites with minimal modification. - -\subsection{Make Tasks As Independent As Possible} - -Where possible a task should not rely on the action of another task, except for -the inputs embodied in the suite dependency graph that it has no choice but to -depend on. This makes it as easy as possible to run single tasks alone during -suite development and debugging. For example, tasks should create their own -output directories if necessary rather than assuming their existence due to the -action of another task. Note that if the existing task implementation does not -handle output directory creation you can do it in suite -\lstinline=pre-script= or similar. - -\subsection{Make Suites As Self-Contained As Possible} - -Tasks can (of course) run external commands, scripts, and executables; and they -can read or otherwise make use of external files. In some cases this may be -necessary, but it does leave suites vulnerable to external breakages. -Alternatively, suites can be more or less completely self-contained (aside from -exposure to network, filesystem, and OS problems) if they have private copies -of every file they need at run time. Tasks can access files stored under their -suite definition directory via \lstinline=$CYLC_SUITE_DEF_PATH=, and the suite -bin directory is automatically added to \lstinline=$PATH= in the task execution -environment. If you have multiple suites there may be a tradeoff between -self-containment and duplication of files, but this does not particularly -matter if you can automatically extract, build, and install suite files from -external repositories prior to, or at the start of, a suite run. - -\subsubsection{Distinguish Between Source and Installed Suites} - -A suite definition and any files stored with it should be version controlled, -and a particular revision extracted before a run. The extracted source suite -will be a repository clone or working copy, depending on your choice of -revision control software, and can be used for further development. The source -files should then be {\em installed} to another location where the suite will -actually be executed (the cylc suite run directory is ideal for this). -External files may also be installed into the suite at this time, prior to the -run, or by special deployment tasks that run at suite start-up. This makes -self-containment easier to achieve, and the clean separation of source and -installed suite allows further development without breaking a running suite. -Rose (\ref{Rose}) supports this mode of working with cylc suites. - - -\subsection{Orderly Product Generation?} -\label{OrderlyProductGeneration} - -Correct scheduling is not necessarily equivalent to orderly generation of -products in strict date-time order. Under cylc a product generation task will -trigger as soon as its private prerequisites are satisfied regardless of -whether other tasks at the same cycle point have finished or have yet to run. -If your product presentation system demands that all products are uploaded in -order, then be aware that this may be quite inefficient if your suite ever has -to catch up from a delay or run over historical data, but if necessary you can -force tasks to run in the right order even if their true dependencies do not -require that. One way to do this is to declare the product upload task to be -{\em sequential}, which is equivalent to making it depend on its own previous -instance (see~\ref{SequentialTasks}). - -\subsection{Use Of Clock-Trigger Tasks} - -Tasks that wait on external real time data should have a clock-trigger to delay -submission until roughly the expected time of data availability -(see~\ref{ClockTriggerTasks}), otherwise they could clutter up your batch -scheduler queue by submitting hours earlier. Similarly, suite polling tasks -(for inter-suite dependence in real time operation) should use a clock-trigger -to delay their submission until the expected time of the remote suite event. - -\subsection{Tasks That Wait On Something} - -Some tasks wait on external events and therefore need to repeatedly check and -wait for the event before reporting eventual success (or perhaps failure after -a timeout). For example, a task that waits for a file to appear on an ftp -server. Typically these should be clock-trigger tasks (see above), but once -triggered there are two ways to handle the repeated checking: the task itself -could implement a check-and-wait loop; or you could just configure multiple -retries for the task (see~\ref{TaskRetries}). - -\subsection{Do Not Treat Real Time Operation As Special} - -Cylc suites, without modification, can handle real time and delayed operation -equally well. In caught-up real time operation, clock-trigger tasks -constrain the behaviour of the whole suite, or at least of any tasks -downstream of them in the dependency graph. In delayed or historical operation -clock-trigger tasks will not constrain the suite at all, and cylc's cycle -point interleaving abilities come to the fore, because the clock-trigger times -have already passed. But if a clock-trigger task catches up to the wall -clock, it will automatically wait again. In this way cylc suites naturally -transition between delayed and real time operation as required. - -\subsection{Factor Out Common Configuration} - -To help avoid suite maintenance errors in the future, properties shared by -multiple tasks (job submission settings, environment variables, scripting, -etc.) should be defined only once, using runtime inheritance -(\ref{NIORP}) or Jinja2 variables (\ref{Jinja2}). - -Multiple inheritance is efficient when tasks share many properties, but Jinja2 -variables may be preferred when a small number of properties are shared by -tasks that don't have anything else in common (e.g.\ a single environment -variable for the location of a shared file). - -For environment variables in particular it may be tempting to define all -variables for all tasks once under \lstinline=[root]=, but this is analagous to -overuse of global variables in programming and it can make it difficult to -determine which variables matter to which tasks. Environment filters -(\ref{EnvironmentFilter}) can be used to make this safer, but generally -it is best to provide each task with only the variables that it needs. It is -difficult to be sure if a task really needs a variable that is passed to it, -but you can be sure that it does not use a variable that is not passed to it. - -Finally, Jinja2 can also be used to avoid polluting task environments with -variables used for the sole purpose of deriving other variables at task -run time. Instead of this: -\lstset{language=suiterc} -\begin{lstlisting} -[runtime] - [[root]] - [[[environment]]] - OUTPUT_DIR=/my/top/outputdir - [[foo]] - [[[environment]]] - FOO_OUTPUT_DIR=$OUTPUT_DIR/foo - BAR_OUTPUT_DIR=$OUTPUT_DIR/bar -\end{lstlisting} - do this: -\lstset{language=suiterc} -\begin{lstlisting} -{% set OUTPUT_DIR = "/my/top/outputdir" %} -[runtime] - [[foo]] - [[[environment]]] - FOO_OUTPUT_DIR={{ OUTPUT_DIR }}/foo - BAR_OUTPUT_DIR={{ OUTPUT_DIR }}/bar -\end{lstlisting} - -If the values of these Jinja2 variables are needed in external -scripts, just translate them directly in environment sections: -\lstset{language=suiterc} -\begin{lstlisting} - [[[environment]]] - OUTPUT_DIR = {{ OUTPUT_DIR }} -\end{lstlisting} - - -\subsection{Use The Graph For Scheduling} - -If you find yourself writing runtime scripting to change a task's behaviour -in some cycle points, consider that the graph is usually the proper place to -express this sort of thing. Use different task names, but have them inherit -common properties to avoid duplication. Instead of this: -\lstset{language=suiterc} -\begin{lstlisting} -[scheduling] - [[dependencies]] - [[[T00,T06,T12,T18]]] - graph = "foo => shout => baz" -[runtime] - [[shout]] - script = """ -if [[ $( cylc cycle-point --print-hour ) == 06 || \ - $( cylc cycle-point --print-hour ) == 18 ]]; then - SENTENCE="the quick brown fox" -else - SENTENCE="the lazy dog" -fi -echo $SENTENCE""" - # (...other config...) -\end{lstlisting} - do this: -\lstset{language=suiterc} -\begin{lstlisting} -[scheduling] - [[dependencies]] - [[[T00,T12]]] - graph = "foo => shout_dog => baz" - [[[T06,T18]]] - graph = "foo => shout_fox => baz" -[runtime] - [[SHOUT]] - # (... other config...) - script = "echo $SENTENCE" - [[shout_fox]] - inherit = SHOUT - [[[environment]]] - SENTENCE = "the quick brown fox" - [[shout_dog]] - inherit = SHOUT - [[[environment]]] - SENTENCE = "the lazy dog" -\end{lstlisting} - -Similarly, if your task has a different behaviour at the initial or final -cycle point, consider using an \lstinline=R1= syntax to separate out the -functionality. - -\subsection{Use Suite Visualization} - -Effective visualization can make complex suites easier to understand. -Collapsible task families for visualization are defined by the {\em first -parents} in the runtime namespace hierarchy. Tasks should generally be grouped -into visualization families that reflect their purpose within the structure of -the suite rather than technical detail such as common batch system or -task host. This often coincides nicely with common configuration inheritance -requirements, but if it doesn't you can use an empty namespace as a first -parent for visualization: -\lstset{language=suiterc} -\begin{lstlisting} -[runtime] - [[OBSPROC]] - [[obs1, obs2, obs3]] - inherit = OBSPROC -\end{lstlisting} - and you can demote parents from primary to secondary: -\lstset{language=suiterc} -\begin{lstlisting} -[runtime] - [[HOSTX]] - # common settings for tasks on host HOSTX - [[foo]] - inherit = None, HOSTX -\end{lstlisting} - -\section{Style Guide} - -Good style is to some extent a matter of taste. That said, for collaborative -development of complex systems it is important to settle on a clear and -consistent style, and you may find the following suggestions useful. Note that -the boundary between this section (style) and the previous (design) is somewhat -arbitrary. - -\subsection{Indentation} - -The suite.rc file format consists of \lstinline@item = value@ pairs -under nested section headings. Clear indentation is the best way to show -local nesting level inside large blocks. - -\begin{myitemize} - \item Indent suite.rc syntax four spaces per nesting level. - -\lstset{language=suiterc} -\begin{lstlisting} -[SECTION] - title = the quick brown fox - [[SUBSECTION]] - a short item = value1 - a very very long item = value2 -\end{lstlisting} -Don't align \lstinline@item = value@ pairs on the \lstinline@=@ character - -this does not show nesting level clearly and it pushes everything off to -the right: -\lstset{language=suiterc} -\begin{lstlisting} -[SECTION] - a short item = value1 - a very very long item = value2 -\end{lstlisting} - -The following layout does preserve proper indentation on the left, -but the whole block may need reformatting after changing one line, which -pollutes your revision history with spurious changes: -\lstset{language=suiterc} -\begin{lstlisting} -[SECTION] - a short item = value1 - a very very long item = value2 -\end{lstlisting} - - \item Set your text editor to convert {\em TAB characters} to spaces - - tabs may be displayed differently in different editors, so a - mixture of space and tab indentations can render to a mess. - - \item {\em Line comments} should be indented to the same level as the - section or item they refer to. Consistent local indentation makes - block re-indentation operations easier in text editors. - - \item {\em script strings} are interpreted by the - associated task job script, not by cylc, so strictly speaking - their internal lines should not be indented as if part of the - suite.rc syntax. This, for example: -\lstset{language=suiterc} -\begin{lstlisting} -[runtime] - [[foo]] - script = \ -"""echo Hello World! -echo Goodbye World!""" -\end{lstlisting} -is preferred over this (or similar): -\lstset{language=suiterc} -\begin{lstlisting} -[runtime] - [[foo]] - script =""" - echo Hello World! - echo Goodbye World! - """ -\end{lstlisting} - The extra whitespace here translates directly to spurious - indentation in the task job script. As it happens this is just - an aesthetic problem in bash scripts, but for Python job scripts - (which cylc may support in the future) it would be a technical error. - - \item The positioning of string-delimiting triple quotes is of no - practical consequence either, but the following forms are - suggested for the same reason - to avoid including spurious - whitespace in the string: -\begin{lstlisting} -[runtime] - [[foo]] - # best: - script = \ -"""echo Hello World! -echo Goodbye World!""" - # or (short first line): - script ="""echo Hello World! -echo Goodbye World!""" - # or (adds a single extra newline character): - script =""" -echo Hello World! -echo Goodbye World!""" -\end{lstlisting} - - \item Multiline dependency \lstinline@graph@ strings have no meaning - outside of the suite definition, so they can be free-form in - order to most clearly present the structure of the suite: -\lstset{language=suiterc} -\begin{lstlisting} -[scheduling] - [[dependencies]] - graph = """ - foo => bar => baz => qux - # failure recovery: - qux:fail => recover - """ -\end{lstlisting} - - \item Embedded {\em Jinja2} code is not part of the suite.rc syntax, so - it should be indented from the left margin on its own terms. -\lstset{language=suiterc} -\begin{lstlisting} - [[OPS]] -{% for T in OPS_TASKS %} - [[ops_{{T}}]] - inherit = OPS - # ... -{% endfor %} -\end{lstlisting} - \end{myitemize} - -\subsection{Comments} - -Comments should be {\em minimal}, but not too minimal. If context and clear -item names will do, leave it at that. Extremely verbose comments tend to be -neglected and eventually get out of sync with the code, a result that may be -worse than having no comments at all. - - \begin{myitemize} - \item {\em Indent line comments} to section or item level, as - described above. - - \item Avoid {\em numbered comments} - future changes can create a - renumbering nightmare. - - \item Avoid {\em full page width ``section divider'' comments} - - these assume a particular line width, which can be a problem - for text editors that auto line break on a smaller line width. - - \item Use the \lstinline=title= and \lstinline=description= items - instead of comments to describe tasks and families under - \lstinline=[runtime]= - these get displayed by mouse hover in - gcylc. - - \end{myitemize} - -\subsection{Line Length} - -Keep to the standard maximum line length of 79 characters where possible. Very -long lines affect readability, may pose a problem for auto-line-breaking in -text editors, and make side-by-side diff display less effective. - -\begin{myitemize} - \item Line continuation markers can be used anywhere to break up long - lines: -\lstset{language=suiterc} -\begin{lstlisting} -[scheduling] - [[dependencies]] - graph = "prep => one => two => three \ - => four => five six => seven => eight" -[runtime] - [[MY_TASKS]] - [[one, two, three, four, five, \ - six, seven, eight ]] - inherit = MY_TASKS -\end{lstlisting} -Graph lines can also be split up without line breaks, like this: -\lstset{language=suiterc} -\begin{lstlisting} -[scheduling] - [[dependencies]] - graph = """prep => one => two => three => four - four => five six => seven => eight""" -\end{lstlisting} - -\end{myitemize} - -\subsection{Task Naming Convention} - -Use \lstinline=UPPERCASE_NAMES= for families and \lstinline=lowercase_names= -for tasks, so that you can tell which is which at a glance. - -\begin{myitemize} - \item Put the most general components of task names first, for natural - grouping in the GUI (under alphanumeric sorting) and in listings, e.g.\ - \lstinline=obsproc_sonde=, \lstinline=obsproc_radar=. -\end{myitemize} - -\subsection{Inlined Task Scripting} - -Trivial task scripting may be inlined in the suite definition but anything -more should be written to a script file. This keeps the suite definition tidy, -it allows proper shell-mode text editing, and it allows separate command line -testing of the script during development or debugging. - \pagebreak \appendix From 308c35f6b6f17af9b2f2bc32eb2f1c86917ec8b5 Mon Sep 17 00:00:00 2001 From: Hilary James Oliver Date: Wed, 22 Mar 2017 03:33:35 +0000 Subject: [PATCH 3/5] pep8 fix --- lib/cylc/cfgspec/globalcfg.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/cylc/cfgspec/globalcfg.py b/lib/cylc/cfgspec/globalcfg.py index c55a8377a9e..d765855fdaa 100644 --- a/lib/cylc/cfgspec/globalcfg.py +++ b/lib/cylc/cfgspec/globalcfg.py @@ -97,7 +97,8 @@ 'html index': vdr( vtype='string', default="$CYLC_DIR/doc/install/index.html"), 'pdf user guide': vdr( - vtype='string', default="$CYLC_DIR/doc/install/cylc-user-guide.pdf"), + vtype='string', + default="$CYLC_DIR/doc/install/cylc-user-guide.pdf"), 'multi-page html user guide': vdr( vtype='string', default="$CYLC_DIR/doc/install/html/multi/cug-html.html"), From 446d47a120e8bd9fd9c2610e9ee1d9e4519fccf7 Mon Sep 17 00:00:00 2001 From: Hilary James Oliver Date: Thu, 23 Mar 2017 10:50:16 +1300 Subject: [PATCH 4/5] Tidied doc generation more. --- .gitignore | 19 ++++--- INSTALL.md | 53 ++++++++++--------- doc/Makefile | 1 - doc/src/cylc-user-guide/Makefile | 28 ++-------- .../cylc-user-guide/scripts/make-commands.sh | 27 ++++++---- doc/src/cylc-user-guide/scripts/make-html.sh | 22 ++------ doc/src/cylc-user-guide/scripts/make-pdf.sh | 16 ++---- doc/src/index.css | 4 +- doc/src/make-index.sh | 9 ++-- doc/src/suite-design-guide/Makefile | 2 +- 10 files changed, 72 insertions(+), 109 deletions(-) diff --git a/.gitignore b/.gitignore index 13f9bccee76..4c806fc21c3 100644 --- a/.gitignore +++ b/.gitignore @@ -2,21 +2,20 @@ # python bytecode *.pyc -# generated documentation -doc/commands/ -doc/categories/ -doc/cylc.txt -doc/commands.tex -doc/graphics/png-scaled/ -doc/html/ -doc/pdf/ -doc/index.html -doc/cylc-version.txt +# Generated documentation files. +# - User Guide. +doc/src/cylc-user-guide/pdf +doc/src/cylc-user-guide/html +doc/src/cylc-user-guide/commands.tex +doc/src/cylc-user-guide/cylc-version.txt +# - Suite Design Guide. *.aux *.out *.pdf *.log *.toc +# Installed docs. +doc/install/ # VERSION FILE VERSION diff --git a/INSTALL.md b/INSTALL.md index c76ca11dba6..26ca7b8983c 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -3,8 +3,8 @@ **See [The Cylc User Guide](https://cylc.github.io/cylc/documentation.html) for detailed instructions.** -Note: *to run distributed suites cylc must be installed on task hosts as well as suite -hosts.* +Note: *to run distributed suites Cylc must be installed on task hosts as well +as suite hosts.* ### External Software Packages. @@ -12,42 +12,45 @@ Several external packages required on suite hosts are not needed on task hosts: *graphviz*, and *pygraphviz*. These should only need to be installed once, and then updated infrequently. -### Installing Cylc Releases +### Installing Cylc Download the latest release tarball from https://github.com/cylc/cylc/releases. -Cylc releases should be installed in parallel under a top level `cylc` -directory such as `/opt/cylc/` or `/home/admin/cylc/`. - ```bash cd /home/admin/cylc/ -tar xzf ~/Downloads/cylc-6.10.0.tar.gz -cd cylc-6.10.0 +tar xzf ~/Downloads/cylc-7.2.1.tar.gz +# DO NOT CHANGE THE NAME OF THE UNPACKED SOURCE DIRECTORY. +cd cylc-7.2.1 export PATH=$PWD/bin:$PATH make # (see below) ``` -Cylc is accessed via a central wrapper script can select between installed -versions. This allows long-running suites to stick with older cylc versions -if necessary. The wrapper should be modified slightly to point to your -local installation (see comments in-script) and then installed (once) in -`$PATH` for users, e.g.: +Successive Cylc versions should be installed side-by-side under a location such +as `/opt/cylc/` and invoked via a central wrapper that selects between the +available versions. This allows long-running suites (and their task jobs) to +stick with older Cylc versions if necessary. The wrapper should be edited to +point to your Cylc install location made available to users, e.g. if +`/usr/local/bin/` is in `$PATH`: + ```bash cp admin/cylc-wrapper /usr/local/bin/cylc +# (now edit 'cylc' as per in-file instructions...) ``` -When you type `make`: - * A file called VERSION will be created to hold the cylc version string, - e.g. "6.10.0". This is taken from the name of the parent directory: *do not - change the name of the unpacked cylc source directory*. - * The Cylc User Guide will be generated from LaTeX source files (in PDF if - `pdflatex` is installed, and HTML if `tex4ht` and *ImageMagick* are - installed). +When you type `make`: + * A file called VERSION is created from the name of the sourc directory. + * The Cylc documentation is generated from source, in doc/install/. + +### Installing The Documentation + +After running `make` you can copy the entire `doc/install` directory to a +convenient location such as `/var/www/html/`, and update your Cylc site config +file to point to the intranet location. ### Cloning The Cylc Repository -To get the latest bleeding-edge cylc version and participate in cylc -development, fork [cylc on GitHub](https://github.com/cylc/cylc), clone your -fork locally, develop changes locally in a new branch, then push the branch to -your fork and issue a Pull Request to the cylc development team. Please -discuss proposed changes before you begin work, however. +To participate in Cylc development fork [Cylc on +GitHub](https://github.com/cylc/cylc) and clone it locally. Changes should be +developed in feature branches then pushed to your GitHub fork before issuing a +Pull Request to the team. Please discuss proposed changes before you begin +work. diff --git a/doc/Makefile b/doc/Makefile index 9b6801267e6..b6e82045a64 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -50,4 +50,3 @@ clean: installclean: rm -r install - diff --git a/doc/src/cylc-user-guide/Makefile b/doc/src/cylc-user-guide/Makefile index b972cdf6614..77d1f944e5a 100644 --- a/doc/src/cylc-user-guide/Makefile +++ b/doc/src/cylc-user-guide/Makefile @@ -19,6 +19,7 @@ .PHONY: all pdf html html-multi html-single clean DEPS := $(shell ./scripts/get-deps.sh) +CYLC = ../../../bin/cylc all: $(DEPS) @@ -30,24 +31,7 @@ html-multi: html/multi/cug-html.html html-single: html/single/cug-html.html -cylc.txt: ../../../bin/cylc - $< --help > $@ - -cats = $(shell ../../../bin/cylc categories) -catx = $(cats:%=categories/%.txt) - -cmds = $(shell ../../../bin/cylc commands) -cmdx = $(cmds:%=commands/%.txt) - -$(cmdx): commands/%.txt: ../../../bin/cylc-% - if test ! -d commands; then mkdir -p commands/; fi - $(patsubst ../../../bin/cylc-%,../../../bin/cylc %,$<) --help > $@ - -$(catx): categories/%.txt: ../../../bin/cylc - if test ! -d categories; then mkdir -p categories/; fi - ../../../bin/cylc $(subst .txt,,$(subst categories/,,$@)) --help > $@ - -commands.tex: $(cmdx) $(catx) cylc.txt +commands.tex: $(CYLC)-* ./scripts/make-commands.sh html/multi/cug-html.html: commands.tex cug-html.tex cug.tex suiterc.tex siterc.tex gcylcrc.tex cug-html.cfg @@ -60,10 +44,4 @@ pdf/cug-pdf.pdf: commands.tex cug-pdf.tex cug.tex suiterc.tex siterc.tex gcylcrc - ./scripts/make-pdf.sh clean: - rm -r pdf \ - html \ - cylc.txt \ - commands \ - categories \ - commands.tex \ - cylc-version.txt + rm -rf pdf html commands.tex cylc-version.txt diff --git a/doc/src/cylc-user-guide/scripts/make-commands.sh b/doc/src/cylc-user-guide/scripts/make-commands.sh index 161699a6e3e..43776375403 100755 --- a/doc/src/cylc-user-guide/scripts/make-commands.sh +++ b/doc/src/cylc-user-guide/scripts/make-commands.sh @@ -16,19 +16,27 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -CYLC=../../bin/cylc +# Create cylc-version.txt and commands.tex for inclusion in LaTeX doc. + +CYLC=$(dirname $0)/../../../../bin/cylc + +$CYLC --version > cylc-version.txt cat > commands.tex <> commands.tex <> commands.tex <> commands.tex <. -set -e - -CYLC=$(dirname $0)/../../../../bin/cylc +# Make HTML Cylc User Guide (called from Makefile). -function usage { - echo "USAGE make-html.sh [multi|single]" -} - -if [[ $# != 1 ]]; then - usage - exit 1 -fi +set -e -TYPE=$1 -if [[ $TYPE != multi ]] && [[ $TYPE != single ]]; then - usage - exit 1 -fi +TYPE=$1 # "multi" or "single" DEST=html/$TYPE rm -rf $DEST; mkdir -p $DEST -$CYLC -v > cylc-version.txt - cp -r *.tex cug-html.cfg cylc-version.txt titlepic.sty $DEST + cd $DEST ls *.tex | xargs -n 1 perl -pi -e 's@graphics/png/orig@../../graphics/png/scaled@g' ls *.tex | xargs -n 1 perl -pi -e 's@\.\./examples/@../../../examples/@g' diff --git a/doc/src/cylc-user-guide/scripts/make-pdf.sh b/doc/src/cylc-user-guide/scripts/make-pdf.sh index 8876c07994c..4e323906447 100755 --- a/doc/src/cylc-user-guide/scripts/make-pdf.sh +++ b/doc/src/cylc-user-guide/scripts/make-pdf.sh @@ -16,25 +16,15 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -set -e - -CYLC=$(dirname $0)/../../../../bin/cylc - -function usage { - echo "USAGE make.sh" -} +# Make PDF Cylc User Guide (called from Makefile). -if [[ $# != 0 ]]; then - usage - exit 1 -fi +set -e DEST=pdf rm -rf $DEST; mkdir -p $DEST -$CYLC -v > cylc-version.txt - cp -r *.tex cylc-version.txt titlepic.sty $DEST + cd $DEST ls *.tex | xargs -n 1 perl -pi -e 's@graphics/png/orig@../graphics/png/orig@g' ls *.tex | xargs -n 1 perl -pi -e 's@\.\./examples/@../../examples/@g' diff --git a/doc/src/index.css b/doc/src/index.css index d55501eb2b9..e96adb81165 100644 --- a/doc/src/index.css +++ b/doc/src/index.css @@ -8,7 +8,7 @@ body { font-family:courier; font-weight:bold; - background:#00b3fd; + background:LightSteelBlue; } div.uberpage { @@ -46,7 +46,7 @@ div.page { } a:link, a:visited { - color: #eebb00; + color: SteelBlue; } h1 { diff --git a/doc/src/make-index.sh b/doc/src/make-index.sh index a272ea4221d..f877e7f89d5 100755 --- a/doc/src/make-index.sh +++ b/doc/src/make-index.sh @@ -52,14 +52,14 @@ cat > $INDEX <<__END__

cylc-${CYLC_VERSION}

@@ -127,8 +127,7 @@ cat >> $INDEX <<__END__

-

Internet

-

For the latest cylc release

+

Online Resources

  • Cylc Web Site
    • diff --git a/doc/src/suite-design-guide/Makefile b/doc/src/suite-design-guide/Makefile index 306c337f34f..2d49d3482e3 100644 --- a/doc/src/suite-design-guide/Makefile +++ b/doc/src/suite-design-guide/Makefile @@ -16,7 +16,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -.PHONY: all +.PHONY: all clean all: document.pdf From 294ae865dd82113d24d161f77eca5e5f16294465 Mon Sep 17 00:00:00 2001 From: Hilary James Oliver Date: Thu, 23 Mar 2017 15:11:29 +1300 Subject: [PATCH 5/5] Tidied INSTALL file. [skip ci]. --- INSTALL.md | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 26ca7b8983c..4ae649b1ebc 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -3,23 +3,24 @@ **See [The Cylc User Guide](https://cylc.github.io/cylc/documentation.html) for detailed instructions.** -Note: *to run distributed suites Cylc must be installed on task hosts as well -as suite hosts.* +Cylc must be installed on task job hosts as well as suite hosts. -### External Software Packages. +### Required External Software Packages -Several external packages required on suite hosts are not needed on task hosts: -*graphviz*, and *pygraphviz*. These should only need to be installed -once, and then updated infrequently. +These are only needed on suite hosts (not job hosts). They can be installed +once and updated infrequently. + + * graphviz + * pygraphviz ### Installing Cylc -Download the latest release tarball from https://github.com/cylc/cylc/releases. +Download the latest tarball from https://github.com/cylc/cylc/releases. ```bash cd /home/admin/cylc/ tar xzf ~/Downloads/cylc-7.2.1.tar.gz -# DO NOT CHANGE THE NAME OF THE UNPACKED SOURCE DIRECTORY. +# DO NOT CHANGE THE NAME OF THE UNPACKED CYLC SOURCE DIRECTORY. cd cylc-7.2.1 export PATH=$PWD/bin:$PATH make # (see below) @@ -38,8 +39,10 @@ cp admin/cylc-wrapper /usr/local/bin/cylc ``` When you type `make`: - * A file called VERSION is created from the name of the sourc directory. - * The Cylc documentation is generated from source, in doc/install/. + * A file called VERSION is created, containing the Cylc version number + * The version number is taken from the name of the parent directory: DO NOT + CHANGE THE NAME OF THE UNPACKED CYLC SOURCE DIRECTORY + * The Cylc documentation is generated from source and put in doc/install/ ### Installing The Documentation