diff options
-rw-r--r-- | app/models/ci/runner.rb | 3 | ||||
-rw-r--r-- | app/models/concerns/chronic_duration_attribute.rb | 2 | ||||
-rw-r--r-- | app/models/project.rb | 3 | ||||
-rw-r--r-- | app/validators/duration_validator.rb | 6 | ||||
-rw-r--r-- | app/views/projects/settings/ci_cd/_form.html.haml | 2 | ||||
-rw-r--r-- | app/views/shared/runners/_form.html.haml | 2 | ||||
-rw-r--r-- | changelogs/unreleased/fix-gb-improve-timeout-inputs-help-sections.yml | 5 | ||||
-rw-r--r-- | locale/gitlab.pot | 8 | ||||
-rw-r--r-- | spec/models/concerns/chronic_duration_attribute_spec.rb | 3 |
9 files changed, 23 insertions, 11 deletions
diff --git a/app/models/ci/runner.rb b/app/models/ci/runner.rb index 260348c97b2..2693386443a 100644 --- a/app/models/ci/runner.rb +++ b/app/models/ci/runner.rb @@ -114,7 +114,8 @@ module Ci cached_attr_reader :version, :revision, :platform, :architecture, :ip_address, :contacted_at - chronic_duration_attr :maximum_timeout_human_readable, :maximum_timeout + chronic_duration_attr :maximum_timeout_human_readable, :maximum_timeout, + error_message: 'Maximum job timeout has a value which could not be accepted' validates :maximum_timeout, allow_nil: true, numericality: { greater_than_or_equal_to: 600, diff --git a/app/models/concerns/chronic_duration_attribute.rb b/app/models/concerns/chronic_duration_attribute.rb index edf6ac96730..af4905115b1 100644 --- a/app/models/concerns/chronic_duration_attribute.rb +++ b/app/models/concerns/chronic_duration_attribute.rb @@ -24,7 +24,7 @@ module ChronicDurationAttribute end end - validates virtual_attribute, allow_nil: true, duration: true + validates virtual_attribute, allow_nil: true, duration: { message: parameters[:error_message] } end alias_method :chronic_duration_attr, :chronic_duration_attr_writer diff --git a/app/models/project.rb b/app/models/project.rb index 6ec323b58c2..d8ce8038e92 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -384,7 +384,8 @@ class Project < ActiveRecord::Base enum auto_cancel_pending_pipelines: { disabled: 0, enabled: 1 } - chronic_duration_attr :build_timeout_human_readable, :build_timeout, default: 3600 + chronic_duration_attr :build_timeout_human_readable, :build_timeout, + default: 3600, error_message: 'Maximum job timeout has a value which could not be accepted' validates :build_timeout, allow_nil: true, numericality: { greater_than_or_equal_to: 10.minutes, diff --git a/app/validators/duration_validator.rb b/app/validators/duration_validator.rb index 811828169ca..defd28d7d3b 100644 --- a/app/validators/duration_validator.rb +++ b/app/validators/duration_validator.rb @@ -14,6 +14,10 @@ class DurationValidator < ActiveModel::EachValidator def validate_each(record, attribute, value) ChronicDuration.parse(value) rescue ChronicDuration::DurationParseError - record.errors.add(attribute, "is not a correct duration") + if options[:message] + record.errors.add(:base, options[:message]) + else + record.errors.add(attribute, "is not a correct duration") + end end end diff --git a/app/views/projects/settings/ci_cd/_form.html.haml b/app/views/projects/settings/ci_cd/_form.html.haml index 621b7922072..bb328f5344c 100644 --- a/app/views/projects/settings/ci_cd/_form.html.haml +++ b/app/views/projects/settings/ci_cd/_form.html.haml @@ -29,7 +29,7 @@ = f.label :build_timeout_human_readable, _('Timeout'), class: 'label-bold' = f.text_field :build_timeout_human_readable, class: 'form-control' %p.form-text.text-muted - = _("Per job. If a job passes this threshold, it will be marked as failed") + = _('If any job surpasses this timeout threshold, it will be marked as failed. Human readable time input language is accepted like "1 hour". Values without specification represent seconds.') = link_to icon('question-circle'), help_page_path('user/project/pipelines/settings', anchor: 'timeout'), target: '_blank' %hr diff --git a/app/views/shared/runners/_form.html.haml b/app/views/shared/runners/_form.html.haml index daf08d9bb2c..559b5aa9c1e 100644 --- a/app/views/shared/runners/_form.html.haml +++ b/app/views/shared/runners/_form.html.haml @@ -45,7 +45,7 @@ = _('Maximum job timeout') .col-sm-10 = f.text_field :maximum_timeout_human_readable, class: 'form-control' - .form-text.text-muted= _('This timeout will take precedence when lower than Project-defined timeout') + .form-text.text-muted= _('This timeout will take precedence when lower than project-defined timeout and accepts a human readable time input language like "1 hour". Values without specification represent seconds.') .form-group.row = label_tag :tag_list, class: 'col-form-label col-sm-2' do = _('Tags') diff --git a/changelogs/unreleased/fix-gb-improve-timeout-inputs-help-sections.yml b/changelogs/unreleased/fix-gb-improve-timeout-inputs-help-sections.yml new file mode 100644 index 00000000000..52b431edf2c --- /dev/null +++ b/changelogs/unreleased/fix-gb-improve-timeout-inputs-help-sections.yml @@ -0,0 +1,5 @@ +--- +title: Improve help and validation sections of maximum build timeout inputs +merge_request: 23586 +author: +type: fixed diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 8289434fd30..38e7ff740c7 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -3436,6 +3436,9 @@ msgstr "" msgid "Identities" msgstr "" +msgid "If any job surpasses this timeout threshold, it will be marked as failed. Human readable time input language is accepted like \"1 hour\". Values without specification represent seconds." +msgstr "" + msgid "If disabled, the access level will depend on the user's permissions in the project." msgstr "" @@ -4614,9 +4617,6 @@ msgstr "" msgid "People without permission will never get a notification and won't be able to comment." msgstr "" -msgid "Per job. If a job passes this threshold, it will be marked as failed" -msgstr "" - msgid "Perform advanced options such as changing path, transferring, or removing the group." msgstr "" @@ -6632,7 +6632,7 @@ msgstr "" msgid "This source diff could not be displayed because it is too large." msgstr "" -msgid "This timeout will take precedence when lower than Project-defined timeout" +msgid "This timeout will take precedence when lower than project-defined timeout and accepts a human readable time input language like \"1 hour\". Values without specification represent seconds." msgstr "" msgid "This user has no identities" diff --git a/spec/models/concerns/chronic_duration_attribute_spec.rb b/spec/models/concerns/chronic_duration_attribute_spec.rb index 8847623f705..b14b773b653 100644 --- a/spec/models/concerns/chronic_duration_attribute_spec.rb +++ b/spec/models/concerns/chronic_duration_attribute_spec.rb @@ -54,7 +54,8 @@ shared_examples 'ChronicDurationAttribute writer' do subject.send("#{virtual_field}=", '-10m') expect(subject.valid?).to be_falsey - expect(subject.errors&.messages).to include(virtual_field => ['is not a correct duration']) + expect(subject.errors&.messages) + .to include(base: ['Maximum job timeout has a value which could not be accepted']) end end |