diff --git a/.github/workflows/build-and-publish.yml b/.github/workflows/build-and-publish.yml new file mode 100644 index 0000000..129c497 --- /dev/null +++ b/.github/workflows/build-and-publish.yml @@ -0,0 +1,38 @@ +name: Build & Publish + +on: + workflow_call: + secrets: + PYPI_TOKEN: + required: true + +jobs: + + cd-job: + name: Continuous Delivery + runs-on: ubuntu-22.04 + steps: + + - name: SCM Checkout + uses: actions/checkout@v4 + + - name: Setup Python & Poetry Environment + uses: exasol/python-toolbox/.github/actions/python-environment@0.20.0 + + - name: Build Artifacts + run: poetry build + + - name: PyPi Release + env: + POETRY_HTTP_BASIC_PYPI_USERNAME: "__token__" + POETRY_HTTP_BASIC_PYPI_PASSWORD: "${{ secrets.PYPI_TOKEN }}" + run: poetry publish + + - name: GitHub Release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: > + gh release create ${GITHUB_REF_NAME} + --title ${GITHUB_REF_NAME} + --notes-file ./doc/changes/changes_${GITHUB_REF_NAME}.md + dist/* diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml new file mode 100644 index 0000000..11673c9 --- /dev/null +++ b/.github/workflows/cd.yml @@ -0,0 +1,24 @@ +name: CD + +on: + push: + tags: + - '**' + +jobs: + + check-tag-version-job: + name: Check Release Tag + uses: ./.github/workflows/check-release-tag.yml + + cd-job: + name: Continuous Delivery + uses: ./.github/workflows/build-and-publish.yml + secrets: + PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} + + publish-docs: + needs: [ cd-job ] + name: Publish Documentation + uses: ./.github/workflows/gh-pages.yml + diff --git a/.github/workflows/check-release-tag.yml b/.github/workflows/check-release-tag.yml new file mode 100644 index 0000000..362ca22 --- /dev/null +++ b/.github/workflows/check-release-tag.yml @@ -0,0 +1,21 @@ +name: Check Release Tag + +on: workflow_call + +jobs: + + check-tag-version-job: + + name: Check Tag Version + runs-on: ubuntu-22.04 + + steps: + - name: SCM Checkout + uses: actions/checkout@v4 + + - name: Setup Python & Poetry Environment + uses: exasol/python-toolbox/.github/actions/python-environment@0.20.0 + + - name: Check Tag Version + # make sure the pushed/created tag matched the project version + run: "[[ `poetry version --short` == ${{ github.ref_name }} ]]" diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index d93dae9..dee9492 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -1,55 +1,167 @@ -name: CI Checks +name: Checks -on: +on: workflow_call: - + secrets: + ALTERNATIVE_GITHUB_TOKEN: + required: false jobs: - unit-tests: - name: Unit Tests + Version-Check: + name: Version + runs-on: ubuntu-22.04 + + steps: + - name: SCM Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Python & Poetry Environment + uses: exasol/python-toolbox/.github/actions/python-environment@0.20.0 + + - name: Check Version(s) + run: poetry run version-check `poetry run python -c "from noxconfig import PROJECT_CONFIG; print(PROJECT_CONFIG.version_file)"` + + Documentation: + name: Docs + needs: [ Version-Check ] + runs-on: ubuntu-22.04 + + steps: + - name: SCM Checkout + uses: actions/checkout@v4 + + - name: Setup Python & Poetry Environment + uses: exasol/python-toolbox/.github/actions/python-environment@0.20.0 + + - name: Build Documentation + run: | + poetry run python -m nox -s docs:build + + build-matrix: + name: Generate Build Matrix + uses: ./.github/workflows/matrix-python.yml + + Lint: + name: Linting (Python-${{ matrix.python-version }}) + needs: [ Version-Check, build-matrix ] + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: ${{ fromJson(needs.build-matrix.outputs.matrix) }} + + steps: + - name: SCM Checkout + uses: actions/checkout@v4 + + - name: Setup Python & Poetry Environment + uses: exasol/python-toolbox/.github/actions/python-environment@0.20.0 + with: + python-version: ${{ matrix.python-version }} + + - name: Run lint + run: poetry run nox -s lint:code + + - name: Upload Artifacts + uses: actions/upload-artifact@v4.4.0 + with: + name: lint-python${{ matrix.python-version }} + path: .lint.txt + include-hidden-files: true + + Type-Check: + name: Type Checking (Python-${{ matrix.python-version }}) + needs: [ Version-Check, build-matrix ] + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: ${{ fromJson(needs.build-matrix.outputs.matrix) }} + + steps: + - name: SCM Checkout + uses: actions/checkout@v4 + + - name: Setup Python & Poetry Environment + uses: exasol/python-toolbox/.github/actions/python-environment@0.20.0 + with: + python-version: ${{ matrix.python-version }} + + - name: Run type-check + run: poetry run nox -s lint:typing + + Security: + name: Security Checks (Python-${{ matrix.python-version }}) + needs: [ Version-Check, build-matrix ] runs-on: ubuntu-22.04 strategy: - fail-fast: true - matrix: - python-version: [ "3.9", "3.10", "3.11", "3.12" ] + fail-fast: false + matrix: ${{ fromJson(needs.build-matrix.outputs.matrix) }} steps: - - name: SCM Checkout - uses: actions/checkout@v4 + - name: SCM Checkout + uses: actions/checkout@v4 - - name: Setup Python & Poetry Environment - uses: exasol/python-toolbox/.github/actions/python-environment@0.13.0 - with: - python-version: ${{ matrix.python-version }} + - name: Setup Python & Poetry Environment + uses: exasol/python-toolbox/.github/actions/python-environment@0.20.0 + with: + python-version: ${{ matrix.python-version }} - - name: "Install all extras" - run: poetry install --all-extras + - name: Run security linter + run: poetry run nox -s lint:security - - name: Run Tests - run: | - poetry run nox -s test:unit + - name: Upload Artifacts + uses: actions/upload-artifact@v4.4.0 + with: + name: security-python${{ matrix.python-version }} + path: .security.json + include-hidden-files: true - integration-tests: - name: Integration Tests + Format: + name: Format Check runs-on: ubuntu-22.04 + + steps: + - name: SCM Checkout + uses: actions/checkout@v4 + + - name: Setup Python & Poetry Environment + uses: exasol/python-toolbox/.github/actions/python-environment@0.20.0 + with: + python-version: "3.9" + + - name: Run format check + run: poetry run nox -s project:format + + Tests: + name: Unit-Tests (Python-${{ matrix.python-version }}, Exasol-${{ matrix.exasol-version}}) + needs: [ Documentation, Lint, Type-Check, Security, Format, build-matrix ] + runs-on: ubuntu-22.04 + env: + GITHUB_TOKEN: ${{ secrets.ALTERNATIVE_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} strategy: - fail-fast: true - matrix: - python-version: [ "3.9", "3.10", "3.11", "3.12" ] + fail-fast: false + matrix: ${{ fromJson(needs.build-matrix.outputs.matrix) }} steps: - - name: SCM Checkout - uses: actions/checkout@v4 + - name: SCM Checkout + uses: actions/checkout@v4 + + - name: Setup Python & Poetry Environment + uses: exasol/python-toolbox/.github/actions/python-environment@0.20.0 + with: + python-version: ${{ matrix.python-version }} - - name: Setup Python & Poetry Environment - uses: exasol/python-toolbox/.github/actions/python-environment@0.13.0 - with: - python-version: ${{ matrix.python-version }} + - name: "Install all extras" + run: poetry install --all-extras - - name: "Install all extras" - run: poetry install --all-extras + - name: Run Tests and Collect Coverage + run: poetry run nox -s test:unit -- -- --coverage - - name: Run Tests - run: | - poetry run nox -s test:integration + - name: Upload Artifacts + uses: actions/upload-artifact@v4.4.0 + with: + name: coverage-python${{ matrix.python-version }}-fast + path: .coverage + include-hidden-files: true diff --git a/.github/workflows/ci-master.yml b/.github/workflows/ci-master.yml deleted file mode 100644 index 598c34c..0000000 --- a/.github/workflows/ci-master.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: Continuous Integration (Master) - -on: - push: - branches: - - "master" - - "main" - schedule: - # β€œAt 00:00 on every 7th day-of-month from 1 through 31.” (https://crontab.guru) - - cron: "0 0 1/7 * *" - -jobs: - verify: - uses: ./.github/workflows/checks.yml - - examples: - uses: ./.github/workflows/examples.yml - - ssl_cert: - uses: ./.github/workflows/ssl_cert.yml - - publish-docs: - name: Publish Documentation - uses: ./.github/workflows/gh-pages.yml diff --git a/.github/workflows/ci-pr.yml b/.github/workflows/ci-pr.yml deleted file mode 100644 index 1cf3b69..0000000 --- a/.github/workflows/ci-pr.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: Continuous Integration (PR) - -on: - pull_request: - -jobs: - verify: - uses: ./.github/workflows/checks.yml - - examples: - uses: ./.github/workflows/examples.yml - - ssl_cert: - uses: ./.github/workflows/ssl_cert.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..e02cb55 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,24 @@ +name: CI + +on: + push: + branches-ignore: + - "github-pages/*" + - "gh-pages/*" + - "main" + - "master" + pull_request: + types: [opened, reopened] + schedule: + # β€œAt 00:00 on every 7th day-of-month from 1 through 31.” (https://crontab.guru) + - cron: "0 0 1/7 * *" + +jobs: + + CI: + uses: ./.github/workflows/merge-gate.yml + secrets: inherit + + Metrics: + needs: [ CI ] + uses: ./.github/workflows/report.yml diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 3193f79..698fd3c 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -1,32 +1,31 @@ -name: Publish Documentation - -on: - workflow_call: - workflow_dispatch: - -jobs: - - documentation-job: - runs-on: ubuntu-latest - - steps: - - name: SCM Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Python & Poetry Environment - uses: exasol/python-toolbox/.github/actions/python-environment@0.18.0 - - - name: Build Documentation - run: | - poetry run nox -s docs:multiversion - - - name: Deploy - uses: JamesIves/github-pages-deploy-action@v4.6.0 - with: - branch: gh-pages - folder: .html-documentation - git-config-name: Github Action - git-config-email: opensource@exasol.com - +name: Publish Documentation + +on: + workflow_call: + workflow_dispatch: + +jobs: + + documentation-job: + runs-on: ubuntu-latest + + steps: + - name: SCM Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Python & Poetry Environment + uses: exasol/python-toolbox/.github/actions/python-environment@0.20.0 + + - name: Build Documentation + run: | + poetry run nox -s docs:multiversion + + - name: Deploy + uses: JamesIves/github-pages-deploy-action@v4.6.0 + with: + branch: gh-pages + folder: .html-documentation + git-config-name: Github Action + git-config-email: opensource@exasol.com diff --git a/.github/workflows/matrix-all.yml b/.github/workflows/matrix-all.yml new file mode 100644 index 0000000..eae9274 --- /dev/null +++ b/.github/workflows/matrix-all.yml @@ -0,0 +1,30 @@ +name: Build Matrix (All Versions) + +on: + workflow_call: + outputs: + matrix: + description: "Generates the all versions build matrix" + value: ${{ jobs.all_versions.outputs.matrix }} + +jobs: + all_versions: + + runs-on: ubuntu-22.04 + + steps: + - name: SCM Checkout + uses: actions/checkout@v4 + + - name: Setup Python & Poetry Environment + uses: exasol/python-toolbox/.github/actions/python-environment@0.20.0 + + - name: Generate matrix + run: poetry run nox -s matrix:all + + - id: set-matrix + run: | + echo "matrix=$(poetry run nox -s matrix:all)" >> $GITHUB_OUTPUT + + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} diff --git a/.github/workflows/matrix-exasol.yml b/.github/workflows/matrix-exasol.yml new file mode 100644 index 0000000..2cde00e --- /dev/null +++ b/.github/workflows/matrix-exasol.yml @@ -0,0 +1,30 @@ +name: Build Matrix (Exasol) + +on: + workflow_call: + outputs: + matrix: + description: "Generates the exasol version build matrix" + value: ${{ jobs.exasol_versions.outputs.matrix }} + +jobs: + exasol_versions: + + runs-on: ubuntu-22.04 + + steps: + - name: SCM Checkout + uses: actions/checkout@v4 + + - name: Setup Python & Poetry Environment + uses: exasol/python-toolbox/.github/actions/python-environment@0.20.0 + + - name: Generate matrix + run: poetry run nox -s matrix:exasol + + - id: set-matrix + run: | + echo "matrix=$(poetry run nox -s matrix:exasol)" >> $GITHUB_OUTPUT + + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} diff --git a/.github/workflows/matrix-python.yml b/.github/workflows/matrix-python.yml new file mode 100644 index 0000000..e9913e5 --- /dev/null +++ b/.github/workflows/matrix-python.yml @@ -0,0 +1,30 @@ +name: Build Matrix (Python) + +on: + workflow_call: + outputs: + matrix: + description: "Generates the python version build matrix" + value: ${{ jobs.python_versions.outputs.matrix }} + +jobs: + python_versions: + + runs-on: ubuntu-22.04 + + steps: + - name: SCM Checkout + uses: actions/checkout@v4 + + - name: Setup Python & Poetry Environment + uses: exasol/python-toolbox/.github/actions/python-environment@0.20.0 + + - name: Generate matrix + run: poetry run nox -s matrix:python + + - id: set-matrix + run: | + echo "matrix=$(poetry run nox -s matrix:python)" >> $GITHUB_OUTPUT + + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} diff --git a/.github/workflows/merge-gate.yml b/.github/workflows/merge-gate.yml new file mode 100644 index 0000000..35eb6df --- /dev/null +++ b/.github/workflows/merge-gate.yml @@ -0,0 +1,36 @@ +name: Merge-Gate + +on: + workflow_call: + secrets: + ALTERNATIVE_GITHUB_TOKEN: + required: false + +jobs: + + fast-checks: + name: Fast + uses: ./.github/workflows/checks.yml + + slow-checks: + name: Slow + uses: ./.github/workflows/slow-checks.yml + + examples: + uses: ./.github/workflows/examples.yml + + ssl_cert: + uses: ./.github/workflows/ssl_cert.yml + + # This job ensures inputs have been executed successfully. + approve-merge: + name: Allow Merge + runs-on: ubuntu-latest + # If you need additional jobs to be part of the merge gate, add them below + needs: [ fast-checks, slow-checks, examples, ssl_cert ] + + # Each job requires a step, so we added this dummy step. + steps: + - name: Approve + run: | + echo "Merge Approved" diff --git a/.github/workflows/pr-merge.yml b/.github/workflows/pr-merge.yml new file mode 100644 index 0000000..5305b57 --- /dev/null +++ b/.github/workflows/pr-merge.yml @@ -0,0 +1,31 @@ +name: PR-Merge + +on: + push: + branches: + - 'main' + - 'master' + +jobs: + + # This job can be removed if certain preconditions are met. See + # https://exasol.github.io/python-toolbox/user_guide/workflows.html#pr-merge-workflow + + ci-job: + name: Checks + uses: ./.github/workflows/checks.yml + secrets: inherit + + examples: + uses: ./.github/workflows/examples.yml + + ssl_cert: + uses: ./.github/workflows/ssl_cert.yml + + publish-docs: + name: Publish Documentation + uses: ./.github/workflows/gh-pages.yml + + metrics: + needs: [ ci-job ] + uses: ./.github/workflows/report.yml diff --git a/.github/workflows/report.yml b/.github/workflows/report.yml new file mode 100644 index 0000000..f8dd893 --- /dev/null +++ b/.github/workflows/report.yml @@ -0,0 +1,55 @@ +name: Status Report + +on: + workflow_call: + secrets: + ALTERNATIVE_GITHUB_TOKEN: + required: false + +jobs: + + report: + runs-on: ubuntu-22.04 + env: + GITHUB_TOKEN: ${{ secrets.ALTERNATIVE_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + + steps: + - name: SCM Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Python & Poetry Environment + uses: exasol/python-toolbox/.github/actions/python-environment@0.20.0 + + - name: Download Artifacts + uses: actions/download-artifact@v4.1.8 + with: + path: ./artifacts + + - name: Copy Artifacts into Root Folder + working-directory: ./artifacts + run: | + poetry run coverage combine --keep coverage-python3.9*/.coverage + cp .coverage ../ + cp lint-python3.9/.lint.txt ../ + cp security-python3.9/.security.json ../ + + - name: Generate Report + run: poetry run nox -s project:report -- -- --format json | tee metrics.json + + - name: Upload Artifacts + uses: actions/upload-artifact@v4.4.0 + with: + name: metrics.json + path: metrics.json + + - name: Generate GitHub Summary + run: | + echo -e "# Summary\n" >> $GITHUB_STEP_SUMMARY + poetry run nox -s project:report -- -- --format markdown >> $GITHUB_STEP_SUMMARY + echo -e "\n\n# Coverage\n" >> $GITHUB_STEP_SUMMARY + poetry run coverage report -- --format markdown >> $GITHUB_STEP_SUMMARY + echo -e "\n\n# Static Code Analysis\n" >> $GITHUB_STEP_SUMMARY + cat .lint.txt >> $GITHUB_STEP_SUMMARY + poetry run tbx security pretty-print .security.json >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/slow-checks.yml b/.github/workflows/slow-checks.yml new file mode 100644 index 0000000..26efc79 --- /dev/null +++ b/.github/workflows/slow-checks.yml @@ -0,0 +1,49 @@ +name: Slow-Checks + +on: + workflow_call: + secrets: + ALTERNATIVE_GITHUB_TOKEN: + required: false + +jobs: + + build-matrix: + name: Generate Build Matrix + uses: ./.github/workflows/matrix-all.yml + + Tests: + name: Integration-Tests (Python-${{ matrix.python-version }}, Exasol-${{ matrix.exasol-version}}) + needs: [ build-matrix ] + runs-on: ubuntu-22.04 + # Even though the environment "manual-approval" will be created automatically, + # it still needs to be configured to require interactive review. + # See project settings on GitHub (Settings / Environments / manual-approval). + environment: manual-approval + env: + GITHUB_TOKEN: ${{ secrets.ALTERNATIVE_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + strategy: + fail-fast: false + matrix: ${{ fromJson(needs.build-matrix.outputs.matrix) }} + + steps: + - name: SCM Checkout + uses: actions/checkout@v4 + + - name: Setup Python & Poetry Environment + uses: exasol/python-toolbox/.github/actions/python-environment@0.20.0 + with: + python-version: ${{ matrix.python-version }} + + - name: "Install all extras" + run: poetry install --all-extras + + - name: Run Tests and Collect Coverage + run: poetry run nox -s test:integration -- -- --coverage --db-version ${{ matrix.exasol-version }} + + - name: Upload Artifacts + uses: actions/upload-artifact@v4.4.0 + with: + name: coverage-python${{ matrix.python-version }}-slow + path: .coverage + include-hidden-files: true diff --git a/doc/changes/unreleased.md b/doc/changes/unreleased.md index 8707119..5a555bf 100644 --- a/doc/changes/unreleased.md +++ b/doc/changes/unreleased.md @@ -12,6 +12,7 @@ ## πŸ”© Internal * Relock dependencies +* Add exasol-toolbox workflows and actions * Add missing plugin for multiversion documentation * Add support for publishing documentation to gh pages * Add `.git-blame-ignore-revs` file to workspace diff --git a/doc/developer_guide.rst b/doc/developer_guide.rst index 4159679..5e8f17e 100644 --- a/doc/developer_guide.rst +++ b/doc/developer_guide.rst @@ -3,24 +3,131 @@ :octicon:`tools` Developer Guide ================================ -This guide explains how to develop `pyexasol` and run tests. +This guide explains how to develop ``pyexasol`` and run tests. Initial Setup +++++++++++++ -Create a virtual environment and install dependencies:: +Create a virtual environment and install dependencies: - poetry install --all-extras +.. code-block:: shell -Run the following to enter the virtual environment:: + poetry install --all-extras - poetry shell +Run the following command to enter the virtual environment: + +.. code-block:: shell + + poetry shell + +Once you have set up all dependencies and activated the poetry shell, all further tasks for development should be available via the task runner ``nox``. To see all available tasks, run the following command: ``nox --list``. + +To execute a specific task, run ``nox -s ``. For example, ``nox -s test:unit``. + +Running tests +++++++++++++++ + +Unit Tests +---------- + +.. code-block:: shell + + nox -s test:unit + +If you want to forward additional arguments to pytest, you need to pass ``--`` to indicate the end of the argument vector for the nox command. For example: + +.. code-block:: shell + + nox -s test::unit -- -k meta + +Integration Tests +----------------- + +.. attention:: + + As a Docker container with a test databases needs to be started for the integration tests, it may take a bit before the tests themselves start executing. After the tests have been run, the database will be shut down again. + +.. code-block:: shell + + nox -s test:integration + +Passing additional arguments to pytest works the same as for the unit tests. + +DB +-- +If you manually run some tests or want to try something out, you can start and stop the database manually using ``nox -s db:start`` and ``nox -s db:stop``. + +Creating a Release +++++++++++++++++++ + +Prepare the Release +------------------- + +To prepare for a release, a pull request with the following parameters needs to be created: + +- Updated version numbers +- Updated the changelog + +This can be achieved by running the following command: + +.. code-block:: shell + + nox -s release:prepare -- .. + +Replace ``, ``, and `` with the appropriate version numbers. +Once the PR is successfully merged, the release can be triggered (see next section). + +Triggering the Release +---------------------- + +To trigger a release, a new tag must be pushed to GitHub. For further details, see `.github/workflows/ci-cd.yml`. + +1. Create a local tag with the appropriate version number: + + .. code-block:: shell + + git tag x.y.z + +2. Push the tag to GitHub: + + .. code-block:: shell + + git push origin x.y.z + + +What to do if the release failed? +--------------------------------- + +The release failed during pre-release checks +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#. Delete the local tag + + .. code-block:: shell + + git tag -d x.y.z + +#. Delete the remote tag + + .. code-block:: shell + + git push --delete origin x.y.z + +#. Fix the issue(s) which lead to the failing checks +#. Start the release process from the beginning + + +One of the release steps failed (Partial Release) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#. Check the Github action/workflow to see which steps failed +#. Finish or redo the failed release steps manually + +.. note:: Example + + **Scenario**: Publishing of the release on Github was successfully but during the PyPi release, the upload step got interrupted. + + **Solution**: Manually push the package to PyPi -Running Integration Tests -+++++++++++++++++++++++++ -To run integration tests first start a local database:: - nox -s db-start -Then you can run tests as usual with `pytest`. diff --git a/poetry.lock b/poetry.lock index 7c481df..36d93a3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -774,13 +774,13 @@ types-requests = ">=2.31.0.6,<3.0.0.0" [[package]] name = "exasol-toolbox" -version = "0.19.0" +version = "0.20.0" description = "Your one-stop solution for managing all standard tasks and core workflows of your Python project." optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "exasol_toolbox-0.19.0-py3-none-any.whl", hash = "sha256:bc29492a552d64d921b5a70985f9ca1821a3eda15ceb382d5750dd574ef94ec3"}, - {file = "exasol_toolbox-0.19.0.tar.gz", hash = "sha256:32a9bfa867c1f24e113a06c026f4f660fea63fb563805983b084caae2a7e44bd"}, + {file = "exasol_toolbox-0.20.0-py3-none-any.whl", hash = "sha256:c90e805dbaf0d2ec96a1fab44a00adedb55043179201f2218e10fc8ec811ce11"}, + {file = "exasol_toolbox-0.20.0.tar.gz", hash = "sha256:f7e0cf6e346b7b3af59a007a274dc1ef48195f03eba87ad6ebf8eb95740fb1ae"}, ] [package.dependencies] @@ -2304,13 +2304,13 @@ files = [ [[package]] name = "pyupgrade" -version = "3.19.0" +version = "3.19.1" description = "A tool to automatically upgrade syntax for newer versions." optional = false python-versions = ">=3.9" files = [ - {file = "pyupgrade-3.19.0-py2.py3-none-any.whl", hash = "sha256:1364fcae4436a6a236a85960587390ec8a939ad0f65f429346f70a5f201c1489"}, - {file = "pyupgrade-3.19.0.tar.gz", hash = "sha256:7ed4b7d972ed2788c43994f4a24f949d5bf044342992f3b48e1bed0092ddaa01"}, + {file = "pyupgrade-3.19.1-py2.py3-none-any.whl", hash = "sha256:8c5b0bfacae5ff30fa136a53eb7f22c34ba007450d4099e9da8089dabb9e67c9"}, + {file = "pyupgrade-3.19.1.tar.gz", hash = "sha256:d10e8c5f54b8327211828769e98d95d95e4715de632a3414f1eef3f51357b9e2"}, ] [package.dependencies] @@ -3305,4 +3305,4 @@ ujson = ["ujson"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "8fabf5adeb836347e5b05bbd15617919780028cec5b793b7cad431570a4afda2" +content-hash = "0a9324c4acf2e663ce0d4509a6cbfd576cd15c357cdd597b2a488d3835b19596" diff --git a/pyproject.toml b/pyproject.toml index 493ed45..fe30ed3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -75,7 +75,7 @@ pytest = ">=7.0.0,<9" docutils = "0.20.1" exasol-integration-test-docker-environment = "^3.0.0" faker = "^24.14.1" -exasol-toolbox = "^0.19.0" +exasol-toolbox = ">=0.20.0" [tool.black] line-length = 88