Repository: exasol/integration-test-docker-environment (language: python)

Issue:
Remove DepHell dependency, because it is not maintained anymore



Discussion / hints:

Fix patch:
diff --git a/.github/workflows/check_setup_py.yaml b/.github/workflows/check_setup_py.yaml
index ab5011786..0d1e0c3d9 100644
--- a/.github/workflows/check_setup_py.yaml
+++ b/.github/workflows/check_setup_py.yaml
@@ -16,8 +16,6 @@ jobs:
       with:
         python-version: ${{ matrix.python-version }}
     - uses: abatilo/actions-poetry@v2.0.0
-    - name: Install dephell
-      run: curl -L dephell.org/install | python3
     - name: Run packaging update
       run: bash githooks/update_packaging.sh
     - name: Show changes on working copy
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 30101e8be..dffd6cba0 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -3,7 +3,20 @@ name: CI
 on: [push, pull_request]
 
 jobs:
-  test-starter:
+  test-docker-starter:
+    strategy:
+      fail-fast: false
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v2
+
+    - name: Build new Docker image
+      run: bash build_test_environment_docker_runner.sh 
+
+    - name: Test ./start-test-env 
+      run: ./start-test-env --help
+
+  test-all:
     strategy:
       fail-fast: false
       matrix:
@@ -20,14 +33,17 @@ jobs:
       uses: actions/setup-python@v2
       with:
         python-version: 3.6
-
-    - name: Install pipenv
-      uses: dschep/install-pipenv-action@v1
+    - name: Install Poetry
+      uses: abatilo/actions-poetry@v2.0.0
 
     - name: Run all tests
       run: ./run_all_tests.sh
       env:
         EXASOL_VERSION: "${{ matrix.exasol_version }}"
+
+    - name: Test ./start-test-env-with-poetry 
+      run: ./start-test-env-with-poetry --help
+
   test-db-versions:
     strategy:
       fail-fast: false
@@ -69,9 +85,8 @@ jobs:
       uses: actions/setup-python@v2
       with:
         python-version: 3.6
-
-    - name: Install pipenv
-      uses: dschep/install-pipenv-action@v1
+    - name: Install Poetry
+      uses: abatilo/actions-poetry@v2.0.0
 
     - name: Run tests
       run: ./run_test.sh exasol_integration_test_docker_environment/test/test_test_environment.py
@@ -83,3 +98,23 @@ jobs:
       env:
         EXASOL_VERSION: "${{ matrix.exasol_version }}"
       if: github.ref == 'refs/heads/master' || contains(github.event.head_commit.message, '[run all tests]') || github.event_name != 'push'
+  publish:
+    if: github.ref == 'refs/heads/master'
+    runs-on: ubuntu-latest
+    environment: publish
+    # needs:
+    # - test-db-versions
+    # - test-all
+    # - test-docker-starter
+    steps:
+    - uses: actions/checkout@v2
+    - name: Build new Docker image
+      run: bash build_test_environment_docker_runner.sh 
+    - name: Docker login
+      run: echo "$SECRET_DOCKER_TOKEN" | docker login --username "$SECRET_DOCKER_USER_NAME" --password-stdin 
+      env: # Set the secret as an input
+        SECRET_DOCKER_USER_NAME: ${{ secrets.DOCKER_USER_NAME }}
+        SECRET_DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }}
+    - name: Push new Docker image
+      run: bash push_test_environment_docker_runner.sh 
+
diff --git a/.gitignore b/.gitignore
index d52e172d7..42a2679f1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,4 +5,5 @@
 .env
 Pipfile.lock
 .idea
-.build_output/
\ No newline at end of file
+.build_output/
+dist/
diff --git a/Dockerfile b/Dockerfile
index f21c3c9ba..5d0059937 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -20,7 +20,6 @@ RUN apt-get -y update && \
 
 ENV LC_ALL=C.UTF-8
 ENV LANG=C.UTF-8
-RUN pip3 install pipenv
-RUN virtualenv --python=python3 /venv
-COPY Pipfile /root/Pipfile
-RUN bash -c "source /venv/bin/activate && cd /root && pipenv --python python3 install"
+COPY . /integration-test-docker-environment
+WORKDIR /integration-test-docker-environment
+RUN pip3 install .
diff --git a/__init__.py b/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/construct_docker_runner_image_name.sh b/construct_docker_runner_image_name.sh
new file mode 100755
index 000000000..b77ffe55d
--- /dev/null
+++ b/construct_docker_runner_image_name.sh
@@ -0,0 +1,14 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+SCRIPT_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
+
+if [ -z "${1-}" ]
+then
+  VERSION="$(git rev-parse HEAD || echo latest)"
+else
+  VERSION="$1"
+fi
+
+echo "exatk/integration_test_docker_environment_runner:$VERSION"
diff --git a/githooks/update_packaging.sh b/githooks/update_packaging.sh
index 5010f7e00..a9e424cf0 100755
--- a/githooks/update_packaging.sh
+++ b/githooks/update_packaging.sh
@@ -10,9 +10,17 @@ grey='\033[0;90m'
 
 # Jump to the current project's root directory (the one containing
 # .git/)
-ROOT_DIR=$(git rev-parse --show-cdup)
+ROOT_DIR=$(git rev-parse --show-cdup || echo)
+NO_GIT=FALSE
+if [ -z "$ROOT_DIR" ]
+then
+  echo "Did not found git repository, using '$PWD' as ROOT_DIR"
+  NO_GIT=TRUE
+  ROOT_DIR=$PWD
+fi
 
-pushd "$ROOT_DIR" > /dev/null
+#pushd "$ROOT_DIR" > /dev/null
+pushd "$ROOT_DIR"
 echo -e "Copy docker_db_config_template into package ${grey}(pre-commit hook)${no_color}"
 if [ -d "exasol_integration_test_docker_environment/docker_db_config" ]
 then
@@ -32,10 +40,11 @@ tar -xf $tar_file
 cp "$extracted_dir/setup.py" ../setup.py
 rm -r "$extracted_dir"
 popd > /dev/null
-echo -e "Generate Pipfile ${grey}(pre-commit hook)${no_color}"
-dephell deps convert > /dev/null
-sed -i 's/python_version = "3.6"//g' Pipfile
-echo -e "Add generated files ${grey}(pre-commit hook)${no_color}"
-git add Pipfile setup.py exasol_integration_test_docker_environment/docker_db_config
+
+if [ "$NO_GIT" == "FALSE" ]
+then
+  echo -e "Add generated files ${grey}(pre-commit hook)${no_color}"
+  git add setup.py exasol_integration_test_docker_environment/docker_db_config
+fi
 
 popd > /dev/null
diff --git a/pipenv_utils.sh b/pipenv_utils.sh
deleted file mode 100644
index a3eb2bed9..000000000
--- a/pipenv_utils.sh
+++ /dev/null
@@ -1,105 +0,0 @@
-init_pipenv () {
-    PIPENV_BIN="$1"
-    echo "Using following pipenv executable: $PIPENV_BIN"
-    if $PIPENV_BIN --python python3 --venv &> /dev/null
-    then
-        echo "Using existing virtual environment"
-    else
-        echo "Creating new virtual environment and installing dependencies"
-        $PIPENV_BIN --python python3 install
-    fi
-    if [ ! -f Pipfile.lock ]
-    then
-        echo "Installing dependencies"
-        $PIPENV_BIN --python python3 install
-    fi
-}
-
-
-find_pip_bin () {
-    if python3 -m pip list &> /dev/null
-    then
-        PIP_BIN="python3 -m pip "
-    else
-        echo "ERROR: cant find pip"
-	      exit 1
-    fi
-}
-
-find_pipenv_bin_via_pip () {
-    find_pip_bin
-    local PIPENV_LOCATION=$($PIP_BIN show pipenv | grep 'Location:'  | cut -f 2 -d " ")
-    local PIPENV_BIN_IN_LOCATION=$($PIP_BIN show -f pipenv | grep 'bin/pipenv$' | awk '{$1=$1};1')
-    PIPENV_BIN=$(command -v "$PIPENV_LOCATION/$PIPENV_BIN_IN_LOCATION")
-    if [ -z "$PIPENV_BIN" ]
-    then
-        echo "ERROR: pipenv seems to be installed, but I can't find in the PATH or via pip"
-        exit 1
-    fi
-}
-
-
-request_install_to_virtual_env () {
-    if [ "$PIP_INSTALL" = YES ]
-    then
-      ANSWER=yes
-    else
-      echo "Do you want to install pipenv into the current virtual environment: yes/no"
-      read ANSWER
-    fi
-    if [ "$ANSWER" == "yes" ]
-    then
-        find_pip_bin
-        $PIP_BIN install pipenv
-        find_pipenv_bin_via_pip
-    else
-        echo "Aborting"
-        exit 1
-    fi
-}
-
-request_install_to_user () {
-    if [ "$PIP_INSTALL" = YES ]
-    then
-      ANSWER=yes
-    else
-      echo "Do you want to install pipenv local to the user: yes/no"
-      read ANSWER
-    fi
-    if [ "$ANSWER" == "yes" ]
-    then
-        find_pip_bin
-        $PIP_BIN install --user pipenv
-        PIPENV_BIN="$(python3 -m site --user-base)/bin/pipenv"
-    else
-        echo "Aborting"
-        exit 1
-    fi
-}
-
-request_install () {
-    IS_IN_VIRTUAL_ENV=$(python3 -c "import sys; print(hasattr(sys, 'real_prefix'))")
-    if [ "$IS_IN_VIRTUAL_ENV" == "True" ]
-    then
-        request_install_to_virtual_env
-    else
-        request_install_to_user
-    fi
-}
-
-discover_pipenv() {
-    if [ -z "$PIPENV_BIN" ]
-    then
-      PIPENV_BIN=$(command -v pipenv)
-      if [ -z "$PIPENV_BIN" ]
-      then
-          find_pip_bin
-          if $PIP_BIN show pipenv &> /dev/null
-          then
-              find_pipenv_bin_via_pip
-          else
-              request_install
-          fi
-      fi
-    fi
-}
diff --git a/poetry_utils.sh b/poetry_utils.sh
index eca66098d..7a803a0fe 100644
--- a/poetry_utils.sh
+++ b/poetry_utils.sh
@@ -1,5 +1,8 @@
+#!/usr/bin/env bash
+
 init_poetry () {
   echo "Initializing poetry:"
+  export LC_ALL=C.UTF-8
   "$POETRY_BIN" env use "$PYTHON_BIN"
   "$POETRY_BIN" install
 }
diff --git a/pyproject.toml b/pyproject.toml
index 2f11d79e1..97d8b0bf5 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -32,8 +32,3 @@ pydot = ">=1.4.0"
 requests = ">=2.21.0"
 simplejson = ">=3.16.0"
 "stopwatch.py" = ">=1.0.0"
-
-[tool.dephell.main]
-from = {format = "poetry", path = "pyproject.toml"}
-to = {format = "pipfile", path = "Pipfile"}
-


Test patch:
diff --git a/build_test_environment_docker_runner.sh b/build_test_environment_docker_runner.sh
index ddb92c932..b7b1389c3 100755
--- a/build_test_environment_docker_runner.sh
+++ b/build_test_environment_docker_runner.sh
@@ -1,1 +1,9 @@
-docker build -t exatk/script-languages:test_environment_docker_runner .
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+SCRIPT_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
+
+IMAGE_NAME="$($SCRIPT_DIR/construct_docker_runner_image_name.sh)"
+
+docker build -t $IMAGE_NAME .
diff --git a/exasol_integration_test_docker_environment/test/start-test-env b/exasol_integration_test_docker_environment/test/start-test-env
index 93ba5b336..fe4b7225b 100755
--- a/exasol_integration_test_docker_environment/test/start-test-env
+++ b/exasol_integration_test_docker_environment/test/start-test-env
@@ -1,5 +1,5 @@
 #!/bin/bash
 set -euo pipefail
 pushd ../..
-./start-test-env $*
+./start-test-env-with-poetry "${@}"
 popd
diff --git a/exasol_integration_test_docker_environment/test/start-test-env-with-poetry b/exasol_integration_test_docker_environment/test/start-test-env-with-poetry
new file mode 100755
index 000000000..e3abeb070
--- /dev/null
+++ b/exasol_integration_test_docker_environment/test/start-test-env-with-poetry
@@ -0,0 +1,5 @@
+#!/bin/bash
+set -euo pipefail
+pushd ../..
+./start-test-env-without-docker-runner "${@}"
+popd
diff --git a/exasol_integration_test_docker_environment/test/start-test-env-without-docker-runner b/exasol_integration_test_docker_environment/test/start-test-env-without-poetry
similarity index 52%
rename from exasol_integration_test_docker_environment/test/start-test-env-without-docker-runner
rename to exasol_integration_test_docker_environment/test/start-test-env-without-poetry
index 51b1f7f6c..ab95d333b 100755
--- a/exasol_integration_test_docker_environment/test/start-test-env-without-docker-runner
+++ b/exasol_integration_test_docker_environment/test/start-test-env-without-poetry
@@ -1,5 +1,5 @@
 #!/bin/bash
 set -euo pipefail
 pushd ../..
-./start-test-env-without-docker-runner $*
+./start-test-env-without-poetry "${@}"
 popd
diff --git a/exasol_integration_test_docker_environment/test/test_test_environment.py b/exasol_integration_test_docker_environment/test/test_test_environment.py
index 5f4036f51..136855852 100644
--- a/exasol_integration_test_docker_environment/test/test_test_environment.py
+++ b/exasol_integration_test_docker_environment/test/test_test_environment.py
@@ -16,7 +16,7 @@ def setUpClass(cls):
         cls.test_environment = \
             utils.ExaslctTestEnvironment(
                 cls,
-                "./start-test-env-without-docker-runner",
+                utils.INTEGRATION_TEST_DOCKER_ENVIRONMENT_DEFAULT_BIN,
                 clean_images_at_close=False)
         # TODO cls.test_environment.clean_images()
         cls.docker_environment_name = cls.__name__
diff --git a/exasol_integration_test_docker_environment/test/test_test_environment_db_disk_size.py b/exasol_integration_test_docker_environment/test/test_test_environment_db_disk_size.py
index 53b38fd13..9bbe05db7 100644
--- a/exasol_integration_test_docker_environment/test/test_test_environment_db_disk_size.py
+++ b/exasol_integration_test_docker_environment/test/test_test_environment_db_disk_size.py
@@ -15,7 +15,7 @@ def setUpClass(cls):
         cls.test_environment = \
             utils.ExaslctTestEnvironment(
                 cls,
-                "./start-test-env-without-docker-runner",
+                utils.INTEGRATION_TEST_DOCKER_ENVIRONMENT_DEFAULT_BIN,
                 clean_images_at_close=False)
 
     def setUp(self):
diff --git a/exasol_integration_test_docker_environment/test/test_test_environment_db_mem_size.py b/exasol_integration_test_docker_environment/test/test_test_environment_db_mem_size.py
index 4ea528d42..dcf1f57a4 100644
--- a/exasol_integration_test_docker_environment/test/test_test_environment_db_mem_size.py
+++ b/exasol_integration_test_docker_environment/test/test_test_environment_db_mem_size.py
@@ -15,7 +15,7 @@ def setUpClass(cls):
         cls.test_environment = \
             utils.ExaslctTestEnvironment(
                 cls,
-                "./start-test-env-without-docker-runner",
+                utils.INTEGRATION_TEST_DOCKER_ENVIRONMENT_DEFAULT_BIN,
                 clean_images_at_close=False)
 
     def setUp(self):
diff --git a/exasol_integration_test_docker_environment/test/test_test_environment_docker_runtime.py b/exasol_integration_test_docker_environment/test/test_test_environment_docker_runtime.py
index 796df2192..9a1a279e5 100644
--- a/exasol_integration_test_docker_environment/test/test_test_environment_docker_runtime.py
+++ b/exasol_integration_test_docker_environment/test/test_test_environment_docker_runtime.py
@@ -38,7 +38,7 @@ def setUpClass(cls):
         cls.test_environment = \
             utils.ExaslctTestEnvironment(
                 cls,
-                "./start-test-env-without-docker-runner",
+                utils.INTEGRATION_TEST_DOCKER_ENVIRONMENT_DEFAULT_BIN,
                 clean_images_at_close=False)
         cls.docker_environment_name = "test_no_runtime_given"
         cls.on_host_docker_environment, cls.google_cloud_docker_environment = \
@@ -93,7 +93,7 @@ def setUpClass(cls):
         cls.test_environment = \
             utils.ExaslctTestEnvironment(
                 cls,
-                "./start-test-env-without-docker-runner",
+                utils.INTEGRATION_TEST_DOCKER_ENVIRONMENT_DEFAULT_BIN,
                 clean_images_at_close=False)
         cls.client = docker.from_env()
         cls.default_docker_runtime = get_default_docker_runtime(cls)
@@ -150,7 +150,7 @@ def setUpClass(cls):
         cls.test_environment = \
             utils.ExaslctTestEnvironment(
                 cls,
-                "./start-test-env-without-docker-runner",
+                utils.INTEGRATION_TEST_DOCKER_ENVIRONMENT_DEFAULT_BIN,
                 clean_images_at_close=False)
         cls.client = docker.from_env()
         cls.default_docker_runtime = get_default_docker_runtime(cls)
diff --git a/exasol_integration_test_docker_environment/test/utils.py b/exasol_integration_test_docker_environment/test/utils.py
index 3c64037ea..6fc38360d 100644
--- a/exasol_integration_test_docker_environment/test/utils.py
+++ b/exasol_integration_test_docker_environment/test/utils.py
@@ -17,6 +17,8 @@
 from exasol_integration_test_docker_environment.lib.data.environment_info import EnvironmentInfo
 
 
+INTEGRATION_TEST_DOCKER_ENVIRONMENT_DEFAULT_BIN="./start-test-env-without-poetry"
+
 class ExaslctDockerTestEnvironment():
     def __init__(self, name: str, database_host: str,
                  db_username: str, db_password: str,
diff --git a/push_test_environment_docker_runner.sh b/push_test_environment_docker_runner.sh
index ce7b3f08c..dcef62a26 100755
--- a/push_test_environment_docker_runner.sh
+++ b/push_test_environment_docker_runner.sh
@@ -1,2 +1,15 @@
-docker login
-docker push exatk/script-languages:test_environment_docker_runner
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+SCRIPT_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
+
+GIT_IMAGE_NAME="$($SCRIPT_DIR/construct_docker_runner_image_name.sh)"
+
+docker push $GIT_IMAGE_NAME
+
+LATEST_IMAGE_NAME="$($SCRIPT_DIR/construct_docker_runner_image_name.sh latest)"
+
+docker tag "$GIT_IMAGE_NAME" "$LATEST_IMAGE_NAME"
+
+docker push $LATEST_IMAGE_NAME
diff --git a/run_all_tests.sh b/run_all_tests.sh
index de8ba57ca..d202601ef 100755
--- a/run_all_tests.sh
+++ b/run_all_tests.sh
@@ -1,18 +1,21 @@
 #!/bin/bash 
    
-COMMAND_LINE_ARGS=$* 
+COMMAND_LINE_ARGS=("${@}") 
 SCRIPT_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" 
  
-source pipenv_utils.sh 
- 
-discover_pipenv 
-init_pipenv "$PIPENV_BIN" 
+source "$SCRIPT_DIR/poetry_utils.sh"
+
+check_requirements
+
+set -euo pipefail
+
+init_poetry
 
-if [ -n "$PIPENV_BIN" ]
+if [ -n "$POETRY_BIN" ]
 then
-  PYTHONPATH=. $PIPENV_BIN run python3 -m unittest discover exasol_integration_test_docker_environment/test
+  PYTHONPATH=. $POETRY_BIN run python3 -m unittest discover exasol_integration_test_docker_environment/test
 else
-  echo "Could not find pipenv!"
+  echo "Could not find poetry!"
   exit 1
 fi
 
diff --git a/run_test.sh b/run_test.sh
index e4ea2a8da..da985e3aa 100755
--- a/run_test.sh
+++ b/run_test.sh
@@ -1,18 +1,20 @@
 #!/bin/bash
   
-COMMAND_LINE_ARGS=$*
 SCRIPT_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
 
-source pipenv_utils.sh
+source "$SCRIPT_DIR/poetry_utils.sh"
 
-discover_pipenv
-init_pipenv "$PIPENV_BIN"
+check_requirements
 
-if [ -n "$PIPENV_BIN" ]
+set -euo pipefail
+
+init_poetry
+
+if [ -n "$POETRY_BIN" ]
 then
-  PYTHONPATH=. $PIPENV_BIN run python3 $1
+  PYTHONPATH=. $POETRY_BIN run python3 "${@}"
 else
-  echo "Could not find pipenv!"
+  echo "Could not find poetry!"
   exit 1
 fi
 
diff --git a/start-test-env b/start-test-env
index af465ed60..28779f61c 100755
--- a/start-test-env
+++ b/start-test-env
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 set -euo pipefail
 
@@ -14,12 +14,16 @@ else
 fi
 
 quoted_arguments=''
-for argument in "$@"
+for argument in "${@}"
 do
     argument="${argument//\\/\\\\}"
     quoted_arguments="$quoted_arguments \"${argument//\"/\\\"}\""
 done
 
-docker run --rm $terminal_parameter -v "$PWD:$PWD" -v /var/run/docker.sock:/var/run/docker.sock -w "$PWD" exatk/script-languages:test_environment_docker_runner bash -c "source /venv/bin/activate && ./start-test-env-without-docker-runner $quoted_arguments; RETURN_CODE=\$?; chown -R $(id -u):$(id -g) .build_output &> /dev/null; exit \$RETURN_CODE"
+IMAGE_NAME="$($SCRIPT_DIR/construct_docker_runner_image_name.sh)"
+
+docker pull $IMAGE_NAME || bash build_test_environment_docker_runner.sh 
+
+docker run --rm $terminal_parameter -v "$PWD:$PWD" -v /var/run/docker.sock:/var/run/docker.sock -w "$PWD" $IMAGE_NAME bash -c "python3 -m pip install .; ./start-test-env-without-poetry $quoted_arguments; RETURN_CODE=\$?; chown -R $(id -u):$(id -g) .build_output &> /dev/null; exit \$RETURN_CODE"
 
 popd &> /dev/null
diff --git a/start-test-env-with-poetry b/start-test-env-with-poetry
new file mode 100755
index 000000000..d1b5e007e
--- /dev/null
+++ b/start-test-env-with-poetry
@@ -0,0 +1,21 @@
+#!/usr/bin/env bash
+
+
+SCRIPT_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
+
+source "$SCRIPT_DIR/poetry_utils.sh"
+
+check_requirements
+
+set -euo pipefail
+
+init_poetry
+
+if [ -n "$POETRY_BIN" ]
+then
+  export PYTHONPATH="$SCRIPT_DIR"
+  $POETRY_BIN run bash "$SCRIPT_DIR/start-test-env-without-poetry"
+else
+  echo "Could not find poetry!"
+  exit 1
+fi
diff --git a/start-test-env-without-docker-runner b/start-test-env-without-docker-runner
deleted file mode 100755
index 2351bb377..000000000
--- a/start-test-env-without-docker-runner
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/bash
-
-# This script acts as the start of exaslct the script language container build tool
-# It tries to discover if pipenv is already installed or tries to install it if it not exists.
-# After that it creates the virtual environment and install all necessary dependencies for exaslct.
-# In the end it runs exaslct_src/exaslct.py in the virtual environment.
-
-
-SCRIPT_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
-
-source "$SCRIPT_DIR/pipenv_utils.sh"
-
-run () {
-    export PYTHONPATH="$SCRIPT_DIR"
-    $PIPENV_BIN run python3 "$SCRIPT_DIR/exasol_integration_test_docker_environment/main.py" "$@" # We use "$@" to pass the commandline arguments to the run function to preserve arguments with spaces as a single argument
-    exit $?
-
-}
-
-discover_pipenv
-init_pipenv "$PIPENV_BIN"
-if [ -n "$PIPENV_BIN" ]
-then
-  run "$@" # We use "$@" to pass the commandline arguments to the run function to preserve arguments with spaces as a single argument
-else
-  echo "Could not find pipenv!"
-  exit 1
-fi
diff --git a/start-test-env-without-poetry b/start-test-env-without-poetry
new file mode 100755
index 000000000..8ca0247cd
--- /dev/null
+++ b/start-test-env-without-poetry
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+set -euo pipefail
+
+SCRIPT_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
+
+export PYTHONPATH="$SCRIPT_DIR"
+python3 "$SCRIPT_DIR/exasol_integration_test_docker_environment/main.py" "${@}" # We use "$@" to pass the commandline arguments to the run function to preserve arguments with spaces as a single argument
+exit $?