From 5160ff9793071875b1f2de8cb41b3b2623190cd8 Mon Sep 17 00:00:00 2001 From: jonaswinkler Date: Sun, 29 Nov 2020 13:08:00 +0100 Subject: [PATCH] we now have some documentation on how to start development. --- docs/extending.rst | 114 +++++++++++++++++++++++++++++++++++++++++++++ docs/setup.rst | 1 + 2 files changed, 115 insertions(+) diff --git a/docs/extending.rst b/docs/extending.rst index 74c44fd7d..29b08bf59 100644 --- a/docs/extending.rst +++ b/docs/extending.rst @@ -1,5 +1,119 @@ .. _extending: +Paperless development +##################### + +This section describes the steps you need to take to start development on paperless-ng. + +1. Check out the source from github. The repository is organized in the following way: + + * ``master`` always represents the latest release and will only see changes + when a new release is made. + * ``dev`` contains the code that will be in the next release. + * ``feature-X`` contain bigger changes that will be in some release, but not + necessarily the next one. + + Apart from that, the folder structure is as follows: + + * ``docs/`` - Documentation. + * ``src-ui/`` - Code of the front end. + * ``src/`` - Code of the back end. + * ``scripts/`` - Various scripts that help with different parts of development. + * ``docker/`` - Files required to build the docker image. + +2. Install some dependencies. + + * Python 3.6. + * All dependencies listed in the :ref:`Bare metal route ` + * redis. You can either install redis or use the included scritps/start-redis.sh + to use docker to fire up a redis instance. + +Back end development +==================== + +The backend is a django application. I use PyCharm for development, but you can use whatever +you want. + +Install the python dependencies by performing ``pipenv install --dev`` in the src/ directory. +This will also create a virtual environment, which you can enter with ``pipenv shell`` or +execute one-shot commands in with ``pipenv run``. + +In ``src/paperless.conf``, enable debug mode. + +Configure the IDE to use the src/ folder as the base source folder. Configure the following +launch configurations in your IDE: + +* python3 manage.py runserver +* python3 manage.py qcluster +* python3 manage.py consumer + +Depending on which part of paperless you're developing for, you need to have some or all of +them running. + +Testing and code style: + +* Run ``pytest`` in the src/ directory to execute all tests. This also generates a HTML coverage + report. +* Run ``pycodestyle`` to test your code for issues with the configured code style settings. + + .. note:: + + The line length rule E501 is generally useful for getting multiple source files + next to each other on the screen. However, in some cases, its just not possible + to make some lines fit, especially complicated IF cases. Append `` # NOQA: E501`` + to disable this check for certain lines. + +Front end development +===================== + +The front end is build using angular. I use the ``Code - OSS`` IDE for development. + +In order to get started, you need ``npm``. Install the Angular CLI interface with + +.. code:: shell-session + + $ npm install -g @angular/cli + +and make sure that it's on your path. Next, in the src-ui/ directory, install the +required dependencies of the project. + +.. code:: shell-session + + $ npm install + +You can launch a development server by running + +.. code:: shell-session + + $ ng serve + +This will automatically update whenever you save. However, in-place compilation might fail +on syntax errors, in which case you need to restart it. + +By default, the development server is available on ``http://localhost:4200/`` and is configured +to access the API at ``http://localhost:8000/api/``, which is the default of the backend. +If you enabled DEBUG on the back end, several security overrides for allowed hosts, CORS and +X-Frame-Options are in place so that the front end behaves exactly as in production. This also +relies on you being logged into the back end. Without a valid session, The front end will simply +not work. + +In order to build the front end and serve it as part of django, execute + +.. code:: shell-session + + $ ng build --prod --output-path ../src/documents/static/frontend/ + +This will build the front end and put it in a location from which the Django server will serve +it as static content. This way, you can verify that authentication is working. + +Making a release +================ + +Execute the ``make-release.sh `` script. + +This will test and assemble everything and also build and tag a docker image. + + Extending Paperless =================== diff --git a/docs/setup.rst b/docs/setup.rst index 9853ce2f1..746c0aa0d 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -204,6 +204,7 @@ Docker Route simplifies deployment immensely. If you know your way around Docker, feel free to tinker around without using compose! +.. _`setup-bare_metal`: Bare Metal Route ================