From c36152ff8c41fad2f413f253eb7ac5c927e47c56 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Fri, 13 Mar 2020 15:09:21 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- .../boards/mixins/sortable_default_options.js | 1 - .../components/ci_variable_modal.vue | 118 +++-- .../components/ci_variable_popover.vue | 55 ++ .../components/ci_variable_table.vue | 104 +++- .../javascripts/ci_variable_list/constants.js | 16 +- .../ci_variable_list/store/mutations.js | 8 +- .../javascripts/ci_variable_list/store/state.js | 8 +- .../javascripts/ci_variable_list/store/utils.js | 24 +- .../contributors/components/contributors.vue | 10 +- .../javascripts/contributors/stores/getters.js | 10 +- app/assets/javascripts/reports/store/utils.js | 13 +- .../sidebar/queries/updateStatus.mutation.graphql | 7 + .../sidebar/services/sidebar_service.js | 15 +- app/assets/javascripts/sidebar/sidebar_mediator.js | 2 +- app/assets/stylesheets/pages/settings.scss | 27 +- app/helpers/issuables_helper.rb | 2 +- app/models/ci/bridge.rb | 2 +- app/models/ci/build.rb | 2 +- app/models/ci/pipeline.rb | 2 +- app/models/concerns/ci/has_ref.rb | 33 ++ app/models/concerns/has_ref.rb | 31 -- app/serializers/group_variable_entity.rb | 1 + .../admin/application_settings/_ci_cd.html.haml | 2 +- app/views/projects/settings/ci_cd/_form.html.haml | 14 +- ...ate-between-errors-failures-in-xunit-result.yml | 5 + ...georgekoltsov-fix-relations-order-on-export.yml | 5 + .../unreleased/open-project-integration-2.yml | 5 + .../repository-contributors-group-by-email.yml | 5 + ...20200309162244_add_open_project_tracker_data.rb | 23 + .../20191115115043_migrate_epic_mentions_to_db.rb | 4 +- ...00214173000_cleanup_empty_epic_user_mentions.rb | 30 -- ...20200214174519_remigrate_epic_mentions_to_db.rb | 38 -- ...14174607_remigrate_epic_notes_mentions_to_db.rb | 45 -- db/schema.rb | 16 + doc/README.md | 2 +- doc/administration/compliance.md | 2 +- doc/api/projects.md | 2 +- doc/ci/README.md | 6 +- doc/ci/environments.md | 2 +- doc/ci/examples/test-scala-application.md | 2 +- doc/ci/img/collapsible_log_v12_6.png | Bin 294959 -> 0 bytes doc/ci/img/job_failure_reason.png | Bin 5288 -> 0 bytes doc/ci/img/manual_job_variables.png | Bin 111239 -> 0 bytes doc/ci/img/pipeline-delete.png | Bin 9658 -> 0 bytes doc/ci/img/pipeline_incremental_rollout.png | Bin 4794 -> 0 bytes doc/ci/img/pipelines.png | Bin 6298 -> 0 bytes doc/ci/img/pipelines_duration_chart.png | Bin 36476 -> 0 bytes doc/ci/img/pipelines_grouped.png | Bin 12888 -> 0 bytes doc/ci/img/pipelines_index.png | Bin 14896 -> 0 bytes doc/ci/img/pipelines_mini_graph.png | Bin 4671 -> 0 bytes doc/ci/img/pipelines_mini_graph_simple.png | Bin 961 -> 0 bytes doc/ci/img/pipelines_mini_graph_sorting.png | Bin 10742 -> 0 bytes doc/ci/img/pipelines_success_chart.png | Bin 76647 -> 0 bytes doc/ci/jenkins/index.md | 25 +- doc/ci/junit_test_reports.md | 12 +- .../pipelines_for_merged_results/index.md | 2 +- doc/ci/multi_project_pipelines.md | 2 +- doc/ci/pipelines.md | 565 +------------------- doc/ci/pipelines/img/collapsible_log_v12_6.png | Bin 0 -> 294959 bytes doc/ci/pipelines/img/job_failure_reason.png | Bin 0 -> 5288 bytes doc/ci/pipelines/img/manual_job_variables.png | Bin 0 -> 111239 bytes doc/ci/pipelines/img/pipeline-delete.png | Bin 0 -> 9658 bytes .../pipelines/img/pipeline_incremental_rollout.png | Bin 0 -> 4794 bytes doc/ci/pipelines/img/pipelines.png | Bin 0 -> 6298 bytes doc/ci/pipelines/img/pipelines_duration_chart.png | Bin 0 -> 36476 bytes doc/ci/pipelines/img/pipelines_grouped.png | Bin 0 -> 12888 bytes doc/ci/pipelines/img/pipelines_index.png | Bin 0 -> 14896 bytes doc/ci/pipelines/img/pipelines_mini_graph.png | Bin 0 -> 4671 bytes .../pipelines/img/pipelines_mini_graph_simple.png | Bin 0 -> 961 bytes .../pipelines/img/pipelines_mini_graph_sorting.png | Bin 0 -> 10742 bytes doc/ci/pipelines/img/pipelines_settings_badges.png | Bin 0 -> 21137 bytes .../img/pipelines_settings_test_coverage.png | Bin 0 -> 2549 bytes doc/ci/pipelines/img/pipelines_success_chart.png | Bin 0 -> 76647 bytes .../img/pipelines_test_coverage_build.png | Bin 0 -> 4481 bytes .../img/pipelines_test_coverage_mr_widget.png | Bin 0 -> 6375 bytes doc/ci/pipelines/index.md | 566 +++++++++++++++++++++ doc/ci/pipelines/schedules.md | 2 +- doc/ci/pipelines/settings.md | 308 +++++++++++ doc/ci/quick_start/README.md | 2 +- doc/ci/runners/README.md | 2 +- doc/ci/ssh_keys/README.md | 2 +- doc/ci/variables/README.md | 23 +- .../variables/img/new_custom_variables_example.png | Bin 68252 -> 0 bytes doc/ci/yaml/README.md | 6 +- doc/development/api_graphql_styleguide.md | 8 +- doc/development/logging.md | 61 ++- doc/development/migration_style_guide.md | 28 +- doc/subscriptions/index.md | 2 +- doc/topics/autodevops/index.md | 2 +- .../admin_area/settings/continuous_integration.md | 4 +- .../application_security/configuration/index.md | 2 +- doc/user/permissions.md | 2 +- doc/user/project/badges.md | 4 +- doc/user/project/clusters/index.md | 2 +- doc/user/project/import/gemnasium.md | 2 +- doc/user/project/index.md | 10 +- doc/user/project/merge_requests/code_quality.md | 2 +- doc/user/project/merge_requests/index.md | 4 +- .../reviewing_and_managing_merge_requests.md | 2 +- .../pipelines/img/pipelines_settings_badges.png | Bin 21137 -> 0 bytes .../img/pipelines_settings_test_coverage.png | Bin 2549 -> 0 bytes .../img/pipelines_test_coverage_build.png | Bin 4481 -> 0 bytes .../img/pipelines_test_coverage_mr_widget.png | Bin 6375 -> 0 bytes doc/user/project/pipelines/job_artifacts.md | 2 +- doc/user/project/pipelines/settings.md | 307 +---------- doc/user/project/protected_branches.md | 2 +- .../user_mentions/models/epic.rb | 1 + lib/gitlab/import_export/fast_hash_serializer.rb | 6 + locale/gitlab.pot | 64 ++- .../cop/migration/with_lock_retries_with_change.rb | 30 ++ spec/db/schema_spec.rb | 1 + .../merge_request/user_sees_merge_widget_spec.rb | 22 +- .../components/ci_variable_modal_spec.js | 18 +- .../components/ci_variable_popover_spec.js | 48 ++ .../components/ci_variable_table_spec.js | 7 +- .../ci_variable_list/services/mock_data.js | 27 +- .../ci_variable_list/store/mutations_spec.js | 4 +- spec/frontend/ci_variable_list/store/utils_spec.js | 2 + spec/frontend/contributors/store/getters_spec.js | 32 +- spec/frontend/reports/store/utils_spec.js | 34 +- spec/frontend/sidebar/mock_data.js | 2 +- .../components/grouped_test_reports_app_spec.js | 20 +- spec/lib/gitlab/git/repository_spec.rb | 4 +- .../import_export/fast_hash_serializer_spec.rb | 10 + spec/models/concerns/ci/has_ref_spec.rb | 79 +++ spec/models/concerns/has_ref_spec.rb | 79 --- spec/requests/api/pipelines_spec.rb | 4 +- .../with_lock_retries_with_change_spec.rb | 43 ++ spec/serializers/group_variable_entity_spec.rb | 2 +- spec/support/matchers/exceed_query_limit.rb | 10 +- .../matchers/exceed_query_limit_helpers_spec.rb | 34 ++ 131 files changed, 1857 insertions(+), 1388 deletions(-) create mode 100644 app/assets/javascripts/ci_variable_list/components/ci_variable_popover.vue create mode 100644 app/assets/javascripts/sidebar/queries/updateStatus.mutation.graphql create mode 100644 app/models/concerns/ci/has_ref.rb delete mode 100644 app/models/concerns/has_ref.rb create mode 100644 changelogs/unreleased/32046-differentiate-between-errors-failures-in-xunit-result.yml create mode 100644 changelogs/unreleased/georgekoltsov-fix-relations-order-on-export.yml create mode 100644 changelogs/unreleased/open-project-integration-2.yml create mode 100644 changelogs/unreleased/repository-contributors-group-by-email.yml create mode 100644 db/migrate/20200309162244_add_open_project_tracker_data.rb delete mode 100644 db/post_migrate/20200214173000_cleanup_empty_epic_user_mentions.rb delete mode 100644 db/post_migrate/20200214174519_remigrate_epic_mentions_to_db.rb delete mode 100644 db/post_migrate/20200214174607_remigrate_epic_notes_mentions_to_db.rb delete mode 100644 doc/ci/img/collapsible_log_v12_6.png delete mode 100644 doc/ci/img/job_failure_reason.png delete mode 100644 doc/ci/img/manual_job_variables.png delete mode 100644 doc/ci/img/pipeline-delete.png delete mode 100644 doc/ci/img/pipeline_incremental_rollout.png delete mode 100644 doc/ci/img/pipelines.png delete mode 100644 doc/ci/img/pipelines_duration_chart.png delete mode 100644 doc/ci/img/pipelines_grouped.png delete mode 100644 doc/ci/img/pipelines_index.png delete mode 100644 doc/ci/img/pipelines_mini_graph.png delete mode 100644 doc/ci/img/pipelines_mini_graph_simple.png delete mode 100644 doc/ci/img/pipelines_mini_graph_sorting.png delete mode 100644 doc/ci/img/pipelines_success_chart.png create mode 100644 doc/ci/pipelines/img/collapsible_log_v12_6.png create mode 100644 doc/ci/pipelines/img/job_failure_reason.png create mode 100644 doc/ci/pipelines/img/manual_job_variables.png create mode 100644 doc/ci/pipelines/img/pipeline-delete.png create mode 100644 doc/ci/pipelines/img/pipeline_incremental_rollout.png create mode 100644 doc/ci/pipelines/img/pipelines.png create mode 100644 doc/ci/pipelines/img/pipelines_duration_chart.png create mode 100644 doc/ci/pipelines/img/pipelines_grouped.png create mode 100644 doc/ci/pipelines/img/pipelines_index.png create mode 100644 doc/ci/pipelines/img/pipelines_mini_graph.png create mode 100644 doc/ci/pipelines/img/pipelines_mini_graph_simple.png create mode 100644 doc/ci/pipelines/img/pipelines_mini_graph_sorting.png create mode 100644 doc/ci/pipelines/img/pipelines_settings_badges.png create mode 100644 doc/ci/pipelines/img/pipelines_settings_test_coverage.png create mode 100644 doc/ci/pipelines/img/pipelines_success_chart.png create mode 100644 doc/ci/pipelines/img/pipelines_test_coverage_build.png create mode 100644 doc/ci/pipelines/img/pipelines_test_coverage_mr_widget.png create mode 100644 doc/ci/pipelines/index.md create mode 100644 doc/ci/pipelines/settings.md delete mode 100644 doc/ci/variables/img/new_custom_variables_example.png delete mode 100644 doc/user/project/pipelines/img/pipelines_settings_badges.png delete mode 100644 doc/user/project/pipelines/img/pipelines_settings_test_coverage.png delete mode 100644 doc/user/project/pipelines/img/pipelines_test_coverage_build.png delete mode 100644 doc/user/project/pipelines/img/pipelines_test_coverage_mr_widget.png create mode 100644 rubocop/cop/migration/with_lock_retries_with_change.rb create mode 100644 spec/frontend/ci_variable_list/components/ci_variable_popover_spec.js create mode 100644 spec/models/concerns/ci/has_ref_spec.rb delete mode 100644 spec/models/concerns/has_ref_spec.rb create mode 100644 spec/rubocop/cop/migration/with_lock_retries_with_change_spec.rb create mode 100644 spec/support_specs/matchers/exceed_query_limit_helpers_spec.rb diff --git a/app/assets/javascripts/boards/mixins/sortable_default_options.js b/app/assets/javascripts/boards/mixins/sortable_default_options.js index f77f131c71a..68ea28e68d9 100644 --- a/app/assets/javascripts/boards/mixins/sortable_default_options.js +++ b/app/assets/javascripts/boards/mixins/sortable_default_options.js @@ -26,7 +26,6 @@ export function getBoardSortableDefaultOptions(obj) { scrollSpeed: 20, onStart: sortableStart, onEnd: sortableEnd, - fallbackTolerance: 1, }); Object.keys(obj).forEach(key => { diff --git a/app/assets/javascripts/ci_variable_list/components/ci_variable_modal.vue b/app/assets/javascripts/ci_variable_list/components/ci_variable_modal.vue index 3e58fc40755..637f0237b63 100644 --- a/app/assets/javascripts/ci_variable_list/components/ci_variable_modal.vue +++ b/app/assets/javascripts/ci_variable_list/components/ci_variable_modal.vue @@ -7,6 +7,7 @@ import { GlFormSelect, GlFormGroup, GlFormInput, + GlFormTextarea, GlFormCheckbox, GlLink, GlIcon, @@ -19,6 +20,7 @@ export default { GlFormSelect, GlFormGroup, GlFormInput, + GlFormTextarea, GlFormCheckbox, GlLink, GlIcon, @@ -34,17 +36,29 @@ export default { 'maskableRegex', ]), canSubmit() { + if (this.variableData.masked && this.maskedState === false) { + return false; + } return this.variableData.key !== '' && this.variableData.secret_value !== ''; }, canMask() { const regex = RegExp(this.maskableRegex); return regex.test(this.variableData.secret_value); }, + displayMaskedError() { + return !this.canMask && this.variableData.masked && this.variableData.secret_value !== ''; + }, + maskedState() { + if (this.displayMaskedError) { + return false; + } + return null; + }, variableData() { return this.variableBeingEdited || this.variable; }, modalActionText() { - return this.variableBeingEdited ? __('Update Variable') : __('Add variable'); + return this.variableBeingEdited ? __('Update variable') : __('Add variable'); }, primaryAction() { return { @@ -52,11 +66,23 @@ export default { attributes: { variant: 'success', disabled: !this.canSubmit }, }; }, + deleteAction() { + if (this.variableBeingEdited) { + return { + text: __('Delete variable'), + attributes: { variant: 'danger', category: 'secondary' }, + }; + } + return null; + }, cancelAction() { return { text: __('Cancel'), }; }, + maskedFeedback() { + return __('This variable can not be masked'); + }, }, methods: { ...mapActions([ @@ -65,6 +91,7 @@ export default { 'resetEditing', 'displayInputValue', 'clearModal', + 'deleteVariable', ]), updateOrAddVariable() { if (this.variableBeingEdited) { @@ -89,74 +116,93 @@ export default { :modal-id="$options.modalId" :title="modalActionText" :action-primary="primaryAction" + :action-secondary="deleteAction" :action-cancel="cancelAction" @ok="updateOrAddVariable" @hidden="resetModalHandler" + @secondary="deleteVariable(variableBeingEdited)" >
- - + + + + +
- - + - - +
- - - - - + {{ __('Protect variable') }} -

- {{ __('Allow variables to run on protected branches and tags.') }} +

+ {{ __('Export variable to pipelines running on protected branches and tags only.') }}

{{ __('Mask variable') }} -

- {{ - __( - 'Variables will be masked in job logs. Requires values to meet regular expression requirements.', - ) - }} +

+ {{ __('Variable will be masked in job logs.') }} + + {{ __('Requires values to meet regular expression requirements.') }} {{ __('More information') }} diff --git a/app/assets/javascripts/ci_variable_list/components/ci_variable_popover.vue b/app/assets/javascripts/ci_variable_list/components/ci_variable_popover.vue new file mode 100644 index 00000000000..c4b1bc18f5a --- /dev/null +++ b/app/assets/javascripts/ci_variable_list/components/ci_variable_popover.vue @@ -0,0 +1,55 @@ + + + diff --git a/app/assets/javascripts/ci_variable_list/components/ci_variable_table.vue b/app/assets/javascripts/ci_variable_list/components/ci_variable_table.vue index e240323d2c5..3f2f89ada6f 100644 --- a/app/assets/javascripts/ci_variable_list/components/ci_variable_table.vue +++ b/app/assets/javascripts/ci_variable_list/components/ci_variable_table.vue @@ -3,44 +3,58 @@ import { GlTable, GlButton, GlModalDirective, GlIcon } from '@gitlab/ui'; import { s__, __ } from '~/locale'; import { mapState, mapActions } from 'vuex'; import { ADD_CI_VARIABLE_MODAL_ID } from '../constants'; +import CiVariablePopover from './ci_variable_popover.vue'; export default { modalId: ADD_CI_VARIABLE_MODAL_ID, + trueIcon: 'mobile-issue-close', + falseIcon: 'close', + iconSize: 16, fields: [ { key: 'variable_type', label: s__('CiVariables|Type'), + customStyle: { width: '70px' }, }, { key: 'key', label: s__('CiVariables|Key'), + tdClass: 'text-plain', + sortable: true, + customStyle: { width: '40%' }, }, { key: 'value', label: s__('CiVariables|Value'), tdClass: 'qa-ci-variable-input-value', + customStyle: { width: '40%' }, }, { key: 'protected', label: s__('CiVariables|Protected'), + customStyle: { width: '100px' }, }, { key: 'masked', label: s__('CiVariables|Masked'), + customStyle: { width: '100px' }, }, { key: 'environment_scope', - label: s__('CiVariables|Environment Scope'), + label: s__('CiVariables|Environments'), + customStyle: { width: '20%' }, }, { key: 'actions', label: '', + customStyle: { width: '35px' }, }, ], components: { GlTable, GlButton, GlIcon, + CiVariablePopover, }, directives: { GlModalDirective, @@ -64,7 +78,7 @@ export default { this.fetchVariables(); }, methods: { - ...mapActions(['fetchVariables', 'deleteVariable', 'toggleValues', 'editVariable']), + ...mapActions(['fetchVariables', 'toggleValues', 'editVariable']), }, }; @@ -74,42 +88,82 @@ export default { -