From 762672fd26a0ae804e57376587b16b99cb3a32a1 Mon Sep 17 00:00:00 2001 From: Lukas Eipert Date: Wed, 16 May 2018 11:16:33 +0000 Subject: [PATCH] Project Sidebar: Split CI/CD into CI/CD and Operations --- app/helpers/projects_helper.rb | 1 + .../layouts/nav/sidebar/_project.html.haml | 116 +++++++----- .../unreleased/43673-operations-tab-mvc.yml | 5 + locale/gitlab.pot | 172 +++++++++++++++--- .../nav/sidebar/_project.html.haml_spec.rb | 9 +- 5 files changed, 230 insertions(+), 73 deletions(-) create mode 100644 changelogs/unreleased/43673-operations-tab-mvc.yml diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index eb81dc2de43..fa54eafd3a3 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -257,6 +257,7 @@ module ProjectsHelper if project.builds_enabled? && can?(current_user, :read_pipeline, project) nav_tabs << :pipelines + nav_tabs << :operations end if project.external_issue_tracker diff --git a/app/views/layouts/nav/sidebar/_project.html.haml b/app/views/layouts/nav/sidebar/_project.html.haml index 196db08cebd..c3ea592a6b5 100644 --- a/app/views/layouts/nav/sidebar/_project.html.haml +++ b/app/views/layouts/nav/sidebar/_project.html.haml @@ -13,13 +13,13 @@ .nav-icon-container = sprite_icon('project') %span.nav-item-name - Project + = _('Project') %ul.sidebar-sub-level-items = nav_link(path: 'projects#show', html_options: { class: "fly-out-top-item" } ) do = link_to project_path(@project) do %strong.fly-out-top-item-name - #{ _('Overview') } + = _('Overview') %li.divider.fly-out-top-item = nav_link(path: 'projects#show') do = link_to project_path(@project), title: _('Project details'), class: 'shortcuts-project' do @@ -40,45 +40,45 @@ .nav-icon-container = sprite_icon('doc_text') %span.nav-item-name - Repository + = _('Repository') %ul.sidebar-sub-level-items = nav_link(controller: %w(tree blob blame edit_tree new_tree find_file commit commits compare projects/repositories tags branches releases graphs network), html_options: { class: "fly-out-top-item" } ) do = link_to project_tree_path(@project) do %strong.fly-out-top-item-name - #{ _('Repository') } + = _('Repository') %li.divider.fly-out-top-item = nav_link(controller: %w(tree blob blame edit_tree new_tree find_file)) do = link_to project_tree_path(@project) do - #{ _('Files') } + = _('Files') = nav_link(controller: [:commit, :commits]) do = link_to project_commits_path(@project, current_ref) do - #{ _('Commits') } + = _('Commits') = nav_link(html_options: {class: branches_tab_class}) do = link_to project_branches_path(@project) do - #{ _('Branches') } + = _('Branches') = nav_link(controller: [:tags, :releases]) do = link_to project_tags_path(@project) do - #{ _('Tags') } + = _('Tags') = nav_link(path: 'graphs#show') do = link_to project_graph_path(@project, current_ref) do - #{ _('Contributors') } + = _('Contributors') = nav_link(controller: %w(network)) do = link_to project_network_path(@project, current_ref) do - #{ s_('ProjectNetworkGraph|Graph') } + = _('Graph') = nav_link(controller: :compare) do = link_to project_compare_index_path(@project, from: @repository.root_ref, to: current_ref) do - #{ _('Compare') } + = _('Compare') = nav_link(path: 'graphs#charts') do = link_to charts_project_graph_path(@project, current_ref) do - #{ _('Charts') } + = _('Charts') - if project_nav_tab? :issues = nav_link(controller: @project.issues_enabled? ? [:issues, :labels, :milestones, :boards] : :issues) do @@ -86,7 +86,7 @@ .nav-icon-container = sprite_icon('issues') %span.nav-item-name - Issues + = _('Issues') - if @project.issues_enabled? %span.badge.count.issue_counter = number_with_delimiter(@project.open_issues_count) @@ -95,7 +95,7 @@ = nav_link(controller: :issues, html_options: { class: "fly-out-top-item" } ) do = link_to project_issues_path(@project) do %strong.fly-out-top-item-name - #{ _('Issues') } + = _('Issues') - if @project.issues_enabled? %span.badge.count.issue_counter.fly-out-badge = number_with_delimiter(@project.open_issues_count) @@ -103,7 +103,7 @@ = nav_link(controller: :issues, action: :index) do = link_to project_issues_path(@project), title: 'Issues' do %span - List + = _('List') = nav_link(controller: :boards) do = link_to project_boards_path(@project), title: boards_link_text do @@ -113,12 +113,12 @@ = nav_link(controller: :labels) do = link_to project_labels_path(@project), title: 'Labels' do %span - Labels + = _('Labels') = nav_link(controller: :milestones) do = link_to project_milestones_path(@project), title: 'Milestones' do %span - Milestones + = _('Milestones') - if project_nav_tab? :external_issue_tracker = nav_link do - issue_tracker = @project.external_issue_tracker @@ -139,54 +139,75 @@ .nav-icon-container = sprite_icon('git-merge') %span.nav-item-name - Merge Requests + = _('Merge Requests') %span.badge.count.merge_counter.js-merge-counter = number_with_delimiter(@project.open_merge_requests_count) %ul.sidebar-sub-level-items.is-fly-out-only = nav_link(controller: :merge_requests, html_options: { class: "fly-out-top-item" } ) do = link_to project_merge_requests_path(@project) do %strong.fly-out-top-item-name - #{ _('Merge Requests') } + = _('Merge Requests') %span.badge.count.merge_counter.js-merge-counter.fly-out-badge = number_with_delimiter(@project.open_merge_requests_count) - if project_nav_tab? :pipelines - = nav_link(controller: [:pipelines, :builds, :jobs, :pipeline_schedules, :environments, :artifacts, :clusters, :user, :gcp]) do + = nav_link(controller: [:pipelines, :builds, :jobs, :pipeline_schedules, :artifacts]) do = link_to project_pipelines_path(@project), class: 'shortcuts-pipelines' do .nav-icon-container = sprite_icon('pipeline') %span.nav-item-name - CI / CD + = _('CI / CD') %ul.sidebar-sub-level-items - = nav_link(controller: [:pipelines, :builds, :jobs, :pipeline_schedules, :environments, :artifacts, :clusters, :user, :gcp], html_options: { class: "fly-out-top-item" } ) do + = nav_link(controller: [:pipelines, :builds, :jobs, :pipeline_schedules, :artifacts], html_options: { class: "fly-out-top-item" } ) do = link_to project_pipelines_path(@project) do %strong.fly-out-top-item-name - #{ _('CI / CD') } + = _('CI / CD') %li.divider.fly-out-top-item - if project_nav_tab? :pipelines = nav_link(path: ['pipelines#index', 'pipelines#show']) do = link_to project_pipelines_path(@project), title: 'Pipelines', class: 'shortcuts-pipelines' do %span - Pipelines + = _('Pipelines') - if project_nav_tab? :builds = nav_link(controller: [:jobs, :artifacts]) do = link_to project_jobs_path(@project), title: 'Jobs', class: 'shortcuts-builds' do %span - Jobs + = _('Jobs') - if project_nav_tab? :pipelines = nav_link(controller: :pipeline_schedules) do = link_to pipeline_schedules_path(@project), title: 'Schedules', class: 'shortcuts-builds' do %span - Schedules + = _('Schedules') + + - if @project.feature_available?(:builds, current_user) && !@project.empty_repo? + = nav_link(path: 'pipelines#charts') do + = link_to charts_project_pipelines_path(@project), title: 'Charts', class: 'shortcuts-pipelines-charts' do + %span + = _('Charts') + + - if project_nav_tab? :operations + = nav_link(controller: [:environments, :clusters, :user, :gcp]) do + = link_to project_environments_path(@project), class: 'shortcuts-operations' do + .nav-icon-container + = sprite_icon('cloud-gear') + %span.nav-item-name + = _('Operations') + + %ul.sidebar-sub-level-items + = nav_link(controller: [:environments, :clusters, :user, :gcp], html_options: { class: "fly-out-top-item" } ) do + = link_to project_environments_path(@project) do + %strong.fly-out-top-item-name + = _('Operations') + %li.divider.fly-out-top-item - if project_nav_tab? :environments = nav_link(controller: :environments) do = link_to project_environments_path(@project), title: 'Environments', class: 'shortcuts-environments' do %span - Environments + = _('Environments') - if project_nav_tab? :clusters - show_cluster_hint = show_gke_cluster_integration_callout?(@project) @@ -217,19 +238,18 @@ %span= _("Got it!") = sprite_icon('thumb-up') - - if @project.feature_available?(:builds, current_user) && !@project.empty_repo? - = nav_link(path: 'pipelines#charts') do - = link_to charts_project_pipelines_path(@project), title: 'Charts', class: 'shortcuts-pipelines-charts' do - %span - Charts - - if project_nav_tab? :container_registry = nav_link(controller: %w[projects/registry/repositories]) do = link_to project_container_registry_index_path(@project), class: 'shortcuts-container-registry' do .nav-icon-container = sprite_icon('disk') %span.nav-item-name - Registry + = _('Registry') + %ul.sidebar-sub-level-items.is-fly-out-only + = nav_link(controller: %w[projects/registry/repositories], html_options: { class: "fly-out-top-item" } ) do + = link_to project_container_registry_index_path(@project) do + %strong.fly-out-top-item-name + = _('Registry') - if project_nav_tab? :wiki = nav_link(controller: :wikis) do @@ -237,12 +257,12 @@ .nav-icon-container = sprite_icon('book') %span.nav-item-name - Wiki + = _('Wiki') %ul.sidebar-sub-level-items.is-fly-out-only = nav_link(controller: :wikis, html_options: { class: "fly-out-top-item" } ) do = link_to get_project_wiki_path(@project) do %strong.fly-out-top-item-name - #{ _('Wiki') } + = _('Wiki') - if project_nav_tab? :snippets = nav_link(controller: :snippets) do @@ -250,12 +270,12 @@ .nav-icon-container = sprite_icon('snippet') %span.nav-item-name - Snippets + = _('Snippets') %ul.sidebar-sub-level-items.is-fly-out-only = nav_link(controller: :snippets, html_options: { class: "fly-out-top-item" } ) do = link_to project_snippets_path(@project) do %strong.fly-out-top-item-name - #{ _('Snippets') } + = _('Snippets') - if project_nav_tab? :settings = nav_link(path: %w[projects#edit project_members#index integrations#show services#edit repository#show ci_cd#show badges#index pages#show]) do @@ -263,7 +283,7 @@ .nav-icon-container = sprite_icon('settings') %span.nav-item-name.qa-settings-item - Settings + = _('Settings') %ul.sidebar-sub-level-items - can_edit = can?(current_user, :admin_project, @project) @@ -271,16 +291,16 @@ = nav_link(path: %w[projects#edit project_members#index integrations#show services#edit repository#show ci_cd#show badges#index pages#show], html_options: { class: "fly-out-top-item" } ) do = link_to edit_project_path(@project) do %strong.fly-out-top-item-name - #{ _('Settings') } + = _('Settings') %li.divider.fly-out-top-item = nav_link(path: %w[projects#edit]) do = link_to edit_project_path(@project), title: 'General' do %span - General + = _('General') = nav_link(controller: :project_members) do = link_to project_project_members_path(@project), title: 'Members' do %span - Members + = _('Members') - if can_edit = nav_link(controller: :badges) do = link_to project_settings_badges_path(@project), title: _('Badges') do @@ -290,21 +310,21 @@ = nav_link(controller: [:integrations, :services, :hooks, :hook_logs]) do = link_to project_settings_integrations_path(@project), title: 'Integrations' do %span - Integrations + = _('Integrations') = nav_link(controller: :repository) do = link_to project_settings_repository_path(@project), title: 'Repository' do %span - Repository + = _('Repository') - if @project.feature_available?(:builds, current_user) = nav_link(controller: :ci_cd) do = link_to project_settings_ci_cd_path(@project), title: 'CI / CD' do %span - CI / CD + = _('CI / CD') - if @project.pages_available? = nav_link(controller: :pages) do = link_to project_pages_path(@project), title: 'Pages' do %span - Pages + = _('Pages') - else = nav_link(controller: :project_members) do @@ -312,12 +332,12 @@ .nav-icon-container = sprite_icon('users') %span.nav-item-name - Members + = _('Members') %ul.sidebar-sub-level-items.is-fly-out-only = nav_link(path: %w[members#show], html_options: { class: "fly-out-top-item" } ) do = link_to project_project_members_path(@project) do %strong.fly-out-top-item-name - #{ _('Members') } + = _('Members') = render 'shared/sidebar_toggle_button' diff --git a/changelogs/unreleased/43673-operations-tab-mvc.yml b/changelogs/unreleased/43673-operations-tab-mvc.yml new file mode 100644 index 00000000000..cd580e7a8d6 --- /dev/null +++ b/changelogs/unreleased/43673-operations-tab-mvc.yml @@ -0,0 +1,5 @@ +--- +title: Move project sidebar sub-entries 'Environments' and 'Kubernetes' from 'CI/CD' to a new entry 'Operations' +merge_request: 18941 +author: +type: changed diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 1179f71353a..90cdfd0dd03 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: gitlab 1.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-05-14 10:49+0200\n" -"PO-Revision-Date: 2018-05-14 10:49+0200\n" +"POT-Creation-Date: 2018-05-15 15:05+0200\n" +"PO-Revision-Date: 2018-05-15 15:05+0200\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" @@ -53,6 +53,16 @@ msgid_plural "%d metrics" msgstr[0] "" msgstr[1] "" +msgid "%d staged change" +msgid_plural "%d staged changes" +msgstr[0] "" +msgstr[1] "" + +msgid "%d unstaged change" +msgid_plural "%d unstaged changes" +msgstr[0] "" +msgstr[1] "" + msgid "%s additional commit has been omitted to prevent performance issues." msgid_plural "%s additional commits have been omitted to prevent performance issues." msgstr[0] "" @@ -101,6 +111,9 @@ msgstr "" msgid "%{title} changes" msgstr "" +msgid "%{unstaged} unstaged and %{staged} staged changes" +msgstr "" + msgid "(checkout the %{link} for information on how to install it)." msgstr "" @@ -207,6 +220,9 @@ msgstr "" msgid "Active" msgstr "" +msgid "Active Sessions" +msgstr "" + msgid "Activity" msgstr "" @@ -315,6 +331,9 @@ msgstr "" msgid "An error occurred when toggling the notification subscription" msgstr "" +msgid "An error occurred while dismissing the alert. Refresh the page and try again." +msgstr "" + msgid "An error occurred while dismissing the feature highlight. Refresh the page and try dismissing again." msgstr "" @@ -1022,6 +1041,9 @@ msgstr "" msgid "ClusterIntegration|Environment scope" msgstr "" +msgid "ClusterIntegration|Every new Google Cloud Platform (GCP) account receives $300 in credit upon %{sign_up_link}. In partnership with Google, GitLab is able to offer an additional $200 for new GCP accounts to get started with GitLab's Google Kubernetes Engine Integration." +msgstr "" + msgid "ClusterIntegration|GitLab Integration" msgstr "" @@ -1145,6 +1167,9 @@ msgstr "" msgid "ClusterIntegration|Read our %{link_to_help_page} on Kubernetes cluster integration." msgstr "" +msgid "ClusterIntegration|Redeem up to $500 in free credit for Google Cloud Platform" +msgstr "" + msgid "ClusterIntegration|Remove Kubernetes cluster integration" msgstr "" @@ -1235,6 +1260,9 @@ msgstr "" msgid "ClusterIntegration|properly configured" msgstr "" +msgid "ClusterIntegration|sign up" +msgstr "" + msgid "Collapse" msgstr "" @@ -1359,6 +1387,9 @@ msgstr "" msgid "Configure limits for web and API requests." msgstr "" +msgid "Configure push mirrors." +msgstr "" + msgid "Configure storage path and circuit breaker settings." msgstr "" @@ -1524,6 +1555,9 @@ msgstr "" msgid "CreateTokenToCloneLink|create a personal access token" msgstr "" +msgid "Created" +msgstr "" + msgid "Cron Timezone" msgstr "" @@ -1595,6 +1629,54 @@ msgstr[1] "" msgid "Deploy Keys" msgstr "" +msgid "DeployKeys|+%{count} others" +msgstr "" + +msgid "DeployKeys|Current project" +msgstr "" + +msgid "DeployKeys|Deploy key" +msgstr "" + +msgid "DeployKeys|Enabled deploy keys" +msgstr "" + +msgid "DeployKeys|Error enabling deploy key" +msgstr "" + +msgid "DeployKeys|Error getting deploy keys" +msgstr "" + +msgid "DeployKeys|Error removing deploy key" +msgstr "" + +msgid "DeployKeys|Expand %{count} other projects" +msgstr "" + +msgid "DeployKeys|Loading deploy keys" +msgstr "" + +msgid "DeployKeys|No deploy keys found. Create one with the form above." +msgstr "" + +msgid "DeployKeys|Privately accessible deploy keys" +msgstr "" + +msgid "DeployKeys|Project usage" +msgstr "" + +msgid "DeployKeys|Publicly accessible deploy keys" +msgstr "" + +msgid "DeployKeys|Read access only" +msgstr "" + +msgid "DeployKeys|Write access allowed" +msgstr "" + +msgid "DeployKeys|You are going to remove this deploy key. Are you sure?" +msgstr "" + msgid "DeployTokens|Active Deploy Tokens (%{active_tokens})" msgstr "" @@ -1751,9 +1833,6 @@ msgstr "" msgid "Edit files in the editor and commit changes here" msgstr "" -msgid "Editing" -msgstr "" - msgid "Email" msgstr "" @@ -1793,6 +1872,9 @@ msgstr "" msgid "Enable the Performance Bar for a given group." msgstr "" +msgid "Environments" +msgstr "" + msgid "Environments|An error occurred while fetching the environments." msgstr "" @@ -2005,6 +2087,9 @@ msgstr "" msgid "GPG Keys" msgstr "" +msgid "General" +msgstr "" + msgid "Generate a default set of labels" msgstr "" @@ -2053,6 +2138,9 @@ msgstr "" msgid "Got it!" msgstr "" +msgid "Graph" +msgstr "" + msgid "Group CI/CD settings" msgstr "" @@ -2166,6 +2254,18 @@ msgstr "" msgid "Housekeeping successfully started" msgstr "" +msgid "IDE|Commit" +msgstr "" + +msgid "IDE|Edit" +msgstr "" + +msgid "IDE|Go back" +msgstr "" + +msgid "IDE|Review" +msgstr "" + msgid "If you already have files you can push them using the %{link_to_cli} below." msgstr "" @@ -2199,6 +2299,9 @@ msgstr "" msgid "Instance does not support multiple Kubernetes clusters" msgstr "" +msgid "Integrations" +msgstr "" + msgid "Interested parties can even contribute by pushing commits if they want to." msgstr "" @@ -2336,6 +2439,9 @@ msgstr "" msgid "LastPushEvent|at" msgstr "" +msgid "Latest changes" +msgstr "" + msgid "Learn more" msgstr "" @@ -2360,6 +2466,9 @@ msgstr "" msgid "Leave project" msgstr "" +msgid "List" +msgstr "" + msgid "List your GitHub repositories" msgstr "" @@ -2462,6 +2571,9 @@ msgstr "" msgid "Milestone" msgstr "" +msgid "Milestones" +msgstr "" + msgid "Milestones|Delete milestone" msgstr "" @@ -2719,6 +2831,9 @@ msgstr "" msgid "Opens in a new window" msgstr "" +msgid "Operations" +msgstr "" + msgid "Options" msgstr "" @@ -2878,34 +2993,31 @@ msgstr "" msgid "Pipelines|This project is not currently set up to run pipelines." msgstr "" -msgid "Pipeline|Existing branch name, tag" +msgid "Pipeline|Create for" msgstr "" -msgid "Pipeline|Retry pipeline" +msgid "Pipeline|Create pipeline" msgstr "" -msgid "Pipeline|Retry pipeline #%{pipelineId}?" +msgid "Pipeline|Existing branch name or tag" msgstr "" msgid "Pipeline|Run Pipeline" msgstr "" -msgid "Pipeline|Run on" -msgstr "" - -msgid "Pipeline|Run pipeline" -msgstr "" - msgid "Pipeline|Search branches" msgstr "" +msgid "Pipeline|Specify variable values to be used in this run. The values specified in %{settings_link} will be used by default." +msgstr "" + msgid "Pipeline|Stop pipeline" msgstr "" msgid "Pipeline|Stop pipeline #%{pipelineId}?" msgstr "" -msgid "Pipeline|You’re about to retry pipeline %{pipelineId}." +msgid "Pipeline|Variables" msgstr "" msgid "Pipeline|You’re about to stop pipeline %{pipelineId}." @@ -3022,6 +3134,9 @@ msgstr "" msgid "Progress" msgstr "" +msgid "Project" +msgstr "" + msgid "Project '%{project_name}' is in the process of being deleted." msgstr "" @@ -3073,9 +3188,6 @@ msgstr "" msgid "ProjectLifecycle|Stage" msgstr "" -msgid "ProjectNetworkGraph|Graph" -msgstr "" - msgid "Projects" msgstr "" @@ -3226,6 +3338,9 @@ msgstr "" msgid "Register and see your runners for this group." msgstr "" +msgid "Registry" +msgstr "" + msgid "Related Commits" msgstr "" @@ -3268,6 +3383,9 @@ msgstr "" msgid "Repository maintenance" msgstr "" +msgid "Repository mirror settings" +msgstr "" + msgid "Repository storage" msgstr "" @@ -3363,6 +3481,9 @@ msgstr "" msgid "Search" msgstr "" +msgid "Search branches" +msgstr "" + msgid "Search branches and tags" msgstr "" @@ -3405,6 +3526,9 @@ msgstr "" msgid "Select branch/tag" msgstr "" +msgid "Select source branch" +msgstr "" + msgid "Select target branch" msgstr "" @@ -3937,6 +4061,9 @@ msgstr "" msgid "This merge request is locked." msgstr "" +msgid "This option is disabled while you still have unstaged changes" +msgstr "" + msgid "This page is unavailable because you are not allowed to read information across multiple projects." msgstr "" @@ -4253,9 +4380,6 @@ msgstr "" msgid "Verified" msgstr "" -msgid "View and edit lines" -msgstr "" - msgid "View file @ " msgstr "" @@ -4373,6 +4497,12 @@ msgstr "" msgid "WikiPageConfirmDelete|Are you sure you want to delete this page?" msgstr "" +msgid "WikiPageConfirmDelete|Delete page" +msgstr "" + +msgid "WikiPageConfirmDelete|Delete page %{pageTitle}?" +msgstr "" + msgid "WikiPageConflictMessage|Someone edited the page the same time you did. Please check out %{page_link} and make sure your changes will not unintentionally remove theirs." msgstr "" diff --git a/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb b/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb index f28bf430f02..98d4456b277 100644 --- a/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb +++ b/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb @@ -36,16 +36,17 @@ describe 'layouts/nav/sidebar/_project' do expect(rendered).to have_text 'Registry' end - it 'highlights only one tab' do + it 'highlights sidebar item and flyout' do render - expect(rendered).to have_css('.active', count: 1) + expect(rendered).to have_css('.sidebar-top-level-items > li.active', count: 1) + expect(rendered).to have_css('.is-fly-out-only > li.active', count: 1) end - it 'highlights container registry tab only' do + it 'highlights container registry tab' do render - expect(rendered).to have_css('.active', text: 'Registry') + expect(rendered).to have_css('.sidebar-top-level-items > li.active', text: 'Registry') end end end