From 2c06e006d832757e90e5199112ab062b27df7433 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 17 Nov 2021 18:14:12 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- GITALY_SERVER_VERSION | 2 +- .../invite_members/components/confetti.vue | 33 ++ .../components/invite_members_modal.vue | 101 ++---- .../javascripts/invite_members/constants.js | 119 ++++++- .../index/components/delete_project_modal.vue | 2 +- .../learn_gitlab/components/learn_gitlab.vue | 14 + .../projects/learn_gitlab/index/index.js | 5 +- .../components/project_delete_button.vue | 2 +- app/helpers/learn_gitlab_helper.rb | 21 +- app/models/deployment.rb | 14 + .../deployments/archive_in_project_service.rb | 27 ++ .../projects/learn_gitlab/index.html.haml | 9 +- app/workers/all_queues.yml | 9 + .../deployments/archive_in_project_worker.rb | 19 + .../development/deployments_archive.yml | 8 + .../experiment/confetti_post_signup.yml | 8 + ...cate-based-integration-with-kubernetes.yml | 4 +- .../14-5-deprecate-opensuse-15-2.yml | 9 + ...0101_add_archived_column_to_deployments.rb | 9 + ...101_add_index_on_unarchived_deployments.rb | 15 + db/schema_migrations/20211105010101 | 1 + db/schema_migrations/20211110010101 | 1 + db/structure.sql | 5 +- doc/administration/cicd.md | 25 +- doc/api/members.md | 37 ++ doc/ci/directed_acyclic_graph/index.md | 4 +- doc/ci/environments/index.md | 39 +++ doc/ci/pipelines/multi_project_pipelines.md | 19 +- .../runner_cloud/linux_runner_cloud.md | 5 +- doc/ci/variables/index.md | 4 +- doc/ci/yaml/index.md | 327 ++++++++++-------- doc/development/migration_style_guide.md | 8 +- doc/update/deprecations.md | 12 +- locale/gitlab.pot | 23 +- package.json | 1 + .../components/confetti_spec.js | 28 ++ .../components/invite_members_modal_spec.js | 52 ++- .../components/learn_gitlab_spec.js | 33 +- .../project_delete_button_spec.js.snap | 2 +- spec/helpers/learn_gitlab_helper_spec.rb | 227 ++++++------ spec/models/deployment_spec.rb | 38 ++ .../archive_in_project_service_spec.rb | 80 +++++ .../archive_in_project_worker_spec.rb | 18 + yarn.lock | 5 + 44 files changed, 1028 insertions(+), 396 deletions(-) create mode 100644 app/assets/javascripts/invite_members/components/confetti.vue create mode 100644 app/services/deployments/archive_in_project_service.rb create mode 100644 app/workers/deployments/archive_in_project_worker.rb create mode 100644 config/feature_flags/development/deployments_archive.yml create mode 100644 config/feature_flags/experiment/confetti_post_signup.yml create mode 100644 data/deprecations/14-5-deprecate-opensuse-15-2.yml create mode 100644 db/migrate/20211105010101_add_archived_column_to_deployments.rb create mode 100644 db/migrate/20211110010101_add_index_on_unarchived_deployments.rb create mode 100644 db/schema_migrations/20211105010101 create mode 100644 db/schema_migrations/20211110010101 create mode 100644 spec/frontend/invite_members/components/confetti_spec.js create mode 100644 spec/services/deployments/archive_in_project_service_spec.rb create mode 100644 spec/workers/deployments/archive_in_project_worker_spec.rb diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION index a26356bddeb..16ac9592801 100644 --- a/GITALY_SERVER_VERSION +++ b/GITALY_SERVER_VERSION @@ -1 +1 @@ -3772b182b5b714770956de4d76f3ce09a220fb85 +57ac403e3ac18dbfa7e1e72bfb3eb8ab01cea626 diff --git a/app/assets/javascripts/invite_members/components/confetti.vue b/app/assets/javascripts/invite_members/components/confetti.vue new file mode 100644 index 00000000000..2e5744afcd4 --- /dev/null +++ b/app/assets/javascripts/invite_members/components/confetti.vue @@ -0,0 +1,33 @@ + + + diff --git a/app/assets/javascripts/invite_members/components/invite_members_modal.vue b/app/assets/javascripts/invite_members/components/invite_members_modal.vue index ee77ba110bb..cf4f434a7a8 100644 --- a/app/assets/javascripts/invite_members/components/invite_members_modal.vue +++ b/app/assets/javascripts/invite_members/components/invite_members_modal.vue @@ -18,19 +18,21 @@ import ExperimentTracking from '~/experimentation/experiment_tracking'; import { sanitize } from '~/lib/dompurify'; import { BV_SHOW_MODAL } from '~/lib/utils/constants'; import { getParameterValues } from '~/lib/utils/url_utility'; -import { s__, sprintf } from '~/locale'; +import { sprintf } from '~/locale'; import { INVITE_MEMBERS_IN_COMMENT, GROUP_FILTERS, USERS_FILTER_ALL, MEMBER_AREAS_OF_FOCUS, INVITE_MEMBERS_FOR_TASK, + MODAL_LABELS, } from '../constants'; import eventHub from '../event_hub'; import { responseMessageFromError, responseMessageFromSuccess, } from '../utils/response_message_parser'; +import ModalConfetti from './confetti.vue'; import GroupSelect from './group_select.vue'; import MembersTokenSelect from './members_token_select.vue'; @@ -50,6 +52,7 @@ export default { GlFormCheckboxGroup, MembersTokenSelect, GroupSelect, + ModalConfetti, }, inject: ['newProjectPath'], props: { @@ -129,22 +132,30 @@ export default { source: 'unknown', invalidFeedbackMessage: '', isLoading: false, + mode: 'default', }; }, computed: { + isCelebration() { + return this.mode === 'celebrate'; + }, validationState() { return this.invalidFeedbackMessage === '' ? null : false; }, isInviteGroup() { return this.inviteeType === 'group'; }, + modalTitle() { + return this.$options.labels[this.inviteeType].modal[this.mode].title; + }, introText() { - const inviteTo = this.isProject ? 'toProject' : 'toGroup'; - - return sprintf(this.$options.labels[this.inviteeType][inviteTo].introText, { + return sprintf(this.$options.labels[this.inviteeType][this.inviteTo][this.mode].introText, { name: this.name, }); }, + inviteTo() { + return this.isProject ? 'toProject' : 'toGroup'; + }, toastOptions() { return { onComplete: () => { @@ -234,7 +245,8 @@ export default { usersToAddById.map((user) => user.id).join(','), ]; }, - openModal({ inviteeType, source }) { + openModal({ mode = 'default', inviteeType, source }) { + this.mode = mode; this.inviteeType = inviteeType; this.source = source; @@ -381,60 +393,7 @@ export default { return unescape(sanitize(message, { ALLOWED_TAGS: [] })); }, }, - labels: { - members: { - modalTitle: s__('InviteMembersModal|Invite members'), - searchField: s__('InviteMembersModal|GitLab member or email address'), - placeHolder: s__('InviteMembersModal|Select members or type email addresses'), - toGroup: { - introText: s__( - "InviteMembersModal|You're inviting members to the %{strongStart}%{name}%{strongEnd} group.", - ), - }, - toProject: { - introText: s__( - "InviteMembersModal|You're inviting members to the %{strongStart}%{name}%{strongEnd} project.", - ), - }, - tasksToBeDone: { - title: s__( - 'InviteMembersModal|Create issues for your new team member to work on (optional)', - ), - noProjects: s__( - 'InviteMembersModal|To assign issues to a new team member, you need a project for the issues. %{linkStart}Create a project to get started.%{linkEnd}', - ), - }, - tasksProject: { - title: s__('InviteMembersModal|Choose a project for the issues'), - }, - }, - group: { - modalTitle: s__('InviteMembersModal|Invite a group'), - searchField: s__('InviteMembersModal|Select a group to invite'), - placeHolder: s__('InviteMembersModal|Search for a group to invite'), - toGroup: { - introText: s__( - "InviteMembersModal|You're inviting a group to the %{strongStart}%{name}%{strongEnd} group.", - ), - }, - toProject: { - introText: s__( - "InviteMembersModal|You're inviting a group to the %{strongStart}%{name}%{strongEnd} project.", - ), - }, - }, - accessLevel: s__('InviteMembersModal|Select a role'), - accessExpireDate: s__('InviteMembersModal|Access expiration date (optional)'), - toastMessageSuccessful: s__('InviteMembersModal|Members were successfully added'), - invalidFeedbackMessageDefault: s__('InviteMembersModal|Something went wrong'), - readMoreText: s__(`InviteMembersModal|%{linkStart}Read more%{linkEnd} about role permissions`), - inviteButtonText: s__('InviteMembersModal|Invite'), - cancelButtonText: s__('InviteMembersModal|Cancel'), - headerCloseLabel: s__('InviteMembersModal|Close invite team members'), - areasOfFocusLabel: s__( - 'InviteMembersModal|What would you like new member(s) to focus on? (optional)', - ), - }, + labels: MODAL_LABELS, membersTokenSelectLabelId: 'invite-members-input', }; @@ -445,20 +404,28 @@ export default { size="sm" data-qa-selector="invite_members_modal_content" data-testid="invite-members-modal" - :title="$options.labels[inviteeType].modalTitle" + :title="modalTitle" :header-close-label="$options.labels.headerCloseLabel" @hidden="resetFields" @close="resetFields" @hide="resetFields" >
-

- - - -

+
+
+
+

+ + + +
+ {{ $options.labels.members.modal.celebrate.intro }} + +

+
+
${escape(this.projectName)}`, diff --git a/app/assets/javascripts/pages/projects/learn_gitlab/components/learn_gitlab.vue b/app/assets/javascripts/pages/projects/learn_gitlab/components/learn_gitlab.vue index 51980b2d971..95afcb6bda8 100644 --- a/app/assets/javascripts/pages/projects/learn_gitlab/components/learn_gitlab.vue +++ b/app/assets/javascripts/pages/projects/learn_gitlab/components/learn_gitlab.vue @@ -1,5 +1,6 @@