.. _contribute:
Technical hints for contributors
=================================
How to contribute
-----------------
1. Fork the repository
^^^^^^^^^^^^^^^^^^^^^^
`Forking `_ a repository on github means creating a clone of a repository on github. Simply
click on "Fork" in the TRAL repos `TRAL repository `_
once you have a Github account.
2. Clone the repository from your fork
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
From the command line, create a clone of your fork:
::
    git clone https://github.com//tral
3. Create your feature branch
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
If you use git-flow, start a new feature:
::
    git-flow start feature 
Otherwise, create a new branch as follows:
::
    git checkout -b feature/
Next, add the necessary changes and commit them:
::
    git add 
    git commit -m 'CHANGED_FILE: DESCRIPTION OF YOUR CHANGES’
4. Push your feature branch to your github fork
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
    git push origin feature/
5. Create a pull request.
^^^^^^^^^^^^^^^^^^^^^^^^^
Create the `pull request `_ online on github.
For this, go to your github page and click on "Pull Request".
::
    https://github.com//tral
Do a pull request on the develop branch of  acg-team/tral.
::
    base fork: acg-team/tral
    base: develop
How to contribute to the homepage
---------------------------------
Check out the current version of the TRAL homepage as follows:
::
    git clone --single-branch -b gh-pages https://@github.com/acg-team/tral.git
How to test a package on pypitest
---------------------------------
Install the package from pypitest as follows:
::
    pip install -i https://testpypi.python.org/pypi
How to use Pypi
---------------
This documentation summarizes the steps to a new release of TRAL.
Version number updates
* README.md
* tral/__init__.py
* docs/conf.py
Try testpypi
::
    cd ~
    swap .pypirc_testpypi .pypirc
    cd [TRAL directory]
    python setup.py sdist upload -r pypitest
    cd ~
    swap .pypirc_testpypi .pypirc
    cd [Installation test directory]
    pip install -i https://testpypi.python.org/pypi tral
Release Process
===============
1. Bump Version Number
----------------------
Change version in:
* README.md
* tral/__init__.py
* docs/conf.py
2. Test  
-----------------
Run all tests again.
::
    cd tral/tral
    pytest
Make sure, that `pytest` is installed in the virtual environment.
3. Rebuild docs
-----------------
The documentation is build with `sphinx`.
Check if all external links are correct, update and commit if necessary.
Checkout branch develop:
::
    git checkout develop
Move into './tral/docs' directory and build the docs:
::
    cd tral/docs
    make html
The new docs are stored in `./tral/docs/_build/html/`.
Copy them outside the git repository and checkout to the `gh-pages` branch.
::
    cp -r tral/docs/_build/html ~
    git checkout gh-pages
Move the fresh build docs to `gh-pages`:
::
    mv -r ~/html/* ./tral/docs
[CHECK IF THIS IS CORRECT]
Check the updated docs online (synchronizes automatically) at `acg-team.github.io `_.
4. Build a python wheel
-----------------------
::
    git checkout develop  
    python setup.py sdist bdist_wheel
5. Create a git tag
-------------------
`-s` requires a `gpg key `_.
::
    git tag -s -a 
6. Upload to PyPi test
----------------------
Check the wheel and git tag:
::
    twine check dist/*; git verify-tag 
Upload to PyPi test platform first:
::
    twine upload --repository testpypi dist/*
7. Git Release
--------------
::
    git checkout develop
    git push; git push --tags
8. Upload to PyPi
-----------------
::
    
    twine upload dist/*
8. Build docker container
--------------------------
Create `Github.com Token `_
and login your docker instance:
::
    
    cat TOKEN.txt | docker login https://docker.pkg.github.com -u USERNAME --password-stdin
    
We encountered issues if not all tral related docker container and images were stopped and removed.
Continue then with building a new docker image with the new release:
::
    
    sudo docker build -t docker.pkg.github.com/acg-team/tral/tral_docker: -t docker.pkg.github.com/acg-team/tral/tral_docker:latest -f tral/docker/Dockerfile --no-cache 
    sudo docker push docker.pkg.github.com/acg-team/tral/tral_docker:latest
10. Prepare repository for further development
----------------------------------------------
Increment version in `__init_.py` from i.e. `2.0.0` to `2.0.1.dev0`.