forked from mtkennerly/poetry-dynamic-versioning
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 96e722a
Showing
20 changed files
with
1,080 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
[run] | ||
source = | ||
poetry_dynamic_versioning |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
root = true | ||
|
||
[*] | ||
indent_style = space | ||
indent_size = 4 | ||
insert_final_newline = true | ||
trim_trailing_whitespace = true | ||
|
||
[*.{feature,json,md,yaml,yml}] | ||
indent_size = 2 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
[flake8] | ||
exclude = .venv | ||
max-line-length = 100 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
text=auto |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
__pycache__/ | ||
.cache/ | ||
.coverage | ||
.env/ | ||
.idea/ | ||
.mypy_cache/ | ||
.pytest_cache/ | ||
.tox/ | ||
.venv/ | ||
*.egg-info/ | ||
/setup.py | ||
build/ | ||
dist/ | ||
htmlcov/ | ||
pip-wheel-metadata/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
- repo: https://github.com/pre-commit/pre-commit-hooks | ||
rev: v2.1.0 | ||
hooks: | ||
- id: trailing-whitespace | ||
- id: end-of-file-fixer | ||
- repo: https://github.com/Lucas-C/pre-commit-hooks | ||
rev: v1.1.6 | ||
hooks: | ||
- id: forbid-tabs | ||
- repo: https://github.com/ambv/black | ||
rev: stable | ||
hooks: | ||
- id: black | ||
- repo: https://github.com/pre-commit/mirrors-mypy | ||
rev: "v0.700" | ||
hooks: | ||
- id: mypy | ||
args: | ||
- --ignore-missing-imports | ||
- repo: local | ||
hooks: | ||
- id: flake8 | ||
name: flake8 | ||
language: system | ||
entry: poetry run flake8 | ||
types: [python] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
{ | ||
"recommendations": [ | ||
"bungcip.better-toml", | ||
"codezombiech.gitignore", | ||
"EditorConfig.EditorConfig", | ||
"ms-python.python", | ||
"redhat.vscode-yaml", | ||
"sidneys1.gitconfig", | ||
"streetsidesoftware.code-spell-checker", | ||
] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
{ | ||
"python.formatting.provider": "black", | ||
"python.linting.enabled": true, | ||
"python.linting.flake8Enabled": true, | ||
"python.linting.mypyEnabled": true, | ||
"python.linting.pylintEnabled": false, | ||
"python.pythonPath": "${workspaceFolder}/.venv", | ||
"yaml.format.enable": true, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
MIT License | ||
|
||
Copyright (c) 2019 Matthew T. Kennerly (mtkennerly) | ||
|
||
Permission is hereby granted, free of charge, to any person obtaining a copy | ||
of this software and associated documentation files (the "Software"), to deal | ||
in the Software without restriction, including without limitation the rights | ||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
copies of the Software, and to permit persons to whom the Software is | ||
furnished to do so, subject to the following conditions: | ||
|
||
The above copyright notice and this permission notice shall be included in all | ||
copies or substantial portions of the Software. | ||
|
||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
SOFTWARE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
# Dynamic versioning plugin for Poetry | ||
|
||
This package is a plugin for [Poetry](https://github.com/sdispater/poetry) | ||
to enable dynamic versioning based on tags in your version control system, | ||
powered by [Dunamai](https://github.com/mtkennerly/dunamai). | ||
|
||
Since Poetry does not yet officially support plugins | ||
(refer to [this issue](https://github.com/sdispater/poetry/issues/693)) | ||
as of the time of writing on 2019-06-04, this package takes some novel | ||
liberties to make the functionality possible. As soon as official support | ||
lands, this plugin will be updated to do things the official way. | ||
|
||
## Installation | ||
|
||
Python 3.5 or newer is required. | ||
|
||
* Run `pip install poetry-dynamic-versioning` | ||
* Add this to your pyproject.toml: | ||
```toml | ||
[tool.poetry-dynamic-versioning] | ||
enable = true | ||
``` | ||
|
||
Note that you must install the plugin in your global Python installation, | ||
**not** as a dependency in pyroject.toml, because the virtual environment | ||
that Poetry creates cannot see Poetry itself and therefore cannot patch it. | ||
|
||
## Configuration | ||
|
||
In your pyproject.toml file, you may configure the following options: | ||
|
||
* `[tool.poetry-dynamic-versioning]`: General options. | ||
* `enable`: Boolean. Default: false. Since the plugin has to be installed | ||
globally, this setting is an opt-in per project. This setting will likely | ||
be removed once plugins are officially supported. | ||
* `vcs`: String. This is the version control system to check for a version. | ||
One of: `any` (default), `git`, `mercurial`, `darcs`, `bazaar`, `subversion`. | ||
* `metadata`: Boolean. Default: unset. If true, include the commit hash in | ||
the version, and also include a dirty flag if `dirty` is true. If unset, | ||
metadata will only be included if you are on a commit without a version tag. | ||
* `dirty`: Boolean. Default: false. If true, include a dirty flag in the | ||
metadata, indicating whether there are any uncommitted changes. | ||
* `pattern`: String. This is a regular expression which will be used to find | ||
a tag representing a version. There must be a named capture group `base` | ||
with the main part of the version, and optionally you can also have groups | ||
named `pre_type` and `pre_number` for prereleases. The default is | ||
`v(?P<base>\d+\.\d+\.\d+)((?P<pre_type>[a-zA-Z]+)(?P<pre_number>\d+))?`. | ||
* `format`: String. Default: unset. This defines a custom output format for | ||
the version. Available substitutions: | ||
* `{base}` | ||
* `{epoch}` | ||
* `{pre_type}` | ||
* `{pre_number}` | ||
* `{post}` | ||
* `{dev}` | ||
* `{commit}` | ||
* `{dirty}` | ||
* `style`: String. Default: unset. One of: `pep440`, `semver`, `pvp`. | ||
These are preconfigured output formats. If you set both a `style` and | ||
`format`, then the format will be validated against the style's rules. | ||
If `style` is unset, then formats won't be validated, and the version | ||
will conform to PEP 440. | ||
* `latest-tag`: Boolean. Default: false. If true, then only check the latest | ||
tag for a version, rather than looking through all the tags until a suitable | ||
one is found to match the `pattern`. | ||
* `[tool.poetry-dynamic-versioning.subversion]`: Options specific to Subversion. | ||
* `tag-dir`: String. Default: `tags`. This is the location of tags relative | ||
to the root. | ||
|
||
Simple example: | ||
|
||
```toml | ||
[tool.poetry-dynamic-versioning] | ||
enable = true | ||
vcs = "git" | ||
style = "semver" | ||
``` | ||
|
||
## Implementation | ||
|
||
In order to side-load plugin functionality into Poetry, this package | ||
does the following: | ||
|
||
* Upon installation, it delivers a `zzz_poetry_dynamic_versioning.pth` | ||
file to your Python site-packages directory. This forces Python to | ||
automatically load the plugin after all other modules have been loaded | ||
(or at least those alphabetically prior to `zzz`). | ||
* It patches `builtins.__import__` so that, whenever the first import from | ||
Poetry finishes, `poetry.console.main` will be patched. The reason we have | ||
to wait for a Poetry import is in case you've used the get-poetry.py script, | ||
in which case there is a gap between when Python is fully loaded and when | ||
`~/.poetry/bin/poetry` adds the Poetry lib folder to the PYTHONPATH. | ||
* The patched version of `poetry.console.main` will then, when called, | ||
additionally patch `poetry.poetry.Poetry.create` to replace the version | ||
from your pyproject.toml file with the dynamically generated version. | ||
|
||
## Development | ||
|
||
This project is managed using [Poetry](https://poetry.eustace.io). | ||
Development requires Python 3.6+ because of [Black](https://github.com/ambv/black). | ||
|
||
* If you want to take advantage of the default VSCode integration, then first | ||
configure Poetry to make its virtual environment in the repository: | ||
``` | ||
poetry config settings.virtualenvs.in-project true | ||
``` | ||
* After cloning the repository, activate the tooling: | ||
``` | ||
poetry install | ||
poetry run pre-commit install | ||
``` | ||
* Run unit tests: | ||
``` | ||
poetry run pytest --cov | ||
poetry run tox | ||
``` | ||
* Run integration tests: | ||
``` | ||
./tests/integration.sh | ||
``` | ||
[Git Bash](https://gitforwindows.org) is recommended for Windows. |
Oops, something went wrong.