diff --git a/source/_static/guide_issue.png b/source/_static/guide_issue.png new file mode 100644 index 0000000000000000000000000000000000000000..7474c1816d02132284be98233d30d3018e419daa Binary files /dev/null and b/source/_static/guide_issue.png differ diff --git a/source/_static/guide_issue2.png b/source/_static/guide_issue2.png new file mode 100644 index 0000000000000000000000000000000000000000..43bf6e0b9570801eefb69edaae64a079ab9d40b6 Binary files /dev/null and b/source/_static/guide_issue2.png differ diff --git a/source/_static/guide_merge_request.png b/source/_static/guide_merge_request.png new file mode 100644 index 0000000000000000000000000000000000000000..b01378c4f5a97ea948235c766f6894e89e098a5e Binary files /dev/null and b/source/_static/guide_merge_request.png differ diff --git a/source/_static/landing_views.png b/source/_static/landing_views.png new file mode 100644 index 0000000000000000000000000000000000000000..b72cb0c263d45b416229b24fdf595af8f899c71b Binary files /dev/null and b/source/_static/landing_views.png differ diff --git a/source/_static/repo_layout.png b/source/_static/repo_layout.png new file mode 100644 index 0000000000000000000000000000000000000000..b82c0a64cd99fb9e2aaf2b975f8678d3a18e1696 Binary files /dev/null and b/source/_static/repo_layout.png differ diff --git a/source/conf.py b/source/conf.py index 5196e2dd6c5c10a3daabd773a974c52ff7644c87..ccb0909ed5383c6f415dfe55ab44963432034eee 100644 --- a/source/conf.py +++ b/source/conf.py @@ -109,9 +109,9 @@ extlinks = { 'xios' : ('https://forge.ipsl.jussieu.fr/ioserver/%s', None), 'website' : ('https://www.nemo-ocean.eu/%s' , None), 'zenodo' : ('https://zenodo.org/publication/%s' , None), - 'gitlab' : (nemo_repo , None), - 'coderepo': (nemo_repo + '/tree/'+ version + '%s' , None), - 'tarrepo' : (nemo_repo + '/releases/'+ version + '%s' , None), + 'gitlab' : (nemo_repo + '%s' , None), + 'coderepo': (nemo_repo + '/tree/'+ version + '%s' , None), + 'tarrepo' : (nemo_repo + '/releases/'+ version + '%s' , None), } # Include common directives for every rst file diff --git a/source/editguide.rst b/source/editguide.rst new file mode 100644 index 0000000000000000000000000000000000000000..9adbcc749b7989643627932b2e9f35c3c476f849 --- /dev/null +++ b/source/editguide.rst @@ -0,0 +1,301 @@ +################################ +Making changes to the User Guide +################################ + +.. contents:: + :local: + +Overview +======== + +The NEMO User guide is a collection of html web-pages that are constructed via the python +``Sphinx`` package from ReStructured Text (rst) files using the ``Read The Docs`` theme. +This part of the guide is for developers who wish to edit or add to the guide and for +maintainers who wish to make those changes live. + +These pages will: + +* Explain where the source material is located within the GitLab repository +* Describe how developers can clone the material, edit and build locally. +* Explain how live html versions can be updated by maintainers (officers) + +These pages will not discuss the ReStructured Text syntaxes or directives themselves. +There are plenty of on-line resources to help with this and the NEMO user-guide rst files +themselves already contains examples of most of the constructs you are likely to need. +Simply find a close match to the type of layout you are after, cut-and-paste the section +and change the content. + +.. _LocationGuide: + +Location of the source material +=============================== + +.. image:: _static/repo_layout.png + :align: center + +The source material for the user guide appears to be located in multiple locations in the +NEMO GitLab repository. Two ``User guide`` projects are shown in the systematic above. One +as a project in the ``Documentation`` subgroup of the ``NEMO Workspaces`` group and one as +a project in the ``Sites`` group. There is also a ``Draft User guide`` project under +``Sites``, but more about that later. The apparent duplication is intentional and serves +to separate the files that any developer can edit from the copies on the publically +accessible Web server. + +The public pages are deployed to a static website by a GitLab Pages server that runs on +projects in the ``Sites`` group. For security, only Maintainers (i.e. NEMO officers) can +create and edit projects in the ``Sites`` group. However, the projects under ``Sites`` +only include the source material as a submodule reference to the ``User guide`` project +under ``NEMO Workspaces``. All developers are able to create issues and merge requests and +commit to branches of this project. Hence, all developers are able to contribute to the +user guide. Maintainers can review and accept merge requests like any other development. Any +merged material will only become live once an officer has updated the submodule reference +in the appropriate ``Sites`` project. + +This may appear confusing but is relatively simple in practise. The next few sections +illustrate the steps needed to create an issue, merge request and branch, make a change, +review the change locally, push changes back, have the changes merged and ultimately have +the html versions created and deployed. The example used for illustration is the creation +of this very section of the user guide. + +.. _IssueGuide: + +Preparing to edit the guide +=========================== + +Preparation follows the same procedure as any development. I.e. create and issue and +linked merge request in the GUI for the ``NEMO Workspaces > Documentation > User guide`` +project at `User guide`_ + +.. _User guide: https://forge.nemo-ocean.eu/nemo/doc/guide + +The following images illustrate the process for the changes that created this section of the guide: + +* Create a new issue (use the ``users_guide`` label) + +.. image:: _static/guide_issue.png + :align: center + :width: 90% + +* Include a brief description + +.. image:: _static/guide_issue2.png + :align: center + :width: 90% + +* Create a linked merge request and branch + +.. image:: _static/guide_merge_request.png + :align: center + :width: 90% + +.. _CloneGuide: + +Cloning and editing the guide +============================= + +With the merge request and new branch in place, the project can be cloned to your local +machine for editing: + +.. code-block:: bash + + git clone --recurse-submodules git@forge.nemo-ocean.eu:nemo/doc/guide.git + cd guide + git branch -a + git switch 10-add-developers-guide-section-on-how-to-make-changes-to-the-user-guide + +Note the namelists and gallery subdirectories are submodules. The contents of these are +unlikely to change often (at least any parts actually used in the user-guide) but, if you +need to update the references then descend into the appropriate directory and issue the +update command; e.g.: + +.. code-block:: bash + + cd namelists + git submodule update --init --force --remote + git add namelists + +Otherwise, just edit or add to the ``source`` directory content as required. For example: + +.. code-block:: bash + + vi source/index.rst + vi source/editguide.rst + cp ~/Pictures/guide_*.png source/_static/ + cp ~/Pictures/repo_layout.png source/_static/ + git add source/_static/guide_*.png source/_static/repo_layout.png + git add source/index.rst source/editguide.rst + +The ability to preview your changes (and hence check for build-time errors) is an +essential requirement of the development process. The next section explains how to +set up and use a suitable environment. + +.. _BuildGuide: + +Building and previewing +======================= + +To build and preview locally will require: + +* A python environment with ``sphinx`` and a few ``sphinx extensions`` +* A browser with access to the local filesystem + +Both requirements are easily satisfied on most Unix-based operating systems. +The `Sphinx installation page`_ lists many ways of installing ``sphinx``. +Perhaps the easiest being via ``Anaconda`` or ``Miniconda``: + +.. _Sphinx installation page: https://www.sphinx-doc.org/en/master/usage/installation.html + +.. code-block:: bash + + conda install sphinx + +The required extensions are not always available from the default conda server but can be +easily obtained from alternatives or installed using pip: + +.. code-block:: bash + + conda install sphinx_rtd_theme + conda install -c conda-forge sphinxcontrib-bibtex + python3 -m pip install sphinxext-remoteliteralinclude + +As an example, these commands on a Macbook results in the following sphinx install: + +.. code-block:: bash + + conda list | grep sphinx + sphinx 5.0.2 py37hecd8cb5_0 + sphinx_rtd_theme 0.4.3 pyhd3eb1b0_0 + sphinxcontrib-applehelp 1.0.2 pyhd3eb1b0_0 + sphinxcontrib-bibtex 2.5.0 pyhd8ed1ab_0 conda-forge + sphinxcontrib-devhelp 1.0.2 pyhd3eb1b0_0 + sphinxcontrib-htmlhelp 2.0.0 pyhd3eb1b0_0 + sphinxcontrib-jsmath 1.0.1 pyhd3eb1b0_0 + sphinxcontrib-qthelp 1.0.3 pyhd3eb1b0_0 + sphinxcontrib-serializinghtml 1.1.5 pyhd3eb1b0_0 + sphinxext-remoteliteralinclude 0.4.0 pypi_0 pypi + +With a similar and correctly configured sphinx installation, building the html files +from the rst files is as simple as: + +.. code-block:: bash + + make html + +from the top guide directory. A successfu build should look something like: + +.. code-block:: bash + + make html + sphinx-build -b html -d build/doctrees source build/html + Running Sphinx v5.0.2 + loading pickled environment... checking bibtex cache... up to date + done + building [mo]: targets for 0 po files that are out of date + building [html]: targets for 0 source files that are out of date + updating environment: [config changed ('extlinks')] 18 added, 1 changed, 0 removed + reading sources... [100%] zooms + looking for now-outdated files... none found + pickling environment... done + checking consistency... done + preparing documents... done + writing output... [100%] zooms + generating indices... genindex done + writing additional pages... search done + copying images... [100%] _static/agrif_sponge.png + copying static files... done + copying extra files... done + dumping search index in English (code: en)... done + dumping object inventory... done + build succeeded. + + The HTML pages are in build/html. + + Build finished. The HTML pages are in build/html. + +The results can be previewed by opening the ``build/html/index.html`` file in +your local browser. In my case this is: + +.. code-block:: bash + + file:///Users/acc/guide/build/html/index.html + +.. note:: + + The rendered page may look slightly different to the exact same version eventually + built on the NEMO GitLab server. Compare, for example the two images of the landing + page below. The html files are identical but the left-hand image is read from the + local disk; the right-hand image is as the live user guide is displayed - **in the same + browser!** Given this, local previewing should be used to check content and functionality + without too much effort on fine tuning of precise layout. + +.. image:: _static/landing_views.png + :align: center + + +.. _FinalPush: + +Send for review and merging +=========================== + +After completing your edits and successfully previewing, push back the changes: + +.. code-block:: bash + + git add source/_static/guide_*.png source/_static/repo_layout.png + git add source/_static/landing_views.png + git add source/index.rst source/editguide.rst + git commit -m'Added section on how to edit the user-guide. Successfully built and previewed locally' + git push origin + +In the GUI, go to the merge request page and ``mark as ready``. Contact the reviewer and have the +changes approved and merged. Your role as developer is now complete. + +.. _PublishGuide: + +Publishing a new draft user guide +================================= + +Once the new material has been merged, a maintainer can chose to update the live pages +by updating the submodule link in one of the ``Sites`` projects. In most cases this +will be the ``Draft User guide`` project since the ``User guide`` project should only +change when a new code is released. The act of pushing the change back to the GitLab +server will trigger a pipeline that builds and deploys the html files: + +.. code-block:: bash + + git clone git@forge.nemo-ocean.eu:sites/draft-guide + cd draft-guide + git submodule update --init --force --remote + git add guide + git commit -m "update of submodule link" + git push origin + +Once both stages (test and deploy) of the pipeline have successfully completed, the new +html pages will be available at `https://sites.nemo-ocean.io/draft-guide/`_ + +.. _https://sites.nemo-ocean.io/draft-guide/: https://sites.nemo-ocean.io/draft-guide/ + +Publishing a new user guide +=========================== + +The same procedure is required when updating the release version of the user guide, with +the additional recommendation that the commit message mentions which release this commit +is designed for (and make sure this matches ``versions`` as set in ``source/conf.py``): + +Updating of the user guide is expected to occur much less frequently than updating of +the draft user guide. + +.. code-block:: bash + + git clone git@forge.nemo-ocean.eu:sites/user-guide + cd user-guide + git submodule update --init --force --remote + git add guide + git commit -m "update of submodule link for release X.X.X" + git push origin + +Once both stages (test and deploy) of the pipeline have successfully completed, the new +html pages will be available at `https://sites.nemo-ocean.io/user-guide/`_ + +.. _https://sites.nemo-ocean.io/user-guide/: https://sites.nemo-ocean.io/user-guide/ + diff --git a/source/index.rst b/source/index.rst index 518166e445f9dbcee4b6fa7c278a39af2d51cb56..56f83f930da085cc370ecea47fc2afa6e11bdf72 100644 --- a/source/index.rst +++ b/source/index.rst @@ -60,10 +60,16 @@ NEMO User Guide .. toctree:: :hidden: - :caption: Developer-guide: testing + :caption: Developer-guide: Testing sette +.. toctree:: + :hidden: + :caption: Developer-guide: Documentation + + editguide + .. :Release: |release| .. figure:: _static/frothyuv.png diff --git a/source/sette.rst b/source/sette.rst index 5a1ad001fc9ebeac33a3f014272abe0eeeb0107d..c02a0921b339feb7dcf51cfcc829fd639daf5270 100644 --- a/source/sette.rst +++ b/source/sette.rst @@ -3,6 +3,7 @@ A guide to using SETTE ###################### .. contents:: + :local: Overview ========