From 698ab7c4bba77ffc98c14360269167092b2ebe01 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Tue, 23 Jun 2020 09:08:47 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .../javascripts/close_reopen_report_toggle.js | 7 +- app/assets/javascripts/issue.js | 10 +-- app/assets/javascripts/merge_request.js | 11 ++- .../notes/components/comment_form.vue | 6 +- .../javascripts/notes/stores/actions.js | 1 - .../project_selector/project_list_item.vue | 12 +++- .../project_selector/project_selector.vue | 3 +- .../experience_levels_controller.rb | 9 +-- app/helpers/issuables_helper.rb | 9 --- app/models/namespace.rb | 3 - .../issuable/_close_reopen_button.html.haml | 11 +-- .../_close_reopen_report_toggle.html.haml | 9 ++- ...ove_hyperlink_from_close_reopen_button.yml | 5 ++ ...igrate_vulnerability_dismissal_feedback.rb | 36 ++++++++++ db/structure.sql | 1 + .../gitlab_rails_cheat_sheet.md | 14 ++++ doc/ci/junit_test_reports.md | 5 +- .../cicd/img/ci_template_selection_v13_1.png | Bin 0 -> 21284 bytes doc/development/cicd/index.md | 2 + doc/development/cicd/templates.md | 66 ++++++++++++++++++ ...vulnerabilities_from_dismissal_feedback.rb | 13 ++++ lib/gitlab/ci/templates/index.md | 3 + lib/learn_gitlab.rb | 35 ++++++++++ locale/gitlab.pot | 6 ++ .../experience_levels_controller_spec.rb | 45 ++++++++---- .../close_reopen_report_toggle_spec.rb | 22 +++--- .../user_closes_merge_request_spec.rb | 2 +- .../user_reopens_merge_request_spec.rb | 2 +- spec/features/task_lists_spec.rb | 2 +- .../close_reopen_report_toggle_spec.js | 7 +- .../project_list_item_spec.js | 10 +++ spec/lib/learn_gitlab_spec.rb | 61 ++++++++++++++++ vendor/project_templates/learn_gitlab.tar.gz | Bin 114701 -> 114312 bytes 33 files changed, 348 insertions(+), 80 deletions(-) create mode 100644 changelogs/unreleased/remove_hyperlink_from_close_reopen_button.yml create mode 100644 db/post_migrate/20200519201128_migrate_vulnerability_dismissal_feedback.rb create mode 100644 doc/development/cicd/img/ci_template_selection_v13_1.png create mode 100644 doc/development/cicd/templates.md create mode 100644 lib/gitlab/background_migration/update_vulnerabilities_from_dismissal_feedback.rb create mode 100644 lib/gitlab/ci/templates/index.md create mode 100644 lib/learn_gitlab.rb create mode 100644 spec/lib/learn_gitlab_spec.rb diff --git a/app/assets/javascripts/close_reopen_report_toggle.js b/app/assets/javascripts/close_reopen_report_toggle.js index bcddce6e727..9bbbe07e7a1 100644 --- a/app/assets/javascripts/close_reopen_report_toggle.js +++ b/app/assets/javascripts/close_reopen_report_toggle.js @@ -80,12 +80,7 @@ class CloseReopenReportToggle { { input: this.button, valueAttribute: 'data-url', - inputAttribute: 'href', - }, - { - input: this.button, - valueAttribute: 'data-method', - inputAttribute: 'data-method', + inputAttribute: 'data-endpoint', }, ], }; diff --git a/app/assets/javascripts/issue.js b/app/assets/javascripts/issue.js index 252e8e92f5e..a01faeb1c8d 100644 --- a/app/assets/javascripts/issue.js +++ b/app/assets/javascripts/issue.js @@ -11,7 +11,7 @@ import { __ } from './locale'; export default class Issue { constructor() { - if ($('a.btn-close').length) this.initIssueBtnEventListeners(); + if ($('.btn-close, .btn-reopen').length) this.initIssueBtnEventListeners(); if ($('.js-close-blocked-issue-warning').length) this.initIssueWarningBtnEventListener(); @@ -32,8 +32,8 @@ export default class Issue { Issue.initRelatedBranches(); } - this.closeButtons = $('a.btn-close'); - this.reopenButtons = $('a.btn-reopen'); + this.closeButtons = $('.btn-close'); + this.reopenButtons = $('.btn-reopen'); this.initCloseReopenReport(); @@ -103,7 +103,7 @@ export default class Issue { // NOTE: data attribute seems unnecessary but is actually necessary return $('.js-issuable-buttons[data-action="close-reopen"]').on( 'click', - 'a.btn-close, a.btn-reopen, a.btn-close-anyway', + '.btn-close, .btn-reopen, .btn-close-anyway', e => { e.preventDefault(); e.stopImmediatePropagation(); @@ -120,7 +120,7 @@ export default class Issue { } else { this.disableCloseReopenButton($button); - const url = $button.attr('href'); + const url = $button.data('endpoint'); return axios .put(url) diff --git a/app/assets/javascripts/merge_request.js b/app/assets/javascripts/merge_request.js index 6c794c1d324..a90e4e32d34 100644 --- a/app/assets/javascripts/merge_request.js +++ b/app/assets/javascripts/merge_request.js @@ -1,6 +1,7 @@ /* eslint-disable func-names, no-underscore-dangle, consistent-return */ import $ from 'jquery'; +import axios from './lib/utils/axios_utils'; import { __ } from '~/locale'; import createFlash from '~/flash'; import TaskList from './task_list'; @@ -65,9 +66,17 @@ MergeRequest.prototype.showAllCommits = function() { MergeRequest.prototype.initMRBtnListeners = function() { const _this = this; - return $('a.btn-close, a.btn-reopen').on('click', function(e) { + return $('.btn-close, .btn-reopen').on('click', function(e) { const $this = $(this); const shouldSubmit = $this.hasClass('btn-comment'); + if ($this.hasClass('js-btn-issue-action')) { + const url = $this.data('endpoint'); + return axios + .put(url) + .then(() => window.location.reload()) + .catch(() => createFlash(__('Something went wrong.'))); + } + if (shouldSubmit && $this.data('submitted')) { return; } diff --git a/app/assets/javascripts/notes/components/comment_form.vue b/app/assets/javascripts/notes/components/comment_form.vue index cf731509f3e..18a3b0a98a7 100644 --- a/app/assets/javascripts/notes/components/comment_form.vue +++ b/app/assets/javascripts/notes/components/comment_form.vue @@ -125,9 +125,13 @@ export default { canToggleIssueState() { return ( this.getNoteableData.current_user.can_update && - this.getNoteableData.state !== constants.MERGED + this.getNoteableData.state !== constants.MERGED && + !this.closedAndLocked ); }, + closedAndLocked() { + return !this.isOpen && this.isLocked(this.getNoteableData); + }, endpoint() { return this.getNoteableData.create_note_path; }, diff --git a/app/assets/javascripts/notes/stores/actions.js b/app/assets/javascripts/notes/stores/actions.js index a5b006fc301..b3094070251 100644 --- a/app/assets/javascripts/notes/stores/actions.js +++ b/app/assets/javascripts/notes/stores/actions.js @@ -205,7 +205,6 @@ export const closeIssue = ({ commit, dispatch, state }) => { commit(types.CLOSE_ISSUE); dispatch('emitStateChangedEvent', data); dispatch('toggleStateButtonLoading', false); - dispatch('toggleBlockedIssueWarning', false); }); }; diff --git a/app/assets/javascripts/vue_shared/components/project_selector/project_list_item.vue b/app/assets/javascripts/vue_shared/components/project_selector/project_list_item.vue index 3d52f4176db..1cee800de44 100644 --- a/app/assets/javascripts/vue_shared/components/project_selector/project_list_item.vue +++ b/app/assets/javascripts/vue_shared/components/project_selector/project_list_item.vue @@ -17,7 +17,10 @@ export default { project: { type: Object, required: true, - validator: p => Number.isFinite(p.id) && isString(p.name) && isString(p.name_with_namespace), + validator: p => + (Number.isFinite(p.id) || isString(p.id)) && + isString(p.name) && + (isString(p.name_with_namespace) || isString(p.nameWithNamespace)), }, selected: { type: Boolean, @@ -30,8 +33,11 @@ export default { }, }, computed: { + projectNameWithNamespace() { + return this.project.nameWithNamespace || this.project.name_with_namespace; + }, truncatedNamespace() { - return truncateNamespace(this.project.name_with_namespace); + return truncateNamespace(this.projectNameWithNamespace); }, highlightedProjectName() { return highlight(this.project.name, this.matcher); @@ -58,7 +64,7 @@ export default {
{{ truncatedNamespace }} diff --git a/app/assets/javascripts/vue_shared/components/project_selector/project_selector.vue b/app/assets/javascripts/vue_shared/components/project_selector/project_selector.vue index 15a5ce85046..c4f389a48d9 100644 --- a/app/assets/javascripts/vue_shared/components/project_selector/project_selector.vue +++ b/app/assets/javascripts/vue_shared/components/project_selector/project_selector.vue @@ -41,7 +41,8 @@ export default { }, totalResults: { type: Number, - required: true, + required: false, + default: 0, }, }, data() { diff --git a/app/controllers/registrations/experience_levels_controller.rb b/app/controllers/registrations/experience_levels_controller.rb index 515d6b3f9aa..97239b1bbac 100644 --- a/app/controllers/registrations/experience_levels_controller.rb +++ b/app/controllers/registrations/experience_levels_controller.rb @@ -33,12 +33,13 @@ module Registrations def hide_advanced_issues return unless current_user.user_preference.novice? + return unless learn_gitlab.available? - settings = cookies[:onboarding_issues_settings] - return unless settings + Boards::UpdateService.new(learn_gitlab.project, current_user, label_ids: [learn_gitlab.label.id]).execute(learn_gitlab.board) + end - modified_settings = Gitlab::Json.parse(settings).merge(hideAdvanced: true) - cookies[:onboarding_issues_settings] = modified_settings.to_json + def learn_gitlab + @learn_gitlab ||= LearnGitlab.new(current_user) end end end diff --git a/app/helpers/issuables_helper.rb b/app/helpers/issuables_helper.rb index a848c814742..045174de25b 100644 --- a/app/helpers/issuables_helper.rb +++ b/app/helpers/issuables_helper.rb @@ -367,15 +367,6 @@ module IssuablesHelper end end - def issuable_close_reopen_button_method(issuable) - case issuable - when Issue - '' - when MergeRequest - 'put' - end - end - def issuable_author_is_current_user(issuable) issuable.author == current_user end diff --git a/app/models/namespace.rb b/app/models/namespace.rb index 90b4be7a674..96513f6570f 100644 --- a/app/models/namespace.rb +++ b/app/models/namespace.rb @@ -13,9 +13,6 @@ class Namespace < ApplicationRecord include Gitlab::Utils::StrongMemoize include IgnorableColumns - ignore_column :plan_id, remove_with: '13.1', remove_after: '2020-06-22' - ignore_column :trial_ends_on, remove_with: '13.2', remove_after: '2020-07-22' - # Prevent users from creating unreasonably deep level of nesting. # The number 20 was taken based on maximum nesting level of # Android repo (15) + some extra backup. diff --git a/app/views/shared/issuable/_close_reopen_button.html.haml b/app/views/shared/issuable/_close_reopen_button.html.haml index 5f7cfdc9d03..59d0c46b92f 100644 --- a/app/views/shared/issuable/_close_reopen_button.html.haml +++ b/app/views/shared/issuable/_close_reopen_button.html.haml @@ -1,6 +1,5 @@ - is_current_user = issuable_author_is_current_user(issuable) - display_issuable_type = issuable_display_type(issuable) -- button_method = issuable_close_reopen_button_method(issuable) - are_close_and_open_buttons_hidden = issuable_button_hidden?(issuable, true) && issuable_button_hidden?(issuable, false) - add_blocked_class = false - if defined? warn_before_close @@ -8,11 +7,13 @@ - if is_current_user - if can_update - = link_to _("Close %{display_issuable_type}") % { display_issuable_type: display_issuable_type }, close_issuable_path(issuable), method: button_method, - class: "d-none d-sm-none d-md-block btn btn-grouped btn-close js-btn-issue-action #{issuable_button_visibility(issuable, true)} #{(add_blocked_class ? 'btn-issue-blocked' : '')}", title: _("Close %{display_issuable_type}") % { display_issuable_type: display_issuable_type }, data: { qa_selector: 'close_issue_button' } + %button{ class: "d-none d-sm-none d-md-block btn btn-grouped btn-close js-btn-issue-action #{issuable_button_visibility(issuable, true)} #{(add_blocked_class ? 'btn-issue-blocked' : '')}", + data: { remote: 'true', endpoint: close_issuable_path(issuable), qa_selector: 'close_issue_button' } } + = _("Close %{display_issuable_type}") % { display_issuable_type: display_issuable_type } - if can_reopen - = link_to _("Reopen %{display_issuable_type}") % { display_issuable_type: display_issuable_type }, reopen_issuable_path(issuable), method: button_method, - class: "d-none d-sm-none d-md-block btn btn-grouped btn-reopen js-btn-issue-action #{issuable_button_visibility(issuable, false)}", title: _("Reopen %{display_issuable_type}") % { display_issuable_type: display_issuable_type }, data: { qa_selector: 'reopen_issue_button' } + %button{ class: "d-none d-sm-none d-md-block btn btn-grouped btn-reopen js-btn-issue-action #{issuable_button_visibility(issuable, false)}", + data: { remote: 'true', endpoint: reopen_issuable_path(issuable), qa_selector: 'reopen_issue_button' } } + = _("Reopen %{display_issuable_type}") % { display_issuable_type: display_issuable_type } - else - if can_update && !are_close_and_open_buttons_hidden = render 'shared/issuable/close_reopen_report_toggle', issuable: issuable, warn_before_close: add_blocked_class diff --git a/app/views/shared/issuable/_close_reopen_report_toggle.html.haml b/app/views/shared/issuable/_close_reopen_report_toggle.html.haml index 9d718083d2d..a549d03472a 100644 --- a/app/views/shared/issuable/_close_reopen_report_toggle.html.haml +++ b/app/views/shared/issuable/_close_reopen_report_toggle.html.haml @@ -4,14 +4,13 @@ - button_responsive_class = 'd-none d-sm-none d-md-block' - button_class = "#{button_responsive_class} btn btn-grouped js-issuable-close-button js-btn-issue-action issuable-close-button" - toggle_class = "#{button_responsive_class} btn btn-nr dropdown-toggle js-issuable-close-toggle" -- button_method = issuable_close_reopen_button_method(issuable) - add_blocked_class = false - if defined? warn_before_close - add_blocked_class = !issuable.closed? && warn_before_close .float-left.btn-group.prepend-left-10.issuable-close-dropdown.droplab-dropdown.js-issuable-close-dropdown - = link_to "#{display_button_action} #{display_issuable_type}", close_reopen_issuable_path(issuable), - method: button_method, class: "#{button_class} btn-#{button_action} #{(add_blocked_class ? 'btn-issue-blocked' : '')}", title: "#{display_button_action} #{display_issuable_type}", data: { qa_selector: 'close_issue_button' } + %button{ class: "#{button_class} btn-#{button_action} #{(add_blocked_class ? 'btn-issue-blocked' : '')}", data: { qa_selector: 'close_issue_button', endpoint: close_reopen_issuable_path(issuable) } } + #{display_button_action} #{display_issuable_type} = button_tag type: 'button', class: "#{toggle_class} btn-#{button_action}-color", data: { 'dropdown-trigger' => '#issuable-close-menu' }, 'aria-label' => _('Toggle dropdown') do @@ -20,7 +19,7 @@ %ul#issuable-close-menu.js-issuable-close-menu.dropdown-menu{ data: { dropdown: true } } %li.close-item{ class: "#{issuable_button_visibility(issuable, true) || 'droplab-item-selected'}", data: { text: _("Close %{display_issuable_type}") % { display_issuable_type: display_issuable_type }, url: close_issuable_path(issuable), - button_class: "#{button_class} btn-close", toggle_class: "#{toggle_class} btn-close-color", method: button_method } } + button_class: "#{button_class} btn-close", toggle_class: "#{toggle_class} btn-close-color" } } %button.btn.btn-transparent = icon('check', class: 'icon') .description @@ -30,7 +29,7 @@ %li.reopen-item{ class: "#{issuable_button_visibility(issuable, false) || 'droplab-item-selected'}", data: { text: _("Reopen %{display_issuable_type}") % { display_issuable_type: display_issuable_type }, url: reopen_issuable_path(issuable), - button_class: "#{button_class} btn-reopen", toggle_class: "#{toggle_class} btn-reopen-color", method: button_method } } + button_class: "#{button_class} btn-reopen", toggle_class: "#{toggle_class} btn-reopen-color" } } %button.btn.btn-transparent = icon('check', class: 'icon') .description diff --git a/changelogs/unreleased/remove_hyperlink_from_close_reopen_button.yml b/changelogs/unreleased/remove_hyperlink_from_close_reopen_button.yml new file mode 100644 index 00000000000..c0d68102041 --- /dev/null +++ b/changelogs/unreleased/remove_hyperlink_from_close_reopen_button.yml @@ -0,0 +1,5 @@ +--- +title: Remove broken hyperlink from close and reopen button +merge_request: 22220 +author: Lee Tickett +type: fixed diff --git a/db/post_migrate/20200519201128_migrate_vulnerability_dismissal_feedback.rb b/db/post_migrate/20200519201128_migrate_vulnerability_dismissal_feedback.rb new file mode 100644 index 00000000000..fee2f59abb5 --- /dev/null +++ b/db/post_migrate/20200519201128_migrate_vulnerability_dismissal_feedback.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +class MigrateVulnerabilityDismissalFeedback < ActiveRecord::Migration[6.0] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + disable_ddl_transaction! + + MIGRATION = 'UpdateVulnerabilitiesFromDismissalFeedback' + BATCH_SIZE = 500 + DELAY_INTERVAL = 2.minutes.to_i + + class Vulnerability < ActiveRecord::Base + self.table_name = 'vulnerabilities' + self.inheritance_column = :_type_disabled + + include ::EachBatch + end + + def up + return unless Gitlab.ee? + + Vulnerability.select('project_id').group(:project_id).each_batch(of: BATCH_SIZE, column: "project_id") do |project_batch, index| + batch_delay = (index - 1) * BATCH_SIZE * DELAY_INTERVAL + + project_batch.each_with_index do |project, project_batch_index| + project_delay = project_batch_index * DELAY_INTERVAL + migrate_in(batch_delay + project_delay, MIGRATION, project[:project_id]) + end + end + end + + def down + # nothing to do + end +end diff --git a/db/structure.sql b/db/structure.sql index be5b32e03a9..963a991bd61 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -14032,6 +14032,7 @@ COPY "schema_migrations" (version) FROM STDIN; 20200519141534 20200519171058 20200519194042 +20200519201128 20200520103514 20200521022725 20200521225327 diff --git a/doc/administration/troubleshooting/gitlab_rails_cheat_sheet.md b/doc/administration/troubleshooting/gitlab_rails_cheat_sheet.md index 33af356b37d..b96f5814f26 100644 --- a/doc/administration/troubleshooting/gitlab_rails_cheat_sheet.md +++ b/doc/administration/troubleshooting/gitlab_rails_cheat_sheet.md @@ -201,6 +201,20 @@ project.repository_read_only = true; project.save project.update!(repository_read_only: true) ``` +### Transfer project from one namespace to another + +```ruby + p= Project.find_by_full_path('') + + # To set the owner of the project + current_user= p.creator + +# Namespace where you want this to be moved. +namespace = Namespace.find_by_full_path("") + +::Projects::TransferService.new(p, current_user).execute(namespace) +``` + ### Bulk update service integration password for _all_ projects For example, change the Jira user's password for all projects that have the Jira diff --git a/doc/ci/junit_test_reports.md b/doc/ci/junit_test_reports.md index 0ddd1a0e656..1e5bdf08154 100644 --- a/doc/ci/junit_test_reports.md +++ b/doc/ci/junit_test_reports.md @@ -103,7 +103,8 @@ ruby: ### Go example -Use the following job in `.gitlab-ci.yml`: +Use the following job in `.gitlab-ci.yml`, and ensure you use `-set-exit-code`, +otherwise the pipeline will be marked successful, even if the tests fail: ```yaml ## Use https://github.com/jstemmer/go-junit-report to generate a JUnit report with go @@ -111,7 +112,7 @@ golang: stage: test script: - go get -u github.com/jstemmer/go-junit-report - - go test -v 2>&1 | go-junit-report > report.xml + - go test -v 2>&1 | go-junit-report -set-exit-code > report.xml artifacts: reports: junit: report.xml diff --git a/doc/development/cicd/img/ci_template_selection_v13_1.png b/doc/development/cicd/img/ci_template_selection_v13_1.png new file mode 100644 index 0000000000000000000000000000000000000000..af9f6dd1a90e76643e9fe62cdd9ca16bdeaa1431 GIT binary patch literal 21284 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 Y)eOYCLUKdnfRVxA>FVdQ&MBb@0L5c-jsO4v literal 0 HcmV?d00001 diff --git a/doc/development/cicd/index.md b/doc/development/cicd/index.md index 42d4b494544..4be671644ff 100644 --- a/doc/development/cicd/index.md +++ b/doc/development/cicd/index.md @@ -2,6 +2,8 @@ Development guides that are specific to CI/CD are listed here. +If you are creating new CI/CD templates, please read [the development guide for GitLab CI/CD templates](templates.md). + ## CI Architecture overview The following is a simplified diagram of the CI architecture. Some details are left out in order to focus on diff --git a/doc/development/cicd/templates.md b/doc/development/cicd/templates.md new file mode 100644 index 00000000000..acb4259f872 --- /dev/null +++ b/doc/development/cicd/templates.md @@ -0,0 +1,66 @@ +# Development guide for GitLab CI/CD templates + +This document explains how to develop [GitLab CI/CD templates](../../ci/examples/README.md). + +## Place the template file in a relevant directory + +All template files reside in the `lib/gitlab/ci/templates` directory, and are categorized by the following sub-directories: + +| Sub-directroy | Content | [Selectable in UI](#make-sure-the-new-template-can-be-selected-in-ui) | +|---------------|--------------------------------------------------------------|-----------------------------------------------------------------------| +| `/Jobs/*` | Auto DevOps related jobs | Yes | +| `/Pages/*` | Static site generators for GitLab Pages (for example Jekyll) | Yes | +| `/Security/*` | Security related jobs | Yes | +| `/Verify/*` | Verify/testing related jobs | Yes | +| `/Worklows/*` | Common uses of the `workflow:` keyword | No | +| `/*` (root) | General templates | Yes | + +## Criteria + +The file must follow the [`.gitlab-ci.yml` syntax](../../ci/yaml/README.md). +Verify it's valid by pasting it into the [CI lint tool](https://gitlab.com/gitlab-org/gitlab/-/ci/lint). + +Also, all templates must be named with the `*.gitlab-ci.yml` suffix. + +### Backward compatibility + +A template might be dynamically included with the `include:template:` keyword. If +you make a change to an *existing* template, you must make sure that it won't break +CI/CD in existing projects. + +## Testing + +Each CI/CD template must be tested in order to make sure that it's safe to be published. + +### Manual QA + +It's always good practice to test the template in a minimal demo project. +To do so, please follow the following steps: + +1. Create a public sample project on . +1. Add a `.gitlab-ci.yml` to the project with the proposed template. +1. Run pipelines and make sure that everything runs properly, in all possible cases + (merge request pipelines, schedules, and so on). +1. Link to the project in the description of the merge request that is adding a new template. + +This is useful information for reviewers to make sure the template is safe to be merged. + +### Make sure the new template can be selected in UI + +Templates located under some directories are also [selectable in the **New file** UI](#place-the-template-file-in-a-relevant-directory). +When you add a template into one of those directories, make sure that it correctly appears in the dropdown: + +![CI/CD template selection](img/ci_template_selection_v13_1.png) + +### Write an RSpec test + +You should write an RSpec test to make sure that pipeline jobs will be generated correctly: + +1. Add a test file at `spec/lib/gitlab/ci/templates//_spec.rb` +1. Test that pipeline jobs are properly created via `Ci::CreatePipelineService`. + +## Security + +A template could contain malicious code. For example, a template that contains the `export` shell command in a job +might accidentally expose project secret variables in a job log. +If you're unsure if it's secure or not, you need to ask security experts for cross-validation. diff --git a/lib/gitlab/background_migration/update_vulnerabilities_from_dismissal_feedback.rb b/lib/gitlab/background_migration/update_vulnerabilities_from_dismissal_feedback.rb new file mode 100644 index 00000000000..bfe9f673b53 --- /dev/null +++ b/lib/gitlab/background_migration/update_vulnerabilities_from_dismissal_feedback.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module Gitlab + module BackgroundMigration + # rubocop: disable Style/Documentation + class UpdateVulnerabilitiesFromDismissalFeedback + def perform(project_id) + end + end + end +end + +Gitlab::BackgroundMigration::UpdateVulnerabilitiesFromDismissalFeedback.prepend_if_ee('EE::Gitlab::BackgroundMigration::UpdateVulnerabilitiesFromDismissalFeedback') diff --git a/lib/gitlab/ci/templates/index.md b/lib/gitlab/ci/templates/index.md new file mode 100644 index 00000000000..ff151dd4d1a --- /dev/null +++ b/lib/gitlab/ci/templates/index.md @@ -0,0 +1,3 @@ +# Development guide for GitLab CI templates + +Please follow [the development guideline](../../../../doc/development/cicd/templates.md) diff --git a/lib/learn_gitlab.rb b/lib/learn_gitlab.rb new file mode 100644 index 00000000000..771083193d1 --- /dev/null +++ b/lib/learn_gitlab.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +class LearnGitlab + PROJECT_NAME = 'Learn GitLab'.freeze + BOARD_NAME = 'GitLab onboarding'.freeze + LABEL_NAME = 'Novice'.freeze + + def initialize(current_user) + @current_user = current_user + end + + def available? + project && board && label + end + + def project + @project ||= current_user.projects.find_by_name(PROJECT_NAME) + end + + def board + return unless project + + @board ||= project.boards.find_by_name(BOARD_NAME) + end + + def label + return unless project + + @label ||= project.labels.find_by_name(LABEL_NAME) + end + + private + + attr_reader :current_user +end diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 5d001f3c0e4..2276ccd1672 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -20115,6 +20115,9 @@ msgstr "" msgid "SecurityReports|There was an error while generating the report." msgstr "" +msgid "SecurityReports|Unable to add %{invalidProjectsMessage}" +msgstr "" + msgid "SecurityReports|Unable to add %{invalidProjects}" msgstr "" @@ -21196,6 +21199,9 @@ msgstr "" msgid "Something went wrong, unable to search projects" msgstr "" +msgid "Something went wrong." +msgstr "" + msgid "Something went wrong. Please try again." msgstr "" diff --git a/spec/controllers/registrations/experience_levels_controller_spec.rb b/spec/controllers/registrations/experience_levels_controller_spec.rb index 1fc728f5de8..8d5d594809b 100644 --- a/spec/controllers/registrations/experience_levels_controller_spec.rb +++ b/spec/controllers/registrations/experience_levels_controller_spec.rb @@ -99,34 +99,51 @@ describe Registrations::ExperienceLevelsController do end describe 'applying the chosen level' do - context "when an 'onboarding_issues_settings' cookie does not exist" do - let(:params) { super().merge(experience_level: :novice) } - - it 'does not change the cookie' do - expect { subject }.not_to change { cookies[:onboarding_issues_settings] } - end - end - - context "when an 'onboarding_issues_settings' cookie does exist" do + context 'when a "Learn GitLab" project is available' do before do - request.cookies[:onboarding_issues_settings] = '{}' + allow_next_instance_of(LearnGitlab) do |learn_gitlab| + allow(learn_gitlab).to receive(:available?).and_return(true) + allow(learn_gitlab).to receive(:label).and_return(double(id: 1)) + end end context 'when novice' do let(:params) { super().merge(experience_level: :novice) } - it "adds a 'hideAdvanced' setting to the cookie" do - expect { subject }.to change { Gitlab::Json.parse(cookies[:onboarding_issues_settings])['hideAdvanced'] }.from(nil).to(true) + it 'adds a BoardLabel' do + expect_next_instance_of(Boards::UpdateService) do |service| + expect(service).to receive(:execute) + end + + subject end end context 'when experienced' do let(:params) { super().merge(experience_level: :experienced) } - it 'does not change the cookie' do - expect { subject }.not_to change { cookies[:onboarding_issues_settings] } + it 'does not add a BoardLabel' do + expect(Boards::UpdateService).not_to receive(:new) + + subject + end + end + end + + context 'when no "Learn GitLab" project exists' do + let(:params) { super().merge(experience_level: :novice) } + + before do + allow_next_instance_of(LearnGitlab) do |learn_gitlab| + allow(learn_gitlab).to receive(:available?).and_return(false) end end + + it 'does not add a BoardLabel' do + expect(Boards::UpdateService).not_to receive(:new) + + subject + end end end end diff --git a/spec/features/issuables/close_reopen_report_toggle_spec.rb b/spec/features/issuables/close_reopen_report_toggle_spec.rb index cf3028ec4c9..f442b25f593 100644 --- a/spec/features/issuables/close_reopen_report_toggle_spec.rb +++ b/spec/features/issuables/close_reopen_report_toggle_spec.rb @@ -10,7 +10,7 @@ RSpec.describe 'Issuables Close/Reopen/Report toggle' do let(:human_model_name) { issuable.model_name.human.downcase } it 'shows toggle' do - expect(page).to have_link("Close #{human_model_name}") + expect(page).to have_button("Close #{human_model_name}") expect(page).to have_selector('.issuable-close-dropdown') end @@ -63,7 +63,7 @@ RSpec.describe 'Issuables Close/Reopen/Report toggle' do let(:issuable) { create(:issue, :closed, :locked, project: project) } it 'hides the reopen button' do - expect(page).not_to have_link('Reopen issue') + expect(page).not_to have_button('Reopen issue') end context 'when the issue author is the current user' do @@ -72,7 +72,7 @@ RSpec.describe 'Issuables Close/Reopen/Report toggle' do end it 'hides the reopen button' do - expect(page).not_to have_link('Reopen issue') + expect(page).not_to have_button('Reopen issue') end end end @@ -91,8 +91,8 @@ RSpec.describe 'Issuables Close/Reopen/Report toggle' do it 'only shows the `Report abuse` and `New issue` buttons' do expect(page).to have_link('Report abuse') expect(page).to have_link('New issue') - expect(page).not_to have_link('Close issue') - expect(page).not_to have_link('Reopen issue') + expect(page).not_to have_button('Close issue') + expect(page).not_to have_button('Reopen issue') expect(page).not_to have_link('Edit') end end @@ -120,8 +120,8 @@ RSpec.describe 'Issuables Close/Reopen/Report toggle' do it 'shows only the `Report abuse` and `Edit` button' do expect(page).to have_link('Report abuse') expect(page).to have_link('Edit') - expect(page).not_to have_link('Close merge request') - expect(page).not_to have_link('Reopen merge request') + expect(page).not_to have_button('Close merge request') + expect(page).not_to have_button('Reopen merge request') end context 'when the merge request author is the current user' do @@ -130,8 +130,8 @@ RSpec.describe 'Issuables Close/Reopen/Report toggle' do it 'shows only the `Edit` button' do expect(page).to have_link('Edit') expect(page).not_to have_link('Report abuse') - expect(page).not_to have_link('Close merge request') - expect(page).not_to have_link('Reopen merge request') + expect(page).not_to have_button('Close merge request') + expect(page).not_to have_button('Reopen merge request') end end end @@ -149,8 +149,8 @@ RSpec.describe 'Issuables Close/Reopen/Report toggle' do it 'only shows a `Report abuse` button' do expect(page).to have_link('Report abuse') - expect(page).not_to have_link('Close merge request') - expect(page).not_to have_link('Reopen merge request') + expect(page).not_to have_button('Close merge request') + expect(page).not_to have_button('Reopen merge request') expect(page).not_to have_link('Edit') end end diff --git a/spec/features/merge_request/user_closes_merge_request_spec.rb b/spec/features/merge_request/user_closes_merge_request_spec.rb index 669bd989f4f..e6b6778c76e 100644 --- a/spec/features/merge_request/user_closes_merge_request_spec.rb +++ b/spec/features/merge_request/user_closes_merge_request_spec.rb @@ -15,7 +15,7 @@ RSpec.describe 'User closes a merge requests', :js do end it 'closes a merge request' do - click_link('Close merge request', match: :first) + click_button('Close merge request', match: :first) expect(page).to have_content(merge_request.title) expect(page).to have_content('Closed by') diff --git a/spec/features/merge_request/user_reopens_merge_request_spec.rb b/spec/features/merge_request/user_reopens_merge_request_spec.rb index 020929dc416..7866ece84ac 100644 --- a/spec/features/merge_request/user_reopens_merge_request_spec.rb +++ b/spec/features/merge_request/user_reopens_merge_request_spec.rb @@ -15,7 +15,7 @@ RSpec.describe 'User reopens a merge requests', :js do end it 'reopens a merge request' do - click_link('Reopen merge request', match: :first) + click_button('Reopen merge request', match: :first) page.within('.status-box') do expect(page).to have_content('Open') diff --git a/spec/features/task_lists_spec.rb b/spec/features/task_lists_spec.rb index fa87c4bb1c4..fc3f8a94318 100644 --- a/spec/features/task_lists_spec.rb +++ b/spec/features/task_lists_spec.rb @@ -103,7 +103,7 @@ RSpec.describe 'Task Lists' do wait_for_requests expect(page).to have_selector(".md .task-list .task-list-item .task-list-item-checkbox") - expect(page).to have_selector('a.btn-close') + expect(page).to have_selector('.btn-close') end it 'is only editable by author' do diff --git a/spec/frontend/close_reopen_report_toggle_spec.js b/spec/frontend/close_reopen_report_toggle_spec.js index f6b5e4bed87..d2ce6298c5c 100644 --- a/spec/frontend/close_reopen_report_toggle_spec.js +++ b/spec/frontend/close_reopen_report_toggle_spec.js @@ -274,12 +274,7 @@ describe('CloseReopenReportToggle', () => { { input: button, valueAttribute: 'data-url', - inputAttribute: 'href', - }, - { - input: button, - valueAttribute: 'data-method', - inputAttribute: 'data-method', + inputAttribute: 'data-endpoint', }, ], }); diff --git a/spec/frontend/vue_shared/components/project_selector/project_list_item_spec.js b/spec/frontend/vue_shared/components/project_selector/project_list_item_spec.js index eb1d9e93634..385134c4a3f 100644 --- a/spec/frontend/vue_shared/components/project_selector/project_list_item_spec.js +++ b/spec/frontend/vue_shared/components/project_selector/project_list_item_spec.js @@ -74,6 +74,16 @@ describe('ProjectListItem component', () => { expect(renderedNamespace).toBe('a / ... / e /'); }); + it(`renders a simple namespace name of a GraphQL project`, () => { + options.propsData.project.name_with_namespace = undefined; + options.propsData.project.nameWithNamespace = 'test'; + + wrapper = shallowMount(Component, options); + const renderedNamespace = trimText(wrapper.find('.js-project-namespace').text()); + + expect(renderedNamespace).toBe('test /'); + }); + it(`renders the project name`, () => { options.propsData.project.name = 'my-test-project'; diff --git a/spec/lib/learn_gitlab_spec.rb b/spec/lib/learn_gitlab_spec.rb new file mode 100644 index 00000000000..2e50bf2bafc --- /dev/null +++ b/spec/lib/learn_gitlab_spec.rb @@ -0,0 +1,61 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe LearnGitlab do + let_it_be(:current_user) { create(:user) } + let_it_be(:learn_gitlab_project) { create(:project, name: LearnGitlab::PROJECT_NAME) } + let_it_be(:learn_gitlab_board) { create(:board, project: learn_gitlab_project, name: LearnGitlab::BOARD_NAME) } + let_it_be(:learn_gitlab_label) { create(:label, project: learn_gitlab_project, name: LearnGitlab::LABEL_NAME) } + + before do + learn_gitlab_project.add_developer(current_user) + end + + describe '.available?' do + using RSpec::Parameterized::TableSyntax + + where(:project, :board, :label, :expected_result) do + nil | nil | nil | nil + nil | nil | true | nil + nil | true | nil | nil + nil | true | true | nil + true | nil | nil | nil + true | nil | true | nil + true | true | nil | nil + true | true | true | true + end + + with_them do + before do + allow_next_instance_of(described_class) do |learn_gitlab| + allow(learn_gitlab).to receive(:project).and_return(project) + allow(learn_gitlab).to receive(:board).and_return(board) + allow(learn_gitlab).to receive(:label).and_return(label) + end + end + + subject { described_class.new(current_user).available? } + + it { is_expected.to be expected_result } + end + end + + describe '.project' do + subject { described_class.new(current_user).project } + + it { is_expected.to eq learn_gitlab_project } + end + + describe '.board' do + subject { described_class.new(current_user).board } + + it { is_expected.to eq learn_gitlab_board } + end + + describe '.label' do + subject { described_class.new(current_user).label } + + it { is_expected.to eq learn_gitlab_label } + end +end diff --git a/vendor/project_templates/learn_gitlab.tar.gz b/vendor/project_templates/learn_gitlab.tar.gz index 249f25bc85c975d6461d7536d77f8114ae6d10ee..0eca66b064a9963a8d2e74906b7fe29e9e3cec44 100644 GIT binary patch delta 32877 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 a|MXw-`Fs8Y0*jCTXD%`QXTzYv!~g()aMbz$ delta 33269 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