.row.prepend-top-default .col-lg-12 = form_for @project, url: project_settings_ci_cd_path(@project, anchor: 'js-general-pipeline-settings') do |f| = form_errors(@project) %fieldset.builds-feature .form-group %h5.gl-mt-0 = _("Git strategy for pipelines") %p = _("Choose between clone or fetch to get the recent application code").html_safe = link_to icon('question-circle'), help_page_path('ci/pipelines/settings', anchor: 'git-strategy'), target: '_blank' .form-check = f.radio_button :build_allow_git_fetch, 'false', { class: 'form-check-input' } = f.label :build_allow_git_fetch_false, class: 'form-check-label' do %strong git clone %br %span = _("Slower but makes sure the project workspace is pristine as it clones the repository from scratch for every job") .form-check = f.radio_button :build_allow_git_fetch, 'true', { class: 'form-check-input' } = f.label :build_allow_git_fetch_true, class: 'form-check-label' do %strong git fetch %br %span = _("Faster as it re-uses the project workspace (falling back to clone if it doesn't exist)") %hr .form-group = f.fields_for :ci_cd_settings_attributes, @project.ci_cd_settings do |form| = form.label :default_git_depth, _('Git shallow clone'), class: 'label-bold' = form.number_field :default_git_depth, { class: 'form-control', min: 0, max: 1000 } %p.form-text.text-muted = _('The number of changes to be fetched from GitLab when cloning a repository. This can speed up Pipelines execution. Keep empty or set to 0 to disable shallow clone by default and make GitLab CI fetch all branches and tags each time.') %hr .form-group = 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 = _('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('ci/pipelines/settings', anchor: 'timeout'), target: '_blank' - if can?(current_user, :update_max_artifacts_size, @project) %hr .form-group = f.label :max_artifacts_size, _('Maximum artifacts size (MB)'), class: 'label-bold' = f.number_field :max_artifacts_size, class: 'form-control' %p.form-text.text-muted = _("Set the maximum file size for each job's artifacts") = link_to icon('question-circle'), help_page_path('user/admin_area/settings/continuous_integration', anchor: 'maximum-artifacts-size-core-only'), target: '_blank' %hr .form-group = f.label :ci_config_path, _('Custom CI configuration path'), class: 'label-bold' = f.text_field :ci_config_path, class: 'form-control', placeholder: '.gitlab-ci.yml' %p.form-text.text-muted = _("The path to the CI configuration file. Defaults to .gitlab-ci.yml").html_safe = link_to icon('question-circle'), help_page_path('ci/pipelines/settings', anchor: 'custom-ci-configuration-path'), target: '_blank' %hr .form-group .form-check = f.check_box :public_builds, { class: 'form-check-input' } = f.label :public_builds, class: 'form-check-label' do %strong= _("Public pipelines") .form-text.text-muted = _("Allow public access to pipelines and job details, including output logs and artifacts") = link_to icon('question-circle'), help_page_path('ci/pipelines/settings', anchor: 'visibility-of-pipelines'), target: '_blank' .bs-callout.bs-callout-info %p #{_("If enabled")}: %ul %li = _("For public projects, anyone can view pipelines and access job details (output logs and artifacts)") %li = _("For internal projects, any logged in user can view pipelines and access job details (output logs and artifacts)") %li = _("For private projects, any member (guest or higher) can view pipelines and access job details (output logs and artifacts)") %p = _("If disabled, the access level will depend on the user's permissions in the project.") %hr .form-group .form-check = f.check_box :auto_cancel_pending_pipelines, { class: 'form-check-input' }, 'enabled', 'disabled' = f.label :auto_cancel_pending_pipelines, class: 'form-check-label' do %strong= _("Auto-cancel redundant, pending pipelines") .form-text.text-muted = _("New pipelines will cancel older, pending pipelines on the same branch") = link_to icon('question-circle'), help_page_path('ci/pipelines/settings', anchor: 'auto-cancel-pending-pipelines'), target: '_blank' .form-group .form-check = f.check_box :forward_deployment_enabled, { class: 'form-check-input' } = f.label :forward_deployment_enabled, class: 'form-check-label' do %strong= _("Skip outdated deployment jobs") .form-text.text-muted = _("When a deployment job is successful, skip older deployment jobs that are still pending") = link_to icon('question-circle'), help_page_path('ci/pipelines/settings', anchor: 'skip-outdated-deployment-jobs'), target: '_blank' %hr .form-group = f.label :build_coverage_regex, _("Test coverage parsing"), class: 'label-bold' .input-group %span.input-group-prepend .input-group-text / = f.text_field :build_coverage_regex, class: 'form-control', placeholder: 'Regular expression', data: { qa_selector: 'build_coverage_regex_field' } %span.input-group-append .input-group-text / %p.form-text.text-muted = _("A regular expression that will be used to find the test coverage output in the job log. Leave blank to disable") = link_to icon('question-circle'), help_page_path('ci/pipelines/settings', anchor: 'test-coverage-parsing'), target: '_blank' .bs-callout.bs-callout-info %p= _("Below are examples of regex for existing tools:") %ul %li Simplecov (Ruby) - %code \(\d+.\d+\%\) covered %li pytest-cov (Python) - %code ^TOTAL.+?(\d+\%)$ %li phpunit --coverage-text --colors=never (PHP) - %code ^\s*Lines:\s*\d+.\d+\% %li gcovr (C/C++) - %code ^TOTAL.*\s+(\d+\%)$ %li tap --coverage-report=text-summary (NodeJS) - %code ^Statements\s*:\s*([^%]+) %li nyc npm test (NodeJS) - %code All files[^|]*\|[^|]*\s+([\d\.]+) %li excoveralls (Elixir) - %code \[TOTAL\]\s+(\d+\.\d+)% %li mix test --cover (Elixir) - %code \d+.\d+\%\s+\|\s+Total %li JaCoCo (Java/Kotlin) %code Total.*?([0-9]{1,3})% %li go test -cover (Go) %code coverage: \d+.\d+% of statements = f.submit _('Save changes'), class: "btn btn-success", data: { qa_selector: 'save_general_pipelines_changes_button' } %hr .row.prepend-top-default = render partial: 'badge', collection: @badges