docs: Add contributor introduction

1. Add contributor introduction
2. Fix Wiki link

Change-Id: I971f58b058dfbd1922bfe4139d72a5ec28749041
This commit is contained in:
Boxiang Zhu 2022-08-22 14:15:53 +08:00
parent fd7f1ea843
commit 6ca6f7dd1d
7 changed files with 539 additions and 9 deletions

View File

@ -15,7 +15,7 @@ to maintain and operate by users, and has higher concurrency performance.
You can learn more about Skyline APIServer at: You can learn more about Skyline APIServer at:
* `Wiki <https://wiki.openstack.org/Skyline/>`__ * `Wiki <https://wiki.openstack.org/Skyline>`__
* `Developer Docs <https://docs.openstack.org/skyline-apiserver/latest/>`__ * `Developer Docs <https://docs.openstack.org/skyline-apiserver/latest/>`__
* `Blueprints <https://blueprints.launchpad.net/skyline-apiserver/>`__ * `Blueprints <https://blueprints.launchpad.net/skyline-apiserver/>`__
* `Release notes <https://docs.openstack.org/releasenotes/skyline-apiserver/>`__ * `Release notes <https://docs.openstack.org/releasenotes/skyline-apiserver/>`__

View File

@ -0,0 +1,207 @@
============================
So You Want to Contribute...
============================
For general information on contributing to OpenStack, please check out the
`contributor guide <https://docs.openstack.org/contributors/>`_ to get started.
It covers all the basics that are common to all OpenStack projects: the
accounts you need, the basics of interacting with our Gerrit review system, how
we communicate as a community, etc.
Below will cover the more project specific information you need to get started
with the skyline-apiserver project, which is responsible for the following
OpenStack deliverables:
skyline-apiserver
| The OpenStack Modern Dashboard - back-end.
| code: https://opendev.org/openstack/skyline-apiserver
| docs: https://docs.openstack.org/skyline-apiserver/latest/
| Launchpad: https://launchpad.net/skyline-apiserver
Communication
~~~~~~~~~~~~~
IRC
We use IRC *a lot*. You will, too. You can find infomation about what
IRC network OpenStack uses for communication (and tips for using IRC)
in the `Setup IRC
<https://docs.openstack.org/contributors/common/irc.html>`_
section of the main `OpenStack Contributor Guide`.
People working on the Skyline APIServer project may be found in the
``#openstack-skyline`` IRC channel during working hours
in their timezone. The channel is logged, so if you ask a question
when no one is around, you can check the log to see if it's been
answered: http://eavesdrop.openstack.org/irclogs/%23openstack-skyline/
weekly meeting
.. note::
Now we have not weekly meeting, we will have it in the future.
mailing list
We use the openstack-discuss@lists.openstack.org mailing list for
asynchronous discussions or to communicate with other OpenStack teams.
Use the prefix ``[skyline]`` in your subject line (it's a high-volume
list, so most people use email filters).
More information about the mailing list, including how to subscribe
and read the archives, can be found at:
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-discuss
Contacting the Core Team
~~~~~~~~~~~~~~~~~~~~~~~~
The skyline-core team is an active group of contributors who are responsible
for directing and maintaining the skyline-apiserver project. As a new
contributor, your interaction with this group will be mostly through code
reviews, because only members of skyline-core can approve a code change to be
merged into the code repository.
You can learn more about the role of core reviewers in the OpenStack
governance documentation:
https://docs.openstack.org/contributors/common/governance.html#core-reviewer
The membership list of skyline-core is maintained in gerrit:
https://review.opendev.org/admin/groups/1fe65032c39f1d459327b010730627a904d7b793,members
Project Team Lead
~~~~~~~~~~~~~~~~~
For each development cycle, Skyline APIServer project Active Technical
Contributors (ATCs) elect a Project Team Lead who is responsible for running
midcycles, and skyline-apiserver sessions at the Project Team Gathering for
that cycle (and who is also ultimately responsible for everything else the
project does).
* You automatically become an ATC by making a commit to one of the
skyline-apiserver deliverables. Other people who haven't made a commit,
but have contributed to the project in other ways (for example, making good
bug reports) may be recognized as "extra-ATCs" and obtain voting privileges.
If you are such a person, contact the current PTL before the "Extra-ATC
freeze" indicated on the current development cycle schedule (which you can
find from the `OpenStack Releases homepage
<https://releases.openstack.org/index.html>`_ .
The current Skyline APIServer project Project Team Lead (PTL) is listed in the
`Skyline APIServer project reference
<https://governance.openstack.org/tc/reference/projects/skyline.html>`_
maintained by the OpenStack Technical Committee.
All common PTL duties are enumerated in the `PTL guide
<https://docs.openstack.org/project-team-guide/ptl.html>`_.
New Feature Planning
~~~~~~~~~~~~~~~~~~~~
The Skyline APIServer project uses "blueprints" to track new features. Here's a
quick rundown of what they are and how the Skyline APIServer project uses them.
blueprints
| Exist in Launchpad, where they can be targeted to release milestones.
| You file one at https://blueprints.launchpad.net/skyline-apiserver
| Examples of changes that can be covered by a blueprint only are:
* adding a new api
Feel free to ask in ``#openstack-skyline`` if you have an idea you want to
develop and you're not sure whether it requires a blueprint *and* a spec or
simply a blueprint.
The Skyline APIServer project observes the following deadlines. For the current
development cycle, the dates of each (and a more detailed description)
may be found on the release schedule, which you can find from:
https://releases.openstack.org/
* bp freeze (all bps must be approved by this date)
* new feature status checkpoint
Task Tracking
~~~~~~~~~~~~~
We track our tasks in Launchpad. See the top of the page for the URL of
Skyline APIServer project deliverable.
If you're looking for some smaller, easier work item to pick up and get started
on, search for the 'low-hanging-fruit' tag in the Bugs section.
When you start working on a bug, make sure you assign it to yourself.
Otherwise someone else may also start working on it, and we don't want to
duplicate efforts. Also, if you find a bug in the code and want to post a
fix, make sure you file a bug (and assign it to yourself!) just in case someone
else comes across the problem in the meantime.
Reporting a Bug
~~~~~~~~~~~~~~~
You found an issue and want to make sure we are aware of it? You can do so in
the Launchpad space for the affected deliverable:
* skyline-apiserver: https://bugs.launchpad.net/skyline-apiserver
Getting Your Patch Merged
~~~~~~~~~~~~~~~~~~~~~~~~~
Before your patch can be merged, it must be *reviewed* and *approved*.
The Skyline APIServer project policy is that a patch must have two +2s before
it can be merged. (Exceptions are documentation changes, which require only a
single +2, for which the PTL may require more than two +2s, depending on the
complexity of the proposal.) Only members of the skyline-core team can vote +2
(or -2) on a patch, or approve it.
.. note::
Although your contribution will require reviews by members of
skyline-core, these aren't the only people whose reviews matter.
Anyone with a gerrit account can post reviews, so you can ask
other developers you know to review your code ... and you can
review theirs. (A good way to learn your way around the codebase
is to review other people's patches.)
If you're thinking, "I'm new at this, how can I possibly provide
a helpful review?", take a look at `How to Review Changes the
OpenStack Way
<https://docs.openstack.org/project-team-guide/review-the-openstack-way.html>`_.
There are also some Skyline APIServer project specific reviewing
guidelines in the :ref:`reviewing-skyline-apiserver` section of the
Skyline APIServer Contributor Guide.
In addition, some changes may require a release note. Any patch that
changes functionality, adds functionality, or addresses a significant
bug should have a release note. You can find more information about
how to write a release note in the :ref:`release-notes` section of the
Skyline APIServer Contributors Guide.
.. note::
Keep in mind that the best way to make sure your patches are reviewed in
a timely manner is to review other people's patches. We're engaged in a
cooperative enterprise here.
If your patch has a -1 from Zuul, you should fix it right away, because
people are unlikely to review a patch that is failing the CI system.
* If it's a pep8 issue, the job leaves sufficient information for you to fix
the problems yourself.
* If you are failing unit or functional tests, you should look at the
failures carefully. These tests guard against regressions, so if
your patch causing failures, you need to figure out exactly what is
going on.
* The unit, functional, and pep8 tests can all be run locally before you
submit your patch for review. By doing so, you can help conserve gate
resources.
How long it may take for your review to get attention will depend on the
current project priorities. For example, the feature freeze is at the
third milestone of each development cycle, so feature patches have the
highest priority just before M-3. These dates are clearly noted on the
release schedule for the current release, which you can find
from https://releases.openstack.org/
You can see who's been doing what with Skyline APIServer recently in
Stackalytics:
https://www.stackalytics.io/report/activity?module=skyline-group

View File

@ -0,0 +1,187 @@
.. _reviewing-skyline-apiserver:
Code Reviews
============
Skyline APIServer follows the same `Review guidelines`_ outlined by the
OpenStack community. This page provides additional information that is
helpful for reviewers of patches to Skyline APIServer.
Gerrit
------
Skyline APIServer uses the `Gerrit`_ tool to review proposed code changes.
The review site is https://review.opendev.org
Gerrit is a complete replacement for Github pull requests. `All Github pull
requests to the Skyline APIServer repository will be ignored`.
See `Quick Reference`_ for information on quick reference for developers.
See `Getting Started`_ for information on how to get started using Gerrit.
See `Development Workflow`_ for more detailed information on how to work with
Gerrit.
The Great Change
----------------
Skyline APIServer only needs to support Python 3 runtimes (in particular,
3.8). Our biggest interaction with the stable branches is backporting
bugfixes, where in the ideal case, we're just doing a simple cherry-pick of
a commit from master to the stable branches. You can see that there's some
tension here.
With that in mind, here are some guidelines for reviewers and developers
that the Skyline APIServer community has agreed on during this phase where we
want to write pure Python 3 but still must support Python 2 code.
.. _transition-guidelines:
Python 2 to Python 3 transition guidelines
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* New features can use Python-3-only language constructs, but bugfixes
likely to be backported should be more conservative and write for
Python 2 compatibilty.
Unit Tests
----------
Skyline APIServer requires unit tests with all patches that introduce a new
branch or function in the code. Changes that do not come with a
unit test change should be considered closely and usually returned
to the submitter with a request for the addition of unit test.
CI Job rechecks
---------------
CI job runs may result in false negatives for a considerable number of causes:
- Network failures.
- Not enough resources on the job runner.
- Storage timeouts caused by the array running nightly maintenance jobs.
- External service failure: pypi, package repositories, etc.
- Non skyline-apiserver components spurious bugs.
And the list goes on and on.
When we detect one of these cases the normal procedure is to run a recheck
writing a comment with ``recheck`` for core Zuul jobs.
These false negative have periods of time where they spike, for example when
there are spurious failures, and a lot of rechecks are necessary until a valid
result is posted by the CI job. And it's in these periods of time where people
acquire the tendency to blindly issue rechecks without looking at the errors
reported by the jobs.
When these blind checks happen on real patch failures or with external services
that are going to be out for a while, they lead to wasted resources as well as
longer result times for patches in other projects.
The Skyline APIServer community has noticed this tendency and wants to fix it,
so now it is strongly encouraged to avoid issuing naked rechecks and instead
issue them with additional information to indicate that we have looked at the
failure and confirmed it is unrelated to the patch.
Efficient Review Guidelines
---------------------------
This section will guide you through the best practices you can follow to do
quality code reviews:
* **Failing Gate**: You can check for jobs like pep8, py38, functional
etc that are generic to all the patches and look for possible failures in
linting, unit test, functional test etc and provide feedback on fixing it.
Usually it's the author's responsibility to do a local run of tox and ensure
they don't fail upstream but if something is failing on gate and the author
is not be aware about how to fix it then we can provide valuable guidance on
it.
* **Documentation**: Check whether the patch proposed requires documentation
or not and ensure the proper documentation is added. If the proper
documentation is added then the next step is to check the status of docs job
if it's failing or passing. If it passes, you can check how it looks in HTML
as follows:
Go to ``openstack-tox-docs job`` link -> ``View Log`` -> ``docs`` and go to
the appropriate section for which the documentation is added.
Rendering: We do have a job for checking failures related to document
changes proposed (openstack-tox-docs) but we need to be aware that even if
a document change passes all the syntactical rules, it still might not be
logically correct i.e. after rendering it could be possible that the bullet
points are not under the desired section or the spacing and indentation is
not as desired. It is always good to check the final document after rendering
in the docs job which might yield possible logical errors.
* **Readability**: Readability is a big factor as remembering the logic of
every code path is not feasible and contributors change from time to time.
We should adapt to writing readable code which is easy to follow and can be
understood by anyone having knowledge about Python constructs and working of
Skyline APIServer. Sometimes it happens that a logic can only be written in
a complex way, in that case, it's always good practice to add a comment
describing the functionality. So, if a logic proposed is not readable, do
ask/suggest a more readable version of it and if that's not feasible then
asking for a comment that would explain it is also a valid review point.
* **Type Annotations**: There has been an ongoing effort to implement type
annotations all across Skyline APIServer with the help of mypy tooling.
Certain areas of code already adapt to mypy coding style and it's good
practice that new code merging into Skyline APIServer should also adapt to
it. We, as reviewers, should ensure that new code proposed should include
mypy constructs.
* **Downvoting reason**: It often happens that the reviewer adds a bunch of
comments some of which they would like to be addressed (blocking) and some
of them are good to have but not a hard requirement (non-blocking). It's a
good practice for the reviewer to mention for which comments is the -1 valid
so to make sure they are always addressed.
* **Testing**: Always check if the patch adds the associated unit, functional
and tempest tests depending on the change.
* **Commit Message**: There are few things that we should make sure the commit
message includes:
1) Make sure the author clearly explains in the commit message why the
code changes are necessary and how exactly the code changes fix the
issue.
2) It should have the appropriate tags (Eg: Closes-Bug, Related-Bug,
Blueprint, Depends-On etc). For detailed information refer to
`external references in commit message`_.
3) It should follow the guidelines of commit message length i.e.
50 characters for the summary line and 72 characters for the description.
More information can be found at `Summary of Git commit message structure`_.
4) Sometimes it happens that the author updates the code but forgets to
update the commit message leaving the commit describing the old changes.
Verify that the commit message is updated as per code changes.
* **Release Notes**: There are different cases where a releasenote is required
like fixing a bug, adding a feature, changing areas affecting upgrade etc.
You can refer to the `Release notes`_ section in our contributor docs for
more information.
* **Ways of reviewing**: There are various ways you can go about reviewing a
patch, following are some of the standard ways you can follow to provide
valuable feedback on the patch:
1) Testing it in local environment: The easiest way to check the correctness
of a code change proposed is to reproduce the issue (steps should be in
launchpad bug) and try the same steps after applying the patch to your
environment and see if the provided code changes fix the issue.
You can also go a little further to think of possible corner cases where an
end user might possibly face issues again and provide the same feedback to
cover those cases in the original change proposed.
2) Optimization: If you're not aware about the code path the patch is fixing,
you can still go ahead and provide valuable feedback about the python code
if that can be optimized to improve maintainability or performance.
.. _Review guidelines: https://docs.openstack.org/doc-contrib-guide/docs-review-guidelines.html
.. _Gerrit: https://review.opendev.org/q/project:openstack/skyline-apiserver+status:open
.. _Quick Reference: https://docs.openstack.org/infra/manual/developers.html#quick-reference
.. _Getting Started: https://docs.openstack.org/infra/manual/developers.html#getting-started
.. _Development Workflow: https://docs.openstack.org/infra/manual/developers.html#development-workflow
.. _external references in commit message: https://wiki.openstack.org/wiki/GitCommitMessages#Including_external_references
.. _Summary of Git commit message structure: https://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure
.. _Release notes: https://docs.openstack.org/skyline-apiserver/latest/contributor/releasenotes.html

View File

@ -1,6 +1,29 @@
=========================== Contributor Guide
Contributor Documentation =================
===========================
In this section you will find information on how to contribute to
skyline-apiserver. Content includes architectural overviews, tips and tricks
for setting up a development environment.
Getting Started
---------------
.. toctree:: .. toctree::
:maxdepth: 1 :maxdepth: 2
contributing
Other Resources
---------------
.. toctree::
:maxdepth: 3
gerrit
releasenotes
.. only:: html
Indices and tables
------------------
* :ref:`genindex`
* :ref:`search`

View File

@ -0,0 +1,105 @@
.. _release-notes:
Release notes
=============
The release notes for a patch should be included in the patch.
If the following applies to the patch, a release note is required:
* Upgrades
* The deployer needs to take an action when upgrading
* A new config option is added that the deployer should consider changing
from the default
* A configuration option is deprecated or removed
* Features
* A new feature is implemented
* Feature is deprecated or removed
* Current behavior is changed
* Bugs
* A security bug is fixed
* A long-standing or important bug is fixed
* APIs
* REST API changes
Reviewing release note content
------------------------------
Release notes are user facing. We expect operators to read them (and other
people interested in seeing what's in a new release may read them, too).
This makes a release note different from a commit message, which is aimed
at other developers.
Keep this in mind as you review a release note. Also, since it's user
facing, something you would think of as a nit in a code comment (for
example, bad punctuation or a misspelled word) is not really a nit in a
release note--it's something that needs to be corrected. This also applies
to the format of the release note, which should follow the standards set
out later in this document.
In summary, don't feel bad about giving a -1 for a nit in a release note. We
don't want to have to go back and fix typos later, especially for a bugfix
that's likely to be backported, which would require squashing the typo fix into
the backport patch (which is something that's easy to forget). Thus we really
want to get release notes right the first time.
Fixing a release note
---------------------
Of course, even with careful writing and reviewing, a mistake can slip
through that isn't noticed until after a release. If that happens, the
patch to correct a release note must be proposed *directly to the stable branch
in which the release note was introduced*. (Yes, this is completely different
from how we handle bugs.)
This is because of how reno scans release notes and determines what release
they go with. See `Updating Stable Branch Release Notes
<https://docs.openstack.org/reno/latest/user/usage.html#updating-stable-branch-release-notes>`_
in the `reno User Guide` for more information.
Bugs
----
For bug fixes, release notes must include the bug number in Launchpad with a
link to it as a RST link.
Note the use of the past tense ("Fixed") instead of the present tense
("Fix"). This is because although you are fixing the bug right now in the
present, operators will be reading the release notes in the future (at the
time of the release), at which time your bug fix will be a thing of the past.
Additionally, keep in mind that when your release note is published, it is
mixed in with all the other release notes and won't obviously be connected
to your patch. Thus, in order for it to make sense, you may need to repeat
information that you already have in your commit message. That's OK.
Creating the note
-----------------
Skyline APIServer uses `reno <https://docs.openstack.org/reno/latest/>`_ to
generate release notes. Please read the docs for details. In summary, use
.. code-block:: bash
$ tox -e venv -- reno new <bug-,bp-,whatever>
Then edit the sample file that was created and push it with your change.
To see the results:
.. code-block:: bash
$ git commit # Commit the change because reno scans git log.
$ tox -e releasenotes
Then look at the generated release notes files in releasenotes/build/html in
your favorite browser.

View File

@ -62,15 +62,23 @@ Release Notes
See https://docs.openstack.org/releasenotes/skyline-apiserver See https://docs.openstack.org/releasenotes/skyline-apiserver
Information Additional reference
=========== --------------------
Contents:
.. toctree:: .. toctree::
:maxdepth: 1 :maxdepth: 1
glossary common/glossary.rst
.. only:: html .. only:: html
Indices and tables
------------------
Contents:
* :ref:`genindex` * :ref:`genindex`
* :ref:`modindex` * :ref:`search`