16 Commits
0.8.2 ... 0.8.3

Author SHA1 Message Date
7400d1e3cd Update copyright for the new year 2022-01-05 02:20:46 -05:00
a7e5020d5f Update changelog with 0.8.3 2022-01-05 02:20:17 -05:00
015915adf7 Bump patch version for 3.10 classifier 2022-01-05 02:18:53 -05:00
a457cb99d2 Merge pull request #67 from enpaul/enp/ci
Update CI
2022-01-05 02:17:28 -05:00
1004a247b1 Remove tox version test requirement from stable feature list 2022-01-05 02:12:02 -05:00
f1f7a63774 Add toml typing stubs
Fix typing errors with new version of mypy
2022-01-05 02:12:02 -05:00
087db95c43 Update toxfile
Wrap long lines to improve readability
Update safety command to use --json flag instead of --bare flag
Update security env to skip package install
2022-01-05 02:12:02 -05:00
bb0db0fa1d Add python 3.10 classifier 2022-01-05 02:12:02 -05:00
6ac16a5c4d Update CI structure
Use new install-poetry script
Set path to include poetry directory
Use native poetry env management
2022-01-05 02:12:02 -05:00
7f8d27709a Update black to latest beta 2022-01-05 01:00:34 -05:00
17a2e5af64 Fix usage of installed poetry version in CI 2021-12-04 12:49:15 -05:00
c05187f2e6 Update CI poetry installation to use new install-poetry script 2021-12-04 11:57:29 -05:00
5ccc56956b Fix misinterpreted 3.10 version string as float 2021-12-04 11:45:16 -05:00
dae91a3a69 Update lockfile 2021-12-04 11:38:30 -05:00
2f35d83363 Add python3.10 to CI tests 2021-12-04 11:34:36 -05:00
bba0c54b70 Fix outdated documentation
Remove reference to deprecated --require-poetry option
Update developer docs to note that py3.7 or later is required
2021-12-04 11:33:24 -05:00
10 changed files with 759 additions and 681 deletions

View File

@@ -7,66 +7,29 @@
set -e;
# ##### Prereqs #####
#
# Set global vars for usage in the script, create the cache directory so we can rely
# on that existing, then dump some diagnostic info for later reference.
#
CI_VENV=$HOME/ci;
CI_CACHE=$HOME/.cache;
CI_CACHE_GET_POETRY="$CI_CACHE/get-poetry.py";
CI_POETRY=$HOME/.poetry/bin/poetry;
CI_VENV_PIP="$CI_VENV/bin/pip";
CI_VENV_PIP_VERSION=19.3.1;
CI_VENV_TOX="$CI_VENV/bin/tox";
POETRY_VERSION=1.1.12;
mkdir --parents "$CI_CACHE";
command -v python;
python --version;
# ##### Install Poetry #####
#
# Download the poetry install script to the cache directory and then install poetry.
# After dump the poetry version for later reference.
#
curl https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py \
--output "$CI_CACHE_GET_POETRY" \
curl --location https://install.python-poetry.org \
--output "$CI_CACHE/install-poetry.py" \
--silent \
--show-error \
--location;
python "$CI_CACHE_GET_POETRY" --yes 1>/dev/null;
--show-error;
python "$CI_CACHE/install-poetry.py" \
--version "$POETRY_VERSION" \
--yes;
poetry --version --no-ansi;
poetry run pip --version;
python "$CI_POETRY" --version --no-ansi;
# ##### Setup Runtime Venv #####
#
# Create a virtual environment for poetry to use, upgrade pip in that venv to a pinned
# version, then install the current project to the venv.
#
# Note 1: Poetry, Tox, and this project plugin all use pip under the hood for package
# installation. This means that even though we are creating up to eight venvs
# during a given CI run they all share the same download cache.
# Note 2: The "VIRTUAL_ENV=$CI_VENV" prefix on the poetry commands below sets the venv
# that poetry will use for operations. There is no CLI flag for poetry that
# directs it to use a given environment, but if it finds itself in an existing
# environment it will use it and skip environment creation.
#
python -m venv "$CI_VENV";
$CI_VENV_PIP install "pip==$CI_VENV_PIP_VERSION" \
--upgrade \
--quiet;
VIRTUAL_ENV=$CI_VENV "$CI_POETRY" install \
poetry install \
--extras poetry \
--quiet \
--no-ansi \
&>/dev/null;
--remove-untracked \
--no-ansi;
# ##### Print Debug Info #####
#
# Print the pip and tox versions (which will include registered plugins)
#
$CI_VENV_PIP --version;
echo "tox $($CI_VENV_TOX --version)";
poetry env info;
poetry run tox --version;

View File

@@ -11,22 +11,24 @@ jobs:
strategy:
matrix:
python:
- version: 3.6
- version: "3.6"
toxenv: py36
- version: 3.7
- version: "3.7"
toxenv: py37
- version: 3.8
- version: "3.8"
toxenv: py38
- version: 3.9
- version: "3.9"
toxenv: py39
- version: "3.10"
toxenv: py310
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup:python${{ matrix.python.version }}
- name: Install Python ${{ matrix.python.version }}
uses: actions/setup-python@v1
with:
python-version: ${{ matrix.python.version }}
- name: Setup:cache
- name: Configure Job Cache
uses: actions/cache@v2
with:
path: |
@@ -37,20 +39,22 @@ jobs:
# will be invalidated, and thus all packages will be redownloaded, if the
# lockfile is updated
key: ${{ runner.os }}-${{ matrix.python.toxenv }}-${{ hashFiles('**/poetry.lock') }}
- name: Setup:env
- name: Configure Path
run: echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: Configure Environment
run: .github/scripts/setup-env.sh
- name: Run:${{ matrix.python.toxenv }}
run: $HOME/ci/bin/tox -e ${{ matrix.python.toxenv }}
- name: Run Toxenv ${{ matrix.python.toxenv }}
run: poetry run tox -e ${{ matrix.python.toxenv }}
Check:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup:python3.8
- name: Install Python 3.8
uses: actions/setup-python@v1
with:
python-version: 3.8
- name: Setup:cache
- name: Configure Job Cache
uses: actions/cache@v2
with:
path: |
@@ -60,11 +64,13 @@ jobs:
# Hardcoded 'py38' slug here lets this cache piggyback on the 'py38' cache
# that is generated for the tests above
key: ${{ runner.os }}-py38-${{ hashFiles('**/poetry.lock') }}
- name: Setup:env
- name: Configure Path
run: echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: Configure Environment
run: .github/scripts/setup-env.sh
- name: Run:static
run: $HOME/ci/bin/tox -e static
- name: Run:static-tests
run: $HOME/ci/bin/tox -e static-tests
- name: Run:security
run: $HOME/ci/bin/tox -e security
- name: Run Static Analysis Checks
run: poetry run tox -e static
- name: Run Static Analysis Checks (Tests)
run: poetry run tox -e static-tests
- name: Run Security Checks
run: poetry run tox -e security

View File

@@ -2,6 +2,14 @@
See also: [Github Release Page](https://github.com/enpaul/tox-poetry-installer/releases).
## Version 0.8.3
View this release on:
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.8.3),
[PyPI](https://pypi.org/project/tox-poetry-installer/0.8.3/)
- Add PyPI classifier for Python 3.10 compatibility
## Version 0.8.2
View this release on:

View File

@@ -1,4 +1,4 @@
## Copyright 2020, 2021 Ethan Paul
## Copyright 2020, 2022 Ethan Paul
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

View File

@@ -330,9 +330,9 @@ python -c '\
'
```
> **Note:** To force Tox to fail if Poetry is not installed, run the `tox` command with the
> `--require-poetry` option. See the [Runtime Options](#runtime-options) for more
> information.
> **Note:** To force Tox to fail if Poetry is not installed, add the `require_poetry = true`
> option to the tox `[testenv]` configuration. See the
> [Config Options](#configuration-options) for more information.
## Developer Documentation
@@ -352,8 +352,8 @@ are tracked on [Github](https://github.com/enpaul/tox-poetry-installer/releases)
[fork the repository](https://docs.github.com/en/enterprise/2.20/user/github/getting-started-with-github/fork-a-repo)
and [open a pull request](https://github.com/enpaul/tox-poetry-installer/compare).
Developing this project requires at least [Python 3.6](https://www.python.org/downloads/)
and at least [Poetry 1.0](https://python-poetry.org/docs/#installation). GNU Make can
Developing this project requires [Python 3.7+](https://www.python.org/downloads/) and
[Poetry 1.0](https://python-poetry.org/docs/#installation) or later. GNU Make can
optionally be used to quickly setup a local development environment, but this is not
required.
@@ -426,6 +426,6 @@ Everything in Beta plus...
- [ ] Fully replace dependency on `poetry` with dependency on `poetry-core` ([#2](https://github.com/enpaul/tox-poetry-installer/issues/2))
- [x] Add comprehensive unit tests
- [ ] Add tests for each feature version of Tox between 3.8 and 3.20
- [ ] ~Add tests for each feature version of Tox between 3.8 and 3.20~
- [x] Add tests for Python-3.6, 3.7, 3.8, and 3.9
- [x] Add Github Actions based CI

1238
poetry.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
[tool.poetry]
name = "tox-poetry-installer"
version = "0.8.2"
version = "0.8.3"
license = "MIT"
authors = ["Ethan Paul <24588726+enpaul@users.noreply.github.com>"]
description = "A plugin for Tox that lets you install test environment dependencies from the Poetry lockfile"
@@ -27,6 +27,7 @@ classifiers = [
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: Implementation :: CPython",
]
@@ -44,10 +45,12 @@ tox = "^3.8.0"
[tool.poetry.dev-dependencies]
bandit = "^1.6.2"
black = { version = "^20.8b1", allow-prereleases = true }
black = {version = "^21.12b0", allow-prereleases = true, python = "^3.7"}
blacken-docs = "^1.8.0"
ipython = { version = "^7.18.1", python = "^3.7" }
mypy = "^0.782"
mdformat = "^0.6"
mdformat-gfm = "^0.2"
mypy = "^0.930"
pre-commit = "^2.7.1"
pre-commit-hooks = "^3.3.0"
pylint = "^2.4.4"
@@ -57,8 +60,7 @@ reorder-python-imports = "^2.3.5"
safety = "^1.9.0"
toml = "^0.10.1"
tox = "^3.20.0"
mdformat = "^0.6.4"
mdformat-gfm = "^0.2"
types-toml = "^0.10.1"
[build-system]
requires = ["poetry-core>=1.0.0"]

View File

@@ -20,19 +20,16 @@ def test_exclude_unsafe():
assert Provider.UNSAFE_PACKAGES == constants.UNSAFE_PACKAGES
for dep in constants.UNSAFE_PACKAGES:
assert utilities.identify_transients(dep, dict(), None) == []
assert not utilities.identify_transients(dep, {}, None)
def test_allow_missing():
"""Test that the ``allow_missing`` parameter works as expected"""
with pytest.raises(exceptions.LockedDepNotFoundError):
utilities.identify_transients("luke-skywalker", dict(), None)
utilities.identify_transients("luke-skywalker", {}, None)
assert (
utilities.identify_transients(
"darth-vader", dict(), None, allow_missing=["darth-vader"]
)
== []
assert not utilities.identify_transients(
"darth-vader", {}, None, allow_missing=["darth-vader"]
)
@@ -51,7 +48,7 @@ def test_exclude_pep508():
"=>foo",
]:
with pytest.raises(exceptions.LockedDepVersionConflictError):
utilities.identify_transients(version, dict(), None)
utilities.identify_transients(version, {}, None)
def test_functional(mock_poetry_factory, mock_venv):

46
tox.ini
View File

@@ -1,5 +1,5 @@
[tox]
envlist = py36, py37, py38, py39, static, static-tests, security
envlist = py36, py37, py38, py39, py310, static, static-tests, security
isolated_build = true
skip_missing_interpreters = true
@@ -14,7 +14,10 @@ locked_deps =
pytest-cov
toml
commands =
pytest --cov {toxinidir}/tox_poetry_installer --cov-config {toxinidir}/.coveragerc --cov-report term-missing {toxinidir}/tests/
pytest {toxinidir}/tests/ \
--cov {toxinidir}/tox_poetry_installer \
--cov-config {toxinidir}/.coveragerc \
--cov-report term-missing
[testenv:static]
description = Static formatting and quality enforcement
@@ -31,10 +34,15 @@ locked_deps =
pre-commit
pre-commit-hooks
pylint
types-toml
commands =
pre-commit run --all-files
pylint --rcfile {toxinidir}/.pylintrc {toxinidir}/tox_poetry_installer/
mypy --ignore-missing-imports --no-strict-optional {toxinidir}/tox_poetry_installer/
pre-commit run \
--all-files
pylint {toxinidir}/tox_poetry_installer/ \
--rcfile {toxinidir}/.pylintrc
mypy {toxinidir}/tox_poetry_installer/ \
--ignore-missing-imports \
--no-strict-optional
[testenv:static-tests]
description = Static formatting and quality enforcement for the tests
@@ -45,21 +53,37 @@ locked_deps =
pylint
pytest
mypy
types-toml
commands =
pylint --rcfile {toxinidir}/.pylintrc {toxinidir}/tests/
mypy --ignore-missing-imports --no-strict-optional {toxinidir}/tests/
pylint {toxinidir}/tests/ \
--rcfile {toxinidir}/.pylintrc
mypy {toxinidir}/tests/ \
--ignore-missing-imports \
--no-strict-optional
[testenv:security]
description = Security checks
basepython = python3.8
platform = linux
ignore_errors = true
skip_install = true
locked_deps =
bandit
safety
poetry
commands =
bandit --recursive --quiet {toxinidir}/tox_poetry_installer/
bandit --recursive --quiet --skip B101 {toxinidir}/tests/
poetry export --format requirements.txt --output {envtmpdir}/requirements.txt --without-hashes --dev
safety check --bare --file {envtmpdir}/requirements.txt
bandit {toxinidir}/tox_poetry_installer/ \
--recursive \
--quiet
bandit {toxinidir}/tests/ \
--recursive \
--quiet \
--skip B101
poetry export \
--format requirements.txt \
--output {envtmpdir}/requirements.txt \
--without-hashes \
--dev
safety check \
--file {envtmpdir}/requirements.txt \
--json

View File

@@ -1,7 +1,7 @@
# pylint: disable=missing-docstring
__title__ = "tox-poetry-installer"
__summary__ = "A plugin for Tox that lets you install test environment dependencies from the Poetry lockfile"
__version__ = "0.8.2"
__version__ = "0.8.3"
__url__ = "https://github.com/enpaul/tox-poetry-installer/"
__license__ = "MIT"
__authors__ = ["Ethan Paul <24588726+enpaul@users.noreply.github.com>"]