Robottelo Setup ================= Every open source project lives from the generous help by contributors that sacrifice their time and **Robottelo** is no different. To make participation as pleasant as possible, this project adheres to the `Code of Conduct`_ by the Python Software Foundation. Here are a few hints and rules to get you started: - No contribution is too small; please submit as many fixes for typos and grammar bloopers as you can! - Don’t *ever* break backward compatibility. If it ever *has* to happen for higher reasons, Robottelo will follow the proven procedures_ of the Twisted project. - *Always* add tests and docs for your code. This is a hard rule; patches with missing tests or documentation won’t be merged. If a feature is not tested or documented, it doesn’t exist. - Obey `PEP 8`_ and `PEP 257`_. - Write `good commit messages`_. - Ideally, squash_ your commits, i.e. make your pull requests just one commit. .. note:: If you have something great but aren’t sure whether it adheres -- or even can adhere -- to the rules above: **please submit a pull request anyway**! In the best case, we can mold it into something, in the worst case the pull request gets politely closed. There’s absolutely nothing to fear. Thank you for considering to contribute to Robottelo! If you have any question or concerns, feel free to reach out to me. I can usually be found on the ``#robottelo`` channel on freenode_. Fork It ------- * Add Robottelo as a remote repository to your fork :: (master) $ git remote add upstream git@github.com:SatelliteQE/robottelo.git * Fetch latest upstream code :: (master) $ git fetch upstream * Rebase your fork's master repo to match upstream's :: (master) $ git rebase upstream/master Branch it before you work ------------------------- * Create new local repo to work on issue or feature :: (master) $ git checkout -b branch_name * Make all your changes in the local branch_name repo and commit with a nice, short subject and a detailed message :: (branch_name) $ git add (branch_name) $ git commit Adding feature so and so to module blah. Here I will add more information about what the entire commit is about. So You Think You Can Push It? ----------------------------- * PEP8 and PyLint Before you commit your changes and prepare a Pull Request (PR), please make sure to check your code using pep8 and pylint to make sure your code follows our standards as well as catch issues early: :: (branch_name) $ pylint --rcfile=pylint.cfg -rn -f colorized tests/ui/test_domain.py ************* Module tests.ui.test_domain C: 13, 0: Invalid constant name "domain" (invalid-name) C: 16, 0: Missing class docstring (missing-docstring) C: 18, 4: Missing method docstring (missing-docstring) R: 16, 0: Too many public methods (52/20) (too-many-public-methods) (branch_name) $ pep8 --first --show-source tests/ui/test_operatingSys.py -v user configuration: /Users/omaciel/.config/pep8 checking tests/ui/test_operatingSys.py tests/ui/test_operatingSys.py:39:80: E501 line too long (82 > 79 characters) # self.assertTrue(self.user.wait_until_element(locators["notif.success"])) ^ As you can see, this will allow you to improve your code by providing docstrings and/or tweaking your methods/functions/classes to conform with well known standards for python coding * Ready to push your changes for a PR? :: (branch_name) $ git push origin branch_name * Now use Github's web UI to create your PR. Updating a Pull Request? ------------------------ * Need to make more changes either because you received feedback for your PR or because you're not done yet? :: (branch_name) $ git add (branch_name) $ git commit --amend (branch_name) $ git push * By using --amend you get to keep all your changes as one single commit, which is much cleaner imho :) What if Github website says that your PR cannot be merged? ---------------------------------------------------------- * First, let's rebase your master to reflect upstream's master :: (branch_name) $ git checkout master (master) $ git fetch upstream (master) $ git rebase upstream/master (master) $ git push * Now, let's rebase our working directory against your master :: (master) $ git checkout branch_name (branch_name) $ git rebase master * Push your rebased branch_name back to Github :: (branch_name) $ git push origin branch_name * Git complaining about rebase because commit history is being changed? Use the --force Luke :: (branch_name) $ git push origin branch_name --force Picky Rebase? ------------- * Got to handle some issues with rebase? First, edit the offending file to resolve the conflict. Next, add it and commit it with --amend :: (branch_name) $ git add (branch_name) $ git commit --amend * Push it back to Github as explained before Help!!! I Want to Undo My Last Commit!!! ---------------------------------------- So you made changes to `FILE` but you changed your mind and want to revert your changes? Don't want to preserve your changes either? :: (branch_name) $ git checkout -- FILE So you made changes to `FILE`, ran `git add FILE` but you changed your mind and want to revert your changes? Want to preserve your changes? :: (branch_name) $ git reset HEAD FILE So you went ahead and committed your changes and everything is 'staged', but you changed your mind and want to 'unstage' it? * If you want to preserve your changes so that you can continue working on them: :: (branch_name) $ git reset --soft HEAD~ * If you **don't** want to preserve your changes: :: (branch_name) $ git reset --hard HEAD~ **NOTE**: Please note that `HEAD~` represents 'the last commit'. If you want to undo the last 3 commits, then change `HEAD~` to `HEAD~3`. .. _squash: http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html .. _`PEP 8`: http://www.python.org/dev/peps/pep-0008/ .. _`PEP 257`: http://www.python.org/dev/peps/pep-0257/ .. _`good commit messages`: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html .. _`Code of Conduct`: http://www.python.org/psf/codeofconduct/ .. _changelog: https://github.com/omaciel/robottelo/blob/master/HISTORY.rst .. _AUTHORS.rst: https://github.com/omaciel/robottelo/blob/master/AUTHORS.rst .. _procedures: http://twistedmatrix.com/trac/wiki/CompatibilityPolicy .. _`freenode`: http://freenode.net