diff --git a/helm/scripts/create_remote_users.sh b/helm/scripts/create_remote_users.sh index d7b4ce5833df1e0cd0fc40bc04350a8a96e95000..554dbfdcbbb896d84f5f888357a162f512ce1dd6 100755 --- a/helm/scripts/create_remote_users.sh +++ b/helm/scripts/create_remote_users.sh @@ -73,14 +73,6 @@ then exit -1 fi -# Other Stuff -DOCKER_ROBOT_IMAGE=labs.etsi.org:5050/ocf/capif/robot-tests-image -DOCKER_ROBOT_IMAGE_VERSION=1.0 - -TEST_FOLDER=$CAPIF_BASE_DIR/tests -RESULT_FOLDER=$CAPIF_BASE_DIR/results -ROBOT_DOCKER_FILE_FOLDER=$CAPIF_BASE_DIR/tools/robot - # nginx Hostname and http port (80 by default) to reach for tests CAPIF_REGISTER=$REGISTER_HOSTNAME CAPIF_REGISTER_PORT=443 @@ -144,7 +136,7 @@ cd $CAPIF_BASE_DIR mkdir -p $RESULT_FOLDER -docker run -ti --rm --network="host" \ +docker run $DOCKER_ROBOT_TTY_OPTIONS --rm --network="host" \ -v $TEST_FOLDER:/opt/robot-tests/tests \ -v $RESULT_FOLDER:/opt/robot-tests/results ${DOCKER_ROBOT_IMAGE}:${DOCKER_ROBOT_IMAGE_VERSION} \ --variable CAPIF_HOSTNAME:$CAPIF_HOSTNAME \ diff --git a/helm/scripts/populate_create_remote_dummy_users.sh b/helm/scripts/populate_create_remote_dummy_users.sh index 2c7dbfbe55de9ec5eddcfdac4585cf6a2b5cd3ff..12bb900d30ba4116c06b8e28210fde053836ebc8 100755 --- a/helm/scripts/populate_create_remote_dummy_users.sh +++ b/helm/scripts/populate_create_remote_dummy_users.sh @@ -54,14 +54,6 @@ while getopts ":p:i:h" opt; do esac done -# Other Stuff -DOCKER_ROBOT_IMAGE=labs.etsi.org:5050/ocf/capif/robot-tests-image -DOCKER_ROBOT_IMAGE_VERSION=1.0 - -TEST_FOLDER=$CAPIF_BASE_DIR/tests -RESULT_FOLDER=$CAPIF_BASE_DIR/results -ROBOT_DOCKER_FILE_FOLDER=$CAPIF_BASE_DIR/tools/robot - # nginx Hostname and http port (80 by default) to reach for tests CAPIF_REGISTER=$REGISTER_HOSTNAME CAPIF_REGISTER_PORT=443 @@ -125,7 +117,7 @@ cd $CAPIF_BASE_DIR mkdir -p $RESULT_FOLDER -docker run -ti --rm --network="host" \ +docker run $DOCKER_ROBOT_TTY_OPTIONS --rm --network="host" \ -v $TEST_FOLDER:/opt/robot-tests/tests \ -v $RESULT_FOLDER:/opt/robot-tests/results ${DOCKER_ROBOT_IMAGE}:${DOCKER_ROBOT_IMAGE_VERSION} \ --variable CAPIF_HOSTNAME:$CAPIF_HOSTNAME \ diff --git a/helm/scripts/populate_remove_remote_dummy_users.sh b/helm/scripts/populate_remove_remote_dummy_users.sh index 8c55005f844f12200f7dcb2da9dbffa1f65af458..3b1f68a74ec7e139dcff8191a21dd8a86440ce79 100755 --- a/helm/scripts/populate_remove_remote_dummy_users.sh +++ b/helm/scripts/populate_remove_remote_dummy_users.sh @@ -44,14 +44,6 @@ while getopts ":h" opt; do esac done -# Other Stuff -DOCKER_ROBOT_IMAGE=labs.etsi.org:5050/ocf/capif/robot-tests-image -DOCKER_ROBOT_IMAGE_VERSION=1.0 - -TEST_FOLDER=$CAPIF_BASE_DIR/tests -RESULT_FOLDER=$CAPIF_BASE_DIR/results -ROBOT_DOCKER_FILE_FOLDER=$CAPIF_BASE_DIR/tools/robot - # nginx Hostname and http port (80 by default) to reach for tests CAPIF_REGISTER=$REGISTER_HOSTNAME CAPIF_REGISTER_PORT=443 @@ -115,7 +107,7 @@ cd $CAPIF_BASE_DIR mkdir -p $RESULT_FOLDER -docker run -ti --rm --network="host" \ +docker run $DOCKER_ROBOT_TTY_OPTIONS --rm --network="host" \ -v $TEST_FOLDER:/opt/robot-tests/tests \ -v $RESULT_FOLDER:/opt/robot-tests/results ${DOCKER_ROBOT_IMAGE}:${DOCKER_ROBOT_IMAGE_VERSION} \ --variable CAPIF_HOSTNAME:$CAPIF_HOSTNAME \ diff --git a/helm/scripts/remove_remote_users.sh b/helm/scripts/remove_remote_users.sh index ad9b89f6db4a9e966f24f74a7ec6fcd1ce2270f4..0ae573ebe796cc827a0098c8489b5fa9a47ef74f 100755 --- a/helm/scripts/remove_remote_users.sh +++ b/helm/scripts/remove_remote_users.sh @@ -56,14 +56,6 @@ then exit -1 fi -# Other Stuff -DOCKER_ROBOT_IMAGE=labs.etsi.org:5050/ocf/capif/robot-tests-image -DOCKER_ROBOT_IMAGE_VERSION=1.0 - -TEST_FOLDER=$CAPIF_BASE_DIR/tests -RESULT_FOLDER=$CAPIF_BASE_DIR/results -ROBOT_DOCKER_FILE_FOLDER=$CAPIF_BASE_DIR/tools/robot - # nginx Hostname and http port (80 by default) to reach for tests CAPIF_REGISTER=$REGISTER_HOSTNAME CAPIF_REGISTER_PORT=443 @@ -127,7 +119,7 @@ cd $CAPIF_BASE_DIR mkdir -p $RESULT_FOLDER -docker run -ti --rm --network="host" \ +docker run $DOCKER_ROBOT_TTY_OPTIONS --rm --network="host" \ -v $TEST_FOLDER:/opt/robot-tests/tests \ -v $RESULT_FOLDER:/opt/robot-tests/results ${DOCKER_ROBOT_IMAGE}:${DOCKER_ROBOT_IMAGE_VERSION} \ --variable CAPIF_HOSTNAME:$CAPIF_HOSTNAME \ diff --git a/helm/scripts/remove_remote_users_by_prefix.sh b/helm/scripts/remove_remote_users_by_prefix.sh index ccc2ded6d0c7a69ca32878a9f08f025fa79a100c..e4289bb12adb7cdbd29ce45740b1c28fd24861b2 100755 --- a/helm/scripts/remove_remote_users_by_prefix.sh +++ b/helm/scripts/remove_remote_users_by_prefix.sh @@ -56,14 +56,6 @@ then exit -1 fi -# Other Stuff -DOCKER_ROBOT_IMAGE=labs.etsi.org:5050/ocf/capif/robot-tests-image -DOCKER_ROBOT_IMAGE_VERSION=1.0 - -TEST_FOLDER=$CAPIF_BASE_DIR/tests -RESULT_FOLDER=$CAPIF_BASE_DIR/results -ROBOT_DOCKER_FILE_FOLDER=$CAPIF_BASE_DIR/tools/robot - # nginx Hostname and http port (80 by default) to reach for tests CAPIF_REGISTER=$REGISTER_HOSTNAME CAPIF_REGISTER_PORT=443 @@ -127,7 +119,7 @@ cd $CAPIF_BASE_DIR mkdir -p $RESULT_FOLDER -docker run -ti --rm --network="host" \ +docker run $DOCKER_ROBOT_TTY_OPTIONS --rm --network="host" \ -v $TEST_FOLDER:/opt/robot-tests/tests \ -v $RESULT_FOLDER:/opt/robot-tests/results ${DOCKER_ROBOT_IMAGE}:${DOCKER_ROBOT_IMAGE_VERSION} \ --variable CAPIF_HOSTNAME:$CAPIF_HOSTNAME \ diff --git a/helm/scripts/run_remote_capif_tests.sh b/helm/scripts/run_remote_capif_tests.sh index e2b03a1c0b08d055a7790d5b9f76b40c0cfd4371..86ec42533cb0b0aae52e7f1f77d32d4fb3f579be 100755 --- a/helm/scripts/run_remote_capif_tests.sh +++ b/helm/scripts/run_remote_capif_tests.sh @@ -10,13 +10,6 @@ fi # Load variables for the selected environment source "$(dirname "$0")/variables.sh" "$ENVIRONMENT" -DOCKER_ROBOT_IMAGE=labs.etsi.org:5050/ocf/capif/robot-tests-image -DOCKER_ROBOT_IMAGE_VERSION=1.0 - -TEST_FOLDER=$CAPIF_BASE_DIR/tests -RESULT_FOLDER=$CAPIF_BASE_DIR/results -ROBOT_DOCKER_FILE_FOLDER=$CAPIF_BASE_DIR/tools/robot - # nginx Hostname and http port (80 by default) to reach for tests CAPIF_REGISTER=$REGISTER_HOSTNAME CAPIF_REGISTER_PORT=443 @@ -82,7 +75,7 @@ fi mkdir -p $RESULT_FOLDER -docker run -ti --rm --network="host" \ +docker run $DOCKER_ROBOT_TTY_OPTIONS --rm --network="host" \ -v $TEST_FOLDER:/opt/robot-tests/tests \ -v $RESULT_FOLDER:/opt/robot-tests/results ${DOCKER_ROBOT_IMAGE}:${DOCKER_ROBOT_IMAGE_VERSION} \ --variable CAPIF_HOSTNAME:$CAPIF_HOSTNAME \ diff --git a/helm/scripts/variables.sh b/helm/scripts/variables.sh index 28c487a0bc7fcf248f8fd2753fd4ed169e970b04..b781d108a71c657d39eedb7fcae176a5882b3b43 100755 --- a/helm/scripts/variables.sh +++ b/helm/scripts/variables.sh @@ -151,6 +151,16 @@ export CAPIF_RUN_AS_USER_CONFIG="" ## SED command, in MacOS sed is different and need gnu-sed (gsed) export SED_CMD=sed +# Robot Framework variables +## Image and version to be used in robot tests +export DOCKER_ROBOT_IMAGE=labs.etsi.org:5050/ocf/capif/robot-tests-image +export DOCKER_ROBOT_IMAGE_VERSION=2.0 +export DOCKER_ROBOT_TTY_OPTIONS="-ti" +## Folders to be used in robot tests +export TEST_FOLDER=$CAPIF_BASE_DIR/tests +export RESULT_FOLDER=$CAPIF_BASE_DIR/results +export ROBOT_DOCKER_FILE_FOLDER=$CAPIF_BASE_DIR/tools/robot + # Load environment variables from file ## Directory for environment variables ENV_DIR="$SCRIPTS_DIR/envs" diff --git a/services/variables.sh b/services/variables.sh index cb6dd02c0a1937531b30d3705f06545c7ec6a064..320e05bf00c2a3982fed72dea255a8326609e703 100755 --- a/services/variables.sh +++ b/services/variables.sh @@ -86,7 +86,7 @@ export MOCK_SERVER_EXTERNAL_PORT=9100 # Robot tests variables export DOCKER_ROBOT_IMAGE=labs.etsi.org:5050/ocf/capif/robot-tests-image -export DOCKER_ROBOT_IMAGE_VERSION=1.0 +export DOCKER_ROBOT_IMAGE_VERSION=2.0 export DOCKER_ROBOT_TTY_OPTIONS="-ti" # Load environment variables from file diff --git a/tools/base_images_scripts/create_and_push_robot_image.sh b/tools/base_images_scripts/create_and_push_robot_image.sh index b2c3159810b052f8c935e7967bec21fc968141a8..245ce13a139190b24af2736e2da83df1640c90f6 100755 --- a/tools/base_images_scripts/create_and_push_robot_image.sh +++ b/tools/base_images_scripts/create_and_push_robot_image.sh @@ -2,7 +2,7 @@ source $(dirname "$(readlink -f "$0")")/common.sh DOCKER_ROBOT_IMAGE=labs.etsi.org:5050/ocf/capif/robot-tests-image -DOCKER_ROBOT_IMAGE_VERSION=1.0 +DOCKER_ROBOT_IMAGE_VERSION=2.0 TEST_FOLDER=$CAPIF_BASE_DIR/tests RESULT_FOLDER=$CAPIF_BASE_DIR/results diff --git a/tools/base_images_scripts/push_base_images_ocf.sh b/tools/base_images_scripts/push_base_images_ocf.sh index 4bbc12c1cc9d133e50ca80640ddac064f85a0c91..5a6f2131c4153b0ce877c1d682b6ae69636550f4 100755 --- a/tools/base_images_scripts/push_base_images_ocf.sh +++ b/tools/base_images_scripts/push_base_images_ocf.sh @@ -7,7 +7,7 @@ PLATFORMS=("linux/arm64" BASIC_IMAGES=("python:3-slim-bullseye" "nginx:1.27.1" "vault:1.13.2" -"ubuntu:20.04" +"ubuntu:22.04" "redis:7.4.2-alpine" "mongo-express:1.0.0-alpha.4" "mongo:6.0.2" diff --git a/tools/robot/Dockerfile b/tools/robot/Dockerfile index a7e18f87e260e8ad840cc867c2352c1dacfc4582..d7ebc2453bdfb95b55a2bf622a82fff9c14f34a7 100644 --- a/tools/robot/Dockerfile +++ b/tools/robot/Dockerfile @@ -1,4 +1,5 @@ -FROM labs.etsi.org:5050/ocf/capif/ubuntu:20.04 +FROM labs.etsi.org:5050/ocf/capif/ubuntu:22.04 + LABEL maintainer="Jorge Moratinos Salcines " LABEL version="2.0" LABEL description="Docker to run Robot Framework" @@ -8,16 +9,14 @@ ENV ROBOT_COMMON_DIRECTORY=$ROBOT_DIRECTORY/common ENV ROBOT_TESTS_DIRECTORY=$ROBOT_DIRECTORY/tests ENV ROBOT_RESULTS_DIRECTORY=$ROBOT_DIRECTORY/results - # Create directories structure -RUN mkdir $ROBOT_DIRECTORY -RUN mkdir $ROBOT_COMMON_DIRECTORY -RUN mkdir $ROBOT_TESTS_DIRECTORY -RUN mkdir $ROBOT_RESULTS_DIRECTORY - +RUN mkdir -p \ + $ROBOT_DIRECTORY \ + $ROBOT_COMMON_DIRECTORY \ + $ROBOT_TESTS_DIRECTORY \ + $ROBOT_RESULTS_DIRECTORY # Create Volumes for docker -# VOLUME $ROBOT_DIRECTORY VOLUME $ROBOT_COMMON_DIRECTORY VOLUME $ROBOT_TESTS_DIRECTORY VOLUME $ROBOT_RESULTS_DIRECTORY @@ -25,78 +24,72 @@ VOLUME $ROBOT_RESULTS_DIRECTORY WORKDIR $ROBOT_DIRECTORY ENV DEBIAN_FRONTEND=noninteractive -RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections - -# Install dependencies -RUN apt-get update -RUN apt-get upgrade -y -RUN apt-get install -y --no-install-recommends \ - software-properties-common \ - build-essential \ - bash \ - bash-completion \ - libxml2 \ - libxslt-dev \ - curl \ - yarn \ - less \ - dpkg \ - wget \ - python3 \ - python3-dev \ - libxslt-dev \ - libffi-dev \ - python3-pip \ - python3-venv \ - python2.7-dev \ - libssl-dev \ - libldap2-dev libsasl2-dev ldap-utils slapd tox lcov valgrind \ - tshark \ - nodejs \ - npm -RUN add-apt-repository -y ppa:deadsnakes/ppa -RUN apt-get update -RUN apt-get install -y --fix-missing python3.10 python3.10-venv python3.10-dev - -RUN mkdir /opt/venv -RUN python3.10 -m venv /opt/venv +RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections && \ + apt-get update && \ + apt-get upgrade -y && \ + apt-get install -y --no-install-recommends \ + software-properties-common \ + build-essential \ + bash \ + bash-completion \ + libxml2 \ + libxslt-dev \ + curl \ + yarn \ + less \ + dpkg \ + wget \ + python3 \ + python3-dev \ + python3-pip \ + python3-venv \ + libffi-dev \ + libssl-dev \ + libldap2-dev \ + libsasl2-dev \ + ldap-utils \ + slapd \ + tox \ + lcov \ + valgrind \ + tshark \ + nodejs \ + npm + +RUN mkdir -p /opt/venv && \ + python3 -m venv /opt/venv ADD basicRequirements.txt /root/ - ADD basicRobotInstall.sh /root/ -RUN chmod a+x /root/basicRobotInstall.sh \ - && /root/basicRobotInstall.sh /root/basicRequirements.txt -RUN sed -i 's/\/bin\/ash/\/bin\/bash/g' /etc/passwd + +RUN chmod a+x /root/basicRobotInstall.sh && \ + /root/basicRobotInstall.sh /root/basicRequirements.txt && \ + sed -i 's/\/bin\/ash/\/bin\/bash/g' /etc/passwd ADD entrypoint.sh /root/ ADD linter_entrypoint.sh /root/ ADD featdoc_entrypoint.sh /root/ ADD libdoc_entrypoint.sh /root/ - -RUN sed -i 's|ROBOT_DIRECTORY|'$ROBOT_DIRECTORY'|g' /root/entrypoint.sh -RUN sed -i 's|ROBOT_TESTS_DIRECTORY|'$ROBOT_TESTS_DIRECTORY'|g' /root/entrypoint.sh -RUN sed -i 's|ROBOT_COMMON_DIRECTORY|'$ROBOT_COMMON_DIRECTORY'|g' /root/entrypoint.sh -RUN sed -i 's|ROBOT_RESULTS_DIRECTORY|'$ROBOT_RESULTS_DIRECTORY'|g' /root/entrypoint.sh - -RUN sed -i 's|ROBOT_DIRECTORY|'$ROBOT_DIRECTORY'|g' /root/linter_entrypoint.sh -RUN sed -i 's|ROBOT_TESTS_DIRECTORY|'$ROBOT_TESTS_DIRECTORY'|g' /root/linter_entrypoint.sh -RUN sed -i 's|ROBOT_COMMON_DIRECTORY|'$ROBOT_COMMON_DIRECTORY'|g' /root/linter_entrypoint.sh - - -RUN sed -i 's|ROBOT_DIRECTORY|'$ROBOT_DIRECTORY'|g' /root/featdoc_entrypoint.sh -RUN sed -i 's|ROBOT_TESTS_DIRECTORY|'$ROBOT_TESTS_DIRECTORY'|g' /root/featdoc_entrypoint.sh -RUN sed -i 's|ROBOT_COMMON_DIRECTORY|'$ROBOT_COMMON_DIRECTORY'|g' /root/featdoc_entrypoint.sh - -RUN sed -i 's|ROBOT_DIRECTORY|'$ROBOT_DIRECTORY'|g' /root/libdoc_entrypoint.sh -RUN sed -i 's|ROBOT_TESTS_DIRECTORY|'$ROBOT_TESTS_DIRECTORY'|g' /root/libdoc_entrypoint.sh -RUN sed -i 's|ROBOT_COMMON_DIRECTORY|'$ROBOT_COMMON_DIRECTORY'|g' /root/libdoc_entrypoint.sh - - -RUN chmod a+x /root/entrypoint.sh -RUN chmod a+x /root/linter_entrypoint.sh -RUN chmod a+x /root/featdoc_entrypoint.sh -RUN chmod a+x /root/libdoc_entrypoint.sh - -ENTRYPOINT [ "/root/entrypoint.sh" ] +RUN sed -i 's|ROBOT_DIRECTORY|'$ROBOT_DIRECTORY'|g' /root/entrypoint.sh && \ + sed -i 's|ROBOT_TESTS_DIRECTORY|'$ROBOT_TESTS_DIRECTORY'|g' /root/entrypoint.sh && \ + sed -i 's|ROBOT_COMMON_DIRECTORY|'$ROBOT_COMMON_DIRECTORY'|g' /root/entrypoint.sh && \ + sed -i 's|ROBOT_RESULTS_DIRECTORY|'$ROBOT_RESULTS_DIRECTORY'|g' /root/entrypoint.sh && \ + sed -i 's|ROBOT_DIRECTORY|'$ROBOT_DIRECTORY'|g' /root/linter_entrypoint.sh && \ + sed -i 's|ROBOT_TESTS_DIRECTORY|'$ROBOT_TESTS_DIRECTORY'|g' /root/linter_entrypoint.sh && \ + sed -i 's|ROBOT_COMMON_DIRECTORY|'$ROBOT_COMMON_DIRECTORY'|g' /root/linter_entrypoint.sh && \ + sed -i 's|ROBOT_DIRECTORY|'$ROBOT_DIRECTORY'|g' /root/featdoc_entrypoint.sh && \ + sed -i 's|ROBOT_TESTS_DIRECTORY|'$ROBOT_TESTS_DIRECTORY'|g' /root/featdoc_entrypoint.sh && \ + sed -i 's|ROBOT_COMMON_DIRECTORY|'$ROBOT_COMMON_DIRECTORY'|g' /root/featdoc_entrypoint.sh && \ + sed -i 's|ROBOT_DIRECTORY|'$ROBOT_DIRECTORY'|g' /root/libdoc_entrypoint.sh && \ + sed -i 's|ROBOT_TESTS_DIRECTORY|'$ROBOT_TESTS_DIRECTORY'|g' /root/libdoc_entrypoint.sh && \ + sed -i 's|ROBOT_COMMON_DIRECTORY|'$ROBOT_COMMON_DIRECTORY'|g' /root/libdoc_entrypoint.sh + +RUN chmod a+x \ + /root/entrypoint.sh \ + /root/linter_entrypoint.sh \ + /root/featdoc_entrypoint.sh \ + /root/libdoc_entrypoint.sh + +ENTRYPOINT ["/root/entrypoint.sh"] \ No newline at end of file diff --git a/tools/robot/basicRequirements.txt b/tools/robot/basicRequirements.txt index 1612c1a9b1b4256e8c13235a12f8846603e97d24..33ce1e7b7cecfa2f379749dfab94ac2e4789940d 100644 --- a/tools/robot/basicRequirements.txt +++ b/tools/robot/basicRequirements.txt @@ -1,103 +1,117 @@ # Requirements needed when generating releases. See BUILD.rst for details. -appdirs == 1.4.4 -argh == 0.26.2 -arrow == 1.2.3 -async-generator == 1.10 -async-timeout == 4.0.2 -attrs == 22.1.0 -bcrypt == 4.0.1 -beautifulsoup4 == 4.11.1 -binaryornot == 0.4.4 -bson == 0.5.10 -certifi == 2021.10.8 -cffi == 1.15.1 -chardet == 5.0.0 -charset-normalizer == 2.0.12 -click == 8.1.7 -configparser == 5.3.0 -cookiecutter == 2.1.1 -coverage == 4.5.4 -cryptography == 50.0.0 -Deprecated == 1.2.13 -distlib == 0.3.6 -dnspython == 2.2.1 -docutils == 0.19 -exceptiongroup == 1.0.0rc9 -filelock == 3.8.0 -flake8 == 3.9.2 -flask == 3.0.3 -h11 == 0.14.0 -idna == 3.4 -iniconfig == 1.1.1 -invoke == 1.6.0 -ipaddress == 1.0.23 -Jinja2 == 3.1.2 -jinja2-time == 0.2.0 -lxml == 4.9.1 -MarkupSafe == 2.1.1 -mccabe == 0.6.1 -numpy == 1.23.4 -outcome == 1.2.0 -packaging == 21.3 -pandas == 1.5.1 -paramiko == 2.11.0 -pathtools == 0.1.2 -platformdirs == 2.5.2 -pluggy == 0.13.1 -psutil == 5.9.3 -py == 1.11.0 -pyasn1 == 0.4.8 -pyasn1-modules == 0.2.8 -pycodestyle == 2.7.0 -pycparser == 2.21 -pyflakes == 2.3.1 -PyGithub == 1.56 -PyJWT == 2.6.0 -pymongo == 4.7.3 -PyNaCl == 1.5.0 -pyopenssl == 26.4.0 -pyparsing == 3.0.9 -PySocks == 1.7.1 -pytest == 6.2.4 -python-dateutil == 2.8.2 -python-ldap == 3.4.3 -python-slugify == 6.1.2 -pythonping == 1.1.3 -pytz == 2022.5 -PyYAML == 6.0 -redis == 4.5.4 -rellu == 0.7 -requests == 2.28.1 -rfc3987 == 1.3.8 -robotframework == 7.0 -robotframework-archivelibrary == 0.4.2 -robotframework-httpctrl == 0.3.1 -robotframework-lint == 1.1 -robotframework-mongodb-library == 3.2 -robotframework-pythonlibcore == 4.4.1 -robotframework-requests == 0.9.3 -robotframework-seleniumlibrary == 6.0.0 -robotframework-sshlibrary == 3.8.0 -robotremoteserver == 1.1 -scp == 0.14.4 -selenium == 4.5.0 -six == 1.16.0 -sniffio == 1.3.0 -sortedcontainers == 2.4.0 -soupsieve == 2.3.2.post1 -sshconf == 0.2.5 -text-unidecode == 1.3 -toml == 0.10.2 -tomli == 2.0.1 -tox == 3.26.0 -tqdm == 4.64.1 -trio == 0.22.0 -trio-websocket == 0.9.2 -typing-extensions == 4.11.0 -urllib3 == 1.26.12 -virtualenv == 20.16.5 -watchdog == 4.0.0 -webdrivermanager == 0.10.0 -wrapt == 1.15.0 -wsproto == 1.2.0 -xlrd == 2.0.1 +appdirs==1.4.4 +argh==0.31.3 +arrow==1.4.0 +async-generator==1.10 +async-timeout==5.0.1 +attrs==26.1.0 +bcrypt==5.0.0 +beautifulsoup4==4.15.0 +binaryornot==0.6.0 +blinker==1.9.0 +bson==0.5.10 +cachetools==7.1.7 +certifi==2026.7.22 +cffi==2.1.1 +chardet==7.6.0 +charset-normalizer==3.5.1 +click==8.4.2 +colorama==0.4.6 +configparser==7.2.0 +cookiecutter==2.7.1 +coverage==7.15.4 +cryptography==50.0.1 +deprecated==1.3.1 +distlib==0.4.3 +dnspython==2.8.0 +docutils==0.23 +exceptiongroup==1.3.1 +filelock==3.32.4 +flake8==7.3.0 +flask==3.1.3 +h11==0.16.0 +idna==3.19 +iniconfig==2.3.0 +invoke==3.0.3 +ipaddress==1.0.23 +itsdangerous==2.2.0 +jinja2==3.1.6 +jinja2-time==0.2.0 +lxml==6.1.2 +markdown-it-py==4.2.0 +markupsafe==3.0.3 +mccabe==0.7.0 +mdurl==0.1.2 +numpy==2.2.6 +outcome==1.3.0.post0 +packaging==26.3 +pandas==2.3.3 +paramiko==5.0.0 +pathtools==0.1.2 +platformdirs==4.11.4 +pluggy==1.6.0 +psutil==7.2.2 +py==1.11.0 +pyasn1==0.6.4 +pyasn1-modules==0.4.2 +pycodestyle==2.14.0 +pycparser==3.0 +pyflakes==3.4.0 +pygithub==2.10.0 +pygments==2.21.0 +pyjwt[crypto]==2.13.0 +pymongo==4.17.0 +pynacl==1.6.2 +pyopenssl==26.4.0 +pyparsing==3.3.2 +pyproject-api==1.11.0 +pysocks==1.7.1 +pytest==9.1.1 +python-dateutil==2.9.0.post0 +python-discovery==1.5.3 +python-ldap==3.4.7 +python-slugify==8.0.4 +pythonping==1.1.4 +pytz==2026.3.post1 +pyyaml==6.0.3 +redis==8.1.0 +rellu==2.0.2 +requests==2.34.2 +rfc3987==1.3.8 +rich==15.0.0 +robotframework==7.4.2 +robotframework-archivelibrary==0.4.3 +robotframework-httpctrl==0.3.3 +robotframework-lint==1.1 +robotframework-mongodb-library==3.2 +robotframework-pythonlibcore==4.6.0 +robotframework-requests==0.9.7 +robotframework-seleniumlibrary==6.9.0 +robotframework-sshlibrary==3.8.0 +robotremoteserver==1.1.1 +scp==0.16.1 +selenium==4.47.0 +six==1.17.0 +sniffio==1.3.1 +sortedcontainers==2.4.0 +soupsieve==2.9.2 +sshconf==0.2.7 +text-unidecode==1.3 +toml==0.10.2 +tomli==2.4.1 +tomli-w==1.2.0 +tox==4.60.1 +tqdm==4.70.0 +trio==0.34.0 +trio-websocket==0.12.2 +typing-extensions==4.16.0 +tzdata==2026.3 +urllib3[socks]==2.7.0 +virtualenv==21.7.5 +watchdog==6.0.0 +webdrivermanager==0.10.0 +websocket-client==1.9.0 +werkzeug==3.1.8 +wrapt==2.3.0 +wsproto==1.3.2 +xlrd==2.0.2