<commit_before>You are welcome to contribute to privacyIDEA
============================================

There are different ways to contribute. Some of them should
be really easy.

**Thanks a lot for contributing to privacyIDEA!**

Tell about it
-------------

You are using privacyIDEA in your network? Tell about it!
Write a blog post, tell your friends or simply twitter about it.
This will make privacyIDEA wider known and attract new contributors.

Talk to us
----------

You may join talking in the privacyIDEA Forum.
Talk to other users and share your experience!

https://community.privacyidea.org

A word about community
~~~~~~~~~~~~~~~~~~~~~~

Community does not mean that some developers are responsible
for solving all your problems. Read the AGPL! 
**THIS SOFTWARE COMES WITH NO WARRANTY**

As soon as you start using privacyIDEA you are becoming part of
the community and this also comes with some kind of responsibility.
So you can make privacyIDEA better and earn karma points by
sharing your experience and helping other, younger users.

By doing so the developers have more time to develop and 
improving your beloved project and hopefully allowing
the developers to earn some money to make a living.

So **you are "the community"**, go and help others!

https://community.privacyidea.org

Money
-----

This is an important part to contribute to privacyIDEA.
To allow developers to work full time on privacyIDEA they
have to make money. 

One possibility to do this and also get rid of the NO-WARRANTY 
label is to get privacyIDEA Enterprise Edition including a
Service Level Agreement or corresponding consultancy.

- consultancy 
  https://netknights.it/en/leistungen/one-time-services/
- privacyIDEA Enterprise Edition 
  https://netknights.it/en/leistungen/service-level-agreements/


Tell us your ideas
------------------

If you have a *new idea* you may submit a feature request.
This should be a new idea that puts forward privacyIDEA and looks 
at some things from a new angle. 

Submit an issue and describe your idea in the best possible details.

https://github.com/privacyidea/privacyidea/issues

Translations
------------

If you have no programming skills you can still get involved
directly with the software by providing translations into 
different languages.

http://privacyidea.readthedocs.io/en/latest/faq/translation.html?highlight=translate

Test coverage
-------------

We have a rather high test coverage. But tests can always be
improved.

The tests are also split in three levels: database, library and API.
Here you can find files that should get an improved test coverage.
Take a look at yellow and red files.

https://codecov.io/github/privacyidea/privacyidea?branch=master

Develop
-------

And of course you can contribute code! Starting with fixings in the
code or even implementations of new concepts.
Take a look at the issues. Maybe you can find something, you
would like to start with?
If you are sending a pull request, please note the following:

* often it is a good idea to **create an issue**, that describes
  you problem or idea, which you want to solve with your
  pull request.
* in your pull request refer to the issue.
* describe your changes in the commit message.
* At the beginning of the file, add the date, your name,
  your email address and a description of what you 
  changed in the file!

Contribution Guidelines
~~~~~~~~~~~~~~~~~~~~~~~

Git Handling
............

* privacyIDEA is developed on **github**.
  The current development is performed on the
  **master** branch.
  So the master branch can be unstable!
* For every stable release we set a **tag** like **v2.17**. There can be
  other tags like *v2.18dev1*, these are tags during development and should
  not be used productively.
* If a released stable version needs fixes, we open a **release branch** like
  **branch-2.16**. In this branch patch versions like 2.16.1 will be
  developed according to *semantic versioning*.
* When developing a feature there *should* be an **issue** for that.
* Your **commit message** or pull request should refer to this issue.<commit_msg>Add a section about creating migration scripts<commit_after>You are welcome to contribute to privacyIDEA
============================================

There are different ways to contribute. Some of them should
be really easy.

**Thanks a lot for contributing to privacyIDEA!**

Tell about it
-------------

You are using privacyIDEA in your network? Tell about it!
Write a blog post, tell your friends or simply twitter about it.
This will make privacyIDEA wider known and attract new contributors.

Talk to us
----------

You may join talking in the privacyIDEA Forum.
Talk to other users and share your experience!

https://community.privacyidea.org

A word about community
~~~~~~~~~~~~~~~~~~~~~~

Community does not mean that some developers are responsible
for solving all your problems. Read the AGPL! 
**THIS SOFTWARE COMES WITH NO WARRANTY**

As soon as you start using privacyIDEA you are becoming part of
the community and this also comes with some kind of responsibility.
So you can make privacyIDEA better and earn karma points by
sharing your experience and helping other, younger users.

By doing so the developers have more time to develop and 
improving your beloved project and hopefully allowing
the developers to earn some money to make a living.

So **you are "the community"**, go and help others!

https://community.privacyidea.org

Money
-----

This is an important part to contribute to privacyIDEA.
To allow developers to work full time on privacyIDEA they
have to make money. 

One possibility to do this and also get rid of the NO-WARRANTY 
label is to get privacyIDEA Enterprise Edition including a
Service Level Agreement or corresponding consultancy.

- consultancy 
  https://netknights.it/en/leistungen/one-time-services/
- privacyIDEA Enterprise Edition 
  https://netknights.it/en/leistungen/service-level-agreements/


Tell us your ideas
------------------

If you have a *new idea* you may submit a feature request.
This should be a new idea that puts forward privacyIDEA and looks 
at some things from a new angle. 

Submit an issue and describe your idea in the best possible details.

https://github.com/privacyidea/privacyidea/issues

Translations
------------

If you have no programming skills you can still get involved
directly with the software by providing translations into 
different languages.

http://privacyidea.readthedocs.io/en/latest/faq/translation.html?highlight=translate

Test coverage
-------------

We have a rather high test coverage. But tests can always be
improved.

The tests are also split in three levels: database, library and API.
Here you can find files that should get an improved test coverage.
Take a look at yellow and red files.

https://codecov.io/github/privacyidea/privacyidea?branch=master

Develop
-------

And of course you can contribute code! Starting with fixings in the
code or even implementations of new concepts.
Take a look at the issues. Maybe you can find something, you
would like to start with?
If you are sending a pull request, please note the following:

* often it is a good idea to **create an issue**, that describes
  you problem or idea, which you want to solve with your
  pull request.
* in your pull request refer to the issue.
* describe your changes in the commit message.
* At the beginning of the file, add the date, your name,
  your email address and a description of what you 
  changed in the file!
* If you need to change the database model, edit ``privacyidea/models.py``
  accordingly. Then you can use
  ``./pi-manage`` to create migration scripts. The migration scripts
  are located at ``migrations/versions/``.
  To create a migration script to update the database schema run:

      ./pi-manage db migrate

  This will create a new file in ``migrations/versions/``. Edit the description
  and put a *try-except* around the operations. Take a look at the other scripts.
  Then you can run:

      ./pi-manage db upgrade

  To update the local database.

Contribution Guidelines
~~~~~~~~~~~~~~~~~~~~~~~

Git Handling
............

* privacyIDEA is developed on **github**.
  The current development is performed on the
  **master** branch.
  So the master branch can be unstable!
* For every stable release we set a **tag** like **v2.17**. There can be
  other tags like *v2.18dev1*, these are tags during development and should
  not be used productively.
* If a released stable version needs fixes, we open a **release branch** like
  **branch-2.16**. In this branch patch versions like 2.16.1 will be
  developed according to *semantic versioning*.
* When developing a feature there *should* be an **issue** for that.
* Your **commit message** or pull request should refer to this issue.
{'fraction_non_alphanumeric': 0.09011562004080707, 'fraction_numerical': 0.0031738834731353436, 'mean_word_length': 3.7821138211382115, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 12, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1725898', 'n_tokens_mistral': 2283, 'n_tokens_neox': 2195, 'n_words': 1243}