Skip to content

Commit

Permalink
Run CWL conformance tests on Kubernetes. (DataBiosphere#3323)
Browse files Browse the repository at this point in the history
* Attempt to include and run CWL K8 tests.

* Dollar dollar.

* Minimize CWL build extras.

* Correct batch system naming.

* Only run CWL tests temporarily.

* Run the kubernetes CWL tests.

* Emit verbose CWL test output so we can see what's going on

* Remember that we can't actually run anything on Kubernetes without an appliance

* Uncomment all the other tests so we can merge properly

* Delete all the tests we aren't currently interested in

* Add a forgotten comma

* Don't try and reconstruct exceptions

* Accept the ConfigException that modern Kubernetes throws when there's no config

* Make CWL Kubernetes tests invent their own job stores, and not run in parallel with a fixed job store name

* Revert "Delete all the tests we aren't currently interested in"

This reverts commit e02fd69.

* Turn off other tests in a more mergeable way

* Drop empty only

* Improve spelling

* Only run passing CWL1.0 tests on Kubernetes, and add 1.1 and 1.2

* Fix test syntax

* Make Kubernetes CWL setup more like non-Kubernetes, and turn on more versions

* Let all the CWL tests run for hours so we can see what actually fails

* Remove extra _with from test name

* Add back the _with and route caching tests through non-caching functions

* Carve out for failing-on-Kubernetes 1.1 tests

* Invent situation-appropriate job store names for CWL workflows

* Run CWL tests in parallel and make the runner invent job stores

* Rewrite Docker containers by wrapping Singularity

Fixes DataBiosphere#3455.

* Insist on wrapper and trace the env var

* Validify YAML according to Gitlab's type constraints

* Use correct path to Singularity wrapper

* Upgrade Prometheus base to fix DataBiosphere#3457

* Add carveouts for Kubernetes CWL 1.2 tests

* Carve out new failing tests

* Try to carve out tests that failed on some other CWL versions

* Drop tests 28,38,and 83 where they fail

* Properly skip 136 and 137 for CWL 1.1

* Skip more tests observed to fail

* Upgrade pip to try and fix DataBiosphere#3459

* Mark CWL tests on Kupernetes as expected to fail

Around 20-40 of the CWL tests are intermittently failing on Kubernetes, and
it's not worrth re-running the tests over and over to get all their numbers.

Common failure modes include missing ordering constraints, and missing local
file paths.

This lets all the tests run (so we can see which are still broken), but expects
the runs to fail. When we actually fix a test, we can add it to another test
cakll that isn't xfail and runs it alone with selected_tests. Or, we can try
and fix them all in a row and hope there's no backsliding, and then remove
xfail.

* Turn the non-CWL tests back on

* Only pass the Singularity mirror if set

* Actually insert the name in the missing env var error

* Stop dumping environments

* Go back to running CWL conformance tests under heavy CPU contention

* Log some of what we are doing when fuzzing the filestore

* Only set a default workDir with a non-default tmpdir_prefix

* Drop some trailing whitespace

* Pass Singularity mirror through to Cactus integration test

* Fix Kubernetes indent causing credentials to never be refreshed

* Run Singularity in wrapper's process

* Note that we don't mirror all the Singularity calls we should

* Also install wheel in the virtualenvs

* Skip over things that aren't found when shutting down

* Revert "Skip over things that aren't found when shutting down"

This reverts commit 680c632.

* Stop deleting all ASGs with tags

* Address Lon's review comments

* Make logging more verbose so we can fix the missing strings

* Log more

* Don't treat no provisioner as unrecognized

* Skip CWL 1.0 and 1.1 tess because 1.2 covers them

Co-authored-by: Adam Novak <[email protected]>
  • Loading branch information
DailyDreaming and adamnovak authored Mar 1, 2021
1 parent 1c7b6f2 commit 52cb9ca
Show file tree
Hide file tree
Showing 14 changed files with 409 additions and 114 deletions.
81 changes: 65 additions & 16 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ before_script:
- |
if [[ ! -z "${DOCKER_HUB_MIRROR}" ]] ; then
echo "{\"registry-mirrors\": [\"${DOCKER_HUB_MIRROR}\"], \"insecure-registries\": [\"${DOCKER_HUB_MIRROR##*://}\"]}" | sudo tee /etc/docker/daemon.json
export SINGULARITY_DOCKER_HUB_MIRROR="${DOCKER_HUB_MIRROR}"
fi
- startdocker || true
- docker info
Expand Down Expand Up @@ -53,15 +54,15 @@ py36_main:
stage: basic_tests
script:
- pwd
- virtualenv -p python3.6 venv && . venv/bin/activate && make prepare && make develop extras=[all] && pip install htcondor
- virtualenv -p python3.6 venv && . venv/bin/activate && pip install -U pip wheel && make prepare && make develop extras=[all] && pip install htcondor
- make test tests=src/toil/test/src
- make test tests=src/toil/test/utils

py36_appliance_build:
stage: basic_tests
script:
- pwd
- virtualenv -p python3.6 venv && . venv/bin/activate && make prepare && pip install pycparser && make develop extras=[all] && pip install htcondor awscli==1.16.272
- virtualenv -p python3.6 venv && . venv/bin/activate && pip install -U pip wheel && make prepare && pip install pycparser && make develop extras=[all] && pip install htcondor awscli==1.16.272
# This reads GITLAB_SECRET_FILE_QUAY_CREDENTIALS
- python setup_gitlab_docker.py
- make push_docker
Expand All @@ -72,42 +73,89 @@ py37_batch_systems:
stage: main_tests
script:
- pwd
- virtualenv -p python3.7 venv && . venv/bin/activate && make prepare && make develop extras=[all] && pip install htcondor awscli==1.16.272
- virtualenv -p python3.7 venv && . venv/bin/activate && pip install -U pip wheel && make prepare && make develop extras=[all] && pip install htcondor awscli==1.16.272
- make test tests=src/toil/test/batchSystems/batchSystemTest.py
- make test tests=src/toil/test/mesos/MesosDataStructuresTest.py

py37_cwl_v1.0:
stage: main_tests
only: []
script:
- pwd
- virtualenv -p python3.7 venv && . venv/bin/activate && make prepare && make develop extras=[cwl,aws]
- virtualenv -p python3.7 venv && . venv/bin/activate && pip install -U pip wheel && make prepare && make develop extras=[cwl,aws]
- mypy --ignore-missing-imports --no-strict-optional $(pwd)/src/toil/cwl/cwltoil.py # make this a separate linting stage
- python setup_gitlab_docker.py # login to increase the docker.io rate limit
- make test tests=src/toil/test/cwl/cwlTest.py::CWLv10Test
- make test tests=src/toil/test/docs/scriptsTest.py::ToilDocumentationTest::testCwlexample

py37_cwl_v1.1:
stage: main_tests
only: []
script:
- pwd
- virtualenv -p python3.7 venv && . venv/bin/activate && make prepare && make develop extras=[cwl,aws]
- virtualenv -p python3.7 venv && . venv/bin/activate && pip install -U pip wheel && make prepare && make develop extras=[cwl,aws]
- python setup_gitlab_docker.py # login to increase the docker.io rate limit
- make test tests=src/toil/test/cwl/cwlTest.py::CWLv11Test

py37_cwl_v1.2:
stage: main_tests
script:
- pwd
- virtualenv -p python3.7 venv && . venv/bin/activate && make prepare && make develop extras=[cwl,aws]
- virtualenv -p python3.7 venv && . venv/bin/activate && pip install -U pip wheel && make prepare && make develop extras=[cwl,aws]
- python setup_gitlab_docker.py # login to increase the docker.io rate limit
- make test tests=src/toil/test/cwl/cwlTest.py::CWLv12Test

py37_cwl_v1.0_kubernetes:
stage: main_tests
only: []
script:
- pwd
- virtualenv -p python3.7 venv && . venv/bin/activate && pip install -U pip wheel && make prepare && make develop extras=[cwl,aws,kubernetes]
- export TOIL_KUBERNETES_OWNER=toiltest
- export TOIL_AWS_SECRET_NAME=shared-s3-credentials
- export TOIL_KUBERNETES_HOST_PATH=/data/scratch
- export TOIL_WORKDIR=/var/lib/toil
- export SINGULARITY_CACHEDIR=/var/lib/toil/singularity-cache
- echo Singularity mirror is ${SINGULARITY_DOCKER_HUB_MIRROR}
- mkdir -p ${TOIL_WORKDIR}
- make test tests=src/toil/test/cwl/cwlTest.py::CWLv10Test::test_kubernetes_cwl_conformance
- make test tests=src/toil/test/cwl/cwlTest.py::CWLv10Test::test_kubernetes_cwl_conformance_with_caching

py37_cwl_v1.1_kubernetes:
stage: main_tests
only: []
script:
- pwd
- virtualenv -p python3.7 venv && . venv/bin/activate && pip install -U pip wheel && make prepare && make develop extras=[cwl,aws,kubernetes]
- export TOIL_KUBERNETES_OWNER=toiltest
- export TOIL_AWS_SECRET_NAME=shared-s3-credentials
- export TOIL_KUBERNETES_HOST_PATH=/data/scratch
- export TOIL_WORKDIR=/var/lib/toil
- export SINGULARITY_CACHEDIR=/var/lib/toil/singularity-cache
- mkdir -p ${TOIL_WORKDIR}
- make test tests=src/toil/test/cwl/cwlTest.py::CWLv11Test::test_kubernetes_cwl_conformance
- make test tests=src/toil/test/cwl/cwlTest.py::CWLv11Test::test_kubernetes_cwl_conformance_with_caching

py37_cwl_v1.2_kubernetes:
stage: main_tests
script:
- pwd
- virtualenv -p python3.7 venv && . venv/bin/activate && pip install -U pip wheel && make prepare && make develop extras=[cwl,aws,kubernetes]
- export TOIL_KUBERNETES_OWNER=toiltest
- export TOIL_AWS_SECRET_NAME=shared-s3-credentials
- export TOIL_KUBERNETES_HOST_PATH=/data/scratch
- export TOIL_WORKDIR=/var/lib/toil
- export SINGULARITY_CACHEDIR=/var/lib/toil/singularity-cache
- mkdir -p ${TOIL_WORKDIR}
- make test tests=src/toil/test/cwl/cwlTest.py::CWLv12Test::test_kubernetes_cwl_conformance
- make test tests=src/toil/test/cwl/cwlTest.py::CWLv12Test::test_kubernetes_cwl_conformance_with_caching

py37_wdl:
stage: main_tests
script:
- pwd
- apt update && apt install -y default-jre
- virtualenv -p python3.7 venv && . venv/bin/activate && make prepare && make develop extras=[all]
- virtualenv -p python3.7 venv && . venv/bin/activate && pip install -U pip wheel && make prepare && make develop extras=[all]
- which java &> /dev/null || { echo >&2 "Java is not installed. Install java to run these tests."; exit 1; }
- make test tests=src/toil/test/wdl/toilwdlTest.py # needs java (default-jre) to run "GATK.jar"
- make test tests=src/toil/test/wdl/builtinTest.py
Expand All @@ -116,7 +164,7 @@ py37_jobstore_and_provisioning:
stage: main_tests
script:
- pwd
- virtualenv -p python3.7 venv && . venv/bin/activate && make prepare && make develop extras=[all] && pip install htcondor
- virtualenv -p python3.7 venv && . venv/bin/activate && pip install -U pip wheel && make prepare && make develop extras=[all] && pip install htcondor
- make test tests=src/toil/test/jobStores/jobStoreTest.py
- make test tests=src/toil/test/sort/sortTest.py
- make test tests=src/toil/test/provisioners/aws/awsProvisionerTest.py
Expand All @@ -129,7 +177,7 @@ py37_main:
stage: basic_tests
script:
- pwd
- virtualenv -p python3.7 venv && . venv/bin/activate && make prepare && make develop extras=[all] && pip install htcondor
- virtualenv -p python3.7 venv && . venv/bin/activate && pip install -U pip wheel && make prepare && make develop extras=[all] && pip install htcondor
- make test tests=src/toil/test/src
- make test tests=src/toil/test/utils
# - make test tests=src/toil/test/docs/scriptsTest.py::ToilDocumentationTest::testDocker
Expand All @@ -138,7 +186,7 @@ py37_appliance_build:
stage: basic_tests
script:
- pwd
- virtualenv -p python3.7 venv && . venv/bin/activate && make prepare && pip install pycparser && make develop extras=[all] && pip install htcondor awscli==1.16.272
- virtualenv -p python3.7 venv && . venv/bin/activate && pip install -U pip wheel && make prepare && pip install pycparser && make develop extras=[all] && pip install htcondor awscli==1.16.272
# This reads GITLAB_SECRET_FILE_QUAY_CREDENTIALS
- python setup_gitlab_docker.py
- make push_docker
Expand All @@ -147,7 +195,7 @@ py37_integration:
stage: integration
script:
- pwd
- virtualenv -p python3.7 venv && . venv/bin/activate && make prepare && make develop extras=[all] && pip install htcondor awscli==1.16.272
- virtualenv -p python3.7 venv && . venv/bin/activate && pip install -U pip wheel && make prepare && make develop extras=[all] && pip install htcondor awscli==1.16.272
- export TOIL_TEST_INTEGRATIVE=True
- export TOIL_AWS_KEYNAME=id_rsa
- export TOIL_AWS_ZONE=us-west-2a
Expand All @@ -160,7 +208,7 @@ py37_provisioner_integration:
stage: integration
script:
- pwd
- virtualenv -p python3.7 venv && . venv/bin/activate && make prepare && make develop extras=[all] && pip install htcondor awscli==1.16.272
- virtualenv -p python3.7 venv && . venv/bin/activate && pip install -U pip wheel && make prepare && make develop extras=[all] && pip install htcondor awscli==1.16.272
- python setup_gitlab_ssh.py && chmod 400 /root/.ssh/id_rsa
- echo $'Host *\n AddressFamily inet' > /root/.ssh/config
- export LIBPROCESS_IP=127.0.0.1
Expand All @@ -178,7 +226,7 @@ py37_google_jobstore:
stage: integration
script:
- pwd
- virtualenv -p python3.7 venv && . venv/bin/activate && make prepare && make develop extras=[all] && pip install htcondor awscli==1.16.272
- virtualenv -p python3.7 venv && . venv/bin/activate && pip install -U pip wheel && make prepare && make develop extras=[all] && pip install htcondor awscli==1.16.272
- python setup_gitlab_ssh.py && chmod 400 /root/.ssh/id_rsa
- echo $'Host *\n AddressFamily inet' > /root/.ssh/config
- export LIBPROCESS_IP=127.0.0.1
Expand All @@ -193,7 +241,7 @@ py38_main:
stage: basic_tests
script:
- pwd
- virtualenv -p python3.8 venv && . venv/bin/activate && make prepare && make develop extras=[all] && pip install htcondor
- virtualenv -p python3.8 venv && . venv/bin/activate && pip install -U pip wheel && make prepare && make develop extras=[all] && pip install htcondor
- make test tests=src/toil/test/src
- make test tests=src/toil/test/utils
- make test tests=src/toil/test/lib/test_conversions.py
Expand All @@ -202,7 +250,7 @@ py38_appliance_build:
stage: basic_tests
script:
- pwd
- virtualenv -p python3.8 venv && . venv/bin/activate && make prepare && pip install pycparser && make develop extras=[all] && pip install htcondor awscli==1.16.272
- virtualenv -p python3.8 venv && . venv/bin/activate && pip install -U pip wheel && make prepare && pip install pycparser && make develop extras=[all] && pip install htcondor awscli==1.16.272
# This reads GITLAB_SECRET_FILE_QUAY_CREDENTIALS
- python setup_gitlab_docker.py
- make push_docker
Expand All @@ -214,6 +262,7 @@ py37_cactus_integration:
- set -e
- virtualenv --system-site-packages --python python3.7 venv
- . venv/bin/activate
- pip install -U pip wheel
- pip install .[aws,kubernetes]
- export TOIL_KUBERNETES_OWNER=toiltest
- export TOIL_AWS_SECRET_NAME=shared-s3-credentials
Expand All @@ -232,4 +281,4 @@ py37_cactus_integration:
- pip install --upgrade .
- pip install psutil --upgrade
- toil clean aws:us-west-2:${BUCKET_NAME}
- time cactus --batchSystem kubernetes --binariesMode singularity --clean always aws:us-west-2:${BUCKET_NAME} examples/evolverMammals.txt examples/evolverMammals.hal --root mr --defaultDisk "8G" --logDebug --disableCaching false
- time cactus --setEnv SINGULARITY_DOCKER_HUB_MIRROR --batchSystem kubernetes --binariesMode singularity --clean always aws:us-west-2:${BUCKET_NAME} examples/evolverMammals.txt examples/evolverMammals.hal --root mr --defaultDisk "8G" --logDebug --disableCaching false
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ language: python
python:
- "3.6"
install:
- pip install -U pip
- make prepare
- make develop extras=[aws,google,wdl] # adding extras to avoid import errors
script:
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ endef
docker: docker/Dockerfile
# Pre-pull everything
for i in $$(seq 1 11); do if [[ $$i == "11" ]] ; then exit 1 ; fi ; docker pull ubuntu:16.04 && break || sleep 60; done
for i in $$(seq 1 11); do if [[ $$i == "11" ]] ; then exit 1 ; fi ; docker pull prom/prometheus:v2.0.0 && break || sleep 60; done
for i in $$(seq 1 11); do if [[ $$i == "11" ]] ; then exit 1 ; fi ; docker pull prom/prometheus:v2.24.1 && break || sleep 60; done
for i in $$(seq 1 11); do if [[ $$i == "11" ]] ; then exit 1 ; fi ; docker pull grafana/grafana && break || sleep 60; done
for i in $$(seq 1 11); do if [[ $$i == "11" ]] ; then exit 1 ; fi ; docker pull sscaling/mtail && break || sleep 60; done

Expand Down
2 changes: 1 addition & 1 deletion dashboard/prometheus/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM prom/prometheus:v2.0.0
FROM prom/prometheus:v2.24.1

COPY ./prometheus.yml /etc/prometheus/prometheus.yml
COPY ./run.sh /opt/run.sh
Expand Down
13 changes: 8 additions & 5 deletions docker/Dockerfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ def heredoc(s):
mv go /usr/local/
# Build Singularity, but only keep the binaries and scrap the GOPATH to
# save space
# save space. Hide its binary so we can wrap it.
RUN mkdir -p $(go env GOPATH)/src/github.com/sylabs && \
cd $(go env GOPATH)/src/github.com/sylabs && \
git clone https://github.com/sylabs/singularity.git && \
Expand All @@ -109,22 +109,25 @@ def heredoc(s):
make -j4 && \
make install && \
cd && \
rm -Rf $(go env GOPATH)
rm -Rf $(go env GOPATH) \
&& mkdir -p /usr/local/libexec/toil && \
mv /usr/local/bin/singularity /usr/local/libexec/toil/singularity-real
RUN mkdir /root/.ssh && \
chmod 700 /root/.ssh
ADD waitForKey.sh /usr/bin/waitForKey.sh
ADD customDockerInit.sh /usr/bin/customDockerInit.sh
ADD singularity-wrapper.sh /usr/local/bin/singularity
RUN chmod 777 /usr/bin/waitForKey.sh && chmod 777 /usr/bin/customDockerInit.sh
RUN chmod 777 /usr/bin/waitForKey.sh && chmod 777 /usr/bin/customDockerInit.sh && chmod 777 /usr/local/bin/singularity
# fixes an incompatibility updating pip on Ubuntu 16 w/ python3.8
RUN sed -i "s/platform.linux_distribution()/('Ubuntu', '16.04', 'xenial')/g" /usr/lib/python3/dist-packages/pip/download.py
# The stock pip is too old and can't install from sdist with extras
RUN {pip} install --upgrade pip==20.0.2
RUN {pip} install --upgrade pip==21.0.1
# Default setuptools is too old
RUN {pip} install --upgrade setuptools==45
Expand Down
72 changes: 72 additions & 0 deletions docker/singularity-wrapper.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
#!/bin/bash

# Wrapper for Singularity that rewrites docker:// image specifiers that point to Docker Hub to use a registry mirror instead.
# Obeys SINGULARITY_DOCKER_HUB_MIRROR for the URL, including http:// or https:// protocol.

set -e

# Where is the real Singularity binary?
# The Dockerfile moves it from /usr/local/bin/singularity to here after installation
SINGULARITY_PATH=/usr/local/libexec/toil/singularity-real

# Read replacements from the environemnt
# TODO: really do that
MIRROR_HOST=""
MIRROR_HTTP=0

if [[ ! -z "${SINGULARITY_DOCKER_HUB_MIRROR}" ]] ; then
MIRROR_HOST="${SINGULARITY_DOCKER_HUB_MIRROR##*://}"
MIRROR_PROTO="${SINGULARITY_DOCKER_HUB_MIRROR%%://*}"
if [[ "${MIRROR_PROTO}" == "http" ]] ; then
MIRROR_HTTP=1
fi
fi

# Collect command line arguments
ARGC=$((${#} + 1))
ARGV=($0 "${@}")

if [[ "${ARGC}" -ge "2" && "${ARGV[1]}" == "pull" && ! -z "${MIRROR_HOST}" ]] ; then
# We are doing a pull
# TODO: we will want to also catch `singularity build`
# TODO: we will want to be able to handle e.g. `singularity -q build`

# We will set this if we manage to replace a Docker name
REPLACED=0

INDEX=2
while [[ "${INDEX}" -lt "${ARGC}" ]] ; do
# For each argument other than the script name
if [[ "${ARGV[$INDEX]}" == docker://* ]] ; then
# If it doesn't have a / after the protocol, it needs "library/" inserted
NEW_SPEC="$(echo "${ARGV[$INDEX]}" | sed 's!^docker://\([^/][^/]*$\)!docker://library/\1!')"

# If it doesn't have a hostname with a dot before the first /, give it our hostname
NEW_SPEC="$(echo "${NEW_SPEC}" | sed 's!^docker://\([^.][^.]*/\)!docker://'${MIRROR_HOST}'/\1!')"

# Replace array item
ARGV[$INDEX]="${NEW_SPEC}"
REPLACED=1
fi

let INDEX+=1
done

# We will set this if we need to insert --nohttps for an insecure registry
HTTP_ARG=""

if [[ "${REPLACED}" == "1" && "${MIRROR_HTTP}" == "1" ]] ; then
# We need to use HTTP and not HTTPS for the mirror, so we need to isnert the argument
HTTP_ARG="--nohttps"
fi

# Run the pull with our extra args, and then all the args starting at 2
# Run it as the current process so it gets signals intended for it
exec "${SINGULARITY_PATH}" pull ${HTTP_ARG} "${ARGV[@]:2}"
else
# Pass along all the args except the program name
# Run it as the current process so it gets signals intended for it
exec "${SINGULARITY_PATH}" "${ARGV[@]:1}"
fi


7 changes: 7 additions & 0 deletions docs/appendices/environment_vars.rst
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,9 @@ There are several environment variables that affect the way Toil runs.
| | deleted until all associated nodes have been |
| | terminated. |
+----------------------------------+----------------------------------------------------+
| TOIL_GOOGLE_PROJECTID | The Google project ID to use when generating |
| | Google job store names for tests or CWL workflows. |
+----------------------------------+----------------------------------------------------+
| TOIL_SLURM_ARGS | Arguments for sbatch for the slurm batch system. |
| | Do not pass CPU or memory specifications here. |
| | Instead, define resource requirements for the job. |
Expand Down Expand Up @@ -157,4 +160,8 @@ There are several environment variables that affect the way Toil runs.
| | to S3 (``True`` by default). |
| | Example: ``TOIL_S3_USE_SSL=False`` |
+----------------------------------+----------------------------------------------------+
| SINGULARITY_DOCKER_HUB_MIRROR | An http or https URL for the Singularity wrapper |
| | in the Toil Docker container to use as a mirror |
| | for Docker Hub. |
+----------------------------------+----------------------------------------------------+
.. _standard temporary directory: https://docs.python.org/3/library/tempfile.html#tempfile.gettempdir
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ def run_setup():
cwltool = 'cwltool==3.0.20201203173111'
galaxyToolUtil = 'galaxy-tool-util'
htcondor = 'htcondor>=8.6.0'
kubernetes = 'kubernetes>=12, <13'
kubernetes = 'kubernetes>=12.0.1, <13'
idna = 'idna>=2'
pytz = 'pytz>=2012'
pyyaml = 'pyyaml>=5, <6'
Expand Down
2 changes: 1 addition & 1 deletion src/toil/batchSystems/abstractBatchSystem.py
Original file line number Diff line number Diff line change
Expand Up @@ -347,7 +347,7 @@ def setEnv(self, name, value=None):
try:
value = os.environ[name]
except KeyError:
raise RuntimeError("%s does not exist in current environment", name)
raise RuntimeError(f"{name} does not exist in current environment")
self.environment[name] = value

def formatStdOutErrPath(self, jobID, batchSystem, batchJobIDfmt, fileDesc):
Expand Down
Loading

0 comments on commit 52cb9ca

Please sign in to comment.