diff --git a/.github/actions/local-action/action.yaml b/.github/actions/local-action/action.yaml index 82e28c0..65dde02 100644 --- a/.github/actions/local-action/action.yaml +++ b/.github/actions/local-action/action.yaml @@ -1,4 +1,3 @@ -# action.yaml name: "Get release version" description: "A GitHub Action to determine the next version by checking the commit history for Conventional Commits" inputs: diff --git a/.github/actions/setup-python/action.yml b/.github/actions/setup-python/action.yml index 88023c5..e4d0033 100644 --- a/.github/actions/setup-python/action.yml +++ b/.github/actions/setup-python/action.yml @@ -3,12 +3,18 @@ description: Setup python runs: using: composite steps: - - name: "Setup Python, Poetry and Dependencies" - uses: packetcoders/action-setup-cache-python-poetry@main + - name: Install uv + uses: astral-sh/setup-uv@v5 with: - python-version: 3.12 - poetry-version: 1.8.2 + version: '0.6.2' + enable-cache: true + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version-file: '.python-version' - name: Install dependencies - run: poetry install --no-interaction --with dev shell: bash + run: | + uv sync diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index dfc1c9c..9e5056a 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -6,44 +6,37 @@ on: - main jobs: - app-pylint: - name: pylint (App) + style-check: + name: Code style checking runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v4 + - uses: actions/checkout@v4 - name: Setup Python uses: ./.github/actions/setup-python - - name: Add pylint annotator - uses: pr-annotators/pylint-pr-annotator@v0.0.1 + - name: Run ruff format + run: | + uv run ruff format --check - - name: Run pylint - run: poetry run pylint get_release_version_action - - app-flake8: - name: flake8 (App) + lint: + name: Linting runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v4 + - uses: actions/checkout@v4 - name: Setup Python uses: ./.github/actions/setup-python - - name: Add flake8 annotator - uses: rbialon/flake8-annotations@v1.1 - - - name: Run flake8 - run: poetry run flake8 get_release_version_action + - name: Run ruff check + run: | + uv run ruff check --output-format=github - app-mypy: - name: mypy (App) + type-check-app: + name: Type checking (App) runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v4 + - uses: actions/checkout@v4 - name: Setup Python uses: ./.github/actions/setup-python @@ -52,46 +45,13 @@ jobs: uses: pr-annotators/mypy-pr-annotator@v1.0.0 - name: Run mypy - run: poetry run mypy get_release_version_action - - tests-pylint: - name: pylint (Tests) - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Python - uses: ./.github/actions/setup-python - - - name: Add pylint annotator - uses: pr-annotators/pylint-pr-annotator@main - - - name: Run pylint - run: poetry run pylint tests/e2e - - tests-flake8: - name: flake8 (Tests) - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Python - uses: ./.github/actions/setup-python - - - name: Add pylint annotator - uses: rbialon/flake8-annotations@v1.1 - - - name: Run flake8 - run: poetry run flake8 tests + run: uv run mypy src/get_release_version_action - tests-mypy: - name: mypy (Tests) + type-check-tests: + name: Type checking (Tests) runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v4 + - uses: actions/checkout@v4 - name: Setup Python uses: ./.github/actions/setup-python @@ -100,4 +60,4 @@ jobs: uses: pr-annotators/mypy-pr-annotator@v1.0.0 - name: Run mypy - run: poetry run mypy tests + run: uv run mypy tests diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index dc0d905..a88c38f 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -40,11 +40,11 @@ jobs: uses: ./.github/actions/setup-python - name: Run pytest - run: poetry run pytest --junit-xml test-result.xml tests/e2e + run: uv run pytest --junit-xml test-result.xml tests/e2e - name: Upload test results if: always() - uses: pmeier/pytest-results-action@v0.6.0 + uses: pmeier/pytest-results-action@v0.7.1 with: path: test-result.xml summary: true diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..3a4f41e --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.13 \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index abe60d4..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "python.venvPath": "~/Library/Caches/pypoetry/virtualenvs", - "python.testing.pytestArgs": ["tests"], - "python.testing.unittestEnabled": false, - "python.testing.pytestEnabled": true, - "python.testing.pytestPath": "pytest" -} diff --git a/Dockerfile b/Dockerfile index b04c7be..78f4861 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,36 +1,35 @@ -FROM python:3.12-slim - -# Install poetry -# Thanks to Soof Golan and jjmerelo from StackOverflow: https://stackoverflow.com/a/72465422 -ARG POETRY_VERSION=1.8.2 -ENV POETRY_VENV=/opt/poetry-venv -ENV POETRY_CACHE_DIR=/opt/.cache - -# Create a venv and install Poetry there -RUN /usr/local/bin/python3.12 -m venv $POETRY_VENV -RUN $POETRY_VENV/bin/python -m pip install -U pip setuptools -RUN $POETRY_VENV/bin/python -m pip install poetry==${POETRY_VERSION} - -# Add Poetry to the PATH -ENV PATH="${PATH}:${POETRY_VENV}/bin" - -# Print which git -RUN echo "which git: $(which git)" +FROM python:3.13-slim # Install git -RUN apt-get -yq update && \ - apt-get -yq install git && \ +ARG DEBIAN_FRONTEND=noninteractive +RUN apt update && \ + apt install -y git && \ + apt clean -y && \ rm -rf /var/lib/apt/lists/* -# Copy the action -COPY ["poetry.lock", "pyproject.toml", "/action/"] -COPY ["get_release_version_action/", "/action/get_release_version_action/"] +# Install uv +COPY --from=ghcr.io/astral-sh/uv:0.6.2 /uv /bin/ + +# Do not update the lock file +ARG UV_FROZEN=1 +# Copy cached packages instead of linking them +ARG UV_LINK_MODE=copy +# Compile Python bytecode on build time to improve startup times +ARG UV_COMPILE_BYTECODE=1 # Install dependencies -RUN poetry -C /action install --no-interaction --no-cache --without dev -RUN poetry -C /action install --no-interaction --no-cache --only-root +WORKDIR /app +COPY .python-version pyproject.toml uv.lock ./ +RUN --mount=type=cache,target=/root/.cache/uv \ + uv sync --no-install-project --no-dev + +# Add virtual environment to PATH +ENV PATH="/app/.venv/bin:$PATH" -ENV PYTHONPATH="/action" +# Copy and install source code +COPY src/get_release_version_action/ src/get_release_version_action/ +RUN --mount=type=cache,target=/root/.cache/uv \ + uv sync --no-dev -RUN chmod +x /action/get_release_version_action/entrypoint.sh -ENTRYPOINT ["/action/get_release_version_action/entrypoint.sh"] +RUN chmod +x /app/src/get_release_version_action/entrypoint.sh +ENTRYPOINT ["/app/src/get_release_version_action/entrypoint.sh"] diff --git a/LICENSE b/LICENSE index 03bc315..68d3437 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2024 wemogy +Copyright (c) 2025 wemogy Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index d495a3b..97f5e53 100644 --- a/README.md +++ b/README.md @@ -97,30 +97,24 @@ We had this issue, which finally led to the decision to implement the semantic r ## Development -This project uses [poetry](https://python-poetry.org/docs/#installation) for dependency management. +This project uses [uv](https://docs.astral.sh/uv/). ### Install dependencies -For development: - ```bash # working directory: repository root -poetry install --with dev +uv sync ``` -For production: - -```bash -# working directory: repository root -poetry install --without dev -``` +This commands creates a virtual environment that can be used just like one created by the `venv` module. -### Add or update dependencies +### Add, update and remove dependencies ```bash # working directory: repository root -poetry add [@^] [--group dev] -poetry update [[@^]] +uv add [==] [--dev] +uv add "==" --upgrade-package [--dev] +uv remove [--dev] ``` Some dependencies are missing type definitions (stubs) for mypy. @@ -140,19 +134,11 @@ Again, check those functions and classes after you run the command. stubgen -o .mypy_stubs -p semantic_release ``` -### Activate the poetry shell - -```bash -# working directory: repository root -poetry shell -``` - ### Run the script ```bash -# with poetry shell -# working directory: src -python3 app.py [...args] +# working directory: repository root +uv run src/get_release_version_action/app.py [...args] ``` ### Run the Docker container @@ -174,31 +160,6 @@ docker run get-release-version-action:local ### Run the tests ```bash -# with poetry shell # working directory: tests -pytest tests +uv run pytest tests ``` - -The tests are isolated from the actual source code, because they are supposed to test the same interface that the action also uses. -This means that the tests **must not** import anything from the source code or vice versa. - -### Run linting and type checking - -This project uses pylint and flake8 for linting / code style checking and mypy for static type checking. - -All tools are configured in the `pyproject.toml`. - -```bash -# with poetry shell -# working directory: repository root -pylint get_release_version_action -flake8 get_release_version_action -mypy get_release_version_action - -pylint tests/e2e -flake8 tests -mypy tests -``` - -> [!IMPORTANT] -> Source code and tests are isolated from each other and also need to be checked isolated from each other to prevent false warnings. diff --git a/action.yaml b/action.yaml index ff9566b..547f9d2 100644 --- a/action.yaml +++ b/action.yaml @@ -1,4 +1,3 @@ -# action.yaml name: "Get release version" description: "A GitHub Action to determine the next version by checking the commit history for Conventional Commits" inputs: @@ -51,7 +50,7 @@ outputs: description: "If any relevant changes got detected and a tag got created." runs: using: "docker" - image: "docker://ghcr.io/wemogy/get-release-version-action:4.3.2" + image: "docker://ghcr.io/wemogy/get-release-version-action:4.3.3" args: - --prefix - ${{ inputs.prefix }} diff --git a/get_release_version_action/__init__.py b/get_release_version_action/__init__.py deleted file mode 100644 index 9472695..0000000 --- a/get_release_version_action/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -""" -A GitHub Action to determine the next version by checking the commit history -for Conventional Commits with support for hotfix changes. -""" -from .algorithms import cli_entrypoint, main_algorithm -from .models import Inputs, Outputs - -__all__ = [ - 'Inputs', - 'Outputs', - 'main_algorithm', - 'cli_entrypoint' -] diff --git a/get_release_version_action/app.py b/get_release_version_action/app.py deleted file mode 100644 index f610b94..0000000 --- a/get_release_version_action/app.py +++ /dev/null @@ -1,8 +0,0 @@ -""" -A GitHub Action to determine the next version by checking the commit history -for Conventional Commits with support for hotfix changes. -""" -from get_release_version_action import cli_entrypoint - -if __name__ == '__main__': - cli_entrypoint() diff --git a/get_release_version_action/models/__init__.py b/get_release_version_action/models/__init__.py deleted file mode 100644 index fc6e9c7..0000000 --- a/get_release_version_action/models/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -"""Input and output models.""" -from .inputs import Inputs -from .outputs import Outputs, GetNextVersionOutput - -__all__ = [ - 'Inputs', - 'Outputs', - 'GetNextVersionOutput' -] diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index 2be143c..0000000 --- a/poetry.lock +++ /dev/null @@ -1,1011 +0,0 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. - -[[package]] -name = "annotated-types" -version = "0.6.0" -description = "Reusable constraint types to use with typing.Annotated" -optional = false -python-versions = ">=3.8" -files = [ - {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"}, - {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, -] - -[[package]] -name = "assertpy" -version = "1.1" -description = "Simple assertion library for unit testing in python with a fluent API" -optional = false -python-versions = "*" -files = [ - {file = "assertpy-1.1.tar.gz", hash = "sha256:acc64329934ad71a3221de185517a43af33e373bb44dc05b5a9b174394ef4833"}, -] - -[[package]] -name = "astroid" -version = "3.1.0" -description = "An abstract syntax tree for Python with inference support." -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "astroid-3.1.0-py3-none-any.whl", hash = "sha256:951798f922990137ac090c53af473db7ab4e70c770e6d7fae0cec59f74411819"}, - {file = "astroid-3.1.0.tar.gz", hash = "sha256:ac248253bfa4bd924a0de213707e7ebeeb3138abeb48d798784ead1e56d419d4"}, -] - -[[package]] -name = "certifi" -version = "2024.2.2" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.6" -files = [ - {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, - {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, -] - -[[package]] -name = "charset-normalizer" -version = "3.3.2" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, -] - -[[package]] -name = "click" -version = "8.1.7" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "click-option-group" -version = "0.5.6" -description = "Option groups missing in Click" -optional = false -python-versions = ">=3.6,<4" -files = [ - {file = "click-option-group-0.5.6.tar.gz", hash = "sha256:97d06703873518cc5038509443742b25069a3c7562d1ea72ff08bfadde1ce777"}, - {file = "click_option_group-0.5.6-py3-none-any.whl", hash = "sha256:38a26d963ee3ad93332ddf782f9259c5bdfe405e73408d943ef5e7d0c3767ec7"}, -] - -[package.dependencies] -Click = ">=7.0,<9" - -[package.extras] -docs = ["Pallets-Sphinx-Themes", "m2r2", "sphinx"] -tests = ["pytest"] -tests-cov = ["coverage", "coveralls", "pytest", "pytest-cov"] - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -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 = "dill" -version = "0.3.8" -description = "serialize all of Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"}, - {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"}, -] - -[package.extras] -graph = ["objgraph (>=1.7.2)"] -profile = ["gprof2dot (>=2022.7.29)"] - -[[package]] -name = "dotty-dict" -version = "1.3.1" -description = "Dictionary wrapper for quick access to deeply nested keys." -optional = false -python-versions = ">=3.5,<4.0" -files = [ - {file = "dotty_dict-1.3.1-py3-none-any.whl", hash = "sha256:5022d234d9922f13aa711b4950372a06a6d64cb6d6db9ba43d0ba133ebfce31f"}, - {file = "dotty_dict-1.3.1.tar.gz", hash = "sha256:4b016e03b8ae265539757a53eba24b9bfda506fb94fbce0bee843c6f05541a15"}, -] - -[[package]] -name = "flake8" -version = "7.0.0" -description = "the modular source code checker: pep8 pyflakes and co" -optional = false -python-versions = ">=3.8.1" -files = [ - {file = "flake8-7.0.0-py2.py3-none-any.whl", hash = "sha256:a6dfbb75e03252917f2473ea9653f7cd799c3064e54d4c8140044c5c065f53c3"}, - {file = "flake8-7.0.0.tar.gz", hash = "sha256:33f96621059e65eec474169085dc92bf26e7b2d47366b70be2f67ab80dc25132"}, -] - -[package.dependencies] -mccabe = ">=0.7.0,<0.8.0" -pycodestyle = ">=2.11.0,<2.12.0" -pyflakes = ">=3.2.0,<3.3.0" - -[[package]] -name = "flake8-pyproject" -version = "1.2.3" -description = "Flake8 plug-in loading the configuration from pyproject.toml" -optional = false -python-versions = ">= 3.6" -files = [ - {file = "flake8_pyproject-1.2.3-py3-none-any.whl", hash = "sha256:6249fe53545205af5e76837644dc80b4c10037e73a0e5db87ff562d75fb5bd4a"}, -] - -[package.dependencies] -Flake8 = ">=5" - -[package.extras] -dev = ["pyTest", "pyTest-cov"] - -[[package]] -name = "gitdb" -version = "4.0.11" -description = "Git Object Database" -optional = false -python-versions = ">=3.7" -files = [ - {file = "gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4"}, - {file = "gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"}, -] - -[package.dependencies] -smmap = ">=3.0.1,<6" - -[[package]] -name = "gitpython" -version = "3.1.43" -description = "GitPython is a Python library used to interact with Git repositories" -optional = false -python-versions = ">=3.7" -files = [ - {file = "GitPython-3.1.43-py3-none-any.whl", hash = "sha256:eec7ec56b92aad751f9912a73404bc02ba212a23adb2c7098ee668417051a1ff"}, - {file = "GitPython-3.1.43.tar.gz", hash = "sha256:35f314a9f878467f5453cc1fee295c3e18e52f1b99f10f6cf5b1682e968a9e7c"}, -] - -[package.dependencies] -gitdb = ">=4.0.1,<5" - -[package.extras] -doc = ["sphinx (==4.3.2)", "sphinx-autodoc-typehints", "sphinx-rtd-theme", "sphinxcontrib-applehelp (>=1.0.2,<=1.0.4)", "sphinxcontrib-devhelp (==1.0.2)", "sphinxcontrib-htmlhelp (>=2.0.0,<=2.0.1)", "sphinxcontrib-qthelp (==1.0.3)", "sphinxcontrib-serializinghtml (==1.1.5)"] -test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"] - -[[package]] -name = "idna" -version = "3.7" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.5" -files = [ - {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, - {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, -] - -[[package]] -name = "importlib-resources" -version = "6.4.0" -description = "Read resources from Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "importlib_resources-6.4.0-py3-none-any.whl", hash = "sha256:50d10f043df931902d4194ea07ec57960f66a80449ff867bfe782b4c486ba78c"}, - {file = "importlib_resources-6.4.0.tar.gz", hash = "sha256:cdb2b453b8046ca4e3798eb1d84f3cce1446a0e8e7b5ef4efb600f19fc398145"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["jaraco.test (>=5.4)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)"] - -[[package]] -name = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -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 = "isort" -version = "5.13.2" -description = "A Python utility / library to sort Python imports." -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, - {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, -] - -[package.extras] -colors = ["colorama (>=0.4.6)"] - -[[package]] -name = "jinja2" -version = "3.1.3" -description = "A very fast and expressive template engine." -optional = false -python-versions = ">=3.7" -files = [ - {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, - {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, -] - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "markdown-it-py" -version = "3.0.0" -description = "Python port of markdown-it. Markdown parsing, done right!" -optional = false -python-versions = ">=3.8" -files = [ - {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, - {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, -] - -[package.dependencies] -mdurl = ">=0.1,<1.0" - -[package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark"] -code-style = ["pre-commit (>=3.0,<4.0)"] -compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] -linkify = ["linkify-it-py (>=1,<3)"] -plugins = ["mdit-py-plugins"] -profiling = ["gprof2dot"] -rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - -[[package]] -name = "markupsafe" -version = "2.1.5" -description = "Safely add untrusted strings to HTML/XML markup." -optional = false -python-versions = ">=3.7" -files = [ - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, - {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, -] - -[[package]] -name = "mccabe" -version = "0.7.0" -description = "McCabe checker, plugin for flake8" -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 = "mdurl" -version = "0.1.2" -description = "Markdown URL utilities" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, -] - -[[package]] -name = "mypy" -version = "1.10.0" -description = "Optional static typing for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "mypy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da1cbf08fb3b851ab3b9523a884c232774008267b1f83371ace57f412fe308c2"}, - {file = "mypy-1.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12b6bfc1b1a66095ab413160a6e520e1dc076a28f3e22f7fb25ba3b000b4ef99"}, - {file = "mypy-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e36fb078cce9904c7989b9693e41cb9711e0600139ce3970c6ef814b6ebc2b2"}, - {file = "mypy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b0695d605ddcd3eb2f736cd8b4e388288c21e7de85001e9f85df9187f2b50f9"}, - {file = "mypy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:cd777b780312ddb135bceb9bc8722a73ec95e042f911cc279e2ec3c667076051"}, - {file = "mypy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3be66771aa5c97602f382230165b856c231d1277c511c9a8dd058be4784472e1"}, - {file = "mypy-1.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8b2cbaca148d0754a54d44121b5825ae71868c7592a53b7292eeb0f3fdae95ee"}, - {file = "mypy-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ec404a7cbe9fc0e92cb0e67f55ce0c025014e26d33e54d9e506a0f2d07fe5de"}, - {file = "mypy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e22e1527dc3d4aa94311d246b59e47f6455b8729f4968765ac1eacf9a4760bc7"}, - {file = "mypy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:a87dbfa85971e8d59c9cc1fcf534efe664d8949e4c0b6b44e8ca548e746a8d53"}, - {file = "mypy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a781f6ad4bab20eef8b65174a57e5203f4be627b46291f4589879bf4e257b97b"}, - {file = "mypy-1.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b808e12113505b97d9023b0b5e0c0705a90571c6feefc6f215c1df9381256e30"}, - {file = "mypy-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f55583b12156c399dce2df7d16f8a5095291354f1e839c252ec6c0611e86e2e"}, - {file = "mypy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cf18f9d0efa1b16478c4c129eabec36148032575391095f73cae2e722fcf9d5"}, - {file = "mypy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:bc6ac273b23c6b82da3bb25f4136c4fd42665f17f2cd850771cb600bdd2ebeda"}, - {file = "mypy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9fd50226364cd2737351c79807775136b0abe084433b55b2e29181a4c3c878c0"}, - {file = "mypy-1.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f90cff89eea89273727d8783fef5d4a934be2fdca11b47def50cf5d311aff727"}, - {file = "mypy-1.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fcfc70599efde5c67862a07a1aaf50e55bce629ace26bb19dc17cece5dd31ca4"}, - {file = "mypy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:075cbf81f3e134eadaf247de187bd604748171d6b79736fa9b6c9685b4083061"}, - {file = "mypy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:3f298531bca95ff615b6e9f2fc0333aae27fa48052903a0ac90215021cdcfa4f"}, - {file = "mypy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa7ef5244615a2523b56c034becde4e9e3f9b034854c93639adb667ec9ec2976"}, - {file = "mypy-1.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3236a4c8f535a0631f85f5fcdffba71c7feeef76a6002fcba7c1a8e57c8be1ec"}, - {file = "mypy-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a2b5cdbb5dd35aa08ea9114436e0d79aceb2f38e32c21684dcf8e24e1e92821"}, - {file = "mypy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92f93b21c0fe73dc00abf91022234c79d793318b8a96faac147cd579c1671746"}, - {file = "mypy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:28d0e038361b45f099cc086d9dd99c15ff14d0188f44ac883010e172ce86c38a"}, - {file = "mypy-1.10.0-py3-none-any.whl", hash = "sha256:f8c083976eb530019175aabadb60921e73b4f45736760826aa1689dda8208aee"}, - {file = "mypy-1.10.0.tar.gz", hash = "sha256:3d087fcbec056c4ee34974da493a826ce316947485cef3901f511848e687c131"}, -] - -[package.dependencies] -mypy-extensions = ">=1.0.0" -typing-extensions = ">=4.1.0" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -install-types = ["pip"] -mypyc = ["setuptools (>=50)"] -reports = ["lxml"] - -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -optional = false -python-versions = ">=3.5" -files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, -] - -[[package]] -name = "packaging" -version = "24.0" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, - {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, -] - -[[package]] -name = "platformdirs" -version = "4.2.1" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." -optional = false -python-versions = ">=3.8" -files = [ - {file = "platformdirs-4.2.1-py3-none-any.whl", hash = "sha256:17d5a1161b3fd67b390023cb2d3b026bbd40abde6fdb052dfbd3a29c3ba22ee1"}, - {file = "platformdirs-4.2.1.tar.gz", hash = "sha256:031cd18d4ec63ec53e82dceaac0417d218a6863f7745dfcc9efe7793b7039bdf"}, -] - -[package.extras] -docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] -type = ["mypy (>=1.8)"] - -[[package]] -name = "pluggy" -version = "1.5.0" -description = "plugin and hook calling mechanisms for python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, - {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "pycodestyle" -version = "2.11.1" -description = "Python style guide checker" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, - {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, -] - -[[package]] -name = "pydantic" -version = "2.7.1" -description = "Data validation using Python type hints" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pydantic-2.7.1-py3-none-any.whl", hash = "sha256:e029badca45266732a9a79898a15ae2e8b14840b1eabbb25844be28f0b33f3d5"}, - {file = "pydantic-2.7.1.tar.gz", hash = "sha256:e9dbb5eada8abe4d9ae5f46b9939aead650cd2b68f249bb3a8139dbe125803cc"}, -] - -[package.dependencies] -annotated-types = ">=0.4.0" -pydantic-core = "2.18.2" -typing-extensions = ">=4.6.1" - -[package.extras] -email = ["email-validator (>=2.0.0)"] - -[[package]] -name = "pydantic-core" -version = "2.18.2" -description = "Core functionality for Pydantic validation and serialization" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pydantic_core-2.18.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9e08e867b306f525802df7cd16c44ff5ebbe747ff0ca6cf3fde7f36c05a59a81"}, - {file = "pydantic_core-2.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f0a21cbaa69900cbe1a2e7cad2aa74ac3cf21b10c3efb0fa0b80305274c0e8a2"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0680b1f1f11fda801397de52c36ce38ef1c1dc841a0927a94f226dea29c3ae3d"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:95b9d5e72481d3780ba3442eac863eae92ae43a5f3adb5b4d0a1de89d42bb250"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fcf5cd9c4b655ad666ca332b9a081112cd7a58a8b5a6ca7a3104bc950f2038"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b5155ff768083cb1d62f3e143b49a8a3432e6789a3abee8acd005c3c7af1c74"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:553ef617b6836fc7e4df130bb851e32fe357ce36336d897fd6646d6058d980af"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b89ed9eb7d616ef5714e5590e6cf7f23b02d0d539767d33561e3675d6f9e3857"}, - {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:75f7e9488238e920ab6204399ded280dc4c307d034f3924cd7f90a38b1829563"}, - {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ef26c9e94a8c04a1b2924149a9cb081836913818e55681722d7f29af88fe7b38"}, - {file = "pydantic_core-2.18.2-cp310-none-win32.whl", hash = "sha256:182245ff6b0039e82b6bb585ed55a64d7c81c560715d1bad0cbad6dfa07b4027"}, - {file = "pydantic_core-2.18.2-cp310-none-win_amd64.whl", hash = "sha256:e23ec367a948b6d812301afc1b13f8094ab7b2c280af66ef450efc357d2ae543"}, - {file = "pydantic_core-2.18.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:219da3f096d50a157f33645a1cf31c0ad1fe829a92181dd1311022f986e5fbe3"}, - {file = "pydantic_core-2.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cc1cfd88a64e012b74e94cd00bbe0f9c6df57049c97f02bb07d39e9c852e19a4"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05b7133a6e6aeb8df37d6f413f7705a37ab4031597f64ab56384c94d98fa0e90"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:224c421235f6102e8737032483f43c1a8cfb1d2f45740c44166219599358c2cd"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b14d82cdb934e99dda6d9d60dc84a24379820176cc4a0d123f88df319ae9c150"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2728b01246a3bba6de144f9e3115b532ee44bd6cf39795194fb75491824a1413"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:470b94480bb5ee929f5acba6995251ada5e059a5ef3e0dfc63cca287283ebfa6"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:997abc4df705d1295a42f95b4eec4950a37ad8ae46d913caeee117b6b198811c"}, - {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75250dbc5290e3f1a0f4618db35e51a165186f9034eff158f3d490b3fed9f8a0"}, - {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4456f2dca97c425231d7315737d45239b2b51a50dc2b6f0c2bb181fce6207664"}, - {file = "pydantic_core-2.18.2-cp311-none-win32.whl", hash = "sha256:269322dcc3d8bdb69f054681edff86276b2ff972447863cf34c8b860f5188e2e"}, - {file = "pydantic_core-2.18.2-cp311-none-win_amd64.whl", hash = "sha256:800d60565aec896f25bc3cfa56d2277d52d5182af08162f7954f938c06dc4ee3"}, - {file = "pydantic_core-2.18.2-cp311-none-win_arm64.whl", hash = "sha256:1404c69d6a676245199767ba4f633cce5f4ad4181f9d0ccb0577e1f66cf4c46d"}, - {file = "pydantic_core-2.18.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:fb2bd7be70c0fe4dfd32c951bc813d9fe6ebcbfdd15a07527796c8204bd36242"}, - {file = "pydantic_core-2.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6132dd3bd52838acddca05a72aafb6eab6536aa145e923bb50f45e78b7251043"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d904828195733c183d20a54230c0df0eb46ec746ea1a666730787353e87182"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c9bd70772c720142be1020eac55f8143a34ec9f82d75a8e7a07852023e46617f"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2b8ed04b3582771764538f7ee7001b02e1170223cf9b75dff0bc698fadb00cf3"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6dac87ddb34aaec85f873d737e9d06a3555a1cc1a8e0c44b7f8d5daeb89d86f"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ca4ae5a27ad7a4ee5170aebce1574b375de390bc01284f87b18d43a3984df72"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:886eec03591b7cf058467a70a87733b35f44707bd86cf64a615584fd72488b7c"}, - {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ca7b0c1f1c983e064caa85f3792dd2fe3526b3505378874afa84baf662e12241"}, - {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b4356d3538c3649337df4074e81b85f0616b79731fe22dd11b99499b2ebbdf3"}, - {file = "pydantic_core-2.18.2-cp312-none-win32.whl", hash = "sha256:8b172601454f2d7701121bbec3425dd71efcb787a027edf49724c9cefc14c038"}, - {file = "pydantic_core-2.18.2-cp312-none-win_amd64.whl", hash = "sha256:b1bd7e47b1558ea872bd16c8502c414f9e90dcf12f1395129d7bb42a09a95438"}, - {file = "pydantic_core-2.18.2-cp312-none-win_arm64.whl", hash = "sha256:98758d627ff397e752bc339272c14c98199c613f922d4a384ddc07526c86a2ec"}, - {file = "pydantic_core-2.18.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:9fdad8e35f278b2c3eb77cbdc5c0a49dada440657bf738d6905ce106dc1de439"}, - {file = "pydantic_core-2.18.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1d90c3265ae107f91a4f279f4d6f6f1d4907ac76c6868b27dc7fb33688cfb347"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390193c770399861d8df9670fb0d1874f330c79caaca4642332df7c682bf6b91"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:82d5d4d78e4448683cb467897fe24e2b74bb7b973a541ea1dcfec1d3cbce39fb"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4774f3184d2ef3e14e8693194f661dea5a4d6ca4e3dc8e39786d33a94865cefd"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4d938ec0adf5167cb335acb25a4ee69a8107e4984f8fbd2e897021d9e4ca21b"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0e8b1be28239fc64a88a8189d1df7fad8be8c1ae47fcc33e43d4be15f99cc70"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:868649da93e5a3d5eacc2b5b3b9235c98ccdbfd443832f31e075f54419e1b96b"}, - {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:78363590ef93d5d226ba21a90a03ea89a20738ee5b7da83d771d283fd8a56761"}, - {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:852e966fbd035a6468fc0a3496589b45e2208ec7ca95c26470a54daed82a0788"}, - {file = "pydantic_core-2.18.2-cp38-none-win32.whl", hash = "sha256:6a46e22a707e7ad4484ac9ee9f290f9d501df45954184e23fc29408dfad61350"}, - {file = "pydantic_core-2.18.2-cp38-none-win_amd64.whl", hash = "sha256:d91cb5ea8b11607cc757675051f61b3d93f15eca3cefb3e6c704a5d6e8440f4e"}, - {file = "pydantic_core-2.18.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:ae0a8a797a5e56c053610fa7be147993fe50960fa43609ff2a9552b0e07013e8"}, - {file = "pydantic_core-2.18.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:042473b6280246b1dbf530559246f6842b56119c2926d1e52b631bdc46075f2a"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a388a77e629b9ec814c1b1e6b3b595fe521d2cdc625fcca26fbc2d44c816804"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e25add29b8f3b233ae90ccef2d902d0ae0432eb0d45370fe315d1a5cf231004b"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f459a5ce8434614dfd39bbebf1041952ae01da6bed9855008cb33b875cb024c0"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eff2de745698eb46eeb51193a9f41d67d834d50e424aef27df2fcdee1b153845"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8309f67285bdfe65c372ea3722b7a5642680f3dba538566340a9d36e920b5f0"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f93a8a2e3938ff656a7c1bc57193b1319960ac015b6e87d76c76bf14fe0244b4"}, - {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:22057013c8c1e272eb8d0eebc796701167d8377441ec894a8fed1af64a0bf399"}, - {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cfeecd1ac6cc1fb2692c3d5110781c965aabd4ec5d32799773ca7b1456ac636b"}, - {file = "pydantic_core-2.18.2-cp39-none-win32.whl", hash = "sha256:0d69b4c2f6bb3e130dba60d34c0845ba31b69babdd3f78f7c0c8fae5021a253e"}, - {file = "pydantic_core-2.18.2-cp39-none-win_amd64.whl", hash = "sha256:d9319e499827271b09b4e411905b24a426b8fb69464dfa1696258f53a3334641"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a1874c6dd4113308bd0eb568418e6114b252afe44319ead2b4081e9b9521fe75"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:ccdd111c03bfd3666bd2472b674c6899550e09e9f298954cfc896ab92b5b0e6d"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e18609ceaa6eed63753037fc06ebb16041d17d28199ae5aba0052c51449650a9"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e5c584d357c4e2baf0ff7baf44f4994be121e16a2c88918a5817331fc7599d7"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43f0f463cf89ace478de71a318b1b4f05ebc456a9b9300d027b4b57c1a2064fb"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e1b395e58b10b73b07b7cf740d728dd4ff9365ac46c18751bf8b3d8cca8f625a"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0098300eebb1c837271d3d1a2cd2911e7c11b396eac9661655ee524a7f10587b"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:36789b70d613fbac0a25bb07ab3d9dba4d2e38af609c020cf4d888d165ee0bf3"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3f9a801e7c8f1ef8718da265bba008fa121243dfe37c1cea17840b0944dfd72c"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:3a6515ebc6e69d85502b4951d89131ca4e036078ea35533bb76327f8424531ce"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20aca1e2298c56ececfd8ed159ae4dde2df0781988c97ef77d5c16ff4bd5b400"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:223ee893d77a310a0391dca6df00f70bbc2f36a71a895cecd9a0e762dc37b349"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2334ce8c673ee93a1d6a65bd90327588387ba073c17e61bf19b4fd97d688d63c"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:cbca948f2d14b09d20268cda7b0367723d79063f26c4ffc523af9042cad95592"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b3ef08e20ec49e02d5c6717a91bb5af9b20f1805583cb0adfe9ba2c6b505b5ae"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6fdc8627910eed0c01aed6a390a252fe3ea6d472ee70fdde56273f198938374"}, - {file = "pydantic_core-2.18.2.tar.gz", hash = "sha256:2e29d20810dfc3043ee13ac7d9e25105799817683348823f305ab3f349b9386e"}, -] - -[package.dependencies] -typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" - -[[package]] -name = "pydevd-pycharm" -version = "241.14494.241" -description = "PyCharm Debugger (used in PyCharm and PyDev)" -optional = false -python-versions = "*" -files = [ - {file = "pydevd-pycharm-241.14494.241.tar.gz", hash = "sha256:01a2444fe04056ea21254a24df388528b5fcea5180ed9642722a13ab2e4ce570"}, -] - -[[package]] -name = "pyflakes" -version = "3.2.0" -description = "passive checker of Python programs" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pyflakes-3.2.0-py2.py3-none-any.whl", hash = "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"}, - {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, -] - -[[package]] -name = "pygments" -version = "2.17.2" -description = "Pygments is a syntax highlighting package written in Python." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, - {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, -] - -[package.extras] -plugins = ["importlib-metadata"] -windows-terminal = ["colorama (>=0.4.6)"] - -[[package]] -name = "pylint" -version = "3.1.0" -description = "python code static checker" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "pylint-3.1.0-py3-none-any.whl", hash = "sha256:507a5b60953874766d8a366e8e8c7af63e058b26345cfcb5f91f89d987fd6b74"}, - {file = "pylint-3.1.0.tar.gz", hash = "sha256:6a69beb4a6f63debebaab0a3477ecd0f559aa726af4954fc948c51f7a2549e23"}, -] - -[package.dependencies] -astroid = ">=3.1.0,<=3.2.0-dev0" -colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -dill = {version = ">=0.3.7", markers = "python_version >= \"3.12\""} -isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" -mccabe = ">=0.6,<0.8" -platformdirs = ">=2.2.0" -tomlkit = ">=0.10.1" - -[package.extras] -spelling = ["pyenchant (>=3.2,<4.0)"] -testutils = ["gitpython (>3)"] - -[[package]] -name = "pytest" -version = "8.1.1" -description = "pytest: simple powerful testing with Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pytest-8.1.1-py3-none-any.whl", hash = "sha256:2a8386cfc11fa9d2c50ee7b2a57e7d898ef90470a7a34c4b949ff59662bb78b7"}, - {file = "pytest-8.1.1.tar.gz", hash = "sha256:ac978141a75948948817d360297b7aae0fcb9d6ff6bc9ec6d514b85d5a65c044"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=1.4,<2.0" - -[package.extras] -testing = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] - -[[package]] -name = "python-gitlab" -version = "4.4.0" -description = "A python wrapper for the GitLab API" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "python-gitlab-4.4.0.tar.gz", hash = "sha256:1d117bf7b433ae8255e5d74e72c660978f50ee85eb62248c9fb52ef43c3e3814"}, - {file = "python_gitlab-4.4.0-py3-none-any.whl", hash = "sha256:cdad39d016f59664cdaad0f878f194c79cb4357630776caa9a92c1da25c8d986"}, -] - -[package.dependencies] -requests = ">=2.25.0" -requests-toolbelt = ">=0.10.1" - -[package.extras] -autocompletion = ["argcomplete (>=1.10.0,<3)"] -yaml = ["PyYaml (>=6.0.1)"] - -[[package]] -name = "python-semantic-release" -version = "9.5.0" -description = "Automatic Semantic Versioning for Python projects" -optional = false -python-versions = ">=3.8" -files = [ - {file = "python_semantic_release-9.5.0-py3-none-any.whl", hash = "sha256:1a33e1b038b89e0811da071a355babeaf1c3ede6762ebd831335071884e1d1bd"}, - {file = "python_semantic_release-9.5.0.tar.gz", hash = "sha256:e82da3caf96e1f917c26b530214443da70c440d58d1ff46e1e8120f76f0c7b2c"}, -] - -[package.dependencies] -click = ">=8.0,<9.0" -click-option-group = ">=0.5,<1.0" -dotty-dict = ">=1.3,<2.0" -gitpython = ">=3.0,<4.0" -importlib-resources = ">=6.0,<7.0" -jinja2 = ">=3.1,<4.0" -pydantic = ">=2.0,<3.0" -python-gitlab = ">=4.0,<5.0" -requests = ">=2.25,<3.0" -rich = ">=13.0,<14.0" -shellingham = ">=1.5,<2.0" -tomlkit = ">=0.11,<1.0" - -[package.extras] -dev = ["pre-commit (>=3.5,<4.0)", "ruff (==0.4.1)", "tox (>=4.11,<5.0)"] -docs = ["Sphinx (>=6.0,<7.0)", "furo (>=2024.1,<2025.0)", "sphinx-autobuild (==2024.2.4)", "sphinxcontrib-apidoc (==0.5.0)"] -mypy = ["mypy (==1.9.0)", "types-requests (>=2.31.0,<2.32.0)"] -test = ["coverage[toml] (>=7.0,<8.0)", "pytest (>=7.0,<8.0)", "pytest-clarity (>=1.0,<2.0)", "pytest-cov (>=5.0,<6.0)", "pytest-env (>=1.0,<2.0)", "pytest-lazy-fixture (>=0.6.3,<0.7.0)", "pytest-mock (>=3.0,<4.0)", "pytest-pretty (>=1.2,<2.0)", "pytest-xdist (>=3.0,<4.0)", "requests-mock (>=1.10,<2.0)", "responses (>=0.25.0,<0.26.0)", "types-pytest-lazy-fixture (>=0.6.3,<0.7.0)"] - -[[package]] -name = "pyyaml" -version = "6.0.1" -description = "YAML parser and emitter for Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, - {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, - {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, - {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, - {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, - {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, - {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, - {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, - {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, - {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, - {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, - {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, - {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, -] - -[[package]] -name = "requests" -version = "2.31.0" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.7" -files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "requests-toolbelt" -version = "1.0.0" -description = "A utility belt for advanced users of python-requests" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, - {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, -] - -[package.dependencies] -requests = ">=2.0.1,<3.0.0" - -[[package]] -name = "rich" -version = "13.7.1" -description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"}, - {file = "rich-13.7.1.tar.gz", hash = "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432"}, -] - -[package.dependencies] -markdown-it-py = ">=2.2.0" -pygments = ">=2.13.0,<3.0.0" - -[package.extras] -jupyter = ["ipywidgets (>=7.5.1,<9)"] - -[[package]] -name = "semver" -version = "3.0.2" -description = "Python helper for Semantic Versioning (https://semver.org)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "semver-3.0.2-py3-none-any.whl", hash = "sha256:b1ea4686fe70b981f85359eda33199d60c53964284e0cfb4977d243e37cf4bf4"}, - {file = "semver-3.0.2.tar.gz", hash = "sha256:6253adb39c70f6e51afed2fa7152bcd414c411286088fb4b9effb133885ab4cc"}, -] - -[[package]] -name = "shellingham" -version = "1.5.4" -description = "Tool to Detect Surrounding Shell" -optional = false -python-versions = ">=3.7" -files = [ - {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, - {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, -] - -[[package]] -name = "smmap" -version = "5.0.1" -description = "A pure Python implementation of a sliding window memory map manager" -optional = false -python-versions = ">=3.7" -files = [ - {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"}, - {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, -] - -[[package]] -name = "tomlkit" -version = "0.12.4" -description = "Style preserving TOML library" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomlkit-0.12.4-py3-none-any.whl", hash = "sha256:5cd82d48a3dd89dee1f9d64420aa20ae65cfbd00668d6f094d7578a78efbb77b"}, - {file = "tomlkit-0.12.4.tar.gz", hash = "sha256:7ca1cfc12232806517a8515047ba66a19369e71edf2439d0f5824f91032b6cc3"}, -] - -[[package]] -name = "types-pyyaml" -version = "6.0.12.20240311" -description = "Typing stubs for PyYAML" -optional = false -python-versions = ">=3.8" -files = [ - {file = "types-PyYAML-6.0.12.20240311.tar.gz", hash = "sha256:a9e0f0f88dc835739b0c1ca51ee90d04ca2a897a71af79de9aec5f38cb0a5342"}, - {file = "types_PyYAML-6.0.12.20240311-py3-none-any.whl", hash = "sha256:b845b06a1c7e54b8e5b4c683043de0d9caf205e7434b3edc678ff2411979b8f6"}, -] - -[[package]] -name = "typing-extensions" -version = "4.11.0" -description = "Backported and Experimental Type Hints for Python 3.8+" -optional = false -python-versions = ">=3.8" -files = [ - {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, - {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, -] - -[[package]] -name = "urllib3" -version = "2.2.1" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.8" -files = [ - {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, - {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -h2 = ["h2 (>=4,<5)"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - -[metadata] -lock-version = "2.0" -python-versions = "^3.12" -content-hash = "b3cf2a5e843c6b15bf0b055915ec260e83056c9e5b5ebc06d5d5ccad0d8b51a9" diff --git a/pyproject.toml b/pyproject.toml index 6a8bd17..700a069 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,57 +1,56 @@ -[tool.poetry] +[project] name = "get-release-version-action" -version = "5.0.0" -description = "A GitHub Action to determine the next version by checking the commit history for conventional commits with support for hotfix changes." -authors = ["wemogy "] -license = "MIT" -readme = "README.md" - -homepage = "https://github.com/wemogy/get-release-version-action" -repository = "https://github.com/wemogy/get-release-version-action" -documentation = "https://github.com/wemogy/get-release-version-action" - -[tool.poetry.dependencies] -python = "^3.12" -PyYAML = "^6.0.1" -semver = "^3.0.2" -python-semantic-release = "^9.5.0" -GitPython = "^3.1.43" +version = "0.1.0" +classifiers = ["Private :: Do Not Upload"] +requires-python = ">=3.13" +dependencies = [ + "gitpython>=3.1.44", + "python-semantic-release==9.5.0", + "pyyaml>=6.0.2", + "semver>=3.0.4", +] -[tool.poetry.group.dev.dependencies] -pylint = "^3.1.0" -mypy = "^1.9.0" -flake8 = "^7.0.0" -flake8-pyproject = "^1.2.3" -types-pyyaml = "^6.0.12.20240311" -pytest = "^8.1.1" -assertpy = "^1.1" -pydevd-pycharm = ">=241.14494.241,<241.14495.0" +[project.scripts] +get-release-version-action = "get_release_version_action:main" -[tool.pylint.format] -max-line-length = 120 +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[dependency-groups] +dev = [ + "assertpy>=1.1", + "mypy>=1.15.0", + "pytest>=8.3.4", + "ruff>=0.9.6", + "types-assertpy>=1.1.0.20240712", + "types-pyyaml>=6.0.12.20241230", +] -[tool.pylint.message-control] -disable = [ - "too-many-return-statements", - "too-many-instance-attributes" +[tool.ruff] +line-length = 120 +exclude = [ + ".mypy_stubs" ] -[tool.flake8] -max-line-length = 120 -disable-noqa = true -per-file-ignores = [ - "__init__.py:F401", - "test_*.py:F401,F811" +[tool.ruff.lint] +select = ["ALL"] +unfixable = [ + "ERA001", # Commented out code ] +ignore = [ + "D203", # Would put a blank line before class docstrings + "D212", # Would put the summary on the same line as the docstring qoutes + "COM812", # Conflicts with formatter + "FIX002", # Prevents TODO comments + "TD002", # Prevents authorless TODO comments +] +flake8-quotes.inline-quotes="single" + +[tool.ruff.format] +quote-style = "single" +docstring-code-format = true [tool.mypy] mypy_path = ".mypy_stubs" strict = true - -[[tool.mypy.overrides]] -module = "assertpy.*" -ignore_missing_imports = true - -[build-system] -requires = ["poetry-core"] -build-backend = "poetry.core.masonry.api" diff --git a/src/get_release_version_action/__init__.py b/src/get_release_version_action/__init__.py new file mode 100644 index 0000000..5f82377 --- /dev/null +++ b/src/get_release_version_action/__init__.py @@ -0,0 +1,11 @@ +"""GitHub Action to determine the next version using Conventional Commits with support for hotfix changes.""" + +__all__ = [ + 'Inputs', + 'Outputs', + 'cli_entrypoint', + 'main_algorithm', +] + +from .algorithms import cli_entrypoint, main_algorithm +from .models import Inputs, Outputs diff --git a/get_release_version_action/algorithms/__init__.py b/src/get_release_version_action/algorithms/__init__.py similarity index 70% rename from get_release_version_action/algorithms/__init__.py rename to src/get_release_version_action/algorithms/__init__.py index 5d832e2..173fd01 100644 --- a/get_release_version_action/algorithms/__init__.py +++ b/src/get_release_version_action/algorithms/__init__.py @@ -1,8 +1,6 @@ """Algorithms for the get-release-version-action.""" -from .main_algorithm import main_algorithm -from .cli import cli_entrypoint -__all__ = [ - 'main_algorithm', - 'cli_entrypoint' -] +__all__ = ['cli_entrypoint', 'main_algorithm'] + +from .cli import cli_entrypoint +from .main_algorithm import main_algorithm diff --git a/get_release_version_action/algorithms/cli.py b/src/get_release_version_action/algorithms/cli.py similarity index 79% rename from get_release_version_action/algorithms/cli.py rename to src/get_release_version_action/algorithms/cli.py index 46c7926..012dd75 100644 --- a/get_release_version_action/algorithms/cli.py +++ b/src/get_release_version_action/algorithms/cli.py @@ -1,31 +1,32 @@ """The main entrypoint for the GitHub action.""" -import logging.config + +__all__ = ['cli_entrypoint'] + +import logging from argparse import ArgumentParser +from get_release_version_action.models import Inputs +from get_release_version_action.utils import log_github_output, setup_logging, write_github_output + from .main_algorithm import main_algorithm -from ..models import Inputs -from ..utils import log_github_output, setup_logging, write_github_output logger = logging.getLogger('wemogy.get-release-version-action') -__all__ = [ - 'cli_entrypoint' -] - def cli_entrypoint() -> None: - """The main entrypoint for the GitHub action.""" + """The main entrypoint for the GitHub action.""" # noqa: D401 parser = ArgumentParser( description='A GitHub Action to determine the next version by checking the commit history for Conventional ' - 'Commits with support for hotfix changes.', - allow_abbrev=False + 'Commits with support for hotfix changes.', + allow_abbrev=False, ) parser.add_argument( - '-v', '--verbose', + '-v', + '--verbose', dest='verbose', action='store_true', - help='Print debug messages to stdout.' + help='Print debug messages to stdout.', ) parser.add_argument( @@ -33,7 +34,7 @@ def cli_entrypoint() -> None: dest='prefix', required=False, default='v', - help='The prefix that should be prepended to the version.' + help='The prefix that should be prepended to the version.', ) parser.add_argument( @@ -41,7 +42,7 @@ def cli_entrypoint() -> None: dest='suffix', required=False, default='NONE', - help='The suffix that should be appended to the version (e.g. `beta`).' + help='The suffix that should be appended to the version (e.g. `beta`).', ) parser.add_argument( @@ -49,7 +50,7 @@ def cli_entrypoint() -> None: dest='reference_version_suffix', required=False, default='NONE', - help='The suffix that should be replaced with the value in `suffix`.' + help='The suffix that should be replaced with the value in `suffix`.', ) parser.add_argument( @@ -57,7 +58,7 @@ def cli_entrypoint() -> None: dest='bumping_suffix', required=False, default='hotfix', - help='The suffix to append to the version (or increment if it already exists) if `only-bump-suffix` is `true`.' + help='The suffix to append to the version (or increment if it already exists) if `only-bump-suffix` is `true`.', ) parser.add_argument( @@ -65,7 +66,7 @@ def cli_entrypoint() -> None: dest='only_bump_suffix', required=False, default='false', - help='Bump the `bumping-suffix` instead of the version if changes were detected.' + help='Bump the `bumping-suffix` instead of the version if changes were detected.', ) parser.add_argument( @@ -73,7 +74,7 @@ def cli_entrypoint() -> None: dest='create_tag', required=False, default='true', - help='Create a git tag for the version and push it if a remote is configured.' + help='Create a git tag for the version and push it if a remote is configured.', ) parser.add_argument( @@ -81,7 +82,7 @@ def cli_entrypoint() -> None: dest='git_username', required=False, default='NONE', - help='The username for creating the (annotated) git tag. Use `NONE` for no username.' + help='The username for creating the (annotated) git tag. Use `NONE` for no username.', ) parser.add_argument( @@ -89,7 +90,7 @@ def cli_entrypoint() -> None: dest='git_email', required=False, default='NONE', - help='The email address for creating the (annotated) git tag. Use `NONE` for no email address.' + help='The email address for creating the (annotated) git tag. Use `NONE` for no email address.', ) parser.add_argument( @@ -98,7 +99,7 @@ def cli_entrypoint() -> None: required=False, choices=('semantic', 'hash-based'), default='semantic', - help='The mode to use for determining the next version.' + help='The mode to use for determining the next version.', ) args = parser.parse_args() diff --git a/get_release_version_action/algorithms/hash_based.py b/src/get_release_version_action/algorithms/hash_based.py similarity index 81% rename from get_release_version_action/algorithms/hash_based.py rename to src/get_release_version_action/algorithms/hash_based.py index b1c4dd8..077bd35 100644 --- a/get_release_version_action/algorithms/hash_based.py +++ b/src/get_release_version_action/algorithms/hash_based.py @@ -1,21 +1,21 @@ """Get the next version based on the hash of the latest commit.""" + +__all__ = ['get_next_version'] + import logging import git -from ..models import Inputs, GetNextVersionOutput -from ..utils import get_sorted_tags +from get_release_version_action.models import GetNextVersionOutput, Inputs +from get_release_version_action.utils import get_sorted_tags logger = logging.getLogger('wemogy.get-release-version-action.hash-based') -__all__ = [ - 'get_next_version' -] - def build_tag_name(prefix: str, commit: git.Commit, suffix: str | None) -> str: """ Build a hash-based tag name by slicing the ``hexsha`` string to the first seven characters. + Git often abbreviates hashes to seven characters as this is usually enough to uniquely identify a commit. """ return prefix + commit.hexsha[:7] + (f'-{suffix}' if suffix is not None else '') @@ -24,7 +24,8 @@ def build_tag_name(prefix: str, commit: git.Commit, suffix: str | None) -> str: def get_current_version(repo: git.Repo, prefix: str, suffix: str | None) -> str | None: """ Get the current version (= the latest git tag that matches the versioning schema). - If there are no tags, return ``None``. + + :returns: The current version, or ``None`` if there are no tags. """ for tag in get_sorted_tags(repo): tag_name = build_tag_name(prefix, tag.commit, suffix) @@ -44,11 +45,7 @@ def get_next_version(inputs: Inputs, repo: git.Repo) -> GetNextVersionOutput: :returns: A tuple of the current version name, the next version and if the version was bumped. """ - current_version = get_current_version( - repo, - inputs.prefix, - inputs.reference_version_suffix - ) + current_version = get_current_version(repo, inputs.prefix, inputs.reference_version_suffix) next_version = repo.head.commit.hexsha[:7] version_bumped = current_version != next_version @@ -58,8 +55,4 @@ def get_next_version(inputs: Inputs, repo: git.Repo) -> GetNextVersionOutput: else: logger.info('Hash based version will be bumped.') - return ( - current_version, - next_version, - version_bumped - ) + return (current_version, next_version, version_bumped) diff --git a/get_release_version_action/algorithms/main_algorithm.py b/src/get_release_version_action/algorithms/main_algorithm.py similarity index 74% rename from get_release_version_action/algorithms/main_algorithm.py rename to src/get_release_version_action/algorithms/main_algorithm.py index f40bfb8..f1fb759 100644 --- a/get_release_version_action/algorithms/main_algorithm.py +++ b/src/get_release_version_action/algorithms/main_algorithm.py @@ -1,31 +1,30 @@ """The main algorithm.""" + +__all__ = ['main_algorithm'] + import logging -import os +from pathlib import Path import git -from ..models import Inputs, Outputs -from ..utils import create_git_tag +from get_release_version_action.models import Inputs, Outputs +from get_release_version_action.utils import create_git_tag + from .hash_based import get_next_version as get_next_version_hash from .semantic import get_next_version as get_next_semantic_version -__all__ = [ - 'main_algorithm' -] - logger = logging.getLogger('wemogy.get-release-version-action') def main_algorithm(inputs: Inputs) -> Outputs: - """The main algorithm.""" + """Main algorithm.""" # noqa: D401 logger.debug('Inputs: %s', inputs) # If create_tag is true, a git email address and a username are required. - if inputs.create_tag: - if inputs.git_email is None or inputs.git_username is None: - raise ValueError('git email and username are required when a tag should be created!') + if inputs.create_tag and (inputs.git_email is None or inputs.git_username is None): + raise ValueError('git email and username are required when a tag should be created!') - with git.Repo(os.getcwd()) as repo: + with git.Repo(Path.cwd()) as repo: if inputs.mode == 'semantic': previous_version_tag_name, new_version, version_bumped = get_next_semantic_version(inputs, repo) elif inputs.mode == 'hash-based': @@ -42,8 +41,9 @@ def main_algorithm(inputs: Inputs) -> Outputs: new_version_tag_name = f'{inputs.prefix}{new_version}' - new_tag_needed = (version_bumped or - ('0.0.0' not in new_version_tag_name and previous_version_tag_name != new_version_tag_name)) + new_tag_needed = version_bumped or ( + '0.0.0' not in new_version_tag_name and previous_version_tag_name != new_version_tag_name + ) if inputs.create_tag and new_tag_needed: if inputs.git_email is None or inputs.git_username is None: @@ -56,7 +56,7 @@ def main_algorithm(inputs: Inputs) -> Outputs: version_name=new_version_tag_name, previous_version=(previous_version_tag_name or '').removeprefix(inputs.prefix), previous_version_name=previous_version_tag_name or '', - tag_created=new_tag_needed + tag_created=new_tag_needed, ) logger.info('Outputs: %s', output) diff --git a/get_release_version_action/algorithms/semantic.py b/src/get_release_version_action/algorithms/semantic.py similarity index 74% rename from get_release_version_action/algorithms/semantic.py rename to src/get_release_version_action/algorithms/semantic.py index 4658031..9ecb669 100644 --- a/get_release_version_action/algorithms/semantic.py +++ b/src/get_release_version_action/algorithms/semantic.py @@ -1,4 +1,7 @@ """Get the next version based on conventional commits and semantic versioning.""" + +__all__ = ['get_next_version'] + import logging import git @@ -6,26 +9,19 @@ from semantic_release.commit_parser import AngularCommitParser, AngularParserOptions from semver import Version -from ..models import GetNextVersionOutput, Inputs -from ..utils import get_sorted_tags +from get_release_version_action.models import GetNextVersionOutput, Inputs +from get_release_version_action.utils import get_sorted_tags logger = logging.getLogger('wemogy.get-release-version-action.semantic') -__all__ = [ - 'get_next_version' -] - def get_current_version( - repo: git.Repo, - prefix: str, - suffix: str | None, - bumping_suffix: str, - reference_version_suffix: str | None + repo: git.Repo, prefix: str, suffix: str | None, bumping_suffix: str, reference_version_suffix: str | None ) -> git.TagReference | None: """ - GGet the current version (= the latest git tag that matches the versioning schema). - If there are no tags, return ``None``. + Get the current version (= the latest git tag that matches the versioning schema). + + :returns: The current version, or ``None`` if there are no tags. """ for tag in get_sorted_tags(repo): if not tag.name.startswith(prefix): @@ -38,22 +34,27 @@ def get_current_version( if bumping_suffix in tag.name and dash_count == 1: logger.debug( 'Found tag %s (%s) with prefix "%s" and suffix "%s"', - tag.name, tag.commit.hexsha, prefix, suffix + tag.name, + tag.commit.hexsha, + prefix, + suffix, ) return tag if dash_count == 0: logger.debug( 'Found tag %s (%s) with prefix "%s" and suffix "%s"', - tag.name, tag.commit.hexsha, prefix, suffix + tag.name, + tag.commit.hexsha, + prefix, + suffix, ) return tag continue if suffix in tag.name: logger.debug( - 'Found tag %s (%s) with prefix "%s" and suffix "%s"', - tag.name, tag.commit.hexsha, prefix, suffix + 'Found tag %s (%s) with prefix "%s" and suffix "%s"', tag.name, tag.commit.hexsha, prefix, suffix ) return tag @@ -63,7 +64,10 @@ def get_current_version( if tag.name.endswith(reference_version_suffix): logger.debug( 'Found tag %s (%s) with prefix "%s" and suffix "%s"', - tag.name, tag.commit.hexsha, prefix, reference_version_suffix + tag.name, + tag.commit.hexsha, + prefix, + reference_version_suffix, ) return tag @@ -75,8 +79,7 @@ def get_current_version( if f'-{bumping_suffix}' in tag.name: logger.debug( - 'Found tag %s (%s) with prefix "%s" and suffix "%s"', - tag.name, tag.commit.hexsha, prefix, suffix + 'Found tag %s (%s) with prefix "%s" and suffix "%s"', tag.name, tag.commit.hexsha, prefix, suffix ) return tag @@ -84,14 +87,12 @@ def get_current_version( if f'{suffix}-{bumping_suffix}' in tag.name: logger.debug( - 'Found tag %s (%s) with prefix "%s" and suffix "%s"', - tag.name, tag.commit.hexsha, prefix, suffix + 'Found tag %s (%s) with prefix "%s" and suffix "%s"', tag.name, tag.commit.hexsha, prefix, suffix ) return tag logger.debug( - 'Found no tags that have the prefix "%s" and suffix "%s" / "%s"', - prefix, suffix, reference_version_suffix + 'Found no tags that have the prefix "%s" and suffix "%s" / "%s"', prefix, suffix, reference_version_suffix ) return None @@ -121,17 +122,11 @@ def get_new_commits(repo: git.Repo, tag: git.TagReference | None) -> list[git.Co continue if commit == tag.commit: - logger.debug( - 'Commit %s is current version %s (%s)', - commit.hexsha, tag.name, tag.commit.hexsha - ) + logger.debug('Commit %s is current version %s (%s)', commit.hexsha, tag.name, tag.commit.hexsha) reached_starting_tag = True break - logger.debug( - 'Commit %s is newer than current version %s (%s)', - commit.hexsha, tag.name, tag.commit.hexsha - ) + logger.debug('Commit %s is newer than current version %s (%s)', commit.hexsha, tag.name, tag.commit.hexsha) new_commits.append(commit) commit_offset += max_commits @@ -144,9 +139,7 @@ def get_new_commits(repo: git.Repo, tag: git.TagReference | None) -> list[git.Co def analyze_commits( - repo: git.Repo, - current_version_tag: git.TagReference | None, - current_version: str | None + repo: git.Repo, current_version_tag: git.TagReference | None, current_version: str | None ) -> tuple[str, bool]: """Determine the next version.""" # 1. Add all commits to a list until the commit with the current_version_tag is reached @@ -159,20 +152,21 @@ def analyze_commits( # 3. Check if the list contains major, minor or patch # Reduce the parsing results to an integer: 0 = chore / unknown, 1 = patch, 2 = minor, 3 = major commit_bumps = [ - 0 if isinstance(result, ParseError) else - 3 if result.bump == LevelBump.MAJOR else - 2 if result.bump == LevelBump.MINOR else - 1 if result.bump == LevelBump.PATCH else 0 + if isinstance(result, ParseError) + else 3 + if result.bump == LevelBump.MAJOR + else 2 + if result.bump == LevelBump.MINOR + else 1 + if result.bump == LevelBump.PATCH + else 0 for result in parsing_results ] # The maximum of the numbers in commit_bumps is the version needed to be bumped version_to_bump = max(commit_bumps, default=0) - logger.debug( - 'Version to bump is %s (0 = chore / unknown, 1 = patch, 2 = minor, 3 = major)', - version_to_bump - ) + logger.debug('Version to bump is %s (0 = chore / unknown, 1 = patch, 2 = minor, 3 = major)', version_to_bump) # 4. Bump the version current_version_obj = Version.parse(current_version or '0.0.0') @@ -196,22 +190,12 @@ def get_next_version(inputs: Inputs, repo: git.Repo) -> GetNextVersionOutput: # The reference version is the latest version, possibly on another branch / channel. # It is used to get the next version. reference_version_tag = get_current_version( - repo, - inputs.prefix, - inputs.suffix, - inputs.bumping_suffix, - inputs.reference_version_suffix + repo, inputs.prefix, inputs.suffix, inputs.bumping_suffix, inputs.reference_version_suffix ) # The current version is the latest version on this branch / channel. # It is the version in the previous-version action output. - current_version_tag = get_current_version( - repo, - inputs.prefix, - inputs.suffix, - inputs.bumping_suffix, - None - ) + current_version_tag = get_current_version(repo, inputs.prefix, inputs.suffix, inputs.bumping_suffix, None) current_version_tag_name = current_version_tag.name if current_version_tag is not None else None @@ -232,11 +216,7 @@ def get_next_version(inputs: Inputs, repo: git.Repo) -> GetNextVersionOutput: # No change that requires a semantic version increase if not version_bumped: logger.info('No changes detected, version stays the same.') - return ( - current_version_tag_name, - next_version, - version_bumped - ) + return (current_version_tag_name, next_version, version_bumped) # Hotfix if inputs.only_bump_suffix: @@ -244,13 +224,9 @@ def get_next_version(inputs: Inputs, repo: git.Repo) -> GetNextVersionOutput: return ( current_version_tag_name, str(Version.parse(reference_version or '0.0.0').bump_prerelease(inputs.bumping_suffix)), - version_bumped + version_bumped, ) # Example case: New Release logger.info('Semantic Version will be incremented.') - return ( - current_version_tag_name, - next_version, - version_bumped - ) + return (current_version_tag_name, next_version, version_bumped) diff --git a/src/get_release_version_action/app.py b/src/get_release_version_action/app.py new file mode 100644 index 0000000..900daaf --- /dev/null +++ b/src/get_release_version_action/app.py @@ -0,0 +1,6 @@ +"""GitHub Action to determine the next version using Conventional Commits with support for hotfix changes.""" + +from get_release_version_action import cli_entrypoint + +if __name__ == '__main__': + cli_entrypoint() diff --git a/get_release_version_action/entrypoint.sh b/src/get_release_version_action/entrypoint.sh similarity index 65% rename from get_release_version_action/entrypoint.sh rename to src/get_release_version_action/entrypoint.sh index da1620c..20f89d6 100644 --- a/get_release_version_action/entrypoint.sh +++ b/src/get_release_version_action/entrypoint.sh @@ -4,4 +4,4 @@ sh -c "git config --global --add safe.directory $PWD" # Run the python application and pass the arguments -poetry run -C /action python /action/get_release_version_action/app.py "$@" +python3 /app/src/get_release_version_action/app.py "$@" diff --git a/src/get_release_version_action/models/__init__.py b/src/get_release_version_action/models/__init__.py new file mode 100644 index 0000000..4794dc2 --- /dev/null +++ b/src/get_release_version_action/models/__init__.py @@ -0,0 +1,6 @@ +"""Input and output models.""" + +from .inputs import Inputs +from .outputs import GetNextVersionOutput, Outputs + +__all__ = ['GetNextVersionOutput', 'Inputs', 'Outputs'] diff --git a/get_release_version_action/models/inputs.py b/src/get_release_version_action/models/inputs.py similarity index 83% rename from get_release_version_action/models/inputs.py rename to src/get_release_version_action/models/inputs.py index 3be1390..528c023 100644 --- a/get_release_version_action/models/inputs.py +++ b/src/get_release_version_action/models/inputs.py @@ -1,16 +1,17 @@ """Inputs of the get-release-version-action.""" + from __future__ import annotations -import argparse +__all__ = ['Inputs'] + +import logging from dataclasses import dataclass from inspect import get_annotations -import logging from types import NoneType, UnionType -from typing import Any, get_args +from typing import TYPE_CHECKING, Any, get_args -__all__ = [ - 'Inputs' -] +if TYPE_CHECKING: + import argparse logger = logging.getLogger('wemogy.get-release-version-action') @@ -63,23 +64,20 @@ def from_argparse(cls, args: argparse.Namespace) -> Inputs: value = False else: raise TypeError( - f'Expected boolean input "{property_name}"' - f' to be either "true" or "false", but got "{raw_value}".' - ) + f'Expected boolean input "{property_name}" to be either "true" or "false", but got "{raw_value}".' + ) elif property_type is str: value = raw_value # Docker seems to have problems with passing empty strings as arguments. # Because of that, a string containing 'NONE' is considered empty / as None. - elif isinstance(property_type, UnionType) \ - and str in get_args(property_type) \ - and NoneType in get_args(property_type): - if raw_value.strip() == '' or raw_value.strip() == 'NONE': - value = None - else: - value = raw_value - + elif ( + isinstance(property_type, UnionType) + and str in get_args(property_type) + and NoneType in get_args(property_type) + ): + value = None if raw_value.strip() == '' or raw_value.strip() == 'NONE' else raw_value else: value = property_type(raw_value) diff --git a/get_release_version_action/models/outputs.py b/src/get_release_version_action/models/outputs.py similarity index 86% rename from get_release_version_action/models/outputs.py rename to src/get_release_version_action/models/outputs.py index 48b94b7..b135fdc 100644 --- a/get_release_version_action/models/outputs.py +++ b/src/get_release_version_action/models/outputs.py @@ -1,20 +1,19 @@ """Outputs of the get-release-version-action.""" + from __future__ import annotations +__all__ = ['GetNextVersionOutput', 'Outputs'] + import dataclasses from dataclasses import dataclass -__all__ = [ - 'Outputs', - 'GetNextVersionOutput' -] - -GetNextVersionOutput = tuple[str | None, str, bool] +type GetNextVersionOutput = tuple[str | None, str, bool] @dataclass(frozen=True, kw_only=True) class Outputs: """Outputs of the get-release-version-action.""" + version: str """The next version, without the prefix.""" @@ -35,7 +34,7 @@ def to_github_output(self) -> str: output = '' for name, value in dataclasses.asdict(self).items(): - output += f'{name.replace('_', '-')}=' + output += f'{name.replace("_", "-")}=' if isinstance(value, bool): output += f'{str(value).lower()}\n' diff --git a/get_release_version_action/py.typed b/src/get_release_version_action/py.typed similarity index 100% rename from get_release_version_action/py.typed rename to src/get_release_version_action/py.typed diff --git a/get_release_version_action/resources/logging.config.yaml b/src/get_release_version_action/resources/logging.config.yaml similarity index 100% rename from get_release_version_action/resources/logging.config.yaml rename to src/get_release_version_action/resources/logging.config.yaml diff --git a/get_release_version_action/utils/__init__.py b/src/get_release_version_action/utils/__init__.py similarity index 94% rename from get_release_version_action/utils/__init__.py rename to src/get_release_version_action/utils/__init__.py index 243d2f4..0f3ee01 100644 --- a/get_release_version_action/utils/__init__.py +++ b/src/get_release_version_action/utils/__init__.py @@ -1,15 +1,16 @@ """Utilities.""" -from .commands import run_command -from .github_output import log_github_output, write_github_output -from .logger import IndentLoggingFormatter, setup_logging -from .git import create_git_tag, get_sorted_tags __all__ = [ - 'setup_logging', 'IndentLoggingFormatter', - 'write_github_output', + 'create_git_tag', + 'get_sorted_tags', 'log_github_output', 'run_command', - 'create_git_tag', - 'get_sorted_tags' + 'setup_logging', + 'write_github_output', ] + +from .commands import run_command +from .git import create_git_tag, get_sorted_tags +from .github_output import log_github_output, write_github_output +from .logger import IndentLoggingFormatter, setup_logging diff --git a/get_release_version_action/utils/commands.py b/src/get_release_version_action/utils/commands.py similarity index 62% rename from get_release_version_action/utils/commands.py rename to src/get_release_version_action/utils/commands.py index 5faf322..0891f2d 100644 --- a/get_release_version_action/utils/commands.py +++ b/src/get_release_version_action/utils/commands.py @@ -1,23 +1,21 @@ """Utilities for running commands.""" + import logging import os import subprocess from collections.abc import Sequence -from typing import TypeAlias logger = logging.getLogger('wemogy.get-release-version-action') -__all__ = [ - 'run_command' -] +__all__ = ['run_command'] -StringOrPath: TypeAlias = str | os.PathLike[str] +type StringOrPath = str | os.PathLike[str] def log_command( - command: Sequence[StringOrPath], - process: subprocess.CompletedProcess[str] | subprocess.CalledProcessError, - env: dict[str, StringOrPath] | None = None + command: Sequence[StringOrPath], + process: subprocess.CompletedProcess[str] | subprocess.CalledProcessError, + env: dict[str, StringOrPath] | None = None, ) -> None: """Log the command, environment and process result.""" return_code = process.returncode @@ -27,36 +25,27 @@ def log_command( if isinstance(process, subprocess.CalledProcessError): logger.error( - 'Process exited unsuccessful with exit code %s:\nCommand: %s%s%s', - return_code, command_str, env_str, output + 'Process exited unsuccessful with exit code %s:\nCommand: %s%s%s', return_code, command_str, env_str, output ) else: logger.debug( - 'Process exited successful with exit code %s:\nCommand: %s%s%s', - return_code, command_str, env_str, output + 'Process exited successful with exit code %s:\nCommand: %s%s%s', return_code, command_str, env_str, output ) def run_command(*command: StringOrPath) -> str: """ - Run the given command and return the output if the command was successful, - else log the output and raise an exception. + Run a command and return the output if the command was successful, else log the output and raise an exception. :param command: The command to run. :returns: The command's output if the command exited successful. :raises subprocess.CalledProcessError: If the command did not exit successful. """ try: - process = subprocess.run( - command, - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, - check=True, - text=True - ) + process = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, check=True, text=True) # noqa: S603 except subprocess.CalledProcessError as exc: log_command(command, exc) - raise exc + raise log_command(command, process) return process.stdout diff --git a/get_release_version_action/utils/git.py b/src/get_release_version_action/utils/git.py similarity index 93% rename from get_release_version_action/utils/git.py rename to src/get_release_version_action/utils/git.py index 08cf03a..f8be680 100644 --- a/get_release_version_action/utils/git.py +++ b/src/get_release_version_action/utils/git.py @@ -1,4 +1,7 @@ """Utilities for working with git repositories.""" + +__all__ = ['create_git_tag', 'get_sorted_tags', 'tag_creation_history'] + import logging import git @@ -7,12 +10,6 @@ logger = logging.getLogger('wemogy.get-release-version-action') -__all__ = [ - 'create_git_tag', - 'get_sorted_tags', - 'tag_creation_history' -] - tag_creation_history: list[str] = [] diff --git a/get_release_version_action/utils/github_output.py b/src/get_release_version_action/utils/github_output.py similarity index 55% rename from get_release_version_action/utils/github_output.py rename to src/get_release_version_action/utils/github_output.py index fc8847a..e18926a 100644 --- a/get_release_version_action/utils/github_output.py +++ b/src/get_release_version_action/utils/github_output.py @@ -1,14 +1,13 @@ """Utilities for working with the GitHub actions output.""" + +__all__ = ['log_github_output', 'write_github_output'] + import logging import os +from pathlib import Path logger = logging.getLogger('wemogy.get-release-version-action') -__all__ = [ - 'log_github_output', - 'write_github_output' -] - def log_github_output() -> None: """Print the contents of the GITHUB_OUTPUT file.""" @@ -18,19 +17,17 @@ def log_github_output() -> None: logger.warning('GITHUB_OUTPUT not in environment, skipping GitHub actions output') return - # noinspection PyBroadException - try: - with open(file_path, 'r', encoding='utf-8') as fh: - content = fh.read() - logger.debug('Content of GITHUB_OUTPUT file "%s":\n%s', file_path, content) - except Exception: # pylint: disable=broad-exception-caught - # Catching every exception since this function is not necessary for the script to run - logger.warning('An exception was ignored while trying to get contents of GITHUB_OUTPUT file', exc_info=True) + file_path = Path(file_path) + + with file_path.open('r', encoding='utf-8') as fh: + content = fh.read() + logger.debug('Content of GITHUB_OUTPUT file "%s":\n%s', file_path, content) def write_github_output(value: str) -> None: """ Write the specified string to the GitHub actions output. + This will overwrite any other content! """ file_path = os.getenv('GITHUB_OUTPUT') @@ -39,5 +36,7 @@ def write_github_output(value: str) -> None: logger.warning('GITHUB_OUTPUT not in environment, skipping GitHub actions output') return - with open(file_path, 'w', encoding='utf-8') as fh: + file_path = Path(file_path) + + with file_path.open('w', encoding='utf-8') as fh: fh.write(value) diff --git a/get_release_version_action/utils/logger.py b/src/get_release_version_action/utils/logger.py similarity index 86% rename from get_release_version_action/utils/logger.py rename to src/get_release_version_action/utils/logger.py index 3c23ac9..0f436ff 100644 --- a/get_release_version_action/utils/logger.py +++ b/src/get_release_version_action/utils/logger.py @@ -1,4 +1,5 @@ """Utils for logging.""" + import logging import logging.config from pathlib import Path @@ -7,16 +8,14 @@ import yaml -__all__ = [ - 'IndentLoggingFormatter', - 'setup_logging' -] +__all__ = ['IndentLoggingFormatter', 'setup_logging'] class IndentLoggingFormatter(logging.Formatter): """Logging formatter to indent multiline messages.""" def __init__(self, fmt: str | None) -> None: + """Logging formatter to indent multiline messages.""" super().__init__(fmt) @override @@ -26,7 +25,7 @@ def format(self, record: logging.LogRecord) -> str: def setup_logging(debug: bool) -> None: - """Setup logging.""" + """Set up logging.""" config_file = Path(__file__).resolve().parent.parent / 'resources' / 'logging.config.yaml' with config_file.open('r') as config_stream: diff --git a/tests/e2e/test_one_commit.py b/tests/e2e/test_one_commit.py index 1881194..5010c0a 100644 --- a/tests/e2e/test_one_commit.py +++ b/tests/e2e/test_one_commit.py @@ -1,8 +1,8 @@ """Test all scenarios where one or zero commits (beside the initial commit) are made.""" + # pylint: disable=too-many-locals,too-many-lines,duplicate-code,too-many-statements,unused-import,redefined-outer-name from assertpy import assert_that - -from test_utils import ActionInputs, ActionOutputs, CommitMessages, logging, TestRepo, repo, run_action +from test_utils import ActionInputs, ActionOutputs, CommitMessages, TestRepo, run_action def test_initial(repo: TestRepo) -> None: @@ -14,15 +14,11 @@ def test_initial(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_release = ActionOutputs( - version='0.0.0-pre', - version_name='v0.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=False + version='0.0.0-pre', version_name='v0.0.0-pre', previous_version='', previous_version_name='', tag_created=False ) args_beta = ActionInputs( @@ -32,7 +28,7 @@ def test_initial(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_beta = ActionOutputs( @@ -40,7 +36,7 @@ def test_initial(repo: TestRepo) -> None: version_name='v0.0.0-beta', previous_version='', previous_version_name='', - tag_created=False + tag_created=False, ) args_prod = ActionInputs( @@ -50,15 +46,11 @@ def test_initial(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_prod = ActionOutputs( - version='0.0.0', - version_name='v0.0.0', - previous_version='', - previous_version_name='', - tag_created=False + version='0.0.0', version_name='v0.0.0', previous_version='', previous_version_name='', tag_created=False ) # Act @@ -94,15 +86,11 @@ def test_chore(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_release = ActionOutputs( - version='0.0.0-pre', - version_name='v0.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=False + version='0.0.0-pre', version_name='v0.0.0-pre', previous_version='', previous_version_name='', tag_created=False ) args_beta = ActionInputs( @@ -112,7 +100,7 @@ def test_chore(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_beta = ActionOutputs( @@ -120,7 +108,7 @@ def test_chore(repo: TestRepo) -> None: version_name='v0.0.0-beta', previous_version='', previous_version_name='', - tag_created=False + tag_created=False, ) args_prod = ActionInputs( @@ -130,15 +118,11 @@ def test_chore(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_prod = ActionOutputs( - version='0.0.0', - version_name='v0.0.0', - previous_version='', - previous_version_name='', - tag_created=False + version='0.0.0', version_name='v0.0.0', previous_version='', previous_version_name='', tag_created=False ) # Act @@ -176,15 +160,11 @@ def test_fix(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1-pre', version_name='v0.0.1-pre', previous_version='', previous_version_name='', tag_created=True ) args_beta = ActionInputs( @@ -194,7 +174,7 @@ def test_fix(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_beta = ActionOutputs( @@ -202,7 +182,7 @@ def test_fix(repo: TestRepo) -> None: version_name='v0.0.1-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_prod = ActionInputs( @@ -212,15 +192,11 @@ def test_fix(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1', version_name='v0.0.1', previous_version='', previous_version_name='', tag_created=True ) # Act @@ -258,15 +234,11 @@ def test_feat(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0-pre', version_name='v0.1.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_beta = ActionInputs( @@ -276,7 +248,7 @@ def test_feat(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_beta = ActionOutputs( @@ -284,7 +256,7 @@ def test_feat(repo: TestRepo) -> None: version_name='v0.1.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_prod = ActionInputs( @@ -294,15 +266,11 @@ def test_feat(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0', version_name='v0.1.0', previous_version='', previous_version_name='', tag_created=True ) # Act @@ -340,15 +308,11 @@ def test_breaking(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0-pre', version_name='v1.0.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_beta = ActionInputs( @@ -358,7 +322,7 @@ def test_breaking(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_beta = ActionOutputs( @@ -366,7 +330,7 @@ def test_breaking(repo: TestRepo) -> None: version_name='v1.0.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_prod = ActionInputs( @@ -376,15 +340,11 @@ def test_breaking(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0', version_name='v1.0.0', previous_version='', previous_version_name='', tag_created=True ) # Act diff --git a/tests/e2e/test_one_hotfix.py b/tests/e2e/test_one_hotfix.py index e473589..5f9ea4d 100644 --- a/tests/e2e/test_one_hotfix.py +++ b/tests/e2e/test_one_hotfix.py @@ -1,8 +1,8 @@ """Test all scenarios where one hotfix / cherrypick is made.""" + # pylint: disable=too-many-locals,too-many-lines,duplicate-code,too-many-statements,unused-import,redefined-outer-name from assertpy import assert_that - -from test_utils import ActionInputs, ActionOutputs, CommitMessages, logging, TestRepo, repo, run_action +from test_utils import ActionInputs, ActionOutputs, CommitMessages, TestRepo, run_action def test_fix_then_hotfix(repo: TestRepo) -> None: @@ -15,15 +15,11 @@ def test_fix_then_hotfix(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_fix_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1-pre', version_name='v0.0.1-pre', previous_version='', previous_version_name='', tag_created=True ) args_fix_beta = ActionInputs( @@ -33,7 +29,7 @@ def test_fix_then_hotfix(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_fix_beta = ActionOutputs( @@ -41,7 +37,7 @@ def test_fix_then_hotfix(repo: TestRepo) -> None: version_name='v0.0.1-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_fix_prod = ActionInputs( @@ -51,15 +47,11 @@ def test_fix_then_hotfix(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_fix_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1', version_name='v0.0.1', previous_version='', previous_version_name='', tag_created=True ) # Hotfix @@ -71,7 +63,7 @@ def test_fix_then_hotfix(repo: TestRepo) -> None: reference_version_suffix=None, bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix_release = ActionOutputs( @@ -79,7 +71,7 @@ def test_fix_then_hotfix(repo: TestRepo) -> None: version_name='v0.0.1-pre-hotfix.1', previous_version='0.0.1-pre', previous_version_name='v0.0.1-pre', - tag_created=True + tag_created=True, ) args_hotfix_beta = ActionInputs( @@ -90,7 +82,7 @@ def test_fix_then_hotfix(repo: TestRepo) -> None: reference_version_suffix='pre', bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix_beta = ActionOutputs( @@ -98,7 +90,7 @@ def test_fix_then_hotfix(repo: TestRepo) -> None: version_name='v0.0.1-beta-hotfix.1', previous_version='0.0.1-beta', previous_version_name='v0.0.1-beta', - tag_created=True + tag_created=True, ) args_hotfix_prod = ActionInputs( @@ -109,7 +101,7 @@ def test_fix_then_hotfix(repo: TestRepo) -> None: reference_version_suffix='beta', bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix_prod = ActionOutputs( @@ -117,7 +109,7 @@ def test_fix_then_hotfix(repo: TestRepo) -> None: version_name='v0.0.1-hotfix.1', previous_version='0.0.1', previous_version_name='v0.0.1', - tag_created=True + tag_created=True, ) # Act @@ -184,15 +176,11 @@ def test_feature_then_hotfix(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_feat_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0-pre', version_name='v0.1.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_feat_beta = ActionInputs( @@ -202,7 +190,7 @@ def test_feature_then_hotfix(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_feat_beta = ActionOutputs( @@ -210,7 +198,7 @@ def test_feature_then_hotfix(repo: TestRepo) -> None: version_name='v0.1.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_feat_prod = ActionInputs( @@ -220,15 +208,11 @@ def test_feature_then_hotfix(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_feat_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0', version_name='v0.1.0', previous_version='', previous_version_name='', tag_created=True ) # Hotfix @@ -240,7 +224,7 @@ def test_feature_then_hotfix(repo: TestRepo) -> None: reference_version_suffix=None, bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix_release = ActionOutputs( @@ -248,7 +232,7 @@ def test_feature_then_hotfix(repo: TestRepo) -> None: version_name='v0.1.0-pre-hotfix.1', previous_version='0.1.0-pre', previous_version_name='v0.1.0-pre', - tag_created=True + tag_created=True, ) args_hotfix_beta = ActionInputs( @@ -259,7 +243,7 @@ def test_feature_then_hotfix(repo: TestRepo) -> None: reference_version_suffix='pre', bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix_beta = ActionOutputs( @@ -267,7 +251,7 @@ def test_feature_then_hotfix(repo: TestRepo) -> None: version_name='v0.1.0-beta-hotfix.1', previous_version='0.1.0-beta', previous_version_name='v0.1.0-beta', - tag_created=True + tag_created=True, ) args_hotfix_prod = ActionInputs( @@ -278,7 +262,7 @@ def test_feature_then_hotfix(repo: TestRepo) -> None: reference_version_suffix='beta', bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix_prod = ActionOutputs( @@ -286,7 +270,7 @@ def test_feature_then_hotfix(repo: TestRepo) -> None: version_name='v0.1.0-hotfix.1', previous_version='0.1.0', previous_version_name='v0.1.0', - tag_created=True + tag_created=True, ) # Act @@ -353,15 +337,11 @@ def test_breaking_then_hotfix(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_breaking_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0-pre', version_name='v1.0.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_breaking_beta = ActionInputs( @@ -371,7 +351,7 @@ def test_breaking_then_hotfix(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_breaking_beta = ActionOutputs( @@ -379,7 +359,7 @@ def test_breaking_then_hotfix(repo: TestRepo) -> None: version_name='v1.0.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_breaking_prod = ActionInputs( @@ -389,15 +369,11 @@ def test_breaking_then_hotfix(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_breaking_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0', version_name='v1.0.0', previous_version='', previous_version_name='', tag_created=True ) # Hotfix @@ -409,7 +385,7 @@ def test_breaking_then_hotfix(repo: TestRepo) -> None: reference_version_suffix=None, bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix_release = ActionOutputs( @@ -417,7 +393,7 @@ def test_breaking_then_hotfix(repo: TestRepo) -> None: version_name='v1.0.0-pre-hotfix.1', previous_version='1.0.0-pre', previous_version_name='v1.0.0-pre', - tag_created=True + tag_created=True, ) args_hotfix_beta = ActionInputs( @@ -428,7 +404,7 @@ def test_breaking_then_hotfix(repo: TestRepo) -> None: reference_version_suffix='pre', bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix_beta = ActionOutputs( @@ -436,7 +412,7 @@ def test_breaking_then_hotfix(repo: TestRepo) -> None: version_name='v1.0.0-beta-hotfix.1', previous_version='1.0.0-beta', previous_version_name='v1.0.0-beta', - tag_created=True + tag_created=True, ) args_hotfix_prod = ActionInputs( @@ -447,7 +423,7 @@ def test_breaking_then_hotfix(repo: TestRepo) -> None: reference_version_suffix='beta', bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix_prod = ActionOutputs( @@ -455,7 +431,7 @@ def test_breaking_then_hotfix(repo: TestRepo) -> None: version_name='v1.0.0-hotfix.1', previous_version='1.0.0', previous_version_name='v1.0.0', - tag_created=True + tag_created=True, ) # Act diff --git a/tests/e2e/test_one_hotfix_then_version.py b/tests/e2e/test_one_hotfix_then_version.py index 58bcf91..bb6817e 100644 --- a/tests/e2e/test_one_hotfix_then_version.py +++ b/tests/e2e/test_one_hotfix_then_version.py @@ -1,8 +1,8 @@ """Test all scenarios where one hotfix / cherrypick and a commit with a release after each are made.""" + # pylint: disable=too-many-locals,too-many-lines,duplicate-code,too-many-statements,unused-import,redefined-outer-name from assertpy import assert_that - -from test_utils import ActionInputs, ActionOutputs, CommitMessages, logging, TestRepo, repo, run_action +from test_utils import ActionInputs, ActionOutputs, CommitMessages, TestRepo, run_action def test_fix_then_hotfix_then_fix(repo: TestRepo) -> None: @@ -15,15 +15,11 @@ def test_fix_then_hotfix_then_fix(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_fix1_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1-pre', version_name='v0.0.1-pre', previous_version='', previous_version_name='', tag_created=True ) args_fix1_beta = ActionInputs( @@ -33,7 +29,7 @@ def test_fix_then_hotfix_then_fix(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_fix1_beta = ActionOutputs( @@ -41,7 +37,7 @@ def test_fix_then_hotfix_then_fix(repo: TestRepo) -> None: version_name='v0.0.1-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_fix1_prod = ActionInputs( @@ -51,15 +47,11 @@ def test_fix_then_hotfix_then_fix(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_fix1_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1', version_name='v0.0.1', previous_version='', previous_version_name='', tag_created=True ) # Hotfix @@ -71,7 +63,7 @@ def test_fix_then_hotfix_then_fix(repo: TestRepo) -> None: reference_version_suffix=None, bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix_release = ActionOutputs( @@ -79,7 +71,7 @@ def test_fix_then_hotfix_then_fix(repo: TestRepo) -> None: version_name='v0.0.1-pre-hotfix.1', previous_version='0.0.1-pre', previous_version_name='v0.0.1-pre', - tag_created=True + tag_created=True, ) args_hotfix_beta = ActionInputs( @@ -90,7 +82,7 @@ def test_fix_then_hotfix_then_fix(repo: TestRepo) -> None: reference_version_suffix='pre', bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix_beta = ActionOutputs( @@ -98,7 +90,7 @@ def test_fix_then_hotfix_then_fix(repo: TestRepo) -> None: version_name='v0.0.1-beta-hotfix.1', previous_version='0.0.1-beta', previous_version_name='v0.0.1-beta', - tag_created=True + tag_created=True, ) args_hotfix_prod = ActionInputs( @@ -109,7 +101,7 @@ def test_fix_then_hotfix_then_fix(repo: TestRepo) -> None: reference_version_suffix='beta', bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix_prod = ActionOutputs( @@ -117,7 +109,7 @@ def test_fix_then_hotfix_then_fix(repo: TestRepo) -> None: version_name='v0.0.1-hotfix.1', previous_version='0.0.1', previous_version_name='v0.0.1', - tag_created=True + tag_created=True, ) # Fix 2 @@ -127,7 +119,7 @@ def test_fix_then_hotfix_then_fix(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_fix2_release = ActionOutputs( @@ -135,7 +127,7 @@ def test_fix_then_hotfix_then_fix(repo: TestRepo) -> None: version_name='v0.0.2-pre', previous_version='0.0.1-pre-hotfix.1', previous_version_name='v0.0.1-pre-hotfix.1', - tag_created=True + tag_created=True, ) args_fix2_beta = ActionInputs( @@ -145,7 +137,7 @@ def test_fix_then_hotfix_then_fix(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_fix2_beta = ActionOutputs( @@ -153,7 +145,7 @@ def test_fix_then_hotfix_then_fix(repo: TestRepo) -> None: version_name='v0.0.2-beta', previous_version='0.0.1-beta-hotfix.1', previous_version_name='v0.0.1-beta-hotfix.1', - tag_created=True + tag_created=True, ) args_fix2_prod = ActionInputs( @@ -163,7 +155,7 @@ def test_fix_then_hotfix_then_fix(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_fix2_prod = ActionOutputs( @@ -171,7 +163,7 @@ def test_fix_then_hotfix_then_fix(repo: TestRepo) -> None: version_name='v0.0.2', previous_version='0.0.1-hotfix.1', previous_version_name='v0.0.1-hotfix.1', - tag_created=True + tag_created=True, ) # Act @@ -264,15 +256,11 @@ def test_fix_then_hotfix_then_feature(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_fix_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1-pre', version_name='v0.0.1-pre', previous_version='', previous_version_name='', tag_created=True ) args_fix_beta = ActionInputs( @@ -282,7 +270,7 @@ def test_fix_then_hotfix_then_feature(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_fix_beta = ActionOutputs( @@ -290,7 +278,7 @@ def test_fix_then_hotfix_then_feature(repo: TestRepo) -> None: version_name='v0.0.1-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_fix_prod = ActionInputs( @@ -300,15 +288,11 @@ def test_fix_then_hotfix_then_feature(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_fix_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1', version_name='v0.0.1', previous_version='', previous_version_name='', tag_created=True ) # Hotfix @@ -320,7 +304,7 @@ def test_fix_then_hotfix_then_feature(repo: TestRepo) -> None: reference_version_suffix=None, bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix_release = ActionOutputs( @@ -328,7 +312,7 @@ def test_fix_then_hotfix_then_feature(repo: TestRepo) -> None: version_name='v0.0.1-pre-hotfix.1', previous_version='0.0.1-pre', previous_version_name='v0.0.1-pre', - tag_created=True + tag_created=True, ) args_hotfix_beta = ActionInputs( @@ -339,7 +323,7 @@ def test_fix_then_hotfix_then_feature(repo: TestRepo) -> None: reference_version_suffix='pre', bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix_beta = ActionOutputs( @@ -347,7 +331,7 @@ def test_fix_then_hotfix_then_feature(repo: TestRepo) -> None: version_name='v0.0.1-beta-hotfix.1', previous_version='0.0.1-beta', previous_version_name='v0.0.1-beta', - tag_created=True + tag_created=True, ) args_hotfix_prod = ActionInputs( @@ -358,7 +342,7 @@ def test_fix_then_hotfix_then_feature(repo: TestRepo) -> None: reference_version_suffix='beta', bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix_prod = ActionOutputs( @@ -366,7 +350,7 @@ def test_fix_then_hotfix_then_feature(repo: TestRepo) -> None: version_name='v0.0.1-hotfix.1', previous_version='0.0.1', previous_version_name='v0.0.1', - tag_created=True + tag_created=True, ) # Feature @@ -376,7 +360,7 @@ def test_fix_then_hotfix_then_feature(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_feature_release = ActionOutputs( @@ -384,7 +368,7 @@ def test_fix_then_hotfix_then_feature(repo: TestRepo) -> None: version_name='v0.1.0-pre', previous_version='0.0.1-pre-hotfix.1', previous_version_name='v0.0.1-pre-hotfix.1', - tag_created=True + tag_created=True, ) args_feature_beta = ActionInputs( @@ -394,7 +378,7 @@ def test_fix_then_hotfix_then_feature(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_feature_beta = ActionOutputs( @@ -402,7 +386,7 @@ def test_fix_then_hotfix_then_feature(repo: TestRepo) -> None: version_name='v0.1.0-beta', previous_version='0.0.1-beta-hotfix.1', previous_version_name='v0.0.1-beta-hotfix.1', - tag_created=True + tag_created=True, ) args_feature_prod = ActionInputs( @@ -412,7 +396,7 @@ def test_fix_then_hotfix_then_feature(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_feature_prod = ActionOutputs( @@ -420,7 +404,7 @@ def test_fix_then_hotfix_then_feature(repo: TestRepo) -> None: version_name='v0.1.0', previous_version='0.0.1-hotfix.1', previous_version_name='v0.0.1-hotfix.1', - tag_created=True + tag_created=True, ) # Act @@ -513,15 +497,11 @@ def test_fix_then_hotfix_then_breaking(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_fix_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1-pre', version_name='v0.0.1-pre', previous_version='', previous_version_name='', tag_created=True ) args_fix_beta = ActionInputs( @@ -531,7 +511,7 @@ def test_fix_then_hotfix_then_breaking(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_fix_beta = ActionOutputs( @@ -539,7 +519,7 @@ def test_fix_then_hotfix_then_breaking(repo: TestRepo) -> None: version_name='v0.0.1-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_fix_prod = ActionInputs( @@ -549,15 +529,11 @@ def test_fix_then_hotfix_then_breaking(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_fix_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1', version_name='v0.0.1', previous_version='', previous_version_name='', tag_created=True ) # Hotfix @@ -569,7 +545,7 @@ def test_fix_then_hotfix_then_breaking(repo: TestRepo) -> None: reference_version_suffix=None, bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix_release = ActionOutputs( @@ -577,7 +553,7 @@ def test_fix_then_hotfix_then_breaking(repo: TestRepo) -> None: version_name='v0.0.1-pre-hotfix.1', previous_version='0.0.1-pre', previous_version_name='v0.0.1-pre', - tag_created=True + tag_created=True, ) args_hotfix_beta = ActionInputs( @@ -588,7 +564,7 @@ def test_fix_then_hotfix_then_breaking(repo: TestRepo) -> None: reference_version_suffix='pre', bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix_beta = ActionOutputs( @@ -596,7 +572,7 @@ def test_fix_then_hotfix_then_breaking(repo: TestRepo) -> None: version_name='v0.0.1-beta-hotfix.1', previous_version='0.0.1-beta', previous_version_name='v0.0.1-beta', - tag_created=True + tag_created=True, ) args_hotfix_prod = ActionInputs( @@ -607,7 +583,7 @@ def test_fix_then_hotfix_then_breaking(repo: TestRepo) -> None: reference_version_suffix='beta', bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix_prod = ActionOutputs( @@ -615,7 +591,7 @@ def test_fix_then_hotfix_then_breaking(repo: TestRepo) -> None: version_name='v0.0.1-hotfix.1', previous_version='0.0.1', previous_version_name='v0.0.1', - tag_created=True + tag_created=True, ) # Breaking @@ -625,7 +601,7 @@ def test_fix_then_hotfix_then_breaking(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_breaking_release = ActionOutputs( @@ -633,7 +609,7 @@ def test_fix_then_hotfix_then_breaking(repo: TestRepo) -> None: version_name='v1.0.0-pre', previous_version='0.0.1-pre-hotfix.1', previous_version_name='v0.0.1-pre-hotfix.1', - tag_created=True + tag_created=True, ) args_breaking_beta = ActionInputs( @@ -643,7 +619,7 @@ def test_fix_then_hotfix_then_breaking(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_breaking_beta = ActionOutputs( @@ -651,7 +627,7 @@ def test_fix_then_hotfix_then_breaking(repo: TestRepo) -> None: version_name='v1.0.0-beta', previous_version='0.0.1-beta-hotfix.1', previous_version_name='v0.0.1-beta-hotfix.1', - tag_created=True + tag_created=True, ) args_breaking_prod = ActionInputs( @@ -661,7 +637,7 @@ def test_fix_then_hotfix_then_breaking(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_breaking_prod = ActionOutputs( @@ -669,7 +645,7 @@ def test_fix_then_hotfix_then_breaking(repo: TestRepo) -> None: version_name='v1.0.0', previous_version='0.0.1-hotfix.1', previous_version_name='v0.0.1-hotfix.1', - tag_created=True + tag_created=True, ) # Act diff --git a/tests/e2e/test_two_commits.py b/tests/e2e/test_two_commits.py index 4853eb1..524d2ce 100644 --- a/tests/e2e/test_two_commits.py +++ b/tests/e2e/test_two_commits.py @@ -2,8 +2,7 @@ # pylint: disable=too-many-locals,too-many-lines,duplicate-code,too-many-statements,unused-import,redefined-outer-name from assertpy import assert_that - -from test_utils import ActionInputs, ActionOutputs, CommitMessages, logging, TestRepo, repo, run_action +from test_utils import ActionInputs, ActionOutputs, CommitMessages, TestRepo, run_action def test_chore_then_chore(repo: TestRepo) -> None: @@ -15,15 +14,11 @@ def test_chore_then_chore(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_release = ActionOutputs( - version='0.0.0-pre', - version_name='v0.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=False + version='0.0.0-pre', version_name='v0.0.0-pre', previous_version='', previous_version_name='', tag_created=False ) args_beta = ActionInputs( @@ -33,7 +28,7 @@ def test_chore_then_chore(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_beta = ActionOutputs( @@ -41,7 +36,7 @@ def test_chore_then_chore(repo: TestRepo) -> None: version_name='v0.0.0-beta', previous_version='', previous_version_name='', - tag_created=False + tag_created=False, ) args_prod = ActionInputs( @@ -51,15 +46,11 @@ def test_chore_then_chore(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_prod = ActionOutputs( - version='0.0.0', - version_name='v0.0.0', - previous_version='', - previous_version_name='', - tag_created=False + version='0.0.0', version_name='v0.0.0', previous_version='', previous_version_name='', tag_created=False ) # Act @@ -98,15 +89,11 @@ def test_chore_then_fix(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1-pre', version_name='v0.0.1-pre', previous_version='', previous_version_name='', tag_created=True ) args_beta = ActionInputs( @@ -116,7 +103,7 @@ def test_chore_then_fix(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_beta = ActionOutputs( @@ -124,7 +111,7 @@ def test_chore_then_fix(repo: TestRepo) -> None: version_name='v0.0.1-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_prod = ActionInputs( @@ -134,15 +121,11 @@ def test_chore_then_fix(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1', version_name='v0.0.1', previous_version='', previous_version_name='', tag_created=True ) # Act @@ -181,15 +164,11 @@ def test_chore_then_feat(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0-pre', version_name='v0.1.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_beta = ActionInputs( @@ -199,7 +178,7 @@ def test_chore_then_feat(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_beta = ActionOutputs( @@ -207,7 +186,7 @@ def test_chore_then_feat(repo: TestRepo) -> None: version_name='v0.1.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_prod = ActionInputs( @@ -217,15 +196,11 @@ def test_chore_then_feat(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0', version_name='v0.1.0', previous_version='', previous_version_name='', tag_created=True ) # Act @@ -264,15 +239,11 @@ def test_chore_then_breaking(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0-pre', version_name='v1.0.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_beta = ActionInputs( @@ -282,7 +253,7 @@ def test_chore_then_breaking(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_beta = ActionOutputs( @@ -290,7 +261,7 @@ def test_chore_then_breaking(repo: TestRepo) -> None: version_name='v1.0.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_prod = ActionInputs( @@ -300,15 +271,11 @@ def test_chore_then_breaking(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0', version_name='v1.0.0', previous_version='', previous_version_name='', tag_created=True ) # Act @@ -347,15 +314,11 @@ def test_fix_then_chore(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1-pre', version_name='v0.0.1-pre', previous_version='', previous_version_name='', tag_created=True ) args_beta = ActionInputs( @@ -365,7 +328,7 @@ def test_fix_then_chore(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_beta = ActionOutputs( @@ -373,7 +336,7 @@ def test_fix_then_chore(repo: TestRepo) -> None: version_name='v0.0.1-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_prod = ActionInputs( @@ -383,15 +346,11 @@ def test_fix_then_chore(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1', version_name='v0.0.1', previous_version='', previous_version_name='', tag_created=True ) # Act @@ -430,15 +389,11 @@ def test_fix_then_fix(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1-pre', version_name='v0.0.1-pre', previous_version='', previous_version_name='', tag_created=True ) args_beta = ActionInputs( @@ -448,7 +403,7 @@ def test_fix_then_fix(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_beta = ActionOutputs( @@ -456,7 +411,7 @@ def test_fix_then_fix(repo: TestRepo) -> None: version_name='v0.0.1-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_prod = ActionInputs( @@ -466,15 +421,11 @@ def test_fix_then_fix(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1', version_name='v0.0.1', previous_version='', previous_version_name='', tag_created=True ) # Act @@ -513,14 +464,10 @@ def test_fix_then_feat(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0-pre', version_name='v0.1.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_beta = ActionInputs( @@ -530,7 +477,7 @@ def test_fix_then_feat(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_beta = ActionOutputs( @@ -538,7 +485,7 @@ def test_fix_then_feat(repo: TestRepo) -> None: version_name='v0.1.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_prod = ActionInputs( @@ -548,15 +495,11 @@ def test_fix_then_feat(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0', version_name='v0.1.0', previous_version='', previous_version_name='', tag_created=True ) # Act @@ -595,15 +538,11 @@ def test_fix_then_breaking(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0-pre', version_name='v1.0.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_beta = ActionInputs( @@ -613,7 +552,7 @@ def test_fix_then_breaking(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_beta = ActionOutputs( @@ -621,7 +560,7 @@ def test_fix_then_breaking(repo: TestRepo) -> None: version_name='v1.0.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_prod = ActionInputs( @@ -631,15 +570,11 @@ def test_fix_then_breaking(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0', version_name='v1.0.0', previous_version='', previous_version_name='', tag_created=True ) # Act @@ -678,15 +613,11 @@ def test_feat_then_chore(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0-pre', version_name='v0.1.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_beta = ActionInputs( @@ -696,7 +627,7 @@ def test_feat_then_chore(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_beta = ActionOutputs( @@ -704,7 +635,7 @@ def test_feat_then_chore(repo: TestRepo) -> None: version_name='v0.1.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_prod = ActionInputs( @@ -714,15 +645,11 @@ def test_feat_then_chore(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0', version_name='v0.1.0', previous_version='', previous_version_name='', tag_created=True ) # Act @@ -761,15 +688,11 @@ def test_feat_then_fix(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0-pre', version_name='v0.1.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_beta = ActionInputs( @@ -779,7 +702,7 @@ def test_feat_then_fix(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_beta = ActionOutputs( @@ -787,7 +710,7 @@ def test_feat_then_fix(repo: TestRepo) -> None: version_name='v0.1.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_prod = ActionInputs( @@ -797,15 +720,11 @@ def test_feat_then_fix(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0', version_name='v0.1.0', previous_version='', previous_version_name='', tag_created=True ) # Act @@ -844,14 +763,10 @@ def test_feat_then_feat(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0-pre', version_name='v0.1.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_beta = ActionInputs( @@ -861,7 +776,7 @@ def test_feat_then_feat(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_beta = ActionOutputs( @@ -869,7 +784,7 @@ def test_feat_then_feat(repo: TestRepo) -> None: version_name='v0.1.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_prod = ActionInputs( @@ -879,15 +794,11 @@ def test_feat_then_feat(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0', version_name='v0.1.0', previous_version='', previous_version_name='', tag_created=True ) # Act @@ -926,15 +837,11 @@ def test_feat_then_breaking(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0-pre', version_name='v1.0.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_beta = ActionInputs( @@ -944,7 +851,7 @@ def test_feat_then_breaking(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_beta = ActionOutputs( @@ -952,7 +859,7 @@ def test_feat_then_breaking(repo: TestRepo) -> None: version_name='v1.0.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_prod = ActionInputs( @@ -962,15 +869,11 @@ def test_feat_then_breaking(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0', version_name='v1.0.0', previous_version='', previous_version_name='', tag_created=True ) # Act @@ -1009,15 +912,11 @@ def test_breaking_then_chore(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0-pre', version_name='v1.0.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_beta = ActionInputs( @@ -1027,7 +926,7 @@ def test_breaking_then_chore(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_beta = ActionOutputs( @@ -1035,7 +934,7 @@ def test_breaking_then_chore(repo: TestRepo) -> None: version_name='v1.0.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_prod = ActionInputs( @@ -1045,15 +944,11 @@ def test_breaking_then_chore(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0', version_name='v1.0.0', previous_version='', previous_version_name='', tag_created=True ) # Act @@ -1092,15 +987,11 @@ def test_breaking_then_fix(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0-pre', version_name='v1.0.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_beta = ActionInputs( @@ -1110,7 +1001,7 @@ def test_breaking_then_fix(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_beta = ActionOutputs( @@ -1118,7 +1009,7 @@ def test_breaking_then_fix(repo: TestRepo) -> None: version_name='v1.0.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_prod = ActionInputs( @@ -1128,15 +1019,11 @@ def test_breaking_then_fix(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0', version_name='v1.0.0', previous_version='', previous_version_name='', tag_created=True ) # Act @@ -1175,14 +1062,10 @@ def test_breaking_then_feat(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0-pre', version_name='v1.0.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_beta = ActionInputs( @@ -1192,7 +1075,7 @@ def test_breaking_then_feat(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_beta = ActionOutputs( @@ -1200,7 +1083,7 @@ def test_breaking_then_feat(repo: TestRepo) -> None: version_name='v1.0.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_prod = ActionInputs( @@ -1210,15 +1093,11 @@ def test_breaking_then_feat(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0', version_name='v1.0.0', previous_version='', previous_version_name='', tag_created=True ) # Act @@ -1257,15 +1136,11 @@ def test_breaking_then_breaking(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0-pre', version_name='v1.0.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_beta = ActionInputs( @@ -1275,7 +1150,7 @@ def test_breaking_then_breaking(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_beta = ActionOutputs( @@ -1283,7 +1158,7 @@ def test_breaking_then_breaking(repo: TestRepo) -> None: version_name='v1.0.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_prod = ActionInputs( @@ -1293,15 +1168,11 @@ def test_breaking_then_breaking(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0', version_name='v1.0.0', previous_version='', previous_version_name='', tag_created=True ) # Act diff --git a/tests/e2e/test_two_hotfixes.py b/tests/e2e/test_two_hotfixes.py index dda8577..d319e46 100644 --- a/tests/e2e/test_two_hotfixes.py +++ b/tests/e2e/test_two_hotfixes.py @@ -1,8 +1,8 @@ """Test all scenarios where two hotfixes / cherrypicks are made.""" + # pylint: disable=too-many-locals,too-many-lines,duplicate-code,too-many-statements,unused-import,redefined-outer-name from assertpy import assert_that - -from test_utils import ActionInputs, ActionOutputs, CommitMessages, logging, TestRepo, repo, run_action +from test_utils import ActionInputs, ActionOutputs, CommitMessages, TestRepo, run_action def test_fix_then_hotfixes(repo: TestRepo) -> None: @@ -15,15 +15,11 @@ def test_fix_then_hotfixes(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_fix_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1-pre', version_name='v0.0.1-pre', previous_version='', previous_version_name='', tag_created=True ) args_fix_beta = ActionInputs( @@ -33,7 +29,7 @@ def test_fix_then_hotfixes(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_fix_beta = ActionOutputs( @@ -41,7 +37,7 @@ def test_fix_then_hotfixes(repo: TestRepo) -> None: version_name='v0.0.1-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_fix_prod = ActionInputs( @@ -51,15 +47,11 @@ def test_fix_then_hotfixes(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_fix_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1', version_name='v0.0.1', previous_version='', previous_version_name='', tag_created=True ) # Hotfix 1 @@ -71,7 +63,7 @@ def test_fix_then_hotfixes(repo: TestRepo) -> None: reference_version_suffix=None, bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix1_release = ActionOutputs( @@ -79,7 +71,7 @@ def test_fix_then_hotfixes(repo: TestRepo) -> None: version_name='v0.0.1-pre-hotfix.1', previous_version='0.0.1-pre', previous_version_name='v0.0.1-pre', - tag_created=True + tag_created=True, ) args_hotfix1_beta = ActionInputs( @@ -90,7 +82,7 @@ def test_fix_then_hotfixes(repo: TestRepo) -> None: reference_version_suffix='pre', bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix1_beta = ActionOutputs( @@ -98,7 +90,7 @@ def test_fix_then_hotfixes(repo: TestRepo) -> None: version_name='v0.0.1-beta-hotfix.1', previous_version='0.0.1-beta', previous_version_name='v0.0.1-beta', - tag_created=True + tag_created=True, ) args_hotfix1_prod = ActionInputs( @@ -109,7 +101,7 @@ def test_fix_then_hotfixes(repo: TestRepo) -> None: reference_version_suffix='beta', bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix1_prod = ActionOutputs( @@ -117,7 +109,7 @@ def test_fix_then_hotfixes(repo: TestRepo) -> None: version_name='v0.0.1-hotfix.1', previous_version='0.0.1', previous_version_name='v0.0.1', - tag_created=True + tag_created=True, ) # Hotfix 2 @@ -129,7 +121,7 @@ def test_fix_then_hotfixes(repo: TestRepo) -> None: reference_version_suffix=None, bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix2_release = ActionOutputs( @@ -137,7 +129,7 @@ def test_fix_then_hotfixes(repo: TestRepo) -> None: version_name='v0.0.1-pre-hotfix.2', previous_version='0.0.1-pre-hotfix.1', previous_version_name='v0.0.1-pre-hotfix.1', - tag_created=True + tag_created=True, ) args_hotfix2_beta = ActionInputs( @@ -148,7 +140,7 @@ def test_fix_then_hotfixes(repo: TestRepo) -> None: reference_version_suffix='pre', bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix2_beta = ActionOutputs( @@ -156,7 +148,7 @@ def test_fix_then_hotfixes(repo: TestRepo) -> None: version_name='v0.0.1-beta-hotfix.2', previous_version='0.0.1-beta-hotfix.1', previous_version_name='v0.0.1-beta-hotfix.1', - tag_created=True + tag_created=True, ) args_hotfix2_prod = ActionInputs( @@ -167,7 +159,7 @@ def test_fix_then_hotfixes(repo: TestRepo) -> None: reference_version_suffix='beta', bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix2_prod = ActionOutputs( @@ -175,7 +167,7 @@ def test_fix_then_hotfixes(repo: TestRepo) -> None: version_name='v0.0.1-hotfix.2', previous_version='0.0.1-hotfix.1', previous_version_name='v0.0.1-hotfix.1', - tag_created=True + tag_created=True, ) # Act @@ -268,15 +260,11 @@ def test_feat_then_hotfixes(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_feat_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0-pre', version_name='v0.1.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_feat_beta = ActionInputs( @@ -286,7 +274,7 @@ def test_feat_then_hotfixes(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_feat_beta = ActionOutputs( @@ -294,7 +282,7 @@ def test_feat_then_hotfixes(repo: TestRepo) -> None: version_name='v0.1.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_feat_prod = ActionInputs( @@ -304,15 +292,11 @@ def test_feat_then_hotfixes(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_feat_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0', version_name='v0.1.0', previous_version='', previous_version_name='', tag_created=True ) # Hotfix 1 @@ -324,7 +308,7 @@ def test_feat_then_hotfixes(repo: TestRepo) -> None: reference_version_suffix=None, bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix1_release = ActionOutputs( @@ -332,7 +316,7 @@ def test_feat_then_hotfixes(repo: TestRepo) -> None: version_name='v0.1.0-pre-hotfix.1', previous_version='0.1.0-pre', previous_version_name='v0.1.0-pre', - tag_created=True + tag_created=True, ) args_hotfix1_beta = ActionInputs( @@ -343,7 +327,7 @@ def test_feat_then_hotfixes(repo: TestRepo) -> None: reference_version_suffix='pre', bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix1_beta = ActionOutputs( @@ -351,7 +335,7 @@ def test_feat_then_hotfixes(repo: TestRepo) -> None: version_name='v0.1.0-beta-hotfix.1', previous_version='0.1.0-beta', previous_version_name='v0.1.0-beta', - tag_created=True + tag_created=True, ) args_hotfix1_prod = ActionInputs( @@ -362,7 +346,7 @@ def test_feat_then_hotfixes(repo: TestRepo) -> None: reference_version_suffix='beta', bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix1_prod = ActionOutputs( @@ -370,7 +354,7 @@ def test_feat_then_hotfixes(repo: TestRepo) -> None: version_name='v0.1.0-hotfix.1', previous_version='0.1.0', previous_version_name='v0.1.0', - tag_created=True + tag_created=True, ) # Hotfix 2 @@ -382,7 +366,7 @@ def test_feat_then_hotfixes(repo: TestRepo) -> None: reference_version_suffix=None, bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix2_release = ActionOutputs( @@ -390,7 +374,7 @@ def test_feat_then_hotfixes(repo: TestRepo) -> None: version_name='v0.1.0-pre-hotfix.2', previous_version='0.1.0-pre-hotfix.1', previous_version_name='v0.1.0-pre-hotfix.1', - tag_created=True + tag_created=True, ) args_hotfix2_beta = ActionInputs( @@ -401,7 +385,7 @@ def test_feat_then_hotfixes(repo: TestRepo) -> None: reference_version_suffix='pre', bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix2_beta = ActionOutputs( @@ -409,7 +393,7 @@ def test_feat_then_hotfixes(repo: TestRepo) -> None: version_name='v0.1.0-beta-hotfix.2', previous_version='0.1.0-beta-hotfix.1', previous_version_name='v0.1.0-beta-hotfix.1', - tag_created=True + tag_created=True, ) args_hotfix2_prod = ActionInputs( @@ -420,7 +404,7 @@ def test_feat_then_hotfixes(repo: TestRepo) -> None: reference_version_suffix='beta', bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix2_prod = ActionOutputs( @@ -428,7 +412,7 @@ def test_feat_then_hotfixes(repo: TestRepo) -> None: version_name='v0.1.0-hotfix.2', previous_version='0.1.0-hotfix.1', previous_version_name='v0.1.0-hotfix.1', - tag_created=True + tag_created=True, ) # Act @@ -521,15 +505,11 @@ def test_breaking_then_hotfixes(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_breaking_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0-pre', version_name='v1.0.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_breaking_beta = ActionInputs( @@ -539,7 +519,7 @@ def test_breaking_then_hotfixes(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_breaking_beta = ActionOutputs( @@ -547,7 +527,7 @@ def test_breaking_then_hotfixes(repo: TestRepo) -> None: version_name='v1.0.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_breaking_prod = ActionInputs( @@ -557,15 +537,11 @@ def test_breaking_then_hotfixes(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_breaking_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0', version_name='v1.0.0', previous_version='', previous_version_name='', tag_created=True ) # Hotfix 1 @@ -577,7 +553,7 @@ def test_breaking_then_hotfixes(repo: TestRepo) -> None: reference_version_suffix=None, bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix1_release = ActionOutputs( @@ -585,7 +561,7 @@ def test_breaking_then_hotfixes(repo: TestRepo) -> None: version_name='v1.0.0-pre-hotfix.1', previous_version='1.0.0-pre', previous_version_name='v1.0.0-pre', - tag_created=True + tag_created=True, ) args_hotfix1_beta = ActionInputs( @@ -596,7 +572,7 @@ def test_breaking_then_hotfixes(repo: TestRepo) -> None: reference_version_suffix='pre', bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix1_beta = ActionOutputs( @@ -604,7 +580,7 @@ def test_breaking_then_hotfixes(repo: TestRepo) -> None: version_name='v1.0.0-beta-hotfix.1', previous_version='1.0.0-beta', previous_version_name='v1.0.0-beta', - tag_created=True + tag_created=True, ) args_hotfix1_prod = ActionInputs( @@ -615,7 +591,7 @@ def test_breaking_then_hotfixes(repo: TestRepo) -> None: reference_version_suffix='beta', bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix1_prod = ActionOutputs( @@ -623,7 +599,7 @@ def test_breaking_then_hotfixes(repo: TestRepo) -> None: version_name='v1.0.0-hotfix.1', previous_version='1.0.0', previous_version_name='v1.0.0', - tag_created=True + tag_created=True, ) # Hotfix 2 @@ -635,7 +611,7 @@ def test_breaking_then_hotfixes(repo: TestRepo) -> None: reference_version_suffix=None, bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix2_release = ActionOutputs( @@ -643,7 +619,7 @@ def test_breaking_then_hotfixes(repo: TestRepo) -> None: version_name='v1.0.0-pre-hotfix.2', previous_version='1.0.0-pre-hotfix.1', previous_version_name='v1.0.0-pre-hotfix.1', - tag_created=True + tag_created=True, ) args_hotfix2_beta = ActionInputs( @@ -654,7 +630,7 @@ def test_breaking_then_hotfixes(repo: TestRepo) -> None: reference_version_suffix='pre', bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix2_beta = ActionOutputs( @@ -662,7 +638,7 @@ def test_breaking_then_hotfixes(repo: TestRepo) -> None: version_name='v1.0.0-beta-hotfix.2', previous_version='1.0.0-beta-hotfix.1', previous_version_name='v1.0.0-beta-hotfix.1', - tag_created=True + tag_created=True, ) args_hotfix2_prod = ActionInputs( @@ -673,7 +649,7 @@ def test_breaking_then_hotfixes(repo: TestRepo) -> None: reference_version_suffix='beta', bumping_suffix='hotfix', only_bump_suffix=True, - create_tag=True + create_tag=True, ) expected_output_hotfix2_prod = ActionOutputs( @@ -681,7 +657,7 @@ def test_breaking_then_hotfixes(repo: TestRepo) -> None: version_name='v1.0.0-hotfix.2', previous_version='1.0.0-hotfix.1', previous_version_name='v1.0.0-hotfix.1', - tag_created=True + tag_created=True, ) # Act diff --git a/tests/e2e/test_two_versions.py b/tests/e2e/test_two_versions.py index eabfdb3..2eac5d3 100644 --- a/tests/e2e/test_two_versions.py +++ b/tests/e2e/test_two_versions.py @@ -1,8 +1,8 @@ """Test all scenarios where two commits with a release after each are made.""" + # pylint: disable=too-many-locals,too-many-lines,duplicate-code,too-many-statements,unused-import,redefined-outer-name from assertpy import assert_that - -from test_utils import ActionInputs, ActionOutputs, CommitMessages, logging, TestRepo, repo, run_action +from test_utils import ActionInputs, ActionOutputs, CommitMessages, TestRepo, run_action def test_chore_then_chore(repo: TestRepo) -> None: @@ -15,15 +15,11 @@ def test_chore_then_chore(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_chore1_release = ActionOutputs( - version='0.0.0-pre', - version_name='v0.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=False + version='0.0.0-pre', version_name='v0.0.0-pre', previous_version='', previous_version_name='', tag_created=False ) args_chore1_beta = ActionInputs( @@ -33,7 +29,7 @@ def test_chore_then_chore(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_chore1_beta = ActionOutputs( @@ -41,7 +37,7 @@ def test_chore_then_chore(repo: TestRepo) -> None: version_name='v0.0.0-beta', previous_version='', previous_version_name='', - tag_created=False + tag_created=False, ) args_chore1_prod = ActionInputs( @@ -51,15 +47,11 @@ def test_chore_then_chore(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_chore1_prod = ActionOutputs( - version='0.0.0', - version_name='v0.0.0', - previous_version='', - previous_version_name='', - tag_created=False + version='0.0.0', version_name='v0.0.0', previous_version='', previous_version_name='', tag_created=False ) # Chore 2 @@ -69,15 +61,11 @@ def test_chore_then_chore(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_chore2_release = ActionOutputs( - version='0.0.0-pre', - version_name='v0.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=False + version='0.0.0-pre', version_name='v0.0.0-pre', previous_version='', previous_version_name='', tag_created=False ) args_chore2_beta = ActionInputs( @@ -87,7 +75,7 @@ def test_chore_then_chore(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_chore2_beta = ActionOutputs( @@ -95,7 +83,7 @@ def test_chore_then_chore(repo: TestRepo) -> None: version_name='v0.0.0-beta', previous_version='', previous_version_name='', - tag_created=False + tag_created=False, ) args_chore2_prod = ActionInputs( @@ -105,15 +93,11 @@ def test_chore_then_chore(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_chore2_prod = ActionOutputs( - version='0.0.0', - version_name='v0.0.0', - previous_version='', - previous_version_name='', - tag_created=False + version='0.0.0', version_name='v0.0.0', previous_version='', previous_version_name='', tag_created=False ) # Act @@ -179,15 +163,11 @@ def test_chore_then_fix(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_chore_release = ActionOutputs( - version='0.0.0-pre', - version_name='v0.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=False + version='0.0.0-pre', version_name='v0.0.0-pre', previous_version='', previous_version_name='', tag_created=False ) args_chore_beta = ActionInputs( @@ -197,7 +177,7 @@ def test_chore_then_fix(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_chore_beta = ActionOutputs( @@ -205,7 +185,7 @@ def test_chore_then_fix(repo: TestRepo) -> None: version_name='v0.0.0-beta', previous_version='', previous_version_name='', - tag_created=False + tag_created=False, ) args_chore_prod = ActionInputs( @@ -215,15 +195,11 @@ def test_chore_then_fix(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_chore_prod = ActionOutputs( - version='0.0.0', - version_name='v0.0.0', - previous_version='', - previous_version_name='', - tag_created=False + version='0.0.0', version_name='v0.0.0', previous_version='', previous_version_name='', tag_created=False ) # Fix @@ -233,15 +209,11 @@ def test_chore_then_fix(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_fix_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1-pre', version_name='v0.0.1-pre', previous_version='', previous_version_name='', tag_created=True ) args_fix_beta = ActionInputs( @@ -251,7 +223,7 @@ def test_chore_then_fix(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_fix_beta = ActionOutputs( @@ -259,7 +231,7 @@ def test_chore_then_fix(repo: TestRepo) -> None: version_name='v0.0.1-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_fix_prod = ActionInputs( @@ -269,15 +241,11 @@ def test_chore_then_fix(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_fix_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1', version_name='v0.0.1', previous_version='', previous_version_name='', tag_created=True ) # Act @@ -344,15 +312,11 @@ def test_chore_then_feat(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_chore_release = ActionOutputs( - version='0.0.0-pre', - version_name='v0.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=False + version='0.0.0-pre', version_name='v0.0.0-pre', previous_version='', previous_version_name='', tag_created=False ) args_chore_beta = ActionInputs( @@ -362,7 +326,7 @@ def test_chore_then_feat(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_chore_beta = ActionOutputs( @@ -370,7 +334,7 @@ def test_chore_then_feat(repo: TestRepo) -> None: version_name='v0.0.0-beta', previous_version='', previous_version_name='', - tag_created=False + tag_created=False, ) args_chore_prod = ActionInputs( @@ -380,15 +344,11 @@ def test_chore_then_feat(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_chore_prod = ActionOutputs( - version='0.0.0', - version_name='v0.0.0', - previous_version='', - previous_version_name='', - tag_created=False + version='0.0.0', version_name='v0.0.0', previous_version='', previous_version_name='', tag_created=False ) # Feature @@ -398,15 +358,11 @@ def test_chore_then_feat(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_feat_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0-pre', version_name='v0.1.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_feat_beta = ActionInputs( @@ -416,7 +372,7 @@ def test_chore_then_feat(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_feat_beta = ActionOutputs( @@ -424,7 +380,7 @@ def test_chore_then_feat(repo: TestRepo) -> None: version_name='v0.1.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_feat_prod = ActionInputs( @@ -434,15 +390,11 @@ def test_chore_then_feat(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_feat_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0', version_name='v0.1.0', previous_version='', previous_version_name='', tag_created=True ) # Act @@ -509,15 +461,11 @@ def test_chore_then_breaking(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_chore_release = ActionOutputs( - version='0.0.0-pre', - version_name='v0.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=False + version='0.0.0-pre', version_name='v0.0.0-pre', previous_version='', previous_version_name='', tag_created=False ) args_chore_beta = ActionInputs( @@ -527,7 +475,7 @@ def test_chore_then_breaking(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_chore_beta = ActionOutputs( @@ -535,7 +483,7 @@ def test_chore_then_breaking(repo: TestRepo) -> None: version_name='v0.0.0-beta', previous_version='', previous_version_name='', - tag_created=False + tag_created=False, ) args_chore_prod = ActionInputs( @@ -545,15 +493,11 @@ def test_chore_then_breaking(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_chore_prod = ActionOutputs( - version='0.0.0', - version_name='v0.0.0', - previous_version='', - previous_version_name='', - tag_created=False + version='0.0.0', version_name='v0.0.0', previous_version='', previous_version_name='', tag_created=False ) # Breaking @@ -563,15 +507,11 @@ def test_chore_then_breaking(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_breaking_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0-pre', version_name='v1.0.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_breaking_beta = ActionInputs( @@ -581,7 +521,7 @@ def test_chore_then_breaking(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_breaking_beta = ActionOutputs( @@ -589,7 +529,7 @@ def test_chore_then_breaking(repo: TestRepo) -> None: version_name='v1.0.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_breaking_prod = ActionInputs( @@ -599,15 +539,11 @@ def test_chore_then_breaking(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_breaking_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0', version_name='v1.0.0', previous_version='', previous_version_name='', tag_created=True ) # Act @@ -674,15 +610,11 @@ def test_fix_then_chore(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_fix_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1-pre', version_name='v0.0.1-pre', previous_version='', previous_version_name='', tag_created=True ) args_fix_beta = ActionInputs( @@ -692,7 +624,7 @@ def test_fix_then_chore(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_fix_beta = ActionOutputs( @@ -700,7 +632,7 @@ def test_fix_then_chore(repo: TestRepo) -> None: version_name='v0.0.1-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_fix_prod = ActionInputs( @@ -710,15 +642,11 @@ def test_fix_then_chore(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_fix_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1', version_name='v0.0.1', previous_version='', previous_version_name='', tag_created=True ) # Chore @@ -728,7 +656,7 @@ def test_fix_then_chore(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_chore_release = ActionOutputs( @@ -736,7 +664,7 @@ def test_fix_then_chore(repo: TestRepo) -> None: version_name='v0.0.1-pre', previous_version='0.0.1-pre', previous_version_name='v0.0.1-pre', - tag_created=False + tag_created=False, ) args_chore_beta = ActionInputs( @@ -746,7 +674,7 @@ def test_fix_then_chore(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_chore_beta = ActionOutputs( @@ -754,7 +682,7 @@ def test_fix_then_chore(repo: TestRepo) -> None: version_name='v0.0.1-beta', previous_version='0.0.1-beta', previous_version_name='v0.0.1-beta', - tag_created=False + tag_created=False, ) args_chore_prod = ActionInputs( @@ -764,7 +692,7 @@ def test_fix_then_chore(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_chore_prod = ActionOutputs( @@ -772,7 +700,7 @@ def test_fix_then_chore(repo: TestRepo) -> None: version_name='v0.0.1', previous_version='0.0.1', previous_version_name='v0.0.1', - tag_created=False + tag_created=False, ) # Act @@ -839,15 +767,11 @@ def test_fix_then_fix(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_fix1_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1-pre', version_name='v0.0.1-pre', previous_version='', previous_version_name='', tag_created=True ) args_fix1_beta = ActionInputs( @@ -857,7 +781,7 @@ def test_fix_then_fix(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_fix1_beta = ActionOutputs( @@ -865,7 +789,7 @@ def test_fix_then_fix(repo: TestRepo) -> None: version_name='v0.0.1-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_fix1_prod = ActionInputs( @@ -875,15 +799,11 @@ def test_fix_then_fix(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_fix1_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1', version_name='v0.0.1', previous_version='', previous_version_name='', tag_created=True ) # Fix 2 @@ -893,7 +813,7 @@ def test_fix_then_fix(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_fix2_release = ActionOutputs( @@ -901,7 +821,7 @@ def test_fix_then_fix(repo: TestRepo) -> None: version_name='v0.0.2-pre', previous_version='0.0.1-pre', previous_version_name='v0.0.1-pre', - tag_created=True + tag_created=True, ) args_fix2_beta = ActionInputs( @@ -911,7 +831,7 @@ def test_fix_then_fix(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_fix2_beta = ActionOutputs( @@ -919,7 +839,7 @@ def test_fix_then_fix(repo: TestRepo) -> None: version_name='v0.0.2-beta', previous_version='0.0.1-beta', previous_version_name='v0.0.1-beta', - tag_created=True + tag_created=True, ) args_fix2_prod = ActionInputs( @@ -929,7 +849,7 @@ def test_fix_then_fix(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_fix2_prod = ActionOutputs( @@ -937,7 +857,7 @@ def test_fix_then_fix(repo: TestRepo) -> None: version_name='v0.0.2', previous_version='0.0.1', previous_version_name='v0.0.1', - tag_created=True + tag_created=True, ) # Act @@ -1004,15 +924,11 @@ def test_fix_then_feat(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_fix_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1-pre', version_name='v0.0.1-pre', previous_version='', previous_version_name='', tag_created=True ) args_fix_beta = ActionInputs( @@ -1022,7 +938,7 @@ def test_fix_then_feat(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_fix_beta = ActionOutputs( @@ -1030,7 +946,7 @@ def test_fix_then_feat(repo: TestRepo) -> None: version_name='v0.0.1-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_fix_prod = ActionInputs( @@ -1040,15 +956,11 @@ def test_fix_then_feat(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_fix_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1', version_name='v0.0.1', previous_version='', previous_version_name='', tag_created=True ) # Feature @@ -1058,7 +970,7 @@ def test_fix_then_feat(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_feat_release = ActionOutputs( @@ -1066,7 +978,7 @@ def test_fix_then_feat(repo: TestRepo) -> None: version_name='v0.1.0-pre', previous_version='0.0.1-pre', previous_version_name='v0.0.1-pre', - tag_created=True + tag_created=True, ) args_feat_beta = ActionInputs( @@ -1076,7 +988,7 @@ def test_fix_then_feat(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_feat_beta = ActionOutputs( @@ -1084,7 +996,7 @@ def test_fix_then_feat(repo: TestRepo) -> None: version_name='v0.1.0-beta', previous_version='0.0.1-beta', previous_version_name='v0.0.1-beta', - tag_created=True + tag_created=True, ) args_feat_prod = ActionInputs( @@ -1094,7 +1006,7 @@ def test_fix_then_feat(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_feat_prod = ActionOutputs( @@ -1102,7 +1014,7 @@ def test_fix_then_feat(repo: TestRepo) -> None: version_name='v0.1.0', previous_version='0.0.1', previous_version_name='v0.0.1', - tag_created=True + tag_created=True, ) # Act @@ -1169,15 +1081,11 @@ def test_fix_then_breaking(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_fix_release = ActionOutputs( - version='0.0.1-pre', - version_name='v0.0.1-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1-pre', version_name='v0.0.1-pre', previous_version='', previous_version_name='', tag_created=True ) args_fix_beta = ActionInputs( @@ -1187,7 +1095,7 @@ def test_fix_then_breaking(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_fix_beta = ActionOutputs( @@ -1195,7 +1103,7 @@ def test_fix_then_breaking(repo: TestRepo) -> None: version_name='v0.0.1-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_fix_prod = ActionInputs( @@ -1205,15 +1113,11 @@ def test_fix_then_breaking(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_fix_prod = ActionOutputs( - version='0.0.1', - version_name='v0.0.1', - previous_version='', - previous_version_name='', - tag_created=True + version='0.0.1', version_name='v0.0.1', previous_version='', previous_version_name='', tag_created=True ) # Breaking @@ -1223,7 +1127,7 @@ def test_fix_then_breaking(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_breaking_release = ActionOutputs( @@ -1231,7 +1135,7 @@ def test_fix_then_breaking(repo: TestRepo) -> None: version_name='v1.0.0-pre', previous_version='0.0.1-pre', previous_version_name='v0.0.1-pre', - tag_created=True + tag_created=True, ) args_breaking_beta = ActionInputs( @@ -1241,7 +1145,7 @@ def test_fix_then_breaking(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_breaking_beta = ActionOutputs( @@ -1249,7 +1153,7 @@ def test_fix_then_breaking(repo: TestRepo) -> None: version_name='v1.0.0-beta', previous_version='0.0.1-beta', previous_version_name='v0.0.1-beta', - tag_created=True + tag_created=True, ) args_breaking_prod = ActionInputs( @@ -1259,7 +1163,7 @@ def test_fix_then_breaking(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_breaking_prod = ActionOutputs( @@ -1267,7 +1171,7 @@ def test_fix_then_breaking(repo: TestRepo) -> None: version_name='v1.0.0', previous_version='0.0.1', previous_version_name='v0.0.1', - tag_created=True + tag_created=True, ) # Act @@ -1334,15 +1238,11 @@ def test_feat_then_chore(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_feat_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0-pre', version_name='v0.1.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_feat_beta = ActionInputs( @@ -1352,7 +1252,7 @@ def test_feat_then_chore(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_feat_beta = ActionOutputs( @@ -1360,7 +1260,7 @@ def test_feat_then_chore(repo: TestRepo) -> None: version_name='v0.1.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_feat_prod = ActionInputs( @@ -1370,15 +1270,11 @@ def test_feat_then_chore(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_feat_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0', version_name='v0.1.0', previous_version='', previous_version_name='', tag_created=True ) # Chore @@ -1388,7 +1284,7 @@ def test_feat_then_chore(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_chore_release = ActionOutputs( @@ -1396,7 +1292,7 @@ def test_feat_then_chore(repo: TestRepo) -> None: version_name='v0.1.0-pre', previous_version='0.1.0-pre', previous_version_name='v0.1.0-pre', - tag_created=False + tag_created=False, ) args_chore_beta = ActionInputs( @@ -1406,7 +1302,7 @@ def test_feat_then_chore(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_chore_beta = ActionOutputs( @@ -1414,7 +1310,7 @@ def test_feat_then_chore(repo: TestRepo) -> None: version_name='v0.1.0-beta', previous_version='0.1.0-beta', previous_version_name='v0.1.0-beta', - tag_created=False + tag_created=False, ) args_chore_prod = ActionInputs( @@ -1424,7 +1320,7 @@ def test_feat_then_chore(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_chore_prod = ActionOutputs( @@ -1432,7 +1328,7 @@ def test_feat_then_chore(repo: TestRepo) -> None: version_name='v0.1.0', previous_version='0.1.0', previous_version_name='v0.1.0', - tag_created=False + tag_created=False, ) # Act @@ -1499,15 +1395,11 @@ def test_feat_then_fix(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_feat_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0-pre', version_name='v0.1.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_feat_beta = ActionInputs( @@ -1517,7 +1409,7 @@ def test_feat_then_fix(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_feat_beta = ActionOutputs( @@ -1525,7 +1417,7 @@ def test_feat_then_fix(repo: TestRepo) -> None: version_name='v0.1.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_feat_prod = ActionInputs( @@ -1535,15 +1427,11 @@ def test_feat_then_fix(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_feat_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0', version_name='v0.1.0', previous_version='', previous_version_name='', tag_created=True ) # Fix @@ -1553,7 +1441,7 @@ def test_feat_then_fix(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_fix_release = ActionOutputs( @@ -1561,7 +1449,7 @@ def test_feat_then_fix(repo: TestRepo) -> None: version_name='v0.1.1-pre', previous_version='0.1.0-pre', previous_version_name='v0.1.0-pre', - tag_created=True + tag_created=True, ) args_fix_beta = ActionInputs( @@ -1571,7 +1459,7 @@ def test_feat_then_fix(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_fix_beta = ActionOutputs( @@ -1579,7 +1467,7 @@ def test_feat_then_fix(repo: TestRepo) -> None: version_name='v0.1.1-beta', previous_version='0.1.0-beta', previous_version_name='v0.1.0-beta', - tag_created=True + tag_created=True, ) args_fix_prod = ActionInputs( @@ -1589,7 +1477,7 @@ def test_feat_then_fix(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_fix_prod = ActionOutputs( @@ -1597,7 +1485,7 @@ def test_feat_then_fix(repo: TestRepo) -> None: version_name='v0.1.1', previous_version='0.1.0', previous_version_name='v0.1.0', - tag_created=True + tag_created=True, ) # Act @@ -1664,15 +1552,11 @@ def test_feat_then_feat(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_feat1_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0-pre', version_name='v0.1.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_feat1_beta = ActionInputs( @@ -1682,7 +1566,7 @@ def test_feat_then_feat(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_feat1_beta = ActionOutputs( @@ -1690,7 +1574,7 @@ def test_feat_then_feat(repo: TestRepo) -> None: version_name='v0.1.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_feat1_prod = ActionInputs( @@ -1700,15 +1584,11 @@ def test_feat_then_feat(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_feat1_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0', version_name='v0.1.0', previous_version='', previous_version_name='', tag_created=True ) # Feature 2 @@ -1718,7 +1598,7 @@ def test_feat_then_feat(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_feat2_release = ActionOutputs( @@ -1726,7 +1606,7 @@ def test_feat_then_feat(repo: TestRepo) -> None: version_name='v0.2.0-pre', previous_version='0.1.0-pre', previous_version_name='v0.1.0-pre', - tag_created=True + tag_created=True, ) args_feat2_beta = ActionInputs( @@ -1736,7 +1616,7 @@ def test_feat_then_feat(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_feat2_beta = ActionOutputs( @@ -1744,7 +1624,7 @@ def test_feat_then_feat(repo: TestRepo) -> None: version_name='v0.2.0-beta', previous_version='0.1.0-beta', previous_version_name='v0.1.0-beta', - tag_created=True + tag_created=True, ) args_feat2_prod = ActionInputs( @@ -1762,7 +1642,7 @@ def test_feat_then_feat(repo: TestRepo) -> None: version_name='v0.2.0', previous_version='0.1.0', previous_version_name='v0.1.0', - tag_created=True + tag_created=True, ) # Act @@ -1829,15 +1709,11 @@ def test_feat_then_breaking(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_feat_release = ActionOutputs( - version='0.1.0-pre', - version_name='v0.1.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0-pre', version_name='v0.1.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_feat_beta = ActionInputs( @@ -1847,7 +1723,7 @@ def test_feat_then_breaking(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_feat_beta = ActionOutputs( @@ -1855,7 +1731,7 @@ def test_feat_then_breaking(repo: TestRepo) -> None: version_name='v0.1.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_feat_prod = ActionInputs( @@ -1865,15 +1741,11 @@ def test_feat_then_breaking(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_feat_prod = ActionOutputs( - version='0.1.0', - version_name='v0.1.0', - previous_version='', - previous_version_name='', - tag_created=True + version='0.1.0', version_name='v0.1.0', previous_version='', previous_version_name='', tag_created=True ) # Breaking @@ -1883,7 +1755,7 @@ def test_feat_then_breaking(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_breaking_release = ActionOutputs( @@ -1891,7 +1763,7 @@ def test_feat_then_breaking(repo: TestRepo) -> None: version_name='v1.0.0-pre', previous_version='0.1.0-pre', previous_version_name='v0.1.0-pre', - tag_created=True + tag_created=True, ) args_breaking_beta = ActionInputs( @@ -1901,7 +1773,7 @@ def test_feat_then_breaking(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_breaking_beta = ActionOutputs( @@ -1909,7 +1781,7 @@ def test_feat_then_breaking(repo: TestRepo) -> None: version_name='v1.0.0-beta', previous_version='0.1.0-beta', previous_version_name='v0.1.0-beta', - tag_created=True + tag_created=True, ) args_breaking_prod = ActionInputs( @@ -1919,7 +1791,7 @@ def test_feat_then_breaking(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_breaking_prod = ActionOutputs( @@ -1927,7 +1799,7 @@ def test_feat_then_breaking(repo: TestRepo) -> None: version_name='v1.0.0', previous_version='0.1.0', previous_version_name='v0.1.0', - tag_created=True + tag_created=True, ) # Act @@ -1994,15 +1866,11 @@ def test_breaking_then_chore(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_breaking_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0-pre', version_name='v1.0.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_breaking_beta = ActionInputs( @@ -2012,7 +1880,7 @@ def test_breaking_then_chore(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_breaking_beta = ActionOutputs( @@ -2020,7 +1888,7 @@ def test_breaking_then_chore(repo: TestRepo) -> None: version_name='v1.0.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_breaking_prod = ActionInputs( @@ -2030,15 +1898,11 @@ def test_breaking_then_chore(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_breaking_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0', version_name='v1.0.0', previous_version='', previous_version_name='', tag_created=True ) # Chore @@ -2048,7 +1912,7 @@ def test_breaking_then_chore(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_chore_release = ActionOutputs( @@ -2056,7 +1920,7 @@ def test_breaking_then_chore(repo: TestRepo) -> None: version_name='v1.0.0-pre', previous_version='1.0.0-pre', previous_version_name='v1.0.0-pre', - tag_created=False + tag_created=False, ) args_chore_beta = ActionInputs( @@ -2066,7 +1930,7 @@ def test_breaking_then_chore(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_chore_beta = ActionOutputs( @@ -2074,7 +1938,7 @@ def test_breaking_then_chore(repo: TestRepo) -> None: version_name='v1.0.0-beta', previous_version='1.0.0-beta', previous_version_name='v1.0.0-beta', - tag_created=False + tag_created=False, ) args_chore_prod = ActionInputs( @@ -2084,7 +1948,7 @@ def test_breaking_then_chore(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_chore_prod = ActionOutputs( @@ -2092,7 +1956,7 @@ def test_breaking_then_chore(repo: TestRepo) -> None: version_name='v1.0.0', previous_version='1.0.0', previous_version_name='v1.0.0', - tag_created=False + tag_created=False, ) # Act @@ -2159,15 +2023,11 @@ def test_breaking_then_fix(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_breaking_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0-pre', version_name='v1.0.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_breaking_beta = ActionInputs( @@ -2177,7 +2037,7 @@ def test_breaking_then_fix(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_breaking_beta = ActionOutputs( @@ -2185,7 +2045,7 @@ def test_breaking_then_fix(repo: TestRepo) -> None: version_name='v1.0.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_breaking_prod = ActionInputs( @@ -2195,15 +2055,11 @@ def test_breaking_then_fix(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_breaking_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0', version_name='v1.0.0', previous_version='', previous_version_name='', tag_created=True ) # Fix @@ -2213,7 +2069,7 @@ def test_breaking_then_fix(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_fix_release = ActionOutputs( @@ -2221,7 +2077,7 @@ def test_breaking_then_fix(repo: TestRepo) -> None: version_name='v1.0.1-pre', previous_version='1.0.0-pre', previous_version_name='v1.0.0-pre', - tag_created=True + tag_created=True, ) args_fix_beta = ActionInputs( @@ -2231,7 +2087,7 @@ def test_breaking_then_fix(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_fix_beta = ActionOutputs( @@ -2239,7 +2095,7 @@ def test_breaking_then_fix(repo: TestRepo) -> None: version_name='v1.0.1-beta', previous_version='1.0.0-beta', previous_version_name='v1.0.0-beta', - tag_created=True + tag_created=True, ) args_fix_prod = ActionInputs( @@ -2249,7 +2105,7 @@ def test_breaking_then_fix(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_fix_prod = ActionOutputs( @@ -2257,7 +2113,7 @@ def test_breaking_then_fix(repo: TestRepo) -> None: version_name='v1.0.1', previous_version='1.0.0', previous_version_name='v1.0.0', - tag_created=True + tag_created=True, ) # Act @@ -2324,15 +2180,11 @@ def test_breaking_then_feat(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_breaking_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0-pre', version_name='v1.0.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_breaking_beta = ActionInputs( @@ -2342,7 +2194,7 @@ def test_breaking_then_feat(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_breaking_beta = ActionOutputs( @@ -2350,7 +2202,7 @@ def test_breaking_then_feat(repo: TestRepo) -> None: version_name='v1.0.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_breaking_prod = ActionInputs( @@ -2360,15 +2212,11 @@ def test_breaking_then_feat(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_breaking_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0', version_name='v1.0.0', previous_version='', previous_version_name='', tag_created=True ) # Feature @@ -2378,7 +2226,7 @@ def test_breaking_then_feat(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_feat_release = ActionOutputs( @@ -2386,7 +2234,7 @@ def test_breaking_then_feat(repo: TestRepo) -> None: version_name='v1.1.0-pre', previous_version='1.0.0-pre', previous_version_name='v1.0.0-pre', - tag_created=True + tag_created=True, ) args_feat_beta = ActionInputs( @@ -2396,7 +2244,7 @@ def test_breaking_then_feat(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_feat_beta = ActionOutputs( @@ -2404,7 +2252,7 @@ def test_breaking_then_feat(repo: TestRepo) -> None: version_name='v1.1.0-beta', previous_version='1.0.0-beta', previous_version_name='v1.0.0-beta', - tag_created=True + tag_created=True, ) args_feat_prod = ActionInputs( @@ -2414,7 +2262,7 @@ def test_breaking_then_feat(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_feat_prod = ActionOutputs( @@ -2422,7 +2270,7 @@ def test_breaking_then_feat(repo: TestRepo) -> None: version_name='v1.1.0', previous_version='1.0.0', previous_version_name='v1.0.0', - tag_created=True + tag_created=True, ) # Act @@ -2489,15 +2337,11 @@ def test_breaking_then_breaking(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_breaking1_release = ActionOutputs( - version='1.0.0-pre', - version_name='v1.0.0-pre', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0-pre', version_name='v1.0.0-pre', previous_version='', previous_version_name='', tag_created=True ) args_breaking1_beta = ActionInputs( @@ -2507,7 +2351,7 @@ def test_breaking_then_breaking(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_breaking1_beta = ActionOutputs( @@ -2515,7 +2359,7 @@ def test_breaking_then_breaking(repo: TestRepo) -> None: version_name='v1.0.0-beta', previous_version='', previous_version_name='', - tag_created=True + tag_created=True, ) args_breaking1_prod = ActionInputs( @@ -2525,15 +2369,11 @@ def test_breaking_then_breaking(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_breaking1_prod = ActionOutputs( - version='1.0.0', - version_name='v1.0.0', - previous_version='', - previous_version_name='', - tag_created=True + version='1.0.0', version_name='v1.0.0', previous_version='', previous_version_name='', tag_created=True ) # Breaking 2 @@ -2543,7 +2383,7 @@ def test_breaking_then_breaking(repo: TestRepo) -> None: prefix='v', suffix='pre', reference_version_suffix=None, - create_tag=True + create_tag=True, ) expected_output_breaking2_release = ActionOutputs( @@ -2551,7 +2391,7 @@ def test_breaking_then_breaking(repo: TestRepo) -> None: version_name='v2.0.0-pre', previous_version='1.0.0-pre', previous_version_name='v1.0.0-pre', - tag_created=True + tag_created=True, ) args_breaking2_beta = ActionInputs( @@ -2561,7 +2401,7 @@ def test_breaking_then_breaking(repo: TestRepo) -> None: suffix='beta', only_bump_suffix=True, reference_version_suffix='pre', - create_tag=True + create_tag=True, ) expected_output_breaking2_beta = ActionOutputs( @@ -2569,7 +2409,7 @@ def test_breaking_then_breaking(repo: TestRepo) -> None: version_name='v2.0.0-beta', previous_version='1.0.0-beta', previous_version_name='v1.0.0-beta', - tag_created=True + tag_created=True, ) args_breaking2_prod = ActionInputs( @@ -2579,7 +2419,7 @@ def test_breaking_then_breaking(repo: TestRepo) -> None: suffix=None, only_bump_suffix=True, reference_version_suffix='beta', - create_tag=True + create_tag=True, ) expected_output_breaking2_prod = ActionOutputs( @@ -2587,7 +2427,7 @@ def test_breaking_then_breaking(repo: TestRepo) -> None: version_name='v2.0.0', previous_version='1.0.0', previous_version_name='v1.0.0', - tag_created=True + tag_created=True, ) # Act diff --git a/tests/e2e/test_utils/__init__.py b/tests/e2e/test_utils/__init__.py index 3ebedad..472afd7 100644 --- a/tests/e2e/test_utils/__init__.py +++ b/tests/e2e/test_utils/__init__.py @@ -1,18 +1,22 @@ """Utilities.""" -from get_release_version_action import Inputs as ActionInputs, Outputs as ActionOutputs, main_algorithm as run_action + +from get_release_version_action import Inputs as ActionInputs +from get_release_version_action import Outputs as ActionOutputs +from get_release_version_action import main_algorithm as run_action + +from .fixtures import logging, repo from .logger import IndentLoggingFormatter, setup_logging from .test_repo import CommitMessages, GitBranchNotFoundError, TestRepo -from .fixtures import repo, logging __all__ = [ 'ActionInputs', 'ActionOutputs', - 'run_action', 'CommitMessages', 'GitBranchNotFoundError', - 'TestRepo', - 'setup_logging', 'IndentLoggingFormatter', + 'TestRepo', + 'logging', 'repo', - 'logging' + 'run_action', + 'setup_logging', ] diff --git a/tests/e2e/test_utils/fixtures.py b/tests/e2e/test_utils/fixtures.py index 4c895a8..d037494 100644 --- a/tests/e2e/test_utils/fixtures.py +++ b/tests/e2e/test_utils/fixtures.py @@ -1,4 +1,5 @@ """Common fixtures for all tests.""" + from collections.abc import Generator from pathlib import Path @@ -7,10 +8,7 @@ from .logger import setup_logging from .test_repo import TestRepo -__all__ = [ - 'logging', - 'repo' -] +__all__ = ['logging', 'repo'] @fixture(scope='module', autouse=True) @@ -20,7 +18,7 @@ def logging() -> None: @fixture -def repo(tmp_path: Path) -> Generator[TestRepo, None, None]: +def repo(tmp_path: Path) -> Generator[TestRepo]: """Create a new test git repository.""" with TestRepo(tmp_path) as test_repo: yield test_repo diff --git a/tests/e2e/test_utils/logger.py b/tests/e2e/test_utils/logger.py index d453a32..eb58094 100644 --- a/tests/e2e/test_utils/logger.py +++ b/tests/e2e/test_utils/logger.py @@ -1,4 +1,5 @@ """Utils for logging.""" + import logging import logging.config from pathlib import Path @@ -7,10 +8,7 @@ import yaml -__all__ = [ - 'IndentLoggingFormatter', - 'setup_logging' -] +__all__ = ['IndentLoggingFormatter', 'setup_logging'] class IndentLoggingFormatter(logging.Formatter): diff --git a/tests/e2e/test_utils/test_repo.py b/tests/e2e/test_utils/test_repo.py index d58a96f..5d84a51 100644 --- a/tests/e2e/test_utils/test_repo.py +++ b/tests/e2e/test_utils/test_repo.py @@ -1,4 +1,5 @@ """Wrapper around the ``git.Repo`` class that implements specific methods for unit testing.""" + from __future__ import annotations import logging @@ -20,11 +21,7 @@ logger = logging.getLogger('wemogy.get-release-version-action.tests.repo') -__all__ = [ - 'GitBranchNotFoundError', - 'CommitMessages', - 'TestRepo' -] +__all__ = ['CommitMessages', 'GitBranchNotFoundError', 'TestRepo'] class GitBranchNotFoundError(Exception): @@ -33,6 +30,7 @@ class GitBranchNotFoundError(Exception): class CommitMessages(StrEnum): """Pre-made commit messages for conventional commits.""" + CHORE = 'chore: test' FIX = 'fix: test' FEATURE = 'feat: test' @@ -42,6 +40,7 @@ class CommitMessages(StrEnum): class TestRepo: """Wrapper around the ``git.Repo`` class that implements specific methods for unit testing.""" + path: Path repo: Repo @@ -143,10 +142,7 @@ def cherrypick(self, commit: Commit, dest_branch_name: str) -> None: :param dest_branch_name: The branch name to cherrypick onto. :raises GitBranchNotFoundError: If the branch was not found. """ - logger.info( - 'Cherrypicking commit %s (%s) into branch %s', - commit.message, commit.hexsha, dest_branch_name - ) + logger.info('Cherrypicking commit %s (%s) into branch %s', commit.message, commit.hexsha, dest_branch_name) self.checkout(dest_branch_name) self.repo.git.cherry_pick(commit.hexsha) diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..cf8e098 --- /dev/null +++ b/uv.lock @@ -0,0 +1,541 @@ +version = 1 +revision = 1 +requires-python = ">=3.13" + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 }, +] + +[[package]] +name = "assertpy" +version = "1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4f/39/720b5d4463612a40a166d00999cbb715fce3edaf08a9a7588ba5985699ec/assertpy-1.1.tar.gz", hash = "sha256:acc64329934ad71a3221de185517a43af33e373bb44dc05b5a9b174394ef4833", size = 25421 } + +[[package]] +name = "certifi" +version = "2025.1.31" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", size = 167577 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393 }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", size = 123188 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/94/ce8e6f63d18049672c76d07d119304e1e2d7c6098f0841b51c666e9f44a0/charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", size = 195698 }, + { url = "https://files.pythonhosted.org/packages/24/2e/dfdd9770664aae179a96561cc6952ff08f9a8cd09a908f259a9dfa063568/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", size = 140162 }, + { url = "https://files.pythonhosted.org/packages/24/4e/f646b9093cff8fc86f2d60af2de4dc17c759de9d554f130b140ea4738ca6/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", size = 150263 }, + { url = "https://files.pythonhosted.org/packages/5e/67/2937f8d548c3ef6e2f9aab0f6e21001056f692d43282b165e7c56023e6dd/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", size = 142966 }, + { url = "https://files.pythonhosted.org/packages/52/ed/b7f4f07de100bdb95c1756d3a4d17b90c1a3c53715c1a476f8738058e0fa/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", size = 144992 }, + { url = "https://files.pythonhosted.org/packages/96/2c/d49710a6dbcd3776265f4c923bb73ebe83933dfbaa841c5da850fe0fd20b/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", size = 147162 }, + { url = "https://files.pythonhosted.org/packages/b4/41/35ff1f9a6bd380303dea55e44c4933b4cc3c4850988927d4082ada230273/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", size = 140972 }, + { url = "https://files.pythonhosted.org/packages/fb/43/c6a0b685fe6910d08ba971f62cd9c3e862a85770395ba5d9cad4fede33ab/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", size = 149095 }, + { url = "https://files.pythonhosted.org/packages/4c/ff/a9a504662452e2d2878512115638966e75633519ec11f25fca3d2049a94a/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", size = 152668 }, + { url = "https://files.pythonhosted.org/packages/6c/71/189996b6d9a4b932564701628af5cee6716733e9165af1d5e1b285c530ed/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", size = 150073 }, + { url = "https://files.pythonhosted.org/packages/e4/93/946a86ce20790e11312c87c75ba68d5f6ad2208cfb52b2d6a2c32840d922/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", size = 145732 }, + { url = "https://files.pythonhosted.org/packages/cd/e5/131d2fb1b0dddafc37be4f3a2fa79aa4c037368be9423061dccadfd90091/charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", size = 95391 }, + { url = "https://files.pythonhosted.org/packages/27/f2/4f9a69cc7712b9b5ad8fdb87039fd89abba997ad5cbe690d1835d40405b0/charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", size = 102702 }, + { url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767 }, +] + +[[package]] +name = "click" +version = "8.1.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188 }, +] + +[[package]] +name = "click-option-group" +version = "0.5.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e7/b8/91054601a2e05fd9060cb1baf56be5b24145817b059e078669e1099529c7/click-option-group-0.5.6.tar.gz", hash = "sha256:97d06703873518cc5038509443742b25069a3c7562d1ea72ff08bfadde1ce777", size = 16517 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/75/81ea958bc0f7e410257cb2a42531b93a7695a31930cde87192c010a52c50/click_option_group-0.5.6-py3-none-any.whl", hash = "sha256:38a26d963ee3ad93332ddf782f9259c5bdfe405e73408d943ef5e7d0c3767ec7", size = 12467 }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, +] + +[[package]] +name = "dotty-dict" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/ab/88d67f02024700b48cd8232579ad1316aa9df2272c63049c27cc094229d6/dotty_dict-1.3.1.tar.gz", hash = "sha256:4b016e03b8ae265539757a53eba24b9bfda506fb94fbce0bee843c6f05541a15", size = 7699 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/91/e0d457ee03ec33d79ee2cd8d212debb1bc21dfb99728ae35efdb5832dc22/dotty_dict-1.3.1-py3-none-any.whl", hash = "sha256:5022d234d9922f13aa711b4950372a06a6d64cb6d6db9ba43d0ba133ebfce31f", size = 7014 }, +] + +[[package]] +name = "get-release-version-action" +version = "0.1.0" +source = { editable = "." } +dependencies = [ + { name = "gitpython" }, + { name = "python-semantic-release" }, + { name = "pyyaml" }, + { name = "semver" }, +] + +[package.dev-dependencies] +dev = [ + { name = "assertpy" }, + { name = "mypy" }, + { name = "pytest" }, + { name = "ruff" }, + { name = "types-assertpy" }, + { name = "types-pyyaml" }, +] + +[package.metadata] +requires-dist = [ + { name = "gitpython", specifier = ">=3.1.44" }, + { name = "python-semantic-release", specifier = "==9.5.0" }, + { name = "pyyaml", specifier = ">=6.0.2" }, + { name = "semver", specifier = ">=3.0.4" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "assertpy", specifier = ">=1.1" }, + { name = "mypy", specifier = ">=1.15.0" }, + { name = "pytest", specifier = ">=8.3.4" }, + { name = "ruff", specifier = ">=0.9.6" }, + { name = "types-assertpy", specifier = ">=1.1.0.20240712" }, + { name = "types-pyyaml", specifier = ">=6.0.12.20241230" }, +] + +[[package]] +name = "gitdb" +version = "4.0.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "smmap" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/94/63b0fc47eb32792c7ba1fe1b694daec9a63620db1e313033d18140c2320a/gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571", size = 394684 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf", size = 62794 }, +] + +[[package]] +name = "gitpython" +version = "3.1.44" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gitdb" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/89/37df0b71473153574a5cdef8f242de422a0f5d26d7a9e231e6f169b4ad14/gitpython-3.1.44.tar.gz", hash = "sha256:c87e30b26253bf5418b01b0660f818967f3c503193838337fe5e573331249269", size = 214196 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/9a/4114a9057db2f1462d5c8f8390ab7383925fe1ac012eaa42402ad65c2963/GitPython-3.1.44-py3-none-any.whl", hash = "sha256:9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110", size = 207599 }, +] + +[[package]] +name = "idna" +version = "3.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, +] + +[[package]] +name = "importlib-resources" +version = "6.5.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cf/8c/f834fbf984f691b4f7ff60f50b514cc3de5cc08abfc3295564dd89c5e2e7/importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c", size = 44693 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec", size = 37461 }, +] + +[[package]] +name = "iniconfig" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", size = 4646 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374", size = 5892 }, +] + +[[package]] +name = "jinja2" +version = "3.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/af/92/b3130cbbf5591acf9ade8708c365f3238046ac7cb8ccba6e81abccb0ccff/jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb", size = 244674 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/0f/2ba5fbcd631e3e88689309dbe978c5769e883e4b84ebfe7da30b43275c5a/jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb", size = 134596 }, +] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528 }, +] + +[[package]] +name = "markupsafe" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 }, +] + +[[package]] +name = "mypy" +version = "1.15.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mypy-extensions" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ce/43/d5e49a86afa64bd3839ea0d5b9c7103487007d728e1293f52525d6d5486a/mypy-1.15.0.tar.gz", hash = "sha256:404534629d51d3efea5c800ee7c42b72a6554d6c400e6a79eafe15d11341fd43", size = 3239717 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/9b/fd2e05d6ffff24d912f150b87db9e364fa8282045c875654ce7e32fffa66/mypy-1.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:93faf3fdb04768d44bf28693293f3904bbb555d076b781ad2530214ee53e3445", size = 10788592 }, + { url = "https://files.pythonhosted.org/packages/74/37/b246d711c28a03ead1fd906bbc7106659aed7c089d55fe40dd58db812628/mypy-1.15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:811aeccadfb730024c5d3e326b2fbe9249bb7413553f15499a4050f7c30e801d", size = 9753611 }, + { url = "https://files.pythonhosted.org/packages/a6/ac/395808a92e10cfdac8003c3de9a2ab6dc7cde6c0d2a4df3df1b815ffd067/mypy-1.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:98b7b9b9aedb65fe628c62a6dc57f6d5088ef2dfca37903a7d9ee374d03acca5", size = 11438443 }, + { url = "https://files.pythonhosted.org/packages/d2/8b/801aa06445d2de3895f59e476f38f3f8d610ef5d6908245f07d002676cbf/mypy-1.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c43a7682e24b4f576d93072216bf56eeff70d9140241f9edec0c104d0c515036", size = 12402541 }, + { url = "https://files.pythonhosted.org/packages/c7/67/5a4268782eb77344cc613a4cf23540928e41f018a9a1ec4c6882baf20ab8/mypy-1.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:baefc32840a9f00babd83251560e0ae1573e2f9d1b067719479bfb0e987c6357", size = 12494348 }, + { url = "https://files.pythonhosted.org/packages/83/3e/57bb447f7bbbfaabf1712d96f9df142624a386d98fb026a761532526057e/mypy-1.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:b9378e2c00146c44793c98b8d5a61039a048e31f429fb0eb546d93f4b000bedf", size = 9373648 }, + { url = "https://files.pythonhosted.org/packages/09/4e/a7d65c7322c510de2c409ff3828b03354a7c43f5a8ed458a7a131b41c7b9/mypy-1.15.0-py3-none-any.whl", hash = "sha256:5469affef548bd1895d86d3bf10ce2b44e33d86923c29e4d675b3e323437ea3e", size = 2221777 }, +] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/98/a4/1ab47638b92648243faf97a5aeb6ea83059cc3624972ab6b8d2316078d3f/mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782", size = 4433 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", size = 4695 }, +] + +[[package]] +name = "packaging" +version = "24.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 }, +] + +[[package]] +name = "pluggy" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556 }, +] + +[[package]] +name = "pydantic" +version = "2.10.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b7/ae/d5220c5c52b158b1de7ca89fc5edb72f304a70a4c540c84c8844bf4008de/pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236", size = 761681 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/3c/8cc1cc84deffa6e25d2d0c688ebb80635dfdbf1dbea3e30c541c8cf4d860/pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584", size = 431696 }, +] + +[[package]] +name = "pydantic-core" +version = "2.27.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fc/01/f3e5ac5e7c25833db5eb555f7b7ab24cd6f8c322d3a3ad2d67a952dc0abc/pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39", size = 413443 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/b1/9bc383f48f8002f99104e3acff6cba1231b29ef76cfa45d1506a5cad1f84/pydantic_core-2.27.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b", size = 1892709 }, + { url = "https://files.pythonhosted.org/packages/10/6c/e62b8657b834f3eb2961b49ec8e301eb99946245e70bf42c8817350cbefc/pydantic_core-2.27.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154", size = 1811273 }, + { url = "https://files.pythonhosted.org/packages/ba/15/52cfe49c8c986e081b863b102d6b859d9defc63446b642ccbbb3742bf371/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9", size = 1823027 }, + { url = "https://files.pythonhosted.org/packages/b1/1c/b6f402cfc18ec0024120602bdbcebc7bdd5b856528c013bd4d13865ca473/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9", size = 1868888 }, + { url = "https://files.pythonhosted.org/packages/bd/7b/8cb75b66ac37bc2975a3b7de99f3c6f355fcc4d89820b61dffa8f1e81677/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1", size = 2037738 }, + { url = "https://files.pythonhosted.org/packages/c8/f1/786d8fe78970a06f61df22cba58e365ce304bf9b9f46cc71c8c424e0c334/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a", size = 2685138 }, + { url = "https://files.pythonhosted.org/packages/a6/74/d12b2cd841d8724dc8ffb13fc5cef86566a53ed358103150209ecd5d1999/pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e", size = 1997025 }, + { url = "https://files.pythonhosted.org/packages/a0/6e/940bcd631bc4d9a06c9539b51f070b66e8f370ed0933f392db6ff350d873/pydantic_core-2.27.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4", size = 2004633 }, + { url = "https://files.pythonhosted.org/packages/50/cc/a46b34f1708d82498c227d5d80ce615b2dd502ddcfd8376fc14a36655af1/pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27", size = 1999404 }, + { url = "https://files.pythonhosted.org/packages/ca/2d/c365cfa930ed23bc58c41463bae347d1005537dc8db79e998af8ba28d35e/pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee", size = 2130130 }, + { url = "https://files.pythonhosted.org/packages/f4/d7/eb64d015c350b7cdb371145b54d96c919d4db516817f31cd1c650cae3b21/pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1", size = 2157946 }, + { url = "https://files.pythonhosted.org/packages/a4/99/bddde3ddde76c03b65dfd5a66ab436c4e58ffc42927d4ff1198ffbf96f5f/pydantic_core-2.27.2-cp313-cp313-win32.whl", hash = "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130", size = 1834387 }, + { url = "https://files.pythonhosted.org/packages/71/47/82b5e846e01b26ac6f1893d3c5f9f3a2eb6ba79be26eef0b759b4fe72946/pydantic_core-2.27.2-cp313-cp313-win_amd64.whl", hash = "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee", size = 1990453 }, + { url = "https://files.pythonhosted.org/packages/51/b2/b2b50d5ecf21acf870190ae5d093602d95f66c9c31f9d5de6062eb329ad1/pydantic_core-2.27.2-cp313-cp313-win_arm64.whl", hash = "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b", size = 1885186 }, +] + +[[package]] +name = "pygments" +version = "2.19.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 }, +] + +[[package]] +name = "pytest" +version = "8.3.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/05/35/30e0d83068951d90a01852cb1cef56e5d8a09d20c7f511634cc2f7e0372a/pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761", size = 1445919 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/92/76a1c94d3afee238333bc0a42b82935dd8f9cf8ce9e336ff87ee14d9e1cf/pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6", size = 343083 }, +] + +[[package]] +name = "python-gitlab" +version = "4.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, + { name = "requests-toolbelt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c4/ea/e2cde926d63526935c1df259177371a195089b631d67a577fe5c39fbc7e1/python_gitlab-4.13.0.tar.gz", hash = "sha256:576bfb0901faca0c6b2d1ff2592e02944a6ec3e086c3129fb43c2a0df56a1c67", size = 484996 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/5e/5fb4dcae9f5af5463c16952823d446ca449cce920efe8669871f600f0ab9/python_gitlab-4.13.0-py3-none-any.whl", hash = "sha256:8299a054fb571da16e1a8c1868fff01f34ac41ea1410c713a4647b3bbb2aa279", size = 145254 }, +] + +[[package]] +name = "python-semantic-release" +version = "9.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "click-option-group" }, + { name = "dotty-dict" }, + { name = "gitpython" }, + { name = "importlib-resources" }, + { name = "jinja2" }, + { name = "pydantic" }, + { name = "python-gitlab" }, + { name = "requests" }, + { name = "rich" }, + { name = "shellingham" }, + { name = "tomlkit" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bc/5d/e5f7964e68efe723c4e572c4f9520701013e989c79a187f7adde451e1302/python_semantic_release-9.5.0.tar.gz", hash = "sha256:e82da3caf96e1f917c26b530214443da70c440d58d1ff46e1e8120f76f0c7b2c", size = 167179 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/29/fc/5066e8a946faaaf1710b90e4ad50c3da3c04b9eef0913c44282ca95453b3/python_semantic_release-9.5.0-py3-none-any.whl", hash = "sha256:1a33e1b038b89e0811da071a355babeaf1c3ede6762ebd831335071884e1d1bd", size = 78808 }, +] + +[[package]] +name = "pyyaml" +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, +] + +[[package]] +name = "requests" +version = "2.32.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 }, +] + +[[package]] +name = "requests-toolbelt" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", size = 206888 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481 }, +] + +[[package]] +name = "rich" +version = "13.9.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", size = 223149 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/19/71/39c7c0d87f8d4e6c020a393182060eaefeeae6c01dab6a84ec346f2567df/rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90", size = 242424 }, +] + +[[package]] +name = "ruff" +version = "0.9.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2a/e1/e265aba384343dd8ddd3083f5e33536cd17e1566c41453a5517b5dd443be/ruff-0.9.6.tar.gz", hash = "sha256:81761592f72b620ec8fa1068a6fd00e98a5ebee342a3642efd84454f3031dca9", size = 3639454 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/e3/3d2c022e687e18cf5d93d6bfa2722d46afc64eaa438c7fbbdd603b3597be/ruff-0.9.6-py3-none-linux_armv6l.whl", hash = "sha256:2f218f356dd2d995839f1941322ff021c72a492c470f0b26a34f844c29cdf5ba", size = 11714128 }, + { url = "https://files.pythonhosted.org/packages/e1/22/aff073b70f95c052e5c58153cba735748c9e70107a77d03420d7850710a0/ruff-0.9.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b908ff4df65dad7b251c9968a2e4560836d8f5487c2f0cc238321ed951ea0504", size = 11682539 }, + { url = "https://files.pythonhosted.org/packages/75/a7/f5b7390afd98a7918582a3d256cd3e78ba0a26165a467c1820084587cbf9/ruff-0.9.6-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b109c0ad2ececf42e75fa99dc4043ff72a357436bb171900714a9ea581ddef83", size = 11132512 }, + { url = "https://files.pythonhosted.org/packages/a6/e3/45de13ef65047fea2e33f7e573d848206e15c715e5cd56095589a7733d04/ruff-0.9.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1de4367cca3dac99bcbd15c161404e849bb0bfd543664db39232648dc00112dc", size = 11929275 }, + { url = "https://files.pythonhosted.org/packages/7d/f2/23d04cd6c43b2e641ab961ade8d0b5edb212ecebd112506188c91f2a6e6c/ruff-0.9.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac3ee4d7c2c92ddfdaedf0bf31b2b176fa7aa8950efc454628d477394d35638b", size = 11466502 }, + { url = "https://files.pythonhosted.org/packages/b5/6f/3a8cf166f2d7f1627dd2201e6cbc4cb81f8b7d58099348f0c1ff7b733792/ruff-0.9.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dc1edd1775270e6aa2386119aea692039781429f0be1e0949ea5884e011aa8e", size = 12676364 }, + { url = "https://files.pythonhosted.org/packages/f5/c4/db52e2189983c70114ff2b7e3997e48c8318af44fe83e1ce9517570a50c6/ruff-0.9.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:4a091729086dffa4bd070aa5dab7e39cc6b9d62eb2bef8f3d91172d30d599666", size = 13335518 }, + { url = "https://files.pythonhosted.org/packages/66/44/545f8a4d136830f08f4d24324e7db957c5374bf3a3f7a6c0bc7be4623a37/ruff-0.9.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1bbc6808bf7b15796cef0815e1dfb796fbd383e7dbd4334709642649625e7c5", size = 12823287 }, + { url = "https://files.pythonhosted.org/packages/c5/26/8208ef9ee7431032c143649a9967c3ae1aae4257d95e6f8519f07309aa66/ruff-0.9.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:589d1d9f25b5754ff230dce914a174a7c951a85a4e9270613a2b74231fdac2f5", size = 14592374 }, + { url = "https://files.pythonhosted.org/packages/31/70/e917781e55ff39c5b5208bda384fd397ffd76605e68544d71a7e40944945/ruff-0.9.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc61dd5131742e21103fbbdcad683a8813be0e3c204472d520d9a5021ca8b217", size = 12500173 }, + { url = "https://files.pythonhosted.org/packages/84/f5/e4ddee07660f5a9622a9c2b639afd8f3104988dc4f6ba0b73ffacffa9a8c/ruff-0.9.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:5e2d9126161d0357e5c8f30b0bd6168d2c3872372f14481136d13de9937f79b6", size = 11906555 }, + { url = "https://files.pythonhosted.org/packages/f1/2b/6ff2fe383667075eef8656b9892e73dd9b119b5e3add51298628b87f6429/ruff-0.9.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:68660eab1a8e65babb5229a1f97b46e3120923757a68b5413d8561f8a85d4897", size = 11538958 }, + { url = "https://files.pythonhosted.org/packages/3c/db/98e59e90de45d1eb46649151c10a062d5707b5b7f76f64eb1e29edf6ebb1/ruff-0.9.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:c4cae6c4cc7b9b4017c71114115db0445b00a16de3bcde0946273e8392856f08", size = 12117247 }, + { url = "https://files.pythonhosted.org/packages/ec/bc/54e38f6d219013a9204a5a2015c09e7a8c36cedcd50a4b01ac69a550b9d9/ruff-0.9.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:19f505b643228b417c1111a2a536424ddde0db4ef9023b9e04a46ed8a1cb4656", size = 12554647 }, + { url = "https://files.pythonhosted.org/packages/a5/7d/7b461ab0e2404293c0627125bb70ac642c2e8d55bf590f6fce85f508f1b2/ruff-0.9.6-py3-none-win32.whl", hash = "sha256:194d8402bceef1b31164909540a597e0d913c0e4952015a5b40e28c146121b5d", size = 9949214 }, + { url = "https://files.pythonhosted.org/packages/ee/30/c3cee10f915ed75a5c29c1e57311282d1a15855551a64795c1b2bbe5cf37/ruff-0.9.6-py3-none-win_amd64.whl", hash = "sha256:03482d5c09d90d4ee3f40d97578423698ad895c87314c4de39ed2af945633caa", size = 10999914 }, + { url = "https://files.pythonhosted.org/packages/e8/a8/d71f44b93e3aa86ae232af1f2126ca7b95c0f515ec135462b3e1f351441c/ruff-0.9.6-py3-none-win_arm64.whl", hash = "sha256:0e2bb706a2be7ddfea4a4af918562fdc1bcb16df255e5fa595bbd800ce322a5a", size = 10177499 }, +] + +[[package]] +name = "semver" +version = "3.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/d1/d3159231aec234a59dd7d601e9dd9fe96f3afff15efd33c1070019b26132/semver-3.0.4.tar.gz", hash = "sha256:afc7d8c584a5ed0a11033af086e8af226a9c0b206f313e0301f8dd7b6b589602", size = 269730 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl", hash = "sha256:9c824d87ba7f7ab4a1890799cec8596f15c1241cb473404ea1cb0c55e4b04746", size = 17912 }, +] + +[[package]] +name = "shellingham" +version = "1.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755 }, +] + +[[package]] +name = "smmap" +version = "5.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/44/cd/a040c4b3119bbe532e5b0732286f805445375489fceaec1f48306068ee3b/smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5", size = 22329 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e", size = 24303 }, +] + +[[package]] +name = "tomlkit" +version = "0.13.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b1/09/a439bec5888f00a54b8b9f05fa94d7f901d6735ef4e55dcec9bc37b5d8fa/tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79", size = 192885 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde", size = 37955 }, +] + +[[package]] +name = "types-assertpy" +version = "1.1.0.20240712" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/62/ff/2080a4537562ee92f4918bf5d6155e076bc5d257ea474dda754d5c75ce3b/types-assertpy-1.1.0.20240712.tar.gz", hash = "sha256:c332d09298b158f09890af12f14d83ebb9f0e5014e91219ae145a6a5af9220f9", size = 5448 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/9e/7bdfdd46ea309e03a678c333a3f45bbbc3fca892ceb4d3898a102c90f463/types_assertpy-1.1.0.20240712-py3-none-any.whl", hash = "sha256:3962d4d863e4c091b9a8d7f02e3ee0d2ac06f25bdca0e6e4f848cf54c7214455", size = 8042 }, +] + +[[package]] +name = "types-pyyaml" +version = "6.0.12.20241230" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/f9/4d566925bcf9396136c0a2e5dc7e230ff08d86fa011a69888dd184469d80/types_pyyaml-6.0.12.20241230.tar.gz", hash = "sha256:7f07622dbd34bb9c8b264fe860a17e0efcad00d50b5f27e93984909d9363498c", size = 17078 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/c1/48474fbead512b70ccdb4f81ba5eb4a58f69d100ba19f17c92c0c4f50ae6/types_PyYAML-6.0.12.20241230-py3-none-any.whl", hash = "sha256:fa4d32565219b68e6dee5f67534c722e53c00d1cfc09c435ef04d7353e1e96e6", size = 20029 }, +] + +[[package]] +name = "typing-extensions" +version = "4.12.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8", size = 85321 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size = 37438 }, +] + +[[package]] +name = "urllib3" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/63/e53da845320b757bf29ef6a9062f5c669fe997973f966045cb019c3f4b66/urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d", size = 307268 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", size = 128369 }, +]