ways_to_contribute.rst 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. .. _doc_ways_to_contribute:
  2. Ways to contribute
  3. ==================
  4. Godot Engine is a non-profit, community-driven free and open source project.
  5. Almost all (but our lead dev Juan, more on that below) developers are working
  6. *pro bono* on their free time, out of personal interest and for the love of
  7. creating a libre engine of exceptional quality.
  8. This means that to thrive, Godot needs as many users as possible to get
  9. involved by contributing to the engine. There are many ways to contribute to
  10. such a big project, making it possible for everybody to bring something
  11. positive to the engine, regardless of their skillset:
  12. - **Be part of the community.** The best way to contribute to Godot and help
  13. it become ever better is simply to use the engine and make its promotion by
  14. word-of-mouth, in-game credits and splash screen, blog posts, tutorials,
  15. videos, demos, gamedev or free software events, support on the Q&A, IRC,
  16. forums, Discord, etc.
  17. Being a user and advocate helps spread the word about our great engine,
  18. which has no marketing budget and can therefore only rely on its community
  19. to become more mainstream.
  20. - **Make games.** That's no secret, to convince new users and especially
  21. industry players that Godot is a relevant market player, we need great games
  22. made with Godot. We know that the engine has a lot of potential, both for 2D
  23. and 3D games, but given its young age we still lack big releases that will
  24. draw attention to Godot. So keep working on your awesome projects, each new
  25. game increases our credibility on the gamedev market!
  26. - **Get involved in the engine's development.** This can be by contributing
  27. code via pull requests, testing the development snapshots or directly the
  28. git *master* branch, report bugs or suggest enhancements on the issue
  29. tracker, improve the official documentation (both the class reference and
  30. tutorials). The following sections will cover each of those "direct" ways
  31. of contributing to the engine.
  32. - **Donate.** Godot is a non-profit project, but it can still benefit from
  33. user donations for many things. Apart from usual expenses such as hosting
  34. costs or promotion material on events, we also use donation money to
  35. acquire hardware when necessary (e.g. we used donation money to buy a
  36. Macbook Pro to implement Retina/HiDPI support and various other
  37. macOS-related features).
  38. Most importantly, we also used donation money to hire our lead developer
  39. Juan Linietsky, so that he can work full-time on the engine. Even with a low
  40. monthly wage, we need a steady donation income to continue doing this, which
  41. has been very beneficial to the project so far. So if you want to donate
  42. some money to the project, check `our website <http://godotengine.org/donate>`_
  43. for details.
  44. Contributing code
  45. -----------------
  46. The possibility to study, use, modify and redistribute modifications of the
  47. engine's source code are the fundamental rights that Godot's license grant you,
  48. making it `free and open source software <https://en.wikipedia.org/wiki/Free_and_open-source_software>`_.
  49. As such, everyone is entitled to modify
  50. `Godot's source code <https://github.com/godotengine/godot>`_, and send those
  51. modifications back to the upstream project in the form of a patch (a text file
  52. describing the changes in a ready-to-apply manner) or - in the modern workflow
  53. that we use - via a so-called "pull request" (PR), i.e. a proposal to directly
  54. merge one or more git commits (patches) into the main development branch.
  55. Contributing code changes upstream has two big advantages:
  56. - Your own code will be reviewed and improved by other developers, and will be
  57. further maintained directly in the upstream project, so you won't have to
  58. reapply your own changes every time you move to a newer version. On the
  59. other hand it comes with a responsability, as your changes have to be
  60. generic enough to be beneficial to all users, and not just your project; so
  61. in some cases it might still be relevant to keep your changes only for your
  62. own project, if they are too specific.
  63. - The whole community will benefit from your work, and other contributors will
  64. behave the same way, contributing code that will be beneficial to you. At
  65. the time of this writing, more than 300 developers have contributed code
  66. changes to the engine!
  67. To ensure a good collaboration and overall quality, the Godot developers
  68. enforce some rules for code contribution, for example regarding the style to
  69. use in the C++ code (indentation, brackets, etc.) or the git and PR workflow.
  70. .. seealso:: Technical details about the PR workflow are outlined in a
  71. specific section, :ref:`doc_pr_workflow`.
  72. Details about the code style guidelines and the ``clang-format``
  73. tool used to enforce them are outlined in
  74. :ref:`doc_code_style_guidelines`.
  75. Testing and reporting issues
  76. ----------------------------
  77. Another great way of contributing to the engine is to test development releases
  78. or the development branch and to report issues. It is also meaningful to report
  79. issues discovered in so-called stable releases, so that they can be fixed in
  80. the development branch and in future maintenance releases.
  81. Testing development versions
  82. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  83. To help with the testing, you have several possibilities:
  84. - Compile the engine from source yourself, following the instructions of the
  85. :ref:`Compiling <toc-devel-compiling>` page for your platform.
  86. - Test official pre-release binaries when they are announced (usually on the
  87. blog and other community platforms), such as alpha, beta and RC (release
  88. candidate) builds.
  89. - Test "trusted" unofficial builds of the development branch; just ask
  90. community members for reliable providers. Whenever possible, it's best to
  91. use official binaries or to compile yourself though, to be sure about the
  92. provenance of your binaries.
  93. As mentioned previously, it is also meaningful to keep your eyes peeled for
  94. potential bugs that might still be present in the stable releases, especially
  95. when using some niche features of the engine which might get less testing by
  96. the developers.
  97. Filing an issue on GitHub
  98. ~~~~~~~~~~~~~~~~~~~~~~~~~
  99. Godot uses `GitHub's issue tracker <https://github.com/godotengine/godot/issues>`_
  100. for bug reports and enhancement suggestions. You will need a GitHub account to
  101. be able to open a new issue there, and click on the "New issue" button.
  102. When you report a bug, you should keep in mind that the process is very similar
  103. to an appointment with your doctor. You noticed *symptoms* that make you think
  104. that something might be wrong (the engine crashes, some features don't work as
  105. expected, etc.). It's the role of the bug triaging team and the developers to
  106. then help make the diagnosis of the issue you met, so that the actual cause of
  107. the bug can be identified and addressed.
  108. You should therefore always ask yourself: what are the relevant information to
  109. give so that other Godot contributors can understand the bug, identify it and
  110. hopefully fix it. Here are some of the most important infos that you should
  111. always provide:
  112. - **Operating system.** Sometimes bugs are system-specific, i.e. they happen
  113. only on Windows, or only on Linux, etc. That's particularly relevant for all
  114. bugs related to OS interfaces, such as file management, input, window
  115. management, audio, etc.
  116. - **Godot version.** This is a must have. Some issues might be relevant in the
  117. current stable release, but fixed in the development branch, or the other
  118. way around. You might also be using an obsolete version of Godot and
  119. experiencing a known issue fixed in a later version, so knowing this from
  120. the start helps to speed up the diagnosis.
  121. - **How to reproduce the bug.** In the majority of cases, bugs are
  122. reproducible, i.e. it is possible to trigger them reliably by following some
  123. steps. Please always describe those steps as clearly as possible, so that
  124. everyone can try to reproduce the issue and confirm it. Ideally, make a demo
  125. project that reproduces this issue out of the box, zip it and attach it to
  126. the issue (you can do this by drag and drop).
  127. Even if you think that the issue is trivial to reproduce, adding a minimal
  128. project that lets reproduce it is a big added value. You have to keep in
  129. mind that there are thousands of issues in the tracker, and developers can
  130. only dedicate little time to each issue.
  131. When you click the "New issue" button, you should be presented with a text area
  132. prefilled with our issue template. Please try to follow it so that all issues
  133. are consistent and provide the required information.
  134. Contributing to the documentation
  135. ---------------------------------
  136. There are two separate resources referred to as "documentation" in Godot:
  137. - **The class reference.** This is the documentation for the complete Godot
  138. API as exposed to GDScript and the other scripting languages. It can be
  139. consulted offline, directly in Godot's code editor, or online at
  140. :ref:`Godot API <toc-class-ref>`.
  141. To contribute to the class reference, you have to edit the
  142. `doc/base/classes.xml` in Godot's git repository, and make a pull request.
  143. See :ref:`doc_updating_the_class_reference` for more details.
  144. - **The tutorials and engine documentation.** This is the part you are reading
  145. now, which is distributed in the HTML, PDF and EPUB formats. Its contents
  146. are generated from plain text files in the reStructured Text (rst) format,
  147. to which you can contribute via pull requests on the
  148. `godot-docs <https://github.com/godotengine/godot-docs>`_ GitHub repository.
  149. See :ref:`doc_documentation_guidelines` for more details.