1 # Nominatim contribution guidelines
 
   5 Bugs can be reported at https://github.com/openstreetmap/Nominatim/issues.
 
   6 Please always open a separate issue for each problem. In particular, do
 
   7 not add your bugs to closed issues. They may looks similar to you but
 
   8 often are completely different from the maintainer's point of view.
 
  10 ## Workflow for Pull Requests
 
  12 We love to get pull requests from you. We operate the "Fork & Pull" model
 
  15 https://help.github.com/articles/using-pull-requests
 
  17 You should fork the project into your own repo, create a topic branch
 
  18 there and then make one or more pull requests back to the openstreetmap repository.
 
  19 Your pull requests will then be reviewed and discussed. Please be aware
 
  20 that you are responsible for your pull requests. You should be prepared
 
  21 to get change requests because as the maintainers we have to make sure
 
  22 that your contribution fits well with the rest of the code. Please make
 
  23 sure that you have time to react to these comments and amend the code or
 
  24 engage in a conversion. Do not expect that others will pick up your code,
 
  25 it will almost never happen.
 
  27 Please open a separate pull request for each issue you want to address.
 
  28 Don't mix multiple changes. In particular, don't mix style cleanups with
 
  29 feature pull requests. If you plan to make larger changes, please open
 
  30 an issue first or comment on the appropriate issue already existing so
 
  31 that duplicate work can be avoided.
 
  33 ### Using AI-assisted code generators
 
  35 PRs that include AI-generated content, may that be in code, in the PR
 
  36 description or in documentation need to
 
  38 1. clearly mark the AI-generated sections as such, for example, by
 
  39    mentioning all use of AI in the PR description, and
 
  40 2. include proof that you have run the generated code on an actual
 
  41    installation of Nominatim. Adding and excuting tests will not be
 
  42    sufficient. You need to show that the code actually solves the problem
 
  43    the PR claims to solve.
 
  48 Nominatim historically hasn't followed a particular coding style but we
 
  49 are in process of consolidating the style. The following rules apply:
 
  51  * Python code uses the official Python style
 
  54    * all other file types use 4 spaces
 
  55    * [BSD style](https://en.wikipedia.org/wiki/Indent_style#Allman_style) for braces
 
  57    * spaces before and after equal signs and operators
 
  59    * no spaces after opening and before closing bracket
 
  60    * leave out space between a function name and bracket
 
  61      but add one between control statement(if, while, etc.) and bracket
 
  63 The coding style is enforced with flake8. It can be tested with:
 
  71 Before submitting a pull request make sure that the tests pass:
 
  79 Nominatim follows semantic versioning. Major releases are done for large changes
 
  80 that require (or at least strongly recommend) a reimport of the databases.
 
  81 Minor releases can usually be applied to existing databases. Patch releases
 
  82 contain bug fixes only and are released from a separate branch where the
 
  83 relevant changes are cherry-picked from the master branch.
 
  85 Checklist for releases:
 
  87 * [ ] increase versions in
 
  88   * `src/nominatim_api/version.py`
 
  89   * `src/nominatim_db/version.py`
 
  90 * [ ] update `ChangeLog` (copy information from patch releases from release branch)
 
  91 * [ ] complete `docs/admin/Migration.md`
 
  92 * [ ] update EOL dates in `SECURITY.md`
 
  93 * [ ] commit and make sure CI tests pass
 
  94 * [ ] update OSMF production repo and release new version -post1 there
 
  96   * download, build and import previous version
 
  97   * migrate using master version
 
  98   * run updates using master version
 
  99 * [ ] prepare tarball:
 
 100   * `git clone https://github.com/osm-search/Nominatim` (switch to right branch!)
 
 102   * copy country data into `data/`
 
 103   * add version to base directory and package
 
 104 * [ ] upload tarball to https://nominatim.org
 
 105 * [ ] prepare documentation
 
 106   * check out new docs branch
 
 107   * change git checkout instructions to tarball download instructions or adapt version on existing ones
 
 108   * build documentation and copy to https://github.com/osm-search/nominatim-org-site
 
 109   * add new version to history
 
 110 * [ ] check release tarball
 
 111   * download tarball as per new documentation instructions
 
 112   * compile and import Nominatim
 
 113   * run `nominatim --version` to confirm correct version
 
 114 * [ ] tag new release and add a release on github.com
 
 115 * [ ] build pip packages and upload to pypi
 
 117   * `twine upload dist/*`