2018-04-15 20:40:44 +00:00
|
|
|
# HOW TO CONTRIBUTE TO TQDM
|
2015-10-11 10:18:26 +00:00
|
|
|
|
2016-06-04 12:58:44 +00:00
|
|
|
This file describes how to
|
|
|
|
|
|
|
|
- contribute changes to the project, and
|
|
|
|
- upload released to the pypi repository.
|
2015-10-11 10:18:26 +00:00
|
|
|
|
2015-11-01 16:01:18 +00:00
|
|
|
Most of the management commands have been directly placed inside the
|
2016-06-04 12:58:44 +00:00
|
|
|
Makefile:
|
|
|
|
|
|
|
|
```
|
|
|
|
make [<alias>] # on UNIX-like environments
|
|
|
|
python setup.py make [<alias>] # if make is unavailable
|
|
|
|
```
|
2015-10-13 13:15:11 +00:00
|
|
|
|
2016-06-04 12:58:44 +00:00
|
|
|
Use the alias `help` (or leave blank) to list all available aliases.
|
2015-10-13 13:25:12 +00:00
|
|
|
|
2015-10-11 14:53:32 +00:00
|
|
|
|
2018-04-15 20:40:44 +00:00
|
|
|
## HOW TO COMMIT CONTRIBUTIONS
|
2015-10-11 10:18:26 +00:00
|
|
|
|
2015-11-01 16:01:18 +00:00
|
|
|
Contributions to the project are made using the "Fork & Pull" model. The
|
|
|
|
typical steps would be:
|
2015-10-11 10:18:26 +00:00
|
|
|
|
2016-06-04 12:58:44 +00:00
|
|
|
1. create an account on [github](https://github.com)
|
|
|
|
2. fork [tqdm](https://github.com/tqdm/tqdm)
|
|
|
|
3. make a local clone: `git clone https://github.com/your_account/tqdm.git`
|
|
|
|
4. make changes on the local copy
|
|
|
|
5. test (see below) and commit changes `git commit -a -m "my message"`
|
|
|
|
6. `push` to your github account: `git push origin`
|
|
|
|
7. create a Pull Request (PR) from your github fork
|
2015-10-11 17:05:33 +00:00
|
|
|
(go to your fork's webpage and click on "Pull Request."
|
|
|
|
You can then add a message to describe your proposal.)
|
2015-10-11 10:18:26 +00:00
|
|
|
|
|
|
|
|
2018-04-15 20:40:44 +00:00
|
|
|
## TESTING
|
2015-10-11 11:35:16 +00:00
|
|
|
|
2016-06-04 12:58:44 +00:00
|
|
|
To test functionality (such as before submitting a Pull
|
2015-10-11 17:05:33 +00:00
|
|
|
Request), there are a number of unit tests.
|
2015-10-11 11:35:16 +00:00
|
|
|
|
2018-04-15 20:40:44 +00:00
|
|
|
### Standard unit tests
|
2015-10-13 22:42:01 +00:00
|
|
|
|
|
|
|
The standard way to run the tests:
|
2015-10-11 17:05:33 +00:00
|
|
|
|
|
|
|
- install `tox`
|
|
|
|
- `cd` to the root of the `tqdm` directory (in the same folder as this file)
|
2015-10-13 13:15:11 +00:00
|
|
|
- run the following command:
|
2015-10-11 11:35:16 +00:00
|
|
|
|
2015-10-15 13:47:02 +00:00
|
|
|
```
|
2016-06-04 12:58:44 +00:00
|
|
|
[python setup.py] make test
|
|
|
|
# or:
|
2015-10-13 22:42:01 +00:00
|
|
|
tox --skip-missing-interpreters
|
2015-10-11 10:18:26 +00:00
|
|
|
```
|
2015-10-13 13:15:11 +00:00
|
|
|
|
2015-11-01 16:01:18 +00:00
|
|
|
This will build the module and run the tests in a virtual environment.
|
|
|
|
Errors and coverage rates will be output to the console/log. (Ignore missing
|
|
|
|
interpreters errors - these are due to the local machine missing certain
|
|
|
|
versions of Python.)
|
2015-10-13 20:49:38 +00:00
|
|
|
|
2015-11-01 16:01:18 +00:00
|
|
|
Note: to install all versions of the Python interpreter that are specified
|
|
|
|
in [tox.ini](https://raw.githubusercontent.com/tqdm/tqdm/master/tox.ini),
|
|
|
|
you can use `MiniConda` to install a minimal setup. You must also make sure
|
|
|
|
that each distribution has an alias to call the Python interpreter:
|
|
|
|
`python27` for Python 2.7's interpreter, `python32` for Python 3.2's, etc.
|
2015-10-13 20:49:38 +00:00
|
|
|
|
2018-04-15 20:40:44 +00:00
|
|
|
### Alternative unit tests with Nose
|
2015-10-13 22:42:01 +00:00
|
|
|
|
2016-06-04 12:58:44 +00:00
|
|
|
Alternatively, use `nose` to run the tests just for the current Python version:
|
2015-10-13 22:42:01 +00:00
|
|
|
|
|
|
|
- install `nose` and `flake8`
|
2015-11-01 16:01:18 +00:00
|
|
|
- run the following command:
|
2015-10-13 22:42:01 +00:00
|
|
|
|
|
|
|
```
|
2016-06-04 12:58:44 +00:00
|
|
|
[python setup.py] make alltests
|
2015-10-13 22:42:01 +00:00
|
|
|
```
|
|
|
|
|
2016-06-04 12:58:44 +00:00
|
|
|
|
|
|
|
|
2018-04-15 20:40:44 +00:00
|
|
|
# MANAGE A NEW RELEASE
|
2016-06-04 12:58:44 +00:00
|
|
|
|
|
|
|
This section is intended for the project's maintainers and describes
|
|
|
|
how to build and upload a new release. Once again,
|
|
|
|
`[python setup.py] make [<alias>]` will help.
|
|
|
|
|
|
|
|
|
2018-04-15 20:40:44 +00:00
|
|
|
## SEMANTIC VERSIONING
|
2016-06-04 12:58:44 +00:00
|
|
|
|
|
|
|
The tqdm repository managers should:
|
|
|
|
|
|
|
|
- regularly bump the version number in the file
|
|
|
|
[_version.py](https://raw.githubusercontent.com/tqdm/tqdm/master/tqdm/_version.py)
|
2018-05-31 16:13:41 +00:00
|
|
|
- follow the [Semantic Versioning](https://semver.org/) convention
|
2016-06-04 12:58:44 +00:00
|
|
|
- take care of this (instead of users) to avoid PR conflicts
|
|
|
|
solely due to the version file bumping
|
|
|
|
|
|
|
|
Note: tools can be used to automate this process, such as
|
|
|
|
[bumpversion](https://github.com/peritus/bumpversion) or
|
|
|
|
[python-semanticversion](https://github.com/rbarrois/python-semanticversion/).
|
|
|
|
|
|
|
|
|
2018-04-15 20:40:44 +00:00
|
|
|
## CHECKING SETUP.PY
|
2016-06-04 12:58:44 +00:00
|
|
|
|
|
|
|
To check that the `setup.py` file is compliant with PyPi requirements (e.g.
|
|
|
|
version number; reStructuredText in README.rst) use:
|
|
|
|
|
|
|
|
```
|
|
|
|
[python setup.py] make testsetup
|
|
|
|
```
|
|
|
|
|
|
|
|
To upload just metadata (including overwriting mistakenly uploaded metadata)
|
|
|
|
to PyPi, use:
|
|
|
|
|
|
|
|
```
|
|
|
|
[python setup.py] make pypimeta
|
|
|
|
```
|
|
|
|
|
|
|
|
|
2018-04-15 20:40:44 +00:00
|
|
|
## MERGING PULL REQUESTS
|
2016-06-04 12:58:44 +00:00
|
|
|
|
|
|
|
This section describes how to cleanly merge PRs.
|
|
|
|
|
2018-04-15 20:40:44 +00:00
|
|
|
### 1 Rebase
|
2016-06-04 12:58:44 +00:00
|
|
|
|
|
|
|
From your project repository, merge and test
|
|
|
|
(replace `pr-branch-name` as appropriate):
|
2015-10-13 22:42:01 +00:00
|
|
|
|
|
|
|
```
|
2016-06-04 12:58:44 +00:00
|
|
|
git fetch origin
|
|
|
|
git checkout -b pr-branch-name origin/pr-branch-name
|
|
|
|
git rebase master
|
|
|
|
```
|
|
|
|
|
|
|
|
If there are conflicts:
|
|
|
|
|
|
|
|
```
|
|
|
|
git mergetool
|
|
|
|
git rebase --continue
|
|
|
|
```
|
|
|
|
|
2018-04-15 20:40:44 +00:00
|
|
|
### 2 Push
|
2016-06-04 12:58:44 +00:00
|
|
|
|
|
|
|
Update branch with the rebased history:
|
|
|
|
|
2015-10-13 22:42:01 +00:00
|
|
|
```
|
2016-06-04 12:58:44 +00:00
|
|
|
git push origin pr-branch-name --force
|
|
|
|
```
|
|
|
|
|
|
|
|
Non maintainers can stop here.
|
|
|
|
|
|
|
|
Note: NEVER just `git push --force` (this will push all local branches,
|
|
|
|
overwriting remotes).
|
|
|
|
|
2018-04-15 20:40:44 +00:00
|
|
|
### 3 Merge
|
2016-06-04 12:58:44 +00:00
|
|
|
|
|
|
|
```
|
|
|
|
git checkout master
|
|
|
|
git merge --no-ff pr-branch-name
|
|
|
|
```
|
|
|
|
|
2018-04-15 20:40:44 +00:00
|
|
|
### 4 Test
|
2016-06-04 12:58:44 +00:00
|
|
|
|
|
|
|
```
|
|
|
|
[python setup.py] make alltests
|
|
|
|
```
|
|
|
|
|
2018-04-15 20:40:44 +00:00
|
|
|
### 5 Version
|
2016-06-04 12:58:44 +00:00
|
|
|
|
|
|
|
Modify tqdm/_version.py and ammend the last (merge) commit:
|
|
|
|
|
|
|
|
```
|
|
|
|
git add tqdm/_version.py
|
|
|
|
git commit --amend # Add "+ bump version" in the commit message
|
|
|
|
```
|
|
|
|
|
2018-04-15 20:40:44 +00:00
|
|
|
### 6 Push to master
|
2016-06-04 12:58:44 +00:00
|
|
|
|
|
|
|
```
|
|
|
|
git push origin master
|
|
|
|
```
|
|
|
|
|
|
|
|
|
2018-04-15 20:40:44 +00:00
|
|
|
## BUILDING A RELEASE AND UPLOADING TO PYPI
|
2016-06-04 12:58:44 +00:00
|
|
|
|
|
|
|
Formally publishing requires additional steps: testing and tagging.
|
|
|
|
|
2018-04-15 20:40:44 +00:00
|
|
|
### Test
|
2016-06-04 12:58:44 +00:00
|
|
|
|
|
|
|
- ensure that all online CI tests have passed
|
|
|
|
- check `setup.py` and `MANIFEST.in` - which define the packaging
|
2018-08-17 20:54:53 +00:00
|
|
|
process and info that will be uploaded to [pypi](https://pypi.org) -
|
2016-06-04 12:58:44 +00:00
|
|
|
using `[python setup.py] make installdev`
|
|
|
|
|
2018-04-15 20:40:44 +00:00
|
|
|
### Tag
|
2016-06-04 12:58:44 +00:00
|
|
|
|
|
|
|
- ensure the version has been bumped, committed **and** tagged.
|
|
|
|
The tag format is `v{major}.{minor}.{patch}`, for example: `v4.4.1`.
|
|
|
|
The current commit's tag is used in the version checking process.
|
|
|
|
If the current commit is not tagged appropriately, the version will
|
|
|
|
display as `v{major}.{minor}.{patch}-{commit_hash}`.
|
|
|
|
|
2018-04-15 20:40:44 +00:00
|
|
|
### Upload
|
2016-06-04 12:58:44 +00:00
|
|
|
|
|
|
|
Build tqdm into a distributable python package:
|
|
|
|
|
|
|
|
```
|
|
|
|
[python setup.py] make build
|
|
|
|
```
|
|
|
|
|
|
|
|
This will generate several builds in the `dist/` folder. On non-windows
|
|
|
|
machines the windows `exe` installer may fail to build. This is normal.
|
|
|
|
|
|
|
|
Finally, upload everything to pypi. This can be done easily using the
|
|
|
|
[twine](https://github.com/pypa/twine) module:
|
|
|
|
|
|
|
|
```
|
|
|
|
[python setup.py] make pypi
|
|
|
|
```
|
|
|
|
|
|
|
|
Also, the new release can (should) be added to `github` by creating a new
|
|
|
|
release from the web interface; uploading packages from the `dist/` folder
|
|
|
|
created by `[python setup.py] make build`.
|
2018-04-03 18:27:47 +00:00
|
|
|
The [wiki] can be automatically updated with github release notes by
|
|
|
|
running `make` within the wiki repository.
|
|
|
|
|
|
|
|
[wiki]: https://github.com/tqdm/tqdm/wiki
|
2016-06-04 12:58:44 +00:00
|
|
|
|
2018-04-15 20:40:44 +00:00
|
|
|
### Notes
|
2016-06-04 12:58:44 +00:00
|
|
|
|
2018-08-17 20:54:53 +00:00
|
|
|
- you can also test on the pypi test servers `test.pypi.org`
|
2016-06-04 12:58:44 +00:00
|
|
|
before the real deployment
|
|
|
|
- in case of a mistake, you can delete an uploaded release on pypi, but you
|
|
|
|
cannot re-upload another with the same version number
|
|
|
|
- in case of a mistake in the metadata on pypi (e.g. bad README),
|
|
|
|
updating just the metadata is possible: `[python setup.py] make pypimeta`
|
|
|
|
|
|
|
|
|
2018-04-15 20:40:44 +00:00
|
|
|
## UPDATING GH-PAGES
|
2016-10-30 16:15:30 +00:00
|
|
|
|
|
|
|
The most important file is README.rst, which sould always be kept up-to-date
|
|
|
|
and in sync with the in-line source documentation. This will affect all of the
|
|
|
|
following:
|
|
|
|
|
|
|
|
- The [main repository site](https://github.com/tqdm/tqdm) which automatically
|
|
|
|
serves the latest README.rst as well as links to all of github's features.
|
|
|
|
This is the preferred online referral link for tqdm.
|
2018-08-17 20:54:53 +00:00
|
|
|
- The [PyPi mirror](https://pypi.org/project/tqdm) which automatically
|
2016-10-30 16:15:30 +00:00
|
|
|
serves the latest release built from README.rst as well as links to past
|
|
|
|
releases.
|
|
|
|
- Many external web crawlers.
|
|
|
|
|
|
|
|
|
|
|
|
Additionally (less maintained), there exists:
|
|
|
|
|
2018-04-03 18:27:47 +00:00
|
|
|
- A [wiki] which is publicly editable.
|
2016-10-30 16:15:30 +00:00
|
|
|
- The [gh-pages project](https://tqdm.github.io/tqdm/) which is built from the
|
|
|
|
[gh-pages branch](https://github.com/tqdm/tqdm/tree/gh-pages), which is
|
|
|
|
built using [asv](https://github.com/spacetelescope/asv/).
|
|
|
|
- The [gh-pages root](https://tqdm.github.io/) which is built from a separate
|
|
|
|
outdated [github.io repo](https://github.com/tqdm/tqdm.github.io).
|
|
|
|
|
|
|
|
|
2018-04-15 20:40:44 +00:00
|
|
|
## QUICK DEV SUMMARY
|
2016-06-04 12:58:44 +00:00
|
|
|
|
|
|
|
For expereinced devs, once happy with local master:
|
|
|
|
|
|
|
|
1. bump version in `tqdm/_version.py`
|
|
|
|
2. test (`[python setup.py] make alltests`)
|
|
|
|
3. `git commit [--amend] # -m "bump version"`
|
|
|
|
4. `git push`
|
|
|
|
5. wait for tests to pass
|
|
|
|
a) in case of failure, fix and go back to (2)
|
|
|
|
6. `git tag vM.m.p && git push --tags`
|
|
|
|
7. `[python setup.py] make distclean`
|
|
|
|
8. `[python setup.py] make build`
|
2018-08-20 15:15:11 +00:00
|
|
|
9. upload to PyPI using one of the following:
|
|
|
|
a) `[python setup.py] make pypi`
|
|
|
|
b) `twine upload -s -i $(git config user.signingkey) dist/tqdm-*`
|
|
|
|
10. create new release on https://github.com/tqdm/tqdm/releases
|
|
|
|
a) add helpful release notes
|
|
|
|
b) attach dist/tqdm-* binaries (usually only *.whl*)
|
|
|
|
11. run `make` in the `wiki` submodule to update release notes
|
|
|
|
12. run `make deploy` in the `docs` submodule to update website
|
|
|
|
13. accept the automated PR in the `feedstock` submodule to update conda
|
|
|
|
|
2019-01-04 18:42:21 +00:00
|
|
|
The last three steps require a one-time `make submodules` to clone
|
2018-08-20 15:15:11 +00:00
|
|
|
`docs`, `wiki`, and `feedstock`.
|