From c1c6284990d3d175dfe409e9138bf59db98e215e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Jan 2023 23:02:30 +0000 Subject: [PATCH 01/26] Bump coverage from 7.0.2 to 7.0.3 in /compilesketches Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.0.2 to 7.0.3. - [Release notes](https://github.com/nedbat/coveragepy/releases) - [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst) - [Commits](https://github.com/nedbat/coveragepy/compare/7.0.2...7.0.3) --- updated-dependencies: - dependency-name: coverage dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- compilesketches/tests/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compilesketches/tests/requirements.txt b/compilesketches/tests/requirements.txt index 0c7cbfae..b4191785 100644 --- a/compilesketches/tests/requirements.txt +++ b/compilesketches/tests/requirements.txt @@ -1,4 +1,4 @@ --requirement ../requirements.txt -coverage==7.0.2 +coverage==7.0.3 pytest==7.2.0 pytest-mock==3.10.0 From 6ee2300b412f81219048a4e59ffb562cda988dda Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Jan 2023 23:06:12 +0000 Subject: [PATCH 02/26] Bump coverage from 7.0.3 to 7.0.4 in /compilesketches Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.0.3 to 7.0.4. - [Release notes](https://github.com/nedbat/coveragepy/releases) - [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst) - [Commits](https://github.com/nedbat/coveragepy/compare/7.0.3...7.0.4) --- updated-dependencies: - dependency-name: coverage dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- compilesketches/tests/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compilesketches/tests/requirements.txt b/compilesketches/tests/requirements.txt index b4191785..8d676e2b 100644 --- a/compilesketches/tests/requirements.txt +++ b/compilesketches/tests/requirements.txt @@ -1,4 +1,4 @@ --requirement ../requirements.txt -coverage==7.0.3 +coverage==7.0.4 pytest==7.2.0 pytest-mock==3.10.0 From 7c5b5c5f88ee3e06ea9d7e0531542f9ce649b1c4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Jan 2023 23:02:22 +0000 Subject: [PATCH 03/26] Bump coverage from 7.0.4 to 7.0.5 in /compilesketches Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.0.4 to 7.0.5. - [Release notes](https://github.com/nedbat/coveragepy/releases) - [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst) - [Commits](https://github.com/nedbat/coveragepy/compare/7.0.4...7.0.5) --- updated-dependencies: - dependency-name: coverage dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- compilesketches/tests/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compilesketches/tests/requirements.txt b/compilesketches/tests/requirements.txt index 8d676e2b..4a0c19f1 100644 --- a/compilesketches/tests/requirements.txt +++ b/compilesketches/tests/requirements.txt @@ -1,4 +1,4 @@ --requirement ../requirements.txt -coverage==7.0.4 +coverage==7.0.5 pytest==7.2.0 pytest-mock==3.10.0 From c6d56e35eed28c3308da4607894a030a27421558 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jan 2023 23:02:59 +0000 Subject: [PATCH 04/26] Bump pytest from 7.2.0 to 7.2.1 in /compilesketches Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.2.0 to 7.2.1. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/7.2.0...7.2.1) --- updated-dependencies: - dependency-name: pytest dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- compilesketches/tests/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compilesketches/tests/requirements.txt b/compilesketches/tests/requirements.txt index 4a0c19f1..009810d3 100644 --- a/compilesketches/tests/requirements.txt +++ b/compilesketches/tests/requirements.txt @@ -1,4 +1,4 @@ --requirement ../requirements.txt coverage==7.0.5 -pytest==7.2.0 +pytest==7.2.1 pytest-mock==3.10.0 From e1fd7b17bf61d16be1f05ecc17f79380cd208061 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Jan 2023 23:03:16 +0000 Subject: [PATCH 05/26] Bump coverage from 7.0.5 to 7.1.0 in /compilesketches Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.0.5 to 7.1.0. - [Release notes](https://github.com/nedbat/coveragepy/releases) - [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst) - [Commits](https://github.com/nedbat/coveragepy/compare/7.0.5...7.1.0) --- updated-dependencies: - dependency-name: coverage dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- compilesketches/tests/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compilesketches/tests/requirements.txt b/compilesketches/tests/requirements.txt index 009810d3..bee35093 100644 --- a/compilesketches/tests/requirements.txt +++ b/compilesketches/tests/requirements.txt @@ -1,4 +1,4 @@ --requirement ../requirements.txt -coverage==7.0.5 +coverage==7.1.0 pytest==7.2.1 pytest-mock==3.10.0 From c2fc943a2523188fa46ca404635c03c427c15e74 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Feb 2023 23:58:01 +0000 Subject: [PATCH 06/26] Bump gitpython from 3.1.30 to 3.1.31 in /compilesketches Bumps [gitpython](https://github.com/gitpython-developers/GitPython) from 3.1.30 to 3.1.31. - [Release notes](https://github.com/gitpython-developers/GitPython/releases) - [Changelog](https://github.com/gitpython-developers/GitPython/blob/main/CHANGES) - [Commits](https://github.com/gitpython-developers/GitPython/compare/3.1.30...3.1.31) --- updated-dependencies: - dependency-name: gitpython dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- compilesketches/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compilesketches/requirements.txt b/compilesketches/requirements.txt index 79e42aec..f5772a98 100644 --- a/compilesketches/requirements.txt +++ b/compilesketches/requirements.txt @@ -1,4 +1,4 @@ -GitPython==3.1.30 +GitPython==3.1.31 PyGithub==1.57 PyYAML==6.0 semver==2.13.0 From d0f51eb7ea504b3c5b47cd6c2be43c83c37af244 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Feb 2023 23:58:37 +0000 Subject: [PATCH 07/26] Bump pygithub from 1.57 to 1.58.0 in /compilesketches Bumps [pygithub](https://github.com/pygithub/pygithub) from 1.57 to 1.58.0. - [Release notes](https://github.com/pygithub/pygithub/releases) - [Changelog](https://github.com/PyGithub/PyGithub/blob/master/doc/changes.rst) - [Commits](https://github.com/pygithub/pygithub/compare/v1.57...v1.58.0) --- updated-dependencies: - dependency-name: pygithub dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- compilesketches/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compilesketches/requirements.txt b/compilesketches/requirements.txt index f5772a98..9f3dbe69 100644 --- a/compilesketches/requirements.txt +++ b/compilesketches/requirements.txt @@ -1,4 +1,4 @@ GitPython==3.1.31 -PyGithub==1.57 +PyGithub==1.58.0 PyYAML==6.0 semver==2.13.0 From b2f6689b5f9ecd7cad5d0d10fa201a080c8f3266 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Feb 2023 23:57:37 +0000 Subject: [PATCH 08/26] Bump coverage from 7.1.0 to 7.2.0 in /compilesketches Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.1.0 to 7.2.0. - [Release notes](https://github.com/nedbat/coveragepy/releases) - [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst) - [Commits](https://github.com/nedbat/coveragepy/compare/7.1.0...7.2.0) --- updated-dependencies: - dependency-name: coverage dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- compilesketches/tests/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compilesketches/tests/requirements.txt b/compilesketches/tests/requirements.txt index bee35093..4dad3807 100644 --- a/compilesketches/tests/requirements.txt +++ b/compilesketches/tests/requirements.txt @@ -1,4 +1,4 @@ --requirement ../requirements.txt -coverage==7.1.0 +coverage==7.2.0 pytest==7.2.1 pytest-mock==3.10.0 From ff721ab913d150473b9f0ba4d84f97f721a9c24c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Feb 2023 23:59:28 +0000 Subject: [PATCH 09/26] Bump coverage from 7.2.0 to 7.2.1 in /compilesketches Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.2.0 to 7.2.1. - [Release notes](https://github.com/nedbat/coveragepy/releases) - [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst) - [Commits](https://github.com/nedbat/coveragepy/compare/7.2.0...7.2.1) --- updated-dependencies: - dependency-name: coverage dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- compilesketches/tests/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compilesketches/tests/requirements.txt b/compilesketches/tests/requirements.txt index 4dad3807..809b044b 100644 --- a/compilesketches/tests/requirements.txt +++ b/compilesketches/tests/requirements.txt @@ -1,4 +1,4 @@ --requirement ../requirements.txt -coverage==7.2.0 +coverage==7.2.1 pytest==7.2.1 pytest-mock==3.10.0 From 7defa3591a5eb0d91f58e94309d0c26d189062eb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Mar 2023 23:57:54 +0000 Subject: [PATCH 10/26] Bump pytest from 7.2.1 to 7.2.2 in /compilesketches Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.2.1 to 7.2.2. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/7.2.1...7.2.2) --- updated-dependencies: - dependency-name: pytest dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- compilesketches/tests/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compilesketches/tests/requirements.txt b/compilesketches/tests/requirements.txt index 809b044b..1b13a2c5 100644 --- a/compilesketches/tests/requirements.txt +++ b/compilesketches/tests/requirements.txt @@ -1,4 +1,4 @@ --requirement ../requirements.txt coverage==7.2.1 -pytest==7.2.1 +pytest==7.2.2 pytest-mock==3.10.0 From f18b23ba47f40e7630d3978a1a889626e6a1d662 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Mar 2023 23:57:36 +0000 Subject: [PATCH 11/26] Bump coverage from 7.2.1 to 7.2.2 in /compilesketches Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.2.1 to 7.2.2. - [Release notes](https://github.com/nedbat/coveragepy/releases) - [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst) - [Commits](https://github.com/nedbat/coveragepy/compare/7.2.1...7.2.2) --- updated-dependencies: - dependency-name: coverage dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- compilesketches/tests/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compilesketches/tests/requirements.txt b/compilesketches/tests/requirements.txt index 1b13a2c5..6c350443 100644 --- a/compilesketches/tests/requirements.txt +++ b/compilesketches/tests/requirements.txt @@ -1,4 +1,4 @@ --requirement ../requirements.txt -coverage==7.2.1 +coverage==7.2.2 pytest==7.2.2 pytest-mock==3.10.0 From a86705ba8929e40ca94723194be1711ca940267c Mon Sep 17 00:00:00 2001 From: per1234 Date: Thu, 16 Mar 2023 15:59:08 -0700 Subject: [PATCH 12/26] Use `actions/setup-python` action to install Python for action At the time the arduino/compile-sketches action was converted to a composite action, the only step type supported for this action type was "run", where shell commands are executed. For this reason, it was necessary to use shell commands to install Python. Since that time, support was added for using other actions in composite action steps. This allows Python to be set up for use by the action in a more simple and efficient manner via the `actions/setup-python` action. The Python-based infrastructure workflows are also migrated to using `actions/setup-python` action for installing Python. In order to ensure the same version of Python is used for CI as the action, the version of Python used by the project is defined in a `.python-version` file, and all `actions/setup-python` steps pointed to that file. In order to ensure the stability of the action, the `actions/setup-python` action is pinned to a patch version. Although the common practice is to only pin the major version of actions in CI workflows, in this case there is no benefit to doing so for the `actions/setup-python` action since patch level bumps are going to be received from Dependabot regardless. --- .github/workflows/lint-python.yml | 9 ++++++++- .github/workflows/test-python.yml | 15 +++++++++++---- .python-version | 1 + action-setup.sh | 20 +++----------------- action.yml | 7 ++++++- 5 files changed, 29 insertions(+), 23 deletions(-) create mode 100644 .python-version diff --git a/.github/workflows/lint-python.yml b/.github/workflows/lint-python.yml index 5608b284..60fb062e 100644 --- a/.github/workflows/lint-python.yml +++ b/.github/workflows/lint-python.yml @@ -5,11 +5,13 @@ on: paths: - '.github/workflows/lint-python.yml' - 'compilesketches/**.py' + - '.python-version' push: paths: - '.github/workflows/lint-python.yml' - 'compilesketches/**.py' + - '.python-version' # Scheduled trigger checks for workflow failures resulting from updates to the linting tools schedule: @@ -32,6 +34,11 @@ jobs: - name: Checkout uses: actions/checkout@v3 + - name: Install Python + uses: actions/setup-python@v4.5.0 + with: + python-version-file: .python-version + - name: Run the set up script id: setup run: | @@ -40,7 +47,7 @@ jobs: - name: Install flake8 run: | source "${{ steps.setup.outputs.python-venv-activate-script-path }}" - "${{ steps.setup.outputs.python-command }}" \ + python \ -m \ pip install \ flake8 \ diff --git a/.github/workflows/test-python.yml b/.github/workflows/test-python.yml index a2fc6083..970436d3 100644 --- a/.github/workflows/test-python.yml +++ b/.github/workflows/test-python.yml @@ -4,12 +4,14 @@ on: pull_request: paths: - '.github/workflows/test-python.yml' + - '.python-version' - 'action-setup.sh' - 'compilesketches/**' push: paths: - '.github/workflows/test-python.yml' + - '.python-version' - 'action-setup.sh' - 'compilesketches/**' @@ -39,6 +41,11 @@ jobs: - name: Checkout uses: actions/checkout@v3 + - name: Install Python + uses: actions/setup-python@v4.5.0 + with: + python-version-file: .python-version + - name: Run the set up script id: setup run: | @@ -47,7 +54,7 @@ jobs: - name: Install test dependencies run: | source "${{ steps.setup.outputs.python-venv-activate-script-path }}" - "${{ steps.setup.outputs.python-command }}" \ + python \ -m \ pip install \ --requirement "${{ env.PYTHON_PROJECT_TESTS_PATH }}/requirements.txt" @@ -56,7 +63,7 @@ jobs: run: | source "${{ steps.setup.outputs.python-venv-activate-script-path }}" export PYTHONPATH="${{ env.PYTHON_PROJECT_PATH }}" - "${{ steps.setup.outputs.python-command }}" \ + python \ -m \ coverage run \ --rcfile="${{ env.PYTHON_PROJECT_TESTS_PATH }}/.coveragerc" \ @@ -65,7 +72,7 @@ jobs: pytest "${{ env.PYTHON_PROJECT_TESTS_PATH }}" # Generate coverage data file for consumption by `codecov/codecov-action`. # Otherwise that action generates the file using the system Python environment, which doesn't work. - "${{ steps.setup.outputs.python-command }}" \ + python \ -m \ coverage xml \ -o "${{ github.workspace }}/${{ env.COVERAGE_DATA_FILENAME }}" @@ -73,7 +80,7 @@ jobs: - name: Display code coverage report run: | source "${{ steps.setup.outputs.python-venv-activate-script-path }}" - "${{ steps.setup.outputs.python-command }}" \ + python \ -m \ coverage report diff --git a/.python-version b/.python-version new file mode 100644 index 00000000..cc1923a4 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.8 diff --git a/action-setup.sh b/action-setup.sh index 61c09a1e..c44eb946 100755 --- a/action-setup.sh +++ b/action-setup.sh @@ -2,8 +2,6 @@ # Set up the Python environment for the action's script to run in -readonly PYTHON_PACKAGE_VERSION='3.8' - # https://stackoverflow.com/a/29835459 SCRIPT_PATH="$( CDPATH='' \ @@ -15,32 +13,20 @@ SCRIPT_PATH="$( )" readonly SCRIPT_PATH -readonly PYTHON_COMMAND="python${PYTHON_PACKAGE_VERSION}" readonly PYTHON_VENV_PATH="${SCRIPT_PATH}/compilesketches/.venv" readonly PYTHON_VENV_ACTIVATE_SCRIPT_PATH="${PYTHON_VENV_PATH}/bin/activate" -# Install Python -sudo apt-get install --yes software-properties-common > /dev/null -sudo add-apt-repository --yes ppa:deadsnakes/ppa > /dev/null -sudo apt-get update --yes > /dev/null -sudo apt-get install --yes python${PYTHON_PACKAGE_VERSION} > /dev/null -echo "Using Python version: $("$PYTHON_COMMAND" --version)" - -sudo apt-get install --yes python3-setuptools > /dev/null -sudo apt-get install --yes python${PYTHON_PACKAGE_VERSION}-venv > /dev/null - # Create Python virtual environment -"$PYTHON_COMMAND" -m venv --system-site-packages "$PYTHON_VENV_PATH" +python -m venv --system-site-packages "$PYTHON_VENV_PATH" # Activate Python virtual environment # shellcheck source=/dev/null . "$PYTHON_VENV_ACTIVATE_SCRIPT_PATH" # Install Python dependencies -"$PYTHON_COMMAND" -m pip install --upgrade pip > /dev/null -"$PYTHON_COMMAND" -m pip install --quiet --requirement "${SCRIPT_PATH}/compilesketches/requirements.txt" +python -m pip install --upgrade pip > /dev/null +python -m pip install --quiet --requirement "${SCRIPT_PATH}/compilesketches/requirements.txt" # Set outputs for use in GitHub Actions workflow steps # See: https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-commands-for-github-actions#setting-an-output-parameter -echo "::set-output name=python-command::$PYTHON_COMMAND" echo "::set-output name=python-venv-activate-script-path::$PYTHON_VENV_ACTIVATE_SCRIPT_PATH" diff --git a/action.yml b/action.yml index 1f593b4d..edd2eda1 100644 --- a/action.yml +++ b/action.yml @@ -49,6 +49,11 @@ inputs: runs: using: composite steps: + - name: Install Python + uses: actions/setup-python@v4.5.0 + with: + python-version-file: ${{ github.action_path }}/.python-version + - name: Run the set up script id: setup shell: bash @@ -74,4 +79,4 @@ runs: INPUT_SKETCHES-REPORT-PATH: ${{ inputs.sketches-report-path }} run: | source "${{ steps.setup.outputs.python-venv-activate-script-path }}" - "${{ steps.setup.outputs.python-command }}" "${{ github.action_path }}/compilesketches/compilesketches.py" + python "${{ github.action_path }}/compilesketches/compilesketches.py" From ac7e9fe7e56cddbe0a5373a33a6d968813f897b9 Mon Sep 17 00:00:00 2001 From: per1234 Date: Thu, 16 Mar 2023 20:50:06 -0700 Subject: [PATCH 13/26] Update project Python version to 3.11.2 In order to ensure maximum stability of the action, the project's Python version is pinned to the patch version. --- .python-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.python-version b/.python-version index cc1923a4..1e334568 100644 --- a/.python-version +++ b/.python-version @@ -1 +1 @@ -3.8 +3.11.2 From 011565f5db93efd57baa591750d0180b0f9baa38 Mon Sep 17 00:00:00 2001 From: per1234 Date: Fri, 17 Mar 2023 00:45:02 -0700 Subject: [PATCH 14/26] Use Poetry for Python dependencies management Previously, pip and venv were used for dependencies management. Since the time this project was set up, the Arduino Tooling Team has settled on Poetry as the standard tool for this task. --- .github/workflows/lint-python.yml | 29 +- .github/workflows/lint-shell.yml | 24 - .github/workflows/test-python.yml | 57 +- action-setup.sh | 32 -- action.yml | 21 +- compilesketches/.flake8 | 1 - compilesketches/requirements.txt | 4 - compilesketches/tests/.coveragerc | 3 - compilesketches/tests/requirements.txt | 4 - poetry.lock | 759 +++++++++++++++++++++++++ pyproject.toml | 23 + 11 files changed, 842 insertions(+), 115 deletions(-) delete mode 100644 .github/workflows/lint-shell.yml delete mode 100755 action-setup.sh delete mode 100644 compilesketches/requirements.txt delete mode 100644 compilesketches/tests/.coveragerc delete mode 100644 compilesketches/tests/requirements.txt create mode 100644 poetry.lock create mode 100644 pyproject.toml diff --git a/.github/workflows/lint-python.yml b/.github/workflows/lint-python.yml index 60fb062e..421d9b1a 100644 --- a/.github/workflows/lint-python.yml +++ b/.github/workflows/lint-python.yml @@ -1,17 +1,25 @@ name: Lint Python code +env: + # See: https://pypi.org/project/poetry/#history + POETRY_VERSION: 1.4.0 + on: pull_request: paths: - '.github/workflows/lint-python.yml' - 'compilesketches/**.py' - '.python-version' + - '**/poetry.lock' + - '**/pyproject.toml' push: paths: - '.github/workflows/lint-python.yml' - 'compilesketches/**.py' - '.python-version' + - '**/poetry.lock' + - '**/pyproject.toml' # Scheduled trigger checks for workflow failures resulting from updates to the linting tools schedule: @@ -39,23 +47,20 @@ jobs: with: python-version-file: .python-version - - name: Run the set up script - id: setup + - name: Install Poetry run: | - "${{ github.workspace }}/action-setup.sh" + pipx \ + install \ + poetry==${{ env.POETRY_VERSION }} - - name: Install flake8 + - name: Install Python Dependencies run: | - source "${{ steps.setup.outputs.python-venv-activate-script-path }}" - python \ - -m \ - pip install \ - flake8 \ - pep8-naming + poetry \ + install \ + --only dev - name: Lint with flake8 env: PYTHON_PROJECT_PATH: ${GITHUB_WORKSPACE}/compilesketches run: | - source "${{ steps.setup.outputs.python-venv-activate-script-path }}" - flake8 --config "${{ env.PYTHON_PROJECT_PATH }}/.flake8" --show-source "${{ env.PYTHON_PROJECT_PATH }}" + poetry run flake8 --config "${{ env.PYTHON_PROJECT_PATH }}/.flake8" --show-source "${{ env.PYTHON_PROJECT_PATH }}" diff --git a/.github/workflows/lint-shell.yml b/.github/workflows/lint-shell.yml deleted file mode 100644 index e79a763c..00000000 --- a/.github/workflows/lint-shell.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: Lint shell scripts - -on: - push: - paths: - - '.github/workflows/lint-shell.yml' - - '**.sh' - pull_request: - paths: - - '.github/workflows/lint-shell.yml' - - '**.sh' - -jobs: - lint: - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v3 - - # Recursively lint all shell scripts in the repository - # See: https://github.com/azohra/shell-linter/blob/latest/README.md - - name: ShellCheck - uses: azohra/shell-linter@latest diff --git a/.github/workflows/test-python.yml b/.github/workflows/test-python.yml index 970436d3..06420476 100644 --- a/.github/workflows/test-python.yml +++ b/.github/workflows/test-python.yml @@ -1,18 +1,24 @@ name: Test Python code +env: + # See: https://pypi.org/project/poetry/#history + POETRY_VERSION: 1.4.0 + on: pull_request: paths: - '.github/workflows/test-python.yml' - '.python-version' - - 'action-setup.sh' + - '**/poetry.lock' + - '**/pyproject.toml' - 'compilesketches/**' push: paths: - '.github/workflows/test-python.yml' - '.python-version' - - 'action-setup.sh' + - '**/poetry.lock' + - '**/pyproject.toml' - 'compilesketches/**' # Catch issues resulting from new patch releases of Python in the APT repository @@ -46,43 +52,40 @@ jobs: with: python-version-file: .python-version - - name: Run the set up script - id: setup + - name: Install Poetry run: | - "${{ github.workspace }}/action-setup.sh" + pipx \ + install \ + poetry==${{ env.POETRY_VERSION }} - - name: Install test dependencies + - name: Install Python Dependencies run: | - source "${{ steps.setup.outputs.python-venv-activate-script-path }}" - python \ - -m \ - pip install \ - --requirement "${{ env.PYTHON_PROJECT_TESTS_PATH }}/requirements.txt" + poetry install - name: Run Python unit tests and record code coverage data run: | - source "${{ steps.setup.outputs.python-venv-activate-script-path }}" export PYTHONPATH="${{ env.PYTHON_PROJECT_PATH }}" - python \ - -m \ - coverage run \ - --rcfile="${{ env.PYTHON_PROJECT_TESTS_PATH }}/.coveragerc" \ - --source="${{ env.PYTHON_PROJECT_PATH }}" \ - --module \ - pytest "${{ env.PYTHON_PROJECT_TESTS_PATH }}" + poetry run \ + python \ + -m \ + coverage run \ + --source="${{ env.PYTHON_PROJECT_PATH }}" \ + --module \ + pytest "${{ env.PYTHON_PROJECT_TESTS_PATH }}" # Generate coverage data file for consumption by `codecov/codecov-action`. # Otherwise that action generates the file using the system Python environment, which doesn't work. - python \ - -m \ - coverage xml \ - -o "${{ github.workspace }}/${{ env.COVERAGE_DATA_FILENAME }}" + poetry run \ + python \ + -m \ + coverage xml \ + -o "${{ github.workspace }}/${{ env.COVERAGE_DATA_FILENAME }}" - name: Display code coverage report run: | - source "${{ steps.setup.outputs.python-venv-activate-script-path }}" - python \ - -m \ - coverage report + poetry run \ + python \ + -m \ + coverage report - name: Upload coverage report to Codecov uses: codecov/codecov-action@v3 diff --git a/action-setup.sh b/action-setup.sh deleted file mode 100755 index c44eb946..00000000 --- a/action-setup.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/sh - -# Set up the Python environment for the action's script to run in - -# https://stackoverflow.com/a/29835459 -SCRIPT_PATH="$( - CDPATH='' \ - cd -- "$( - dirname -- "$0" - )" && ( - pwd -P - ) -)" -readonly SCRIPT_PATH - -readonly PYTHON_VENV_PATH="${SCRIPT_PATH}/compilesketches/.venv" -readonly PYTHON_VENV_ACTIVATE_SCRIPT_PATH="${PYTHON_VENV_PATH}/bin/activate" - -# Create Python virtual environment -python -m venv --system-site-packages "$PYTHON_VENV_PATH" - -# Activate Python virtual environment -# shellcheck source=/dev/null -. "$PYTHON_VENV_ACTIVATE_SCRIPT_PATH" - -# Install Python dependencies -python -m pip install --upgrade pip > /dev/null -python -m pip install --quiet --requirement "${SCRIPT_PATH}/compilesketches/requirements.txt" - -# Set outputs for use in GitHub Actions workflow steps -# See: https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-commands-for-github-actions#setting-an-output-parameter -echo "::set-output name=python-venv-activate-script-path::$PYTHON_VENV_ACTIVATE_SCRIPT_PATH" diff --git a/action.yml b/action.yml index edd2eda1..6c450f12 100644 --- a/action.yml +++ b/action.yml @@ -54,14 +54,18 @@ runs: with: python-version-file: ${{ github.action_path }}/.python-version - - name: Run the set up script - id: setup + - name: Install Poetry shell: bash run: | - # Group action setup log output - echo "::group::Action set up" - "${{ github.action_path }}/action-setup.sh" - echo "::endgroup::" + pipx install \ + poetry==1.4.0 + + - name: Install Python Dependencies + shell: bash + working-directory: ${{ github.action_path }} + run: | + poetry install \ + --only main - name: Run script shell: bash @@ -77,6 +81,7 @@ runs: INPUT_ENABLE-DELTAS-REPORT: ${{ inputs.enable-deltas-report }} INPUT_ENABLE-WARNINGS-REPORT: ${{ inputs.enable-warnings-report }} INPUT_SKETCHES-REPORT-PATH: ${{ inputs.sketches-report-path }} + working-directory: ${{ github.action_path }} run: | - source "${{ steps.setup.outputs.python-venv-activate-script-path }}" - python "${{ github.action_path }}/compilesketches/compilesketches.py" + poetry run \ + python "${{ github.action_path }}/compilesketches/compilesketches.py" diff --git a/compilesketches/.flake8 b/compilesketches/.flake8 index ca383b05..8f802410 100644 --- a/compilesketches/.flake8 +++ b/compilesketches/.flake8 @@ -1,6 +1,5 @@ [flake8] doctests = True -extend-exclude = .venv # W503 and W504 are mutually exclusive. PEP 8 recommends line break before. ignore = W503 max-complexity = 10 diff --git a/compilesketches/requirements.txt b/compilesketches/requirements.txt deleted file mode 100644 index 9f3dbe69..00000000 --- a/compilesketches/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -GitPython==3.1.31 -PyGithub==1.58.0 -PyYAML==6.0 -semver==2.13.0 diff --git a/compilesketches/tests/.coveragerc b/compilesketches/tests/.coveragerc deleted file mode 100644 index 9ca48dd2..00000000 --- a/compilesketches/tests/.coveragerc +++ /dev/null @@ -1,3 +0,0 @@ -[run] -omit = - */.venv/* diff --git a/compilesketches/tests/requirements.txt b/compilesketches/tests/requirements.txt deleted file mode 100644 index 6c350443..00000000 --- a/compilesketches/tests/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ ---requirement ../requirements.txt -coverage==7.2.2 -pytest==7.2.2 -pytest-mock==3.10.0 diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 00000000..cf33fcbc --- /dev/null +++ b/poetry.lock @@ -0,0 +1,759 @@ +# This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand. + +[[package]] +name = "attrs" +version = "22.2.0" +description = "Classes Without Boilerplate" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, + {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"] +tests = ["attrs[tests-no-zope]", "zope.interface"] +tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"] + +[[package]] +name = "certifi" +version = "2022.12.7" +description = "Python package for providing Mozilla's CA Bundle." +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, + {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, +] + +[[package]] +name = "cffi" +version = "1.15.1" +description = "Foreign Function Interface for Python calling C code." +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, + {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, + {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, + {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, + {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, + {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, + {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, + {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, + {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, + {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, + {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, + {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, + {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, + {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, + {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, + {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, + {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, + {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, + {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, +] + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "charset-normalizer" +version = "3.1.0" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, + {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, +] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "coverage" +version = "7.2.2" +description = "Code coverage measurement for Python" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "coverage-7.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c90e73bdecb7b0d1cea65a08cb41e9d672ac6d7995603d6465ed4914b98b9ad7"}, + {file = "coverage-7.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e2926b8abedf750c2ecf5035c07515770944acf02e1c46ab08f6348d24c5f94d"}, + {file = "coverage-7.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57b77b9099f172804e695a40ebaa374f79e4fb8b92f3e167f66facbf92e8e7f5"}, + {file = "coverage-7.2.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:efe1c0adad110bf0ad7fb59f833880e489a61e39d699d37249bdf42f80590169"}, + {file = "coverage-7.2.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2199988e0bc8325d941b209f4fd1c6fa007024b1442c5576f1a32ca2e48941e6"}, + {file = "coverage-7.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:81f63e0fb74effd5be736cfe07d710307cc0a3ccb8f4741f7f053c057615a137"}, + {file = "coverage-7.2.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:186e0fc9cf497365036d51d4d2ab76113fb74f729bd25da0975daab2e107fd90"}, + {file = "coverage-7.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:420f94a35e3e00a2b43ad5740f935358e24478354ce41c99407cddd283be00d2"}, + {file = "coverage-7.2.2-cp310-cp310-win32.whl", hash = "sha256:38004671848b5745bb05d4d621526fca30cee164db42a1f185615f39dc997292"}, + {file = "coverage-7.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:0ce383d5f56d0729d2dd40e53fe3afeb8f2237244b0975e1427bfb2cf0d32bab"}, + {file = "coverage-7.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3eb55b7b26389dd4f8ae911ba9bc8c027411163839dea4c8b8be54c4ee9ae10b"}, + {file = "coverage-7.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d2b96123a453a2d7f3995ddb9f28d01fd112319a7a4d5ca99796a7ff43f02af5"}, + {file = "coverage-7.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:299bc75cb2a41e6741b5e470b8c9fb78d931edbd0cd009c58e5c84de57c06731"}, + {file = "coverage-7.2.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e1df45c23d4230e3d56d04414f9057eba501f78db60d4eeecfcb940501b08fd"}, + {file = "coverage-7.2.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:006ed5582e9cbc8115d2e22d6d2144a0725db542f654d9d4fda86793832f873d"}, + {file = "coverage-7.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d683d230b5774816e7d784d7ed8444f2a40e7a450e5720d58af593cb0b94a212"}, + {file = "coverage-7.2.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8efb48fa743d1c1a65ee8787b5b552681610f06c40a40b7ef94a5b517d885c54"}, + {file = "coverage-7.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4c752d5264053a7cf2fe81c9e14f8a4fb261370a7bb344c2a011836a96fb3f57"}, + {file = "coverage-7.2.2-cp311-cp311-win32.whl", hash = "sha256:55272f33da9a5d7cccd3774aeca7a01e500a614eaea2a77091e9be000ecd401d"}, + {file = "coverage-7.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:92ebc1619650409da324d001b3a36f14f63644c7f0a588e331f3b0f67491f512"}, + {file = "coverage-7.2.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5afdad4cc4cc199fdf3e18088812edcf8f4c5a3c8e6cb69127513ad4cb7471a9"}, + {file = "coverage-7.2.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0484d9dd1e6f481b24070c87561c8d7151bdd8b044c93ac99faafd01f695c78e"}, + {file = "coverage-7.2.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d530191aa9c66ab4f190be8ac8cc7cfd8f4f3217da379606f3dd4e3d83feba69"}, + {file = "coverage-7.2.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ac0f522c3b6109c4b764ffec71bf04ebc0523e926ca7cbe6c5ac88f84faced0"}, + {file = "coverage-7.2.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ba279aae162b20444881fc3ed4e4f934c1cf8620f3dab3b531480cf602c76b7f"}, + {file = "coverage-7.2.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:53d0fd4c17175aded9c633e319360d41a1f3c6e352ba94edcb0fa5167e2bad67"}, + {file = "coverage-7.2.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c99cb7c26a3039a8a4ee3ca1efdde471e61b4837108847fb7d5be7789ed8fd9"}, + {file = "coverage-7.2.2-cp37-cp37m-win32.whl", hash = "sha256:5cc0783844c84af2522e3a99b9b761a979a3ef10fb87fc4048d1ee174e18a7d8"}, + {file = "coverage-7.2.2-cp37-cp37m-win_amd64.whl", hash = "sha256:817295f06eacdc8623dc4df7d8b49cea65925030d4e1e2a7c7218380c0072c25"}, + {file = "coverage-7.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6146910231ece63facfc5984234ad1b06a36cecc9fd0c028e59ac7c9b18c38c6"}, + {file = "coverage-7.2.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:387fb46cb8e53ba7304d80aadca5dca84a2fbf6fe3faf6951d8cf2d46485d1e5"}, + {file = "coverage-7.2.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:046936ab032a2810dcaafd39cc4ef6dd295df1a7cbead08fe996d4765fca9fe4"}, + {file = "coverage-7.2.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e627dee428a176ffb13697a2c4318d3f60b2ccdde3acdc9b3f304206ec130ccd"}, + {file = "coverage-7.2.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4fa54fb483decc45f94011898727802309a109d89446a3c76387d016057d2c84"}, + {file = "coverage-7.2.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3668291b50b69a0c1ef9f462c7df2c235da3c4073f49543b01e7eb1dee7dd540"}, + {file = "coverage-7.2.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7c20b731211261dc9739bbe080c579a1835b0c2d9b274e5fcd903c3a7821cf88"}, + {file = "coverage-7.2.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5764e1f7471cb8f64b8cda0554f3d4c4085ae4b417bfeab236799863703e5de2"}, + {file = "coverage-7.2.2-cp38-cp38-win32.whl", hash = "sha256:4f01911c010122f49a3e9bdc730eccc66f9b72bd410a3a9d3cb8448bb50d65d3"}, + {file = "coverage-7.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:c448b5c9e3df5448a362208b8d4b9ed85305528313fca1b479f14f9fe0d873b8"}, + {file = "coverage-7.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bfe7085783cda55e53510482fa7b5efc761fad1abe4d653b32710eb548ebdd2d"}, + {file = "coverage-7.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9d22e94e6dc86de981b1b684b342bec5e331401599ce652900ec59db52940005"}, + {file = "coverage-7.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:507e4720791977934bba016101579b8c500fb21c5fa3cd4cf256477331ddd988"}, + {file = "coverage-7.2.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc4803779f0e4b06a2361f666e76f5c2e3715e8e379889d02251ec911befd149"}, + {file = "coverage-7.2.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db8c2c5ace167fd25ab5dd732714c51d4633f58bac21fb0ff63b0349f62755a8"}, + {file = "coverage-7.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4f68ee32d7c4164f1e2c8797535a6d0a3733355f5861e0f667e37df2d4b07140"}, + {file = "coverage-7.2.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d52f0a114b6a58305b11a5cdecd42b2e7f1ec77eb20e2b33969d702feafdd016"}, + {file = "coverage-7.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:797aad79e7b6182cb49c08cc5d2f7aa7b2128133b0926060d0a8889ac43843be"}, + {file = "coverage-7.2.2-cp39-cp39-win32.whl", hash = "sha256:db45eec1dfccdadb179b0f9ca616872c6f700d23945ecc8f21bb105d74b1c5fc"}, + {file = "coverage-7.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:8dbe2647bf58d2c5a6c5bcc685f23b5f371909a5624e9f5cd51436d6a9f6c6ef"}, + {file = "coverage-7.2.2-pp37.pp38.pp39-none-any.whl", hash = "sha256:872d6ce1f5be73f05bea4df498c140b9e7ee5418bfa2cc8204e7f9b817caa968"}, + {file = "coverage-7.2.2.tar.gz", hash = "sha256:36dd42da34fe94ed98c39887b86db9d06777b1c8f860520e21126a75507024f2"}, +] + +[package.extras] +toml = ["tomli"] + +[[package]] +name = "deprecated" +version = "1.2.13" +description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "Deprecated-1.2.13-py2.py3-none-any.whl", hash = "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d"}, + {file = "Deprecated-1.2.13.tar.gz", hash = "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d"}, +] + +[package.dependencies] +wrapt = ">=1.10,<2" + +[package.extras] +dev = ["PyTest", "PyTest (<5)", "PyTest-Cov", "PyTest-Cov (<2.6)", "bump2version (<1)", "configparser (<5)", "importlib-metadata (<3)", "importlib-resources (<4)", "sphinx (<2)", "sphinxcontrib-websupport (<2)", "tox", "zipp (<2)"] + +[[package]] +name = "flake8" +version = "5.0.4" +description = "the modular source code checker: pep8 pyflakes and co" +category = "dev" +optional = false +python-versions = ">=3.6.1" +files = [ + {file = "flake8-5.0.4-py2.py3-none-any.whl", hash = "sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248"}, + {file = "flake8-5.0.4.tar.gz", hash = "sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db"}, +] + +[package.dependencies] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.9.0,<2.10.0" +pyflakes = ">=2.5.0,<2.6.0" + +[[package]] +name = "gitdb" +version = "4.0.10" +description = "Git Object Database" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, + {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, +] + +[package.dependencies] +smmap = ">=3.0.1,<6" + +[[package]] +name = "gitpython" +version = "3.1.31" +description = "GitPython is a Python library used to interact with Git repositories" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "GitPython-3.1.31-py3-none-any.whl", hash = "sha256:f04893614f6aa713a60cbbe1e6a97403ef633103cdd0ef5eb6efe0deb98dbe8d"}, + {file = "GitPython-3.1.31.tar.gz", hash = "sha256:8ce3bcf69adfdf7c7d503e78fd3b1c492af782d58893b650adb2ac8912ddd573"}, +] + +[package.dependencies] +gitdb = ">=4.0.1,<5" + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "packaging" +version = "23.0" +description = "Core utilities for Python packages" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, + {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, +] + +[[package]] +name = "pep8-naming" +version = "0.13.3" +description = "Check PEP-8 naming conventions, plugin for flake8" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pep8-naming-0.13.3.tar.gz", hash = "sha256:1705f046dfcd851378aac3be1cd1551c7c1e5ff363bacad707d43007877fa971"}, + {file = "pep8_naming-0.13.3-py3-none-any.whl", hash = "sha256:1a86b8c71a03337c97181917e2b472f0f5e4ccb06844a0d6f0a33522549e7a80"}, +] + +[package.dependencies] +flake8 = ">=5.0.0" + +[[package]] +name = "pluggy" +version = "1.0.0" +description = "plugin and hook calling mechanisms for python" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, + {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pycodestyle" +version = "2.9.1" +description = "Python style guide checker" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pycodestyle-2.9.1-py2.py3-none-any.whl", hash = "sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b"}, + {file = "pycodestyle-2.9.1.tar.gz", hash = "sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785"}, +] + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] + +[[package]] +name = "pyflakes" +version = "2.5.0" +description = "passive checker of Python programs" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyflakes-2.5.0-py2.py3-none-any.whl", hash = "sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2"}, + {file = "pyflakes-2.5.0.tar.gz", hash = "sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3"}, +] + +[[package]] +name = "pygithub" +version = "1.58.0" +description = "Use the full Github API v3" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "PyGithub-1.58.0-py3-none-any.whl", hash = "sha256:b7bac601492a2b6c876ef326e4ffa3c1923e32707e415da76bfb8307ee8ffb7e"}, + {file = "PyGithub-1.58.0.tar.gz", hash = "sha256:e325f5ca2c111d19dea2796c8f1e7ae11da77287007736582196341390d31d35"}, +] + +[package.dependencies] +deprecated = "*" +pyjwt = ">=2.4.0" +pynacl = ">=1.4.0" +requests = ">=2.14.0" + +[package.extras] +integrations = ["cryptography"] + +[[package]] +name = "pyjwt" +version = "2.6.0" +description = "JSON Web Token implementation in Python" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "PyJWT-2.6.0-py3-none-any.whl", hash = "sha256:d83c3d892a77bbb74d3e1a2cfa90afaadb60945205d1095d9221f04466f64c14"}, + {file = "PyJWT-2.6.0.tar.gz", hash = "sha256:69285c7e31fc44f68a1feb309e948e0df53259d579295e6cfe2b1792329f05fd"}, +] + +[package.extras] +crypto = ["cryptography (>=3.4.0)"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] + +[[package]] +name = "pynacl" +version = "1.5.0" +description = "Python binding to the Networking and Cryptography (NaCl) library" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, + {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, +] + +[package.dependencies] +cffi = ">=1.4.1" + +[package.extras] +docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] +tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] + +[[package]] +name = "pytest" +version = "7.2.2" +description = "pytest: simple powerful testing with Python" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.2.2-py3-none-any.whl", hash = "sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e"}, + {file = "pytest-7.2.2.tar.gz", hash = "sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4"}, +] + +[package.dependencies] +attrs = ">=19.2.0" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" + +[package.extras] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] + +[[package]] +name = "pytest-mock" +version = "3.10.0" +description = "Thin-wrapper around the mock package for easier use with pytest" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-mock-3.10.0.tar.gz", hash = "sha256:fbbdb085ef7c252a326fd8cdcac0aa3b1333d8811f131bdcc701002e1be7ed4f"}, + {file = "pytest_mock-3.10.0-py3-none-any.whl", hash = "sha256:f4c973eeae0282963eb293eb173ce91b091a79c1334455acfac9ddee8a1c784b"}, +] + +[package.dependencies] +pytest = ">=5.0" + +[package.extras] +dev = ["pre-commit", "pytest-asyncio", "tox"] + +[[package]] +name = "pyyaml" +version = "6.0" +description = "YAML parser and emitter for Python" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, + {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, + {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] + +[[package]] +name = "requests" +version = "2.28.2" +description = "Python HTTP for Humans." +category = "main" +optional = false +python-versions = ">=3.7, <4" +files = [ + {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, + {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<1.27" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "semver" +version = "2.13.0" +description = "Python helper for Semantic Versioning (http://semver.org/)" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "semver-2.13.0-py2.py3-none-any.whl", hash = "sha256:ced8b23dceb22134307c1b8abfa523da14198793d9787ac838e70e29e77458d4"}, + {file = "semver-2.13.0.tar.gz", hash = "sha256:fa0fe2722ee1c3f57eac478820c3a5ae2f624af8264cbdf9000c980ff7f75e3f"}, +] + +[[package]] +name = "smmap" +version = "5.0.0" +description = "A pure Python implementation of a sliding window memory map manager" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, + {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, +] + +[[package]] +name = "urllib3" +version = "1.26.15" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "urllib3-1.26.15-py2.py3-none-any.whl", hash = "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42"}, + {file = "urllib3-1.26.15.tar.gz", hash = "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "wrapt" +version = "1.15.0" +description = "Module for decorators, wrappers and monkey patching." +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ + {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, + {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, + {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, + {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, + {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, + {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, + {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, + {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, + {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, + {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, + {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, + {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, + {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, + {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, + {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, + {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, + {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, + {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, + {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, +] + +[metadata] +lock-version = "2.0" +python-versions = "3.11.2" +content-hash = "f10d0924625935c307af749c2ade20a628383337648854a7665165563b3aba49" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..a0f3f255 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,23 @@ +[tool.poetry] +name = "compilesketches" +version = "0.0.0" +description = "" +authors = ["Arduino "] + +[tool.poetry.dependencies] +python = "3.11.2" +GitPython = "3.1.31" +PyGithub = "1.58.0" +PyYAML = "6.0" +semver = "2.13.0" + +[tool.poetry.group.dev.dependencies] +coverage = "7.2.2" +pytest = "7.2.2" +pytest-mock = "3.10.0" +flake8 = "5.0.4" +pep8-naming = "0.13.3" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" From 986bbe2d36abdc28510cdb72f8dce984f4215c1e Mon Sep 17 00:00:00 2001 From: per1234 Date: Fri, 17 Mar 2023 00:45:15 -0700 Subject: [PATCH 15/26] Move pytest configuration to pyproject.toml Rather than having a separate configuration file for the pytest configuration, it can be consolidated into the general purpose pyproject.toml configuration file. --- compilesketches/tests/pytest.ini | 5 ----- pyproject.toml | 7 +++++++ 2 files changed, 7 insertions(+), 5 deletions(-) delete mode 100644 compilesketches/tests/pytest.ini diff --git a/compilesketches/tests/pytest.ini b/compilesketches/tests/pytest.ini deleted file mode 100644 index f0760026..00000000 --- a/compilesketches/tests/pytest.ini +++ /dev/null @@ -1,5 +0,0 @@ -[pytest] -filterwarnings = - error - ignore::DeprecationWarning - ignore::ResourceWarning diff --git a/pyproject.toml b/pyproject.toml index a0f3f255..2e27768a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,6 +18,13 @@ pytest-mock = "3.10.0" flake8 = "5.0.4" pep8-naming = "0.13.3" +[tool.pytest.ini_options] +filterwarnings = [ + "error", + "ignore::DeprecationWarning", + "ignore::ResourceWarning" +] + [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" From af9837712ad34602b099fdb587eb72cfd9d8fff3 Mon Sep 17 00:00:00 2001 From: per1234 Date: Wed, 22 Mar 2023 21:27:41 -0700 Subject: [PATCH 16/26] Add "Additional resources" links to readme --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 7be3edda..5007a09c 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ This action checks whether [Arduino](https://www.arduino.cc/) sketches compile a - [How it works](#how-it-works) - [`enable-warnings-report`](#enable-warnings-report) - [Example usage](#example-usage) +- [Additional resources](#additional-resources) @@ -226,3 +227,9 @@ Set to `true` to cause the action to record the compiler warning count for each - name: Stepper version: 1.1.3 ``` + +## Additional resources + +- [Introductory article about **arduino/compile-sketches**](https://blog.arduino.cc/2021/04/09/test-your-arduino-projects-with-github-actions/) +- [**GitHub Actions** documentation](https://docs.github.com/actions/learn-github-actions/understanding-github-actions) +- [Discuss or request assistance on **Arduino Forum**](https://forum.arduino.cc/) From c4fa302d60bbbaf1c91517a5cd38c3c31a0ffdee Mon Sep 17 00:00:00 2001 From: per1234 Date: Wed, 22 Mar 2023 21:28:33 -0700 Subject: [PATCH 17/26] Add an FAQ document This will serve as a container for more in-depth documentation to supplement the fundamental reference provided in the readme. --- README.md | 1 + docs/FAQ.md | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 docs/FAQ.md diff --git a/README.md b/README.md index 5007a09c..abae6574 100644 --- a/README.md +++ b/README.md @@ -231,5 +231,6 @@ Set to `true` to cause the action to record the compiler warning count for each ## Additional resources - [Introductory article about **arduino/compile-sketches**](https://blog.arduino.cc/2021/04/09/test-your-arduino-projects-with-github-actions/) +- [Frequently asked questions about **arduino/compile-sketches**](docs/FAQ.md#frequently-asked-questions) - [**GitHub Actions** documentation](https://docs.github.com/actions/learn-github-actions/understanding-github-actions) - [Discuss or request assistance on **Arduino Forum**](https://forum.arduino.cc/) diff --git a/docs/FAQ.md b/docs/FAQ.md new file mode 100644 index 00000000..cc37fe94 --- /dev/null +++ b/docs/FAQ.md @@ -0,0 +1,43 @@ +# Frequently Asked Questions + +## How can I install dependencies of a boards platform? + +### Managed Dependencies + +The Arduino **Boards Manager** system installs tool dependencies along with a platform. When you specify a [**Boards Manager**-sourced platform dependency](../README.md#boards-manager) via the action's [`platforms` input](../README.md#platforms) the managed platform dependencies are installed automatically. + +If an alternative [platform dependency source](../README.md#supported-platform-sources) is used this automatic tool dependency installation does not occur. The convenient way to install the tool dependencies in this case is to install a **Boards Manager**-sourced platform that has a dependency on the required tools in addition to the target platform from the alternative source. + +--- + +**Example:** + +```yaml +- uses: arduino/compile-sketches@v1 + with: + platforms: | + # Use Boards Manager to install the latest release of the platform to get the toolchain. + - name: arduino:avr + # Overwrite the Boards Manager installation with the development version of the platform. + - source-url: https://github.com/arduino/ArduinoCore-avr.git + name: arduino:avr +``` + +--- + +### External Dependencies + +Arduino boards platforms typically bundle all dependencies. However, there are some platforms that require the user to manually install dependencies on their system in order to use the platform. + +The **arduino/compile-sketches** action runs in the same environment as the rest of the steps of the [workflow job](https://docs.github.com/actions/using-jobs/using-jobs-in-a-workflow), which means you can simply perform the dependency installation in a prior [step](https://docs.github.com/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idsteps) of the job. + +--- + +**Example:** + +```yaml +- run: +- uses: arduino/compile-sketches@v1 +``` + +--- From 042dd4a28f263b0608987d15e27507e5fd5d849e Mon Sep 17 00:00:00 2001 From: per1234 Date: Sat, 18 Mar 2023 02:58:53 -0700 Subject: [PATCH 18/26] Test support of external Python package platform dependencies Although Arduino boards platforms traditionally have bundled all dependencies, there are some cases where the user will need to use a preceeding workflow step to install external dependencies in the GitHub Actions runner environment. Since it is a "composite action", the action supports this. The action uses a virtual environment for its own Python package dependencies. This virtual environment might cause Python packages installed via the user's workflow (e.g., the pyserial dependency of the ESP32 platform) to not be accessible to the compilation commands. The added integration test will catch any regressions in the support for external Python package platform dependencies. --- .github/workflows/test-integration.yml | 26 +++++++++++++++++++ .../PythonPackageDependent/boards.txt | 8 ++++++ .../PythonPackageDependent/dependent.py | 2 ++ .../PythonPackageDependent/platform.txt | 3 +++ 4 files changed, 39 insertions(+) create mode 100644 .github/workflows/testdata/platforms/PythonPackageDependent/boards.txt create mode 100644 .github/workflows/testdata/platforms/PythonPackageDependent/dependent.py create mode 100644 .github/workflows/testdata/platforms/PythonPackageDependent/platform.txt diff --git a/.github/workflows/test-integration.yml b/.github/workflows/test-integration.yml index b40a9ebf..f4aa46d5 100644 --- a/.github/workflows/test-integration.yml +++ b/.github/workflows/test-integration.yml @@ -19,6 +19,7 @@ on: env: SKETCHES_REPORTS_PATH: sketches-reports + TESTDATA_PLATFORMS_PATH: .github/workflows/testdata/platforms TESTDATA_SKETCHES_PATH: .github/workflows/testdata/sketches TESTDATA_REPORTS_PATH: .github/workflows/testdata/reports @@ -203,6 +204,31 @@ jobs: sketch-paths: | - examples/Sweep + python-package-dependency: + runs-on: ubuntu-latest + + steps: + - name: Checkout local repo + uses: actions/checkout@v3 + + - name: Install Python package dependency + run: pip install cowsay + + - name: Run action with board that has external Python package dependency + # Use action from local path + uses: ./ + with: + platforms: | + - name: arduino:avr + - source-path: ${{ env.TESTDATA_PLATFORMS_PATH }}/PythonPackageDependent + name: PythonPackageDependent:avr + fqbn: PythonPackageDependent:avr:package_dependent + libraries: | + [] + sketch-paths: | + - ${{ env.TESTDATA_SKETCHES_PATH }}/BareMinimum + + check-sketches-reports: needs: all-inputs runs-on: ubuntu-latest diff --git a/.github/workflows/testdata/platforms/PythonPackageDependent/boards.txt b/.github/workflows/testdata/platforms/PythonPackageDependent/boards.txt new file mode 100644 index 00000000..41554a0a --- /dev/null +++ b/.github/workflows/testdata/platforms/PythonPackageDependent/boards.txt @@ -0,0 +1,8 @@ +package_dependent.name=External Python Package Dependent Board +package_dependent.upload.maximum_size=32256 +package_dependent.upload.maximum_data_size=2048 +package_dependent.build.mcu=atmega328p +package_dependent.build.f_cpu=16000000L +package_dependent.build.board=FOO +package_dependent.build.core=arduino:arduino +package_dependent.build.variant=arduino:standard diff --git a/.github/workflows/testdata/platforms/PythonPackageDependent/dependent.py b/.github/workflows/testdata/platforms/PythonPackageDependent/dependent.py new file mode 100644 index 00000000..b372e828 --- /dev/null +++ b/.github/workflows/testdata/platforms/PythonPackageDependent/dependent.py @@ -0,0 +1,2 @@ +# Import external package to verify Python package dependencies can be installed by user into runner environment. +import cowsay # noqa: F401 diff --git a/.github/workflows/testdata/platforms/PythonPackageDependent/platform.txt b/.github/workflows/testdata/platforms/PythonPackageDependent/platform.txt new file mode 100644 index 00000000..ada9a867 --- /dev/null +++ b/.github/workflows/testdata/platforms/PythonPackageDependent/platform.txt @@ -0,0 +1,3 @@ +name=External Python Package Dependent Platform +version=0.0.0 +recipe.hooks.prebuild.1.pattern=python "{runtime.platform.path}/dependent.py" From 4c2850340f7be5ab270d6506df5f9f1d1f8c4c86 Mon Sep 17 00:00:00 2001 From: per1234 Date: Wed, 22 Mar 2023 01:24:17 -0700 Subject: [PATCH 19/26] Restore support for external platform Python package dependencies Although Arduino boards platforms traditionally have bundled all dependencies, there are some cases where the user will need to use a preceding workflow step to install external dependencies in the GitHub Actions runner environment. Since it is a "composite action", this is feasible and was previously supported. However, support for Python package dependencies is more complicated due to the action script running in a Python virtual environment which isolates it from packages installed globally. The workaround for this was to use the `--system-site-packages` flag in the venv invocation that created the action's Python virtual environment. This approach introduced a requirement that the project Python version match the minor version series of the runner system Python. That requirement was violated when the workflow's runner was updated to `ubuntu-22.04` which has system Python 3.10.x, whereas the action used 3.8. The breakage went unnoticed because the sole Python package platform dependency in real world usage, pyserial, had been preinstalled in the runner's Linux package manager "site-packages" folder, which caused it to be installed in the action's virtual environment even though it would not have if depending on the user installation of the package as was previously the case. The solution is to use a path configuration file to add the path of the system Python's "user site-packages" folder (where package dependencies installed via the workflow are located) to the module search paths used by the action's Python virtual environment. This is actually superior to the previous approach of using the `--system-site-packages` flag in the venv invocation (this flag is also supported by pipx and Poetry) because: - It avoids the chance of interference with the virtual environment through the unnecessary introduction of the global "site-packages" path into the module search paths along with the intended introduction of the "user site-packages" path. - It allows any version of Python to be used to run the action, rather than being forced to use the same minor version series as the runner's system Python (which can be updated at any time and also depends on the workflow configuration) --- .github/workflows/test-integration.yml | 6 +++++- action.yml | 24 ++++++++++++++++++++++++ docs/FAQ.md | 17 +++++++++++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test-integration.yml b/.github/workflows/test-integration.yml index f4aa46d5..d5af059f 100644 --- a/.github/workflows/test-integration.yml +++ b/.github/workflows/test-integration.yml @@ -212,7 +212,11 @@ jobs: uses: actions/checkout@v3 - name: Install Python package dependency - run: pip install cowsay + run: | + pip install \ + --ignore-installed \ + --user \ + cowsay - name: Run action with board that has external Python package dependency # Use action from local path diff --git a/action.yml b/action.yml index 6c450f12..29cd16ba 100644 --- a/action.yml +++ b/action.yml @@ -49,6 +49,13 @@ inputs: runs: using: composite steps: + # User installations of external Python package platform dependencies will be located here. + - name: Get system Python "user site-packages" path + id: system-user-site-packages + shell: bash + run: | + echo "path=$(python -m site --user-site)" >> $GITHUB_OUTPUT + - name: Install Python uses: actions/setup-python@v4.5.0 with: @@ -67,6 +74,23 @@ runs: poetry install \ --only main + - name: Make user-installed Python packages available to platforms + shell: bash + working-directory: ${{ github.action_path }} + run: | + readonly PYTHON_ENVIRONMENT_PATH="$( + poetry env info \ + --path + )" + readonly VENV_SITE_PACKAGES_PATH="$( + poetry run \ + python -c \ + 'import site; print(site.getsitepackages()[0])' + )" + echo \ + "${{ steps.system-user-site-packages.outputs.path }}" > \ + "${VENV_SITE_PACKAGES_PATH}/system-user-site-packages.pth" + - name: Run script shell: bash env: diff --git a/docs/FAQ.md b/docs/FAQ.md index cc37fe94..ae560659 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -41,3 +41,20 @@ The **arduino/compile-sketches** action runs in the same environment as the rest ``` --- + +#### Python Packages + +The **arduino/compile-sketches** action uses a Python [virtual environment](https://docs.python.org/glossary.html#term-virtual-environment). In order to enable user installation of Python [package](https://docs.python.org/glossary.html#term-package) dependencies of boards platforms, the packages installed in the "[user site-packages](https://peps.python.org/pep-0370/)" folder are included in this virtual environment. + +In order to be certain your installation of a package dependency will be available to the platform, add the [`--ignore-installed`](https://pip.pypa.io/en/stable/cli/pip_install/#cmdoption-ignore-installed) and [`--user`](https://pip.pypa.io/en/stable/cli/pip_install/#install-user) flags to the [**pip**](https://pip.pypa.io/) command used to install the package. + +--- + +**Example:** + +```yaml +- run: pip install --ignore-installed --user pyserial +- uses: arduino/compile-sketches@v1 +``` + +--- \ No newline at end of file From 32b69515e6c2c744ee9359f15d17a8b1a0afd756 Mon Sep 17 00:00:00 2001 From: per1234 Date: Mon, 20 Mar 2023 01:13:56 -0700 Subject: [PATCH 20/26] Remove superfluous absolute path to action script It is no longer necessary to specify the full path to the script in the invocation command now that the steps working directory has been set to the root folder of the action repository. --- action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/action.yml b/action.yml index 29cd16ba..d32a065e 100644 --- a/action.yml +++ b/action.yml @@ -108,4 +108,4 @@ runs: working-directory: ${{ github.action_path }} run: | poetry run \ - python "${{ github.action_path }}/compilesketches/compilesketches.py" + python compilesketches/compilesketches.py From add981214aae776e5177610e093a1fe39fa502a4 Mon Sep 17 00:00:00 2001 From: per1234 Date: Mon, 20 Mar 2023 19:14:32 -0700 Subject: [PATCH 21/26] Remove leftover items in workflow path filter Previously, a script was used to install Python and venv for use by the action. The path of this script was added to the paths filter in the relevant workflows so that they would be triggered on any change to the script. The script was removed in favor of the use of the actions/setup-python script for installation of Python. The script path was not removed from the workflow at that time. --- .github/workflows/test-integration.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/test-integration.yml b/.github/workflows/test-integration.yml index d5af059f..46929cd4 100644 --- a/.github/workflows/test-integration.yml +++ b/.github/workflows/test-integration.yml @@ -6,7 +6,6 @@ on: - '.github/workflows/test-integration.yml' - '.github/workflows/testdata/**' - 'action.yml' - - 'action-setup.sh' - 'compilesketches/**' push: @@ -14,7 +13,6 @@ on: - '.github/workflows/test-integration.yml' - '.github/workflows/testdata/**' - 'action.yml' - - 'action-setup.sh' - 'compilesketches/**' env: From dc45fe17606c6609e3aefe9d1ee93571a9f3437c Mon Sep 17 00:00:00 2001 From: per1234 Date: Wed, 22 Mar 2023 17:13:47 -0700 Subject: [PATCH 22/26] Use project Python to install Poetry By default, pipx uses the runner's system Python installation to install Poetry. Although this works, it is best to use the controlled Python installation (installed via the `actions/setup-python` step) for all project operations. --- action.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/action.yml b/action.yml index d32a065e..06fd2883 100644 --- a/action.yml +++ b/action.yml @@ -65,6 +65,7 @@ runs: shell: bash run: | pipx install \ + --python "$(which python)" \ poetry==1.4.0 - name: Install Python Dependencies From 26f371d11d74630214bd5be4a41295cd5355679b Mon Sep 17 00:00:00 2001 From: per1234 Date: Wed, 22 Mar 2023 21:57:38 -0700 Subject: [PATCH 23/26] Test support of pyserial external dependency of ESP32 platform Although Arduino boards platforms traditionally have bundled all dependencies, the ESP32 boards platform expects the pyserial Python package to be preinstalled on Linux systems. Although there is already test coverage and support for user installation of arbitrary Python package dependencies of a platform, the situation is more complex when it comes to this important boards platform. The problem is that there is an established use pattern that should be supported to avoid breaking user workflows. The added test checks for regressions in that support. --- .github/workflows/test-integration.yml | 29 +++++++++++++++++++ .../platforms/PyserialDependent/boards.txt | 8 +++++ .../platforms/PyserialDependent/platform.txt | 5 ++++ 3 files changed, 42 insertions(+) create mode 100644 .github/workflows/testdata/platforms/PyserialDependent/boards.txt create mode 100644 .github/workflows/testdata/platforms/PyserialDependent/platform.txt diff --git a/.github/workflows/test-integration.yml b/.github/workflows/test-integration.yml index 46929cd4..73b2607a 100644 --- a/.github/workflows/test-integration.yml +++ b/.github/workflows/test-integration.yml @@ -231,6 +231,35 @@ jobs: - ${{ env.TESTDATA_SKETCHES_PATH }}/BareMinimum + # Targeted testing for ESP32 boards platform support. + pyserial-dependency: + runs-on: ubuntu-latest + + steps: + - name: Checkout local repo + uses: actions/checkout@v3 + + - name: Install pyserial + run: | + # Use of pip3 and omission of recommended flags done to reproduce established use pattern: + # https://github.com/arduino-libraries/ArduinoIoTCloud/blob/1.11.0/.github/workflows/compile-examples.yml#L206 + pip3 install pyserial + + - name: Run action with board that has pyserial dependency + # Use action from local path + uses: ./ + with: + platforms: | + - name: arduino:avr + - source-path: ${{ env.TESTDATA_PLATFORMS_PATH }}/PyserialDependent + name: PyserialDependent:avr + fqbn: PyserialDependent:avr:pyserial_dependent + libraries: | + [] + sketch-paths: | + - ${{ env.TESTDATA_SKETCHES_PATH }}/BareMinimum + + check-sketches-reports: needs: all-inputs runs-on: ubuntu-latest diff --git a/.github/workflows/testdata/platforms/PyserialDependent/boards.txt b/.github/workflows/testdata/platforms/PyserialDependent/boards.txt new file mode 100644 index 00000000..ba4d86b8 --- /dev/null +++ b/.github/workflows/testdata/platforms/PyserialDependent/boards.txt @@ -0,0 +1,8 @@ +pyserial_dependent.name=pyserial Dependent Board +pyserial_dependent.upload.maximum_size=32256 +pyserial_dependent.upload.maximum_data_size=2048 +pyserial_dependent.build.mcu=atmega328p +pyserial_dependent.build.f_cpu=16000000L +pyserial_dependent.build.board=FOO +pyserial_dependent.build.core=arduino:arduino +pyserial_dependent.build.variant=arduino:standard diff --git a/.github/workflows/testdata/platforms/PyserialDependent/platform.txt b/.github/workflows/testdata/platforms/PyserialDependent/platform.txt new file mode 100644 index 00000000..11879ca2 --- /dev/null +++ b/.github/workflows/testdata/platforms/PyserialDependent/platform.txt @@ -0,0 +1,5 @@ +name=pyserial Dependent Platform +version=0.0.0 +# python3 is used to parallel ESP32 platform configuration: +# https://github.com/espressif/arduino-esp32/blob/2.0.7/platform.txt#L220 +recipe.hooks.prebuild.1.pattern=python3 -c 'import serial' From 69fd7b0d9e3a195bbf1c23b50fb7530455a085b8 Mon Sep 17 00:00:00 2001 From: per1234 Date: Wed, 22 Mar 2023 23:33:55 -0700 Subject: [PATCH 24/26] Add pyserial package to action virtual environment Although Arduino boards platforms traditionally have bundled all dependencies, the ESP32 boards platform expects the pyserial Python package to be preinstalled on Linux systems. Although there is already test coverage and support for user installation of arbitrary Python package dependencies of a platform, the situation is more complex when it comes to this important boards platform. The problem is that there is an established use pattern that should be supported to avoid breaking user workflows. The pattern is the use of a `pip install pyserial` command in the workflow to install the package. That command correctly installs the package in the "user site-packages" folder when the job runs in the `ubuntu-18.04` GitHub Actions runner, as was the case when the use pattern was established. However, pyserial is installed in the Linux package manager "site-packages" folder of the Ubuntu GitHub Actions runner starting from ubuntu-20.04 (most workflows run the arduino/compile-sketches job in the `ubuntu-latest` runner, which is currently `ubuntu-22.04`). This causes the established installation command to terminate without installing the package: ``` Requirement already satisfied: pyserial in /usr/lib/python3/dist-packages (3.5) ``` This did not cause a problem previously because the action was configured to include all system site-packages in the action's Python virtual environment. Because this approach resulted in the uncontrolled introduction of irrelevant packages into the action's Python virtual environment, the action was changed to only include the "user site-packages" in the virtual environment. That is fine if the now-recommended `--ignore-installed` flag is added to the pyserial installation command, but it breaks the established workflows. Although the goal was always to provide a flexible system that would allow the user installation of any arbitrary platform dependency, rather than hardcoding specific dependencies in the action itself, unfortunately I have not been able to find any way to progress in the improvement of the action without breaking the established workflows that compile for ESP32 boards. So as a workaround I am reluctantly adding the pyserial package to the action's virtual environment. This workaround will be reverted before the 2.0.0 release of the action so the pyserial installation command should be retained in workflows and occurrences of the historical `pip install pyserial` (or `pip3 install pyserial`) commands should be updated to the recommended command: ``` pip install --ignore-installed --user pyserial ``` --- action.yml | 2 +- poetry.lock | 19 +++++++++++++++++-- pyproject.toml | 8 ++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/action.yml b/action.yml index 06fd2883..cb1e415a 100644 --- a/action.yml +++ b/action.yml @@ -73,7 +73,7 @@ runs: working-directory: ${{ github.action_path }} run: | poetry install \ - --only main + --only main,external - name: Make user-installed Python packages available to platforms shell: bash diff --git a/poetry.lock b/poetry.lock index cf33fcbc..0f7fd8c2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.4.1 and should not be changed by hand. [[package]] name = "attrs" @@ -515,6 +515,21 @@ cffi = ">=1.4.1" docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] +[[package]] +name = "pyserial" +version = "3.5" +description = "Python Serial Port Extension" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "pyserial-3.5-py2.py3-none-any.whl", hash = "sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0"}, + {file = "pyserial-3.5.tar.gz", hash = "sha256:3c77e014170dfffbd816e6ffc205e9842efb10be9f58ec16d3e8675b4925cddb"}, +] + +[package.extras] +cp2110 = ["hidapi"] + [[package]] name = "pytest" version = "7.2.2" @@ -756,4 +771,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "3.11.2" -content-hash = "f10d0924625935c307af749c2ade20a628383337648854a7665165563b3aba49" +content-hash = "35ddf7146c03b75108eb3c7396e518ef8066fcfd2c1094eed4f560c68a5242a2" diff --git a/pyproject.toml b/pyproject.toml index 2e27768a..a3f0901b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,6 +18,14 @@ pytest-mock = "3.10.0" flake8 = "5.0.4" pep8-naming = "0.13.3" +# Provided only for use by boards platforms +# NOTE: This group is a temporary workaround that will be removed at the 2.0.0 release of the action. +[tool.poetry.group.external] +optional = true + +[tool.poetry.group.external.dependencies] +pyserial = "3.5" + [tool.pytest.ini_options] filterwarnings = [ "error", From 32339e6211c6c14cf5f123cf6ca4210a4b79502a Mon Sep 17 00:00:00 2001 From: per1234 Date: Thu, 23 Mar 2023 00:08:00 -0700 Subject: [PATCH 25/26] Group action setup log output The setup of the action produces a significant amount of output, which is printed in the worflow run logs. This output is not of interest to the user so long as the action itself is working correctly so it is only noise in their logs. A log group was previously used to collapse all that setup output in the logs. This was inadvertently removed during recent development work. It is hereby restored. --- action.yml | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/action.yml b/action.yml index cb1e415a..1ca43d27 100644 --- a/action.yml +++ b/action.yml @@ -54,6 +54,7 @@ runs: id: system-user-site-packages shell: bash run: | + # Get system Python "user site-packages" path. echo "path=$(python -m site --user-site)" >> $GITHUB_OUTPUT - name: Install Python @@ -61,24 +62,22 @@ runs: with: python-version-file: ${{ github.action_path }}/.python-version - - name: Install Poetry + - name: Action setup shell: bash + working-directory: ${{ github.action_path }} run: | + echo "::group::Action setup" + + # Install Poetry. pipx install \ --python "$(which python)" \ poetry==1.4.0 - - name: Install Python Dependencies - shell: bash - working-directory: ${{ github.action_path }} - run: | + # Install Python dependencies. poetry install \ --only main,external - - name: Make user-installed Python packages available to platforms - shell: bash - working-directory: ${{ github.action_path }} - run: | + # Make user-installed Python packages available to platforms. readonly PYTHON_ENVIRONMENT_PATH="$( poetry env info \ --path @@ -92,6 +91,9 @@ runs: "${{ steps.system-user-site-packages.outputs.path }}" > \ "${VENV_SITE_PACKAGES_PATH}/system-user-site-packages.pth" + # Terminate action setup group + echo "::endgroup::" + - name: Run script shell: bash env: @@ -108,5 +110,6 @@ runs: INPUT_SKETCHES-REPORT-PATH: ${{ inputs.sketches-report-path }} working-directory: ${{ github.action_path }} run: | + # Run action poetry run \ python compilesketches/compilesketches.py From 66c4411ddd0a8e164bf4cda68541a239469d1b8e Mon Sep 17 00:00:00 2001 From: Brendan <2bndy5@gmail.com> Date: Tue, 3 Jan 2023 12:11:54 -0800 Subject: [PATCH 26/26] update set-output cmds --- .github/workflows/sync-labels.yml | 2 +- .github/workflows/test-integration.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/sync-labels.yml b/.github/workflows/sync-labels.yml index 70085bde..1c87f1dd 100644 --- a/.github/workflows/sync-labels.yml +++ b/.github/workflows/sync-labels.yml @@ -103,7 +103,7 @@ jobs: run: | # Use of this flag in the github-label-sync command will cause it to only check the validity of the # configuration. - echo "::set-output name=flag::--dry-run" + echo "flag=--dry-run" >> "$GITHUB_OUTPUT" - name: Checkout repository uses: actions/checkout@v3 diff --git a/.github/workflows/test-integration.yml b/.github/workflows/test-integration.yml index 73b2607a..867c4399 100644 --- a/.github/workflows/test-integration.yml +++ b/.github/workflows/test-integration.yml @@ -101,7 +101,7 @@ jobs: - name: Set report artifact name id: report-artifact-name run: | - echo "::set-output name=report-artifact-name::${{ github.job }}" + echo "report-artifact-name=${{ github.job }}" >> "$GITHUB_OUTPUT" - name: Save sketches report as workflow artifact uses: actions/upload-artifact@v3