From 926c1b2c57b106a3cb79284a0e5bf12be5d78224 Mon Sep 17 00:00:00 2001 From: Silvie Chlupova Date: Sep 19 2020 13:48:56 +0000 Subject: frontend: input field for setting timeout for builds Fixes: #1303 --- diff --git a/frontend/coprs_frontend/config/copr.conf b/frontend/coprs_frontend/config/copr.conf index fc53419..d7ae692 100644 --- a/frontend/coprs_frontend/config/copr.conf +++ b/frontend/coprs_frontend/config/copr.conf @@ -129,3 +129,5 @@ PAGES_URLS_COUNT = 5 # in seconds. After this time, copr-rpmbuild stops the build DEFAULT_BUILD_TIMEOUT = 3600 * 24 +MIN_BUILD_TIMEOUT = 0 +MAX_BUILD_TIMEOUT = 108000 diff --git a/frontend/coprs_frontend/coprs/forms.py b/frontend/coprs_frontend/coprs/forms.py index 0c211f0..9fc2c12 100644 --- a/frontend/coprs_frontend/coprs/forms.py +++ b/frontend/coprs_frontend/coprs/forms.py @@ -502,6 +502,11 @@ class CoprDeleteForm(FlaskForm): class APICoprDeleteForm(CoprDeleteForm): verify = wtforms.BooleanField("Confirm deleting", false_values=FALSE_VALUES) +def seconds_to_pretty_hours(sec): + minutes = round(sec / 60) + hours = minutes // 60 + minutes = minutes % 60 + return hours if not minutes else "{}:{:02d}".format(hours, minutes) # @TODO jkadlcik - rewrite via BaseBuildFormFactory after fe-dev-cloud is back online class BuildFormRebuildFactory(object): @@ -518,6 +523,8 @@ class BuildFormRebuildFactory(object): timeout = wtforms.IntegerField( "Timeout", + description="Optional - number of seconds we allow the builds to run, default is {0} ({1}h)".format( + app.config["DEFAULT_BUILD_TIMEOUT"], seconds_to_pretty_hours(app.config["DEFAULT_BUILD_TIMEOUT"])), validators=[ wtforms.validators.NumberRange( min=app.config["MIN_BUILD_TIMEOUT"], @@ -1027,6 +1034,8 @@ class BaseBuildFormFactory(object): F.timeout = wtforms.IntegerField( "Timeout", + description="Optional - number of seconds we allow the builds to run, default is {0} ({1}h)".format( + app.config["DEFAULT_BUILD_TIMEOUT"], seconds_to_pretty_hours(app.config["DEFAULT_BUILD_TIMEOUT"])), validators=[ wtforms.validators.Optional(), wtforms.validators.NumberRange( diff --git a/frontend/coprs_frontend/coprs/logic/builds_logic.py b/frontend/coprs_frontend/coprs/logic/builds_logic.py index 360ac35..325d0e3 100644 --- a/frontend/coprs_frontend/coprs/logic/builds_logic.py +++ b/frontend/coprs_frontend/coprs/logic/builds_logic.py @@ -600,9 +600,8 @@ class BuildsLogic(object): copr_dirname=copr_dirname, ) - if user.proven: - if "timeout" in build_options: - build.timeout = build_options["timeout"] + if "timeout" in build_options: + build.timeout = build_options["timeout"] return build diff --git a/frontend/coprs_frontend/coprs/templates/_helpers.html b/frontend/coprs_frontend/coprs/templates/_helpers.html index c2daefe..372d880 100644 --- a/frontend/coprs_frontend/coprs/templates/_helpers.html +++ b/frontend/coprs_frontend/coprs/templates/_helpers.html @@ -568,11 +568,17 @@ https://admin.fedoraproject.org/accounts/group/view/{{name}} {{ form.csrf_token }} - {% if g.user.proven %} - {{ render_field(form.timeout) }} - {% else %} {# once we pass the hidden attribute, the field will just be hidden, it seems #} - {{ render_field(form.timeout, hidden = True) }} - {% endif %} +
+ +
+ +
  • + {{form.timeout.description|safe}} +
  • +
    +