.. _setup:
Environment setup
=================
With the setup described here, you will have one copy of the |ece4| code ready
for development.
This setup, with references to two Gitlab remotes, is needed once only.
Prerequisites
-------------
* We assume a minimum knowledge of git. If you are unfamiliar with it,
have a look at these resources:
* `software carpentry beginner lessons `_
* You should have registered for an account on the SMHI gitlab
instance. See :ref:`registration`.
* Finally, a recent version of Git is recommended. Versions older than
2.14 miss some features related to submodule. You can check the Git
version with:
.. code-block:: bash
>>> git --version
git version 2.25.1
Check with your administrator if you need to upgrade.
Setup the superproject
----------------------
* Get a copy of the |ece4| project
This step is needed if you did not go through the :ref:`clonecode`
and are starting from scratch. Then you clone the repository with:
.. code-block:: bash
git clone -o upstream --recurse-submodules https://git.smhi.se/ec-earth/ecearth4.git
You will see a lot of output on the screen. Version numbers may
differ according to the project advancement, but it should look like:
.. code-block:: bash
:emphasize-lines: 12
>>> git clone -o upstream --recurse-submodules https://git.smhi.se/ec-earth/ecearth4.git
Cloning into 'ecearth4'...
Username for 'https://git.smhi.se': XXXX
Password for 'https://sager@git.smhi.se':
remote: Enumerating objects: 698, done.
remote: Total 698 (delta 0), reused 0 (delta 0), pack-reused 698
Receiving objects: 100% (698/698), 1.87 MiB | 4.73 MiB/s, done.
Resolving deltas: 100% (337/337), done.
[...]
Submodule path 'sources/nemo-4.2': checked out '68e39f70a8e32452e7fc480f17c36ff6ad3d092a'
Submodule path 'sources/oasis3-mct-5.0': checked out 'b9ea055f25bbff466acbe46e72bb4f88763f8498'
Submodule path 'sources/oifs-43r3v2': checked out '27d3451306d4e2757016494e8e9a150df4d7f691'
Submodule path 'sources/xios-2.5+': checked out 'cddb36170c6d8001fbfdb9dc8301e27fac8e966e'
Note the submodules listed at the end. They correspond to the
components of EC-Earth that have their own repository. Some extra
steps (see next section) are required to contribute to their
development. But not all components have a dedicated repository.
Currently only NEMO, OpenIFS, OASIS3-MCT and XIOS do.
.. hint:: Please have a look at the hint given in :ref:`clonecode`, regarding the time it takes
to download the complete |ece4| repository with submodules.
* Fork the |ece4| project
To share your work, you will need a fork of the project on GitLab. Go to
``_. Click on the fork button (top right). You will be
asked to "Select a namespace" for the project URL: choose your name in the drop down list,
and click on "Fork project".
To allow your colleagues to see your changes to the code, you will need to open up the
permissions of the fork. This can be done for individual users or for the full ecearth group.
.. figure:: fig_fork_members.png
:alt: add members to fork
You will end up with your own project:
``https://git.smhi.se/YOURNAMESPACE/ecearth4``, where YOURNAMESPACE
is your user name in GitLab. You need to add a reference to it in
your local copy of the code:
.. code-block:: bash
cd ecearth4
git remote add origin https://git.smhi.se/YOURNAMESPACE/ecearth4.git
Finally, get up-to-date repositories references:
.. code-block:: bash
git fetch --all
You can double-check that the two remotes are correctly set with:
.. code-block:: bash
>>> git remote -v
origin https://git.smhi.se/YOURNAMESPACE/ecearth4.git (fetch)
origin https://git.smhi.se/YOURNAMESPACE/ecearth4.git (push)
upstream https://git.smhi.se/ec-earth/ecearth4.git (fetch)
upstream https://git.smhi.se/ec-earth/ecearth4.git (push)
Setup a submodule
-----------------
Let's now assume that you want to modify the OpenIFS code. You first
navigate to its directory:
.. code-block:: bash
cd ecearth4/sources/oifs-43r3v2
and then retrieve information about its remote:
.. code-block:: bash
git remote -v
It should read:
.. code-block:: bash
origin https://git.smhi.se/ec-earth/vendor/openifs/oifs43r3.git (fetch)
origin https://git.smhi.se/ec-earth/vendor/openifs/oifs43r3.git (push)
This output indicates the project page:
``_. The page can
also be found by navigating to the "sources" directory in the web
interface:
.. figure:: fig_checking_sources.png
:alt: sources directory listing in GitLab
Clicking on the component name will bring you directly to its project
page.
Visit that project page and **fork the OpenIFS project** in the same way you
forked the |ece4| project. You should now own a second project:
````.
Finally, configure the component repository:
.. code-block:: bash
cd ecearth4/sources/oifs-43r3v2 #if not there already
git remote rename origin upstream
git remote add origin https://git.smhi.se/YOURNAMESPACE/oifs43r3.git
git fetch --all
.. note:: To summarize, you have:
* forked the |ece4| and the OpenIFS repositories
* setup your local copy of |ece4| with references to your (as
origin) and the reference (as upstream) repositories