From 1a9b0c0e247fb26dea7bd140e1a283488c0404c8 Mon Sep 17 00:00:00 2001 From: "Vitaliy @blackst0ne Klachkov" Date: Sat, 2 Sep 2017 12:13:14 +1100 Subject: [PATCH 01/27] Add quick submission on user settings page --- app/views/profiles/show.html.haml | 2 +- .../add_quick_submission_on_user_settings_page.yml | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/add_quick_submission_on_user_settings_page.yml diff --git a/app/views/profiles/show.html.haml b/app/views/profiles/show.html.haml index a8ae0b92334..8e7b0e30388 100644 --- a/app/views/profiles/show.html.haml +++ b/app/views/profiles/show.html.haml @@ -2,7 +2,7 @@ - @content_class = "limit-container-width" unless fluid_layout = render 'profiles/head' -= bootstrap_form_for @user, url: profile_path, method: :put, html: { multipart: true, class: 'edit-user prepend-top-default' }, authenticity_token: true do |f| += bootstrap_form_for @user, url: profile_path, method: :put, html: { multipart: true, class: 'edit-user prepend-top-default js-quick-submit' }, authenticity_token: true do |f| = form_errors(@user) .row diff --git a/changelogs/unreleased/add_quick_submission_on_user_settings_page.yml b/changelogs/unreleased/add_quick_submission_on_user_settings_page.yml new file mode 100644 index 00000000000..3e4105a4232 --- /dev/null +++ b/changelogs/unreleased/add_quick_submission_on_user_settings_page.yml @@ -0,0 +1,5 @@ +--- +title: Add quick submission on user settings page +merge_request: 14007 +author: Vitaliy @blackst0ne Klachkov +type: added From bc9550cbba76a074b76e194cc9ab5d9065a13c14 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Thu, 31 Aug 2017 20:47:09 -0400 Subject: [PATCH 02/27] Update capybara 2.6.2 -> 2.15.1 Changelog: https://git.io/v5403 --- Gemfile | 2 +- Gemfile.lock | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Gemfile b/Gemfile index 61c941ae449..7ee62874a75 100644 --- a/Gemfile +++ b/Gemfile @@ -324,7 +324,7 @@ group :development, :test do # Generate Fake data gem 'ffaker', '~> 2.4' - gem 'capybara', '~> 2.6.2' + gem 'capybara', '~> 2.15.0' gem 'capybara-screenshot', '~> 1.0.0' gem 'poltergeist', '~> 1.9.0' diff --git a/Gemfile.lock b/Gemfile.lock index cba30e856ed..da0618ecde3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -100,9 +100,9 @@ GEM bundler (~> 1.2) thor (~> 0.18) byebug (9.0.6) - capybara (2.6.2) + capybara (2.15.1) addressable - mime-types (>= 1.16) + mini_mime (>= 0.1.3) nokogiri (>= 1.3.3) rack (>= 1.0.0) rack-test (>= 0.5.4) @@ -478,6 +478,7 @@ GEM method_source (0.8.2) mime-types (2.99.3) mimemagic (0.3.0) + mini_mime (0.1.4) mini_portile2 (2.2.0) minitest (5.7.0) mmap2 (2.2.7) @@ -947,7 +948,7 @@ GEM expression_parser rinku xml-simple (1.1.5) - xpath (2.0.0) + xpath (2.1.0) nokogiri (~> 1.3) PLATFORMS @@ -978,7 +979,7 @@ DEPENDENCIES browser (~> 2.2) bullet (~> 5.5.0) bundler-audit (~> 0.5.0) - capybara (~> 2.6.2) + capybara (~> 2.15.0) capybara-screenshot (~> 1.0.0) carrierwave (~> 1.1) charlock_holmes (~> 0.7.5) From 366ebe8b13ec0b92cfef7a2317b6003577e323bf Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Fri, 1 Sep 2017 15:50:42 -0400 Subject: [PATCH 03/27] Fix failures introduced by Capybara upgrade --- spec/features/dashboard/projects_spec.rb | 6 +++--- spec/features/merge_requests/diff_notes_resolve_spec.rb | 5 +++-- spec/features/projects/files/creating_a_file_spec.rb | 2 +- spec/features/search_spec.rb | 4 ++-- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/spec/features/dashboard/projects_spec.rb b/spec/features/dashboard/projects_spec.rb index 06a43909053..71de9f04653 100644 --- a/spec/features/dashboard/projects_spec.rb +++ b/spec/features/dashboard/projects_spec.rb @@ -115,9 +115,9 @@ feature 'Dashboard Projects' do expect(page).to have_selector('.merge-request-form') expect(current_path).to eq project_new_merge_request_path(project) - expect(find('#merge_request_target_project_id').value).to eq project.id.to_s - expect(find('input#merge_request_source_branch').value).to eq 'feature' - expect(find('input#merge_request_target_branch').value).to eq 'master' + expect(find('#merge_request_target_project_id', visible: false).value).to eq project.id.to_s + expect(find('input#merge_request_source_branch', visible: false).value).to eq 'feature' + expect(find('input#merge_request_target_branch', visible: false).value).to eq 'master' end end end diff --git a/spec/features/merge_requests/diff_notes_resolve_spec.rb b/spec/features/merge_requests/diff_notes_resolve_spec.rb index ac7f75bd308..fd110e68e84 100644 --- a/spec/features/merge_requests/diff_notes_resolve_spec.rb +++ b/spec/features/merge_requests/diff_notes_resolve_spec.rb @@ -196,10 +196,11 @@ feature 'Diff notes resolve', js: true do end it 'does not mark discussion as resolved when resolving single note' do - page.first '.diff-content .note' do + page.within("#note_#{note.id}") do first('.line-resolve-btn').click - expect(page).to have_selector('.note-action-button .loading') + wait_for_requests + expect(first('.line-resolve-btn')['data-original-title']).to eq("Resolved by #{user.name}") end diff --git a/spec/features/projects/files/creating_a_file_spec.rb b/spec/features/projects/files/creating_a_file_spec.rb index e13bf4b6089..e1852a6e544 100644 --- a/spec/features/projects/files/creating_a_file_spec.rb +++ b/spec/features/projects/files/creating_a_file_spec.rb @@ -14,7 +14,7 @@ feature 'User wants to create a file' do file_name = find('#file_name') file_name.set options[:file_name] || 'README.md' - file_content = find('#file-content') + file_content = find('#file-content', visible: false) file_content.set options[:file_content] || 'Some content' click_button 'Commit changes' diff --git a/spec/features/search_spec.rb b/spec/features/search_spec.rb index 05a089641f1..8f6d0bb9d1b 100644 --- a/spec/features/search_spec.rb +++ b/spec/features/search_spec.rb @@ -295,7 +295,7 @@ describe "Search" do fill_in 'search', with: 'foo' click_button 'Search' - expect(find('#group_id').value).to eq(project.namespace.id.to_s) + expect(find('#group_id', visible: false).value).to eq(project.namespace.id.to_s) end it 'preserves the project being searched in' do @@ -304,7 +304,7 @@ describe "Search" do fill_in 'search', with: 'foo' click_button 'Search' - expect(find('#project_id').value).to eq(project.id.to_s) + expect(find('#project_id', visible: false).value).to eq(project.id.to_s) end end end From 21446129ac2b7988e3499a3080edc94303528636 Mon Sep 17 00:00:00 2001 From: Eric Eastwood Date: Tue, 29 Aug 2017 11:55:47 -0500 Subject: [PATCH 04/27] Remove focus styles from dropdown empty link Fix https://gitlab.com/gitlab-org/gitlab-ce/issues/37023 --- app/assets/javascripts/gl_dropdown.js | 6 +++--- app/assets/javascripts/search_autocomplete.js | 2 +- .../stylesheets/framework/dropdowns.scss | 20 +++++++++++++------ app/views/layouts/_search.html.haml | 4 ++-- app/views/projects/diffs/_stats.html.haml | 4 ++-- ...-focus-styles-from-dropdown-empty-link.yml | 5 +++++ spec/javascripts/gl_dropdown_spec.js | 2 +- 7 files changed, 28 insertions(+), 15 deletions(-) create mode 100644 changelogs/unreleased/37023-remove-focus-styles-from-dropdown-empty-link.yml diff --git a/app/assets/javascripts/gl_dropdown.js b/app/assets/javascripts/gl_dropdown.js index 6f7671aa6fe..50d822eba5a 100644 --- a/app/assets/javascripts/gl_dropdown.js +++ b/app/assets/javascripts/gl_dropdown.js @@ -175,7 +175,7 @@ GitLabDropdownFilter = (function() { elements.show().removeClass('option-hidden'); } - elements.parent().find('.dropdown-menu-empty-link').toggleClass('hidden', elements.is(':visible')); + elements.parent().find('.dropdown-menu-empty-item').toggleClass('hidden', elements.is(':visible')); } }; @@ -247,7 +247,7 @@ GitLabDropdown = (function() { currentIndex = -1; - NON_SELECTABLE_CLASSES = '.divider, .separator, .dropdown-header, .dropdown-menu-empty-link'; + NON_SELECTABLE_CLASSES = '.divider, .separator, .dropdown-header, .dropdown-menu-empty-item'; SELECTABLE_CLASSES = ".dropdown-content li:not(" + NON_SELECTABLE_CLASSES + ", .option-hidden)"; @@ -702,7 +702,7 @@ GitLabDropdown = (function() { GitLabDropdown.prototype.noResults = function() { var html; - return html = ''; + return ''; }; GitLabDropdown.prototype.rowClicked = function(el) { diff --git a/app/assets/javascripts/search_autocomplete.js b/app/assets/javascripts/search_autocomplete.js index 6fd5345a0a6..003a15592f3 100644 --- a/app/assets/javascripts/search_autocomplete.js +++ b/app/assets/javascripts/search_autocomplete.js @@ -363,7 +363,7 @@ restoreMenu() { var html; - html = ""; + html = ''; return this.dropdownContent.html(html); } diff --git a/app/assets/stylesheets/framework/dropdowns.scss b/app/assets/stylesheets/framework/dropdowns.scss index 6b21def33a6..5eb207a93f7 100644 --- a/app/assets/stylesheets/framework/dropdowns.scss +++ b/app/assets/stylesheets/framework/dropdowns.scss @@ -163,12 +163,6 @@ } } - &.dropdown-menu-empty-link { - &.is-focused { - background-color: $dropdown-empty-row-bg; - } - } - &.dropdown-menu-user-link { line-height: 16px; } @@ -256,6 +250,13 @@ @include dropdown-link; } + .dropdown-menu-empty-item a { + &:hover, + &:focus { + background-color: transparent; + } + } + .dropdown-header { color: $gl-text-color-secondary; font-size: 13px; @@ -800,6 +801,13 @@ } } } + + &.dropdown-menu-empty-item a { + &:hover, + &:focus { + background-color: transparent; + } + } } &.dropdown-menu-selectable { diff --git a/app/views/layouts/_search.html.haml b/app/views/layouts/_search.html.haml index 59f16b47bf7..cd7a47da4a1 100644 --- a/app/views/layouts/_search.html.haml +++ b/app/views/layouts/_search.html.haml @@ -17,8 +17,8 @@ .dropdown-menu.dropdown-select = dropdown_content do %ul - %li - %a.is-focused.dropdown-menu-empty-link + %li.dropdown-menu-empty-item + %a Loading... = dropdown_loading %i.search-icon diff --git a/app/views/projects/diffs/_stats.html.haml b/app/views/projects/diffs/_stats.html.haml index 02fd54c97fb..ad2d355ab4a 100644 --- a/app/views/projects/diffs/_stats.html.haml +++ b/app/views/projects/diffs/_stats.html.haml @@ -29,6 +29,6 @@ +#{diff_file.added_lines} %span.cred< \-#{diff_file.removed_lines} - %li.dropdown-menu-empty-link.hidden - %a{ href: "#" } + %li.dropdown-menu-empty-item.hidden + %a No files found. diff --git a/changelogs/unreleased/37023-remove-focus-styles-from-dropdown-empty-link.yml b/changelogs/unreleased/37023-remove-focus-styles-from-dropdown-empty-link.yml new file mode 100644 index 00000000000..fcaa6ec13f8 --- /dev/null +++ b/changelogs/unreleased/37023-remove-focus-styles-from-dropdown-empty-link.yml @@ -0,0 +1,5 @@ +--- +title: Remove focus styles from dropdown empty links +merge_request: +author: +type: fixed diff --git a/spec/javascripts/gl_dropdown_spec.js b/spec/javascripts/gl_dropdown_spec.js index dcb8dbce178..ca048123bf7 100644 --- a/spec/javascripts/gl_dropdown_spec.js +++ b/spec/javascripts/gl_dropdown_spec.js @@ -8,7 +8,7 @@ describe('glDropdown', function describeDropdown() { preloadFixtures('static/gl_dropdown.html.raw'); loadJSONFixtures('projects.json'); - const NON_SELECTABLE_CLASSES = '.divider, .separator, .dropdown-header, .dropdown-menu-empty-link'; + const NON_SELECTABLE_CLASSES = '.divider, .separator, .dropdown-header, .dropdown-menu-empty-item'; const SEARCH_INPUT_SELECTOR = '.dropdown-input-field'; const ITEM_SELECTOR = `.dropdown-content li:not(${NON_SELECTABLE_CLASSES})`; const FOCUSED_ITEM_SELECTOR = `${ITEM_SELECTOR} a.is-focused`; From f7fa40572086e2a4be1ecfdc87334ee3f3fc26d2 Mon Sep 17 00:00:00 2001 From: Mark Fletcher Date: Wed, 6 Sep 2017 18:32:31 +1000 Subject: [PATCH 05/27] Add link to GitLab project examples in Description Template documentation --- ...499-add-description-template-examples-to-the-docs.yml | 5 +++++ doc/user/project/description_templates.md | 9 +++++++++ 2 files changed, 14 insertions(+) create mode 100644 changelogs/unreleased/37499-add-description-template-examples-to-the-docs.yml diff --git a/changelogs/unreleased/37499-add-description-template-examples-to-the-docs.yml b/changelogs/unreleased/37499-add-description-template-examples-to-the-docs.yml new file mode 100644 index 00000000000..2a8e8a33225 --- /dev/null +++ b/changelogs/unreleased/37499-add-description-template-examples-to-the-docs.yml @@ -0,0 +1,5 @@ +--- +title: Add description template examples to documentation +merge_request: +author: +type: other diff --git a/doc/user/project/description_templates.md b/doc/user/project/description_templates.md index ea7496af089..e896b0f882a 100644 --- a/doc/user/project/description_templates.md +++ b/doc/user/project/description_templates.md @@ -39,4 +39,13 @@ changes you made after picking the template and return it to its initial status. ![Description templates](img/description_templates.png) +## Description template example + +We make use of Description Templates for Issues and Merge Requests within the GitLab Community Edition project. Please refer to the [`.gitlab` folder][gitlab-ce-templates] for some examples. + +> **Tip:** +It is possible to use [quick actions](./quick_actions.md) within description templates to quickly add labels, assignees, and milestones. The quick actions will only be executed if the user submitting the Issue or Merge Request has the permissions perform the relevant actions. + [ce-4981]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/4981 +[gitlab-ce-templates]: https://gitlab.com/gitlab-org/gitlab-ce/tree/master/.gitlab + From 41151dd25d7f46b21501acf52c3b2116f5697bb8 Mon Sep 17 00:00:00 2001 From: Mark Fletcher Date: Wed, 6 Sep 2017 18:35:00 +1000 Subject: [PATCH 06/27] Add full text example description template --- doc/user/project/description_templates.md | 45 +++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/doc/user/project/description_templates.md b/doc/user/project/description_templates.md index e896b0f882a..7c94f4ef4d8 100644 --- a/doc/user/project/description_templates.md +++ b/doc/user/project/description_templates.md @@ -46,6 +46,51 @@ We make use of Description Templates for Issues and Merge Requests within the Gi > **Tip:** It is possible to use [quick actions](./quick_actions.md) within description templates to quickly add labels, assignees, and milestones. The quick actions will only be executed if the user submitting the Issue or Merge Request has the permissions perform the relevant actions. +Here is an example for a Bug report template: + +``` +Summary + +(Summarize the bug encountered concisely) + + +Steps to reproduce + +(How one can reproduce the issue - this is very important) + + +Example Project + +(If possible, please create an example project here on GitLab.com that exhibits the problematic behaviour, and link to it here in the bug report) + +(If you are using an older version of GitLab, this will also determine whether the bug has been fixed in a more recent version) + + +What is the current bug behavior? + +(What actually happens) + + +What is the expected correct behavior? + +(What you should see instead) + + +Relevant logs and/or screenshots + +(Paste any relevant logs - please use code blocks (```) to format console output, +logs, and code as it's very hard to read otherwise.) + + +Possible fixes + +(If you can, link to the line of code that might be responsible for the problem) + +/label ~bug ~reproduced ~needs-investigation +/cc @project-manager +/assign @qa-tester +``` + [ce-4981]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/4981 [gitlab-ce-templates]: https://gitlab.com/gitlab-org/gitlab-ce/tree/master/.gitlab From f7babab996c2741280ffb5c12c03c6be5fe0af7e Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Tue, 29 Aug 2017 18:35:49 +0200 Subject: [PATCH 07/27] Port changes from Autodeploy EE to CE --- doc/ci/autodeploy/index.md | 85 +++++++++++++++++++++++++ doc/ci/autodeploy/quick_start_guide.md | 86 ++++++++++++++++++++++++++ 2 files changed, 171 insertions(+) create mode 100644 doc/ci/autodeploy/quick_start_guide.md diff --git a/doc/ci/autodeploy/index.md b/doc/ci/autodeploy/index.md index a714689ebd5..5272e9e8e68 100644 --- a/doc/ci/autodeploy/index.md +++ b/doc/ci/autodeploy/index.md @@ -15,6 +15,10 @@ You can use [project services][project-services] to store credentials to your infrastructure provider and they will be available during the deployment. +## Quick start + +We made a [simple guide](quick_start_guide.md) to using Auto Deploy with GitLab.com. + ## Supported templates The list of supported auto deploy templates is available in the @@ -35,6 +39,85 @@ enable [Kubernetes service][kubernetes-service]. 1. Test your deployment configuration using a [Review App][review-app] that was created automatically for you. +## Using the Kubernetes deploy example project with Nginx + +The Autodeploy templates are based on the [kubernetes-deploy][kube-deploy] +project which is used to simplify the deployment process to Kubernetes by +providing intelligent `build`, `deploy` and `destroy` commands which you can +use in your `.gitlab-ci.yml` as-is. It uses Heroku'ish build packs to do some +of the work, plus some of GitLab's own tools to package it all up. For your +convenience, a [Docker image][kube-image] is also provided. + +--- + +A simple example would be the deployment of Nginx on Kubernetes. +Consider a `nginx-deployment.yaml` file in your project with contents: + +```yaml +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: __CI_ENVIRONMENT_SLUG__ + labels: + app: __CI_ENVIRONMENT_SLUG__ + track: stable +spec: + replicas: 3 + template: + metadata: + labels: + app: __CI_ENVIRONMENT_SLUG__ + track: stable + spec: + containers: + - name: nginx + image: nginx:1.7.9 + ports: + - containerPort: 80 +``` + +The important part is where we set up `app: __CI_ENVIRONMENT_SLUG__`. As you'll +see later this is replaced by the [`CI_ENVIRONMENT_SLUG` env variable][variables]. + +The `.gitlab-ci.yml` would be: + +```yaml +image: registry.gitlab.com/gitlab-examples/kubernetes-deploy + +stages: + - deploy + +kubernetes deploy: + stage: deploy + environment: + name: production + script: + - echo "$KUBE_CA_PEM" > kube_ca.pem + - cat kube_ca.pem + - kubectl config set-cluster default-cluster --server=$KUBE_URL --certificate-authority="$(pwd)/kube_ca.pem" + - kubectl config set-credentials default-admin --token=$KUBE_TOKEN + - kubectl config set-context default-system --cluster=default-cluster --user=default-admin --namespace $KUBE_NAMESPACE + - kubectl config use-context default-system + + - sed -i "s/__CI_ENVIRONMENT_SLUG__/$CI_ENVIRONMENT_SLUG/" nginx-deployment.yaml + - cat nginx-deployment.yaml + - kubectl cluster-info + - kubectl get deployments -l app=$CI_ENVIRONMENT_SLUG + - kubectl create -f nginx-deployment.yaml || kubectl replace -f nginx-deployment.yaml +``` + +Notice that we use a couple of Kubernetes environment variables to configure +the Kubernetes cluster. These are exposed from the +[Kubernetes service](../../user/project/integrations/kubernetes.md#deployment-variables). +The most important one is the `$KUBE_NAMESPACE` which should be unique for +every project. + +Next, we replace `__CI_ENVIRONMENT_SLUG__` with the content of the +`CI_ENVIRONMENT_SLUG` variable, so that the `app` label has the correct value. + +Finally, the Nginx pod is created from the definition of the +`nginx-deployment.yaml` file. + ## Private Project Support > Experimental support [introduced][mr-2] in GitLab 9.1. @@ -67,6 +150,8 @@ PostgreSQL provisioning can be disabled by setting the variable `DISABLE_POSTGRE [kubernetes-service]: ../../user/project/integrations/kubernetes.md [docker-in-docker]: ../docker/using_docker_build.md#use-docker-in-docker-executor [review-app]: ../review_apps/index.md +[kube-image]: https://gitlab.com/gitlab-examples/kubernetes-deploy/container_registry "Kubernetes deploy Container Registry" +[kube-deploy]: https://gitlab.com/gitlab-examples/kubernetes-deploy "Kubernetes deploy example project" [container-registry]: https://docs.gitlab.com/ce/user/project/container_registry.html [postgresql]: https://www.postgresql.org/ diff --git a/doc/ci/autodeploy/quick_start_guide.md b/doc/ci/autodeploy/quick_start_guide.md new file mode 100644 index 00000000000..0f7c255147d --- /dev/null +++ b/doc/ci/autodeploy/quick_start_guide.md @@ -0,0 +1,86 @@ +# Auto deploy: quick start guide + +This is a step-by-step guide to deploying a project hosted on GitLab.com to Google Cloud, using Auto Deploy. + +We made a minimal [Ruby application](https://gitlab.com/gitlab-examples/minimal-ruby-app) to use as an example for this guide. It contains two files: + +* `server.rb` - our application. It will start an HTTP server on port 5000 and render “Hello, world!” +* `Dockerfile` - to build our app into a container image. It will use a ruby base image and run `server.rb` + +## Fork sample project on GitLab.com + +Let’s start by forking our sample application. Go to [the project page](https://gitlab.com/gitlab-examples/minimal-ruby-app) and press the `Fork` button. Soon you should have a project under your namespace with the necessary files. + +## Setup your own cluster on Google Container Engine + +If you do not already have a Google Cloud account, create one at https://console.cloud.google.com. + +Visit the [`Container Engine`](https://console.cloud.google.com/kubernetes/list) tab and create a new cluster. You can change the name and leave the rest of the default settings. Once you have your cluster running, you need to connect to the cluster by following the Google interface. + +## Connect to Kubernetes cluster + +You need to have the Google Cloud SDK installed. e.g. +On OSX, install [homebrew](https://brew.sh): + +1. Install Brew Caskroom: `brew install caskroom/cask/brew-cask` +2. Install Google Cloud SDK: `brew cask install google-cloud-sdk` +3. Add `kubectl`: `gcloud components install kubectl` +4. Log in: `gcloud auth login` + +Now go back to the Google interface, find your cluster, and follow the instructions under `Connect to the cluster` and open the Kubernetes Dashboard. It will look something like `gcloud container clusters get-credentials ruby-autodeploy \ --zone europe-west2-c --project api-project-XXXXXXX` and then `kubectl proxy`. + +![connect to cluster](img/guide_connect_cluster.png) + +## Copy credentials to GitLab.com project + +Once you have the Kubernetes Dashboard interface running, you should visit `Secrets` under the `Config` section. There you should find the settings we need for GitLab integration: ca.crt and token. + +![connect to cluster](img/guide_secret.png) + +You need to copy-paste the ca.crt and token into your project on GitLab.com in the Kubernetes integration page under project `Settings` > `Integrations` > `Project services` > `Kubernetes`. Don't actually copy the namespace though. Each project should have a unique namespace, and by leaving it blank, GitLab will create one for you. + +![connect to cluster](img/guide_integration.png) + +For API URL, you should use the `Endpoint` IP from your cluster page on Google Cloud Platform. + +## Expose application to the world + +In order to be able to visit your application, you need to install an NGINX ingress controller and point your domain name to its external IP address. + +### Set up Ingress controller + +You’ll need to make sure you have an ingress controller. If you don’t have one, do: + +```sh +brew install kubernetes-helm +helm init +helm install --name ruby-app stable/nginx-ingress +``` + +This should create several services including `ruby-app-nginx-ingress-controller`. You can list your services by running `kubectl get svc` to confirm that. + +### Point DNS at Cluster IP + +Find out the external IP address of the `ruby-app-nginx-ingress-controller` by running: + +```sh +kubectl get svc ruby-app-nginx-ingress-controller -o jsonpath='{.status.loadBalancer.ingress[0].ip}' +``` + +Use this IP address to configure your DNS. This part heavily depends on your preferences and domain provider. But in case you are not sure, just create an A record with a wildcard host like `*.`. + +Use `nslookup minimal-ruby-app-staging.` to confirm that domain is assigned to the cluster IP. + +## Setup Auto Deploy + +Visit the home page of your GitLab.com project and press "Set up Auto Deploy" button. + +![auto deploy button](img/auto_deploy_btn.png) + +You will be redirected to the New file page where you can apply one of the Auto Deploy templates. Select "Kubernetes" to apply the template, then in the file, replace "domain.example.com" with your domain name and any other adjustments you feel comfortable with. + +![auto deploy template](img/auto_deploy_dropdown.png) + +Change the target branch to `master`, and submit your changes. This should create a new pipeline with several jobs. If you made only the domain name change, the pipeline will have 3 jobs: `build`, `staging` and `production`. The `build` job will create a docker image with your new change and push it to the GitLab Container Registry. The `staging` job will deploy this image on your cluster. Once the deploy job succeeds you should be able to see your application by visiting the Kubernetes dashboard. Select the namespace of your project, which will look like `ruby-autodeploy-23`, but with a unique ID for your project, and your app will be listed as “staging” under the Deployment tab. + +Once its ready - just visit http://minimal-ruby-app-staging.yourdomain.com to see “Hello, world!” From 1ea64acffdc240c5ca7611a20b942702e324b623 Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Tue, 29 Aug 2017 18:56:00 +0200 Subject: [PATCH 08/27] Add images from auto deploy guide --- doc/ci/autodeploy/img/auto_deploy_btn.png | Bin 0 -> 46825 bytes .../autodeploy/img/auto_deploy_dropdown.png | Bin 99422 -> 75456 bytes .../autodeploy/img/guide_connect_cluster.png | Bin 0 -> 38724 bytes doc/ci/autodeploy/img/guide_integration.png | Bin 0 -> 44263 bytes doc/ci/autodeploy/img/guide_secret.png | Bin 0 -> 16233 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/ci/autodeploy/img/auto_deploy_btn.png create mode 100644 doc/ci/autodeploy/img/guide_connect_cluster.png create mode 100644 doc/ci/autodeploy/img/guide_integration.png create mode 100644 doc/ci/autodeploy/img/guide_secret.png diff --git a/doc/ci/autodeploy/img/auto_deploy_btn.png b/doc/ci/autodeploy/img/auto_deploy_btn.png new file mode 100644 index 0000000000000000000000000000000000000000..25915ed1c9d3314474dfe01dc9e60a707a47b35c GIT binary patch literal 46825 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 Md{vYHeK8LDFWy?h9RL6T literal 0 HcmV?d00001 diff --git a/doc/ci/autodeploy/img/auto_deploy_dropdown.png b/doc/ci/autodeploy/img/auto_deploy_dropdown.png index b93b0a08fea276a2718a583f8514f98fef7d13b0..5815937a4afa2e4f6edc0ffd8758a2dbfb212638 100644 GIT binary patch literal 75456 zcmcG#hg*|P(+6rt0pURe1O!x?^bXP$lpcEMO^QH5Z=oY1pj7G7MS23E*HA=yuOal% zTL_^C2<7m6?|HxLe1E{Xlf9Bm_TJsuo!yz=%-r8K)fFET(-Gggb?dRR(tGV&w;r(E zx^>6*;e#7W5uDTW)-B>HdwF?HWqJ7*nr_aY>>X@w-BS9VltQFSxkcTLQ}YdZD|avN z>%u*bv3%4m;;}XbrPnzf|2*Ur)uq;V;VJrNVK@r>=RW-hhi~_1e@_v20GNSB1Pq~bEJZ;jv%S>s6)AN}AMiVGw1cDGttZph>PbDP+K z|DI6G3*%)fYU(>bySiF2?WS+Tx{Z_DYpyOYf|4TmIgD?8{`xWF^#HZCr9WvTb@2PN zyPwyMZo#OiYFoMM#(c6N`ek&EGHff7x~anMU70hS)$jzbN3MP=X@}mReNQyHWVs`^Zq?{Rx$g zs^BTf_3+v$x^Lh|^t?P1i7!-`|2aLfLIkFgO;cjwx_mSuK>bK@J=O)v%@2yYKP|Iw z#l1>+5L>}5-3N|38`}qe5O3-cNFE~5pP;c-BiEYHSmt=cG0SHemGI%JNnl7dI*NA1 zMC<5CU`RdoA!GJRZjY+XQbbll{#AtSzyKo-@Q0~YUmaw<=uKV`5%^WPB`~7tjf#MI z{7PvNNAE*=oGkO(xZ$B_O_TJH01K;(E^=b}GRgu2ria0|7UiB=za>)&Cck=dM}TFG zh3DB-L7Q!sb&hUgd|LbQUoXIu6n1I@!19dI?3+8JxVBOKix{EGx_^d}_UHOQx9V2h z8ZJ7#c{d;YS-N)%bm=|hA$qHdW^qh8SS?L5t(~0d;oJK*4iNBXvS*(;48HKZ`OM}0 zh3VeA*YD+?58S?;C&xB<=5IjSpYu<|M`?#Jx2Z>n9AdJ+6n0+|T&Q{f0_$%>7AZXB z$eX_2KD{OX@XL>X9{iOP{>QZAVZ~bq3ib|$eR;VbE-YlqZ?*pscqLEG%oS&ucaKBS z>m{=1V_zf7vw*9^O$@h{olF1X0XYfDH4#N^^|KKu@HWe8C~$p(2mjQGyFsU zh|1Bena^1t%6>ye)Q?ytzTJKPxVvp@iQ85E4U@@hUdEKDgyrPr2$%eN6%!sfEh-EV zis@+n8_-3$&n-pc{2kIsw4A$l$DcZoBk*y{bMsK=KiS>rzmO%OJ@g~eFVt;c7UdQx zEFW=vJ^Lyr$MKObC(9++C45Bw^exL1@%NO!nFW44Q&eN-eFcB%#6C%3{EeZ*Y5B$X z_hT;%f6OW6u*h(P>nhEtNW7JhZ&coX8SrYnr_tKDQdT^Ro2~3cN<2P6Bf&Y|uUGyl zTj#fBxkvdAIY>A#ul-&RCSnp9`~Crjg5*4N6|~2T`ipHQjJEG@TWw3yMHgte7YzRT zZg*BKIP-Fb)rbZwWSZopj?WqX-MiuTB%0DRxrQLX@L7Sau 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

N$?tI+k~mqQ1tU7_7Lo&EFEInET6kQDXRK9Fl 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 literal 0 HcmV?d00001 From 812a4cf34a7e8398d56c9f5e0c48ca02bea537c4 Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Tue, 29 Aug 2017 19:03:39 +0200 Subject: [PATCH 09/27] Refactor Autodeploy docs - Add a how it works section where Herokuish is mentioned - Make the notes more apparent - Merge the postgres variables section with its parent --- doc/ci/autodeploy/index.md | 91 ++++++++++++++++++++++---------------- 1 file changed, 53 insertions(+), 38 deletions(-) diff --git a/doc/ci/autodeploy/index.md b/doc/ci/autodeploy/index.md index 5272e9e8e68..5c9e11373a2 100644 --- a/doc/ci/autodeploy/index.md +++ b/doc/ci/autodeploy/index.md @@ -1,8 +1,13 @@ # Auto deploy -> [Introduced][mr-8135] in GitLab 8.15. -> Auto deploy is an experimental feature and is not recommended for Production use at this time. -> As of GitLab 9.1, access to the container registry is only available while the Pipeline is running. Restarting a pod, scaling a service, or other actions which require on-going access will fail. On-going secure access is planned for a subsequent release. +>**Notes:** +- [Introduced][mr-8135] in GitLab 8.15. +- Auto deploy is an experimental feature and is not recommended for Production + use at this time. +- As of GitLab 9.1, access to the Container Registry is only available while + the Pipeline is running. Restarting a pod, scaling a service, or other actions + which require on-going access will fail. On-going secure access is planned for + a subsequent release. Auto deploy is an easy way to configure GitLab CI for the deployment of your application. GitLab Community maintains a list of `.gitlab-ci.yml` @@ -11,9 +16,19 @@ powering them. These scripts are responsible for packaging your application, setting up the infrastructure and spinning up necessary services (for example a database). -You can use [project services][project-services] to store credentials to -your infrastructure provider and they will be available during the -deployment. +## How it works + +The Autodeploy templates are based on the [kubernetes-deploy][kube-deploy] +project which is used to simplify the deployment process to Kubernetes by +providing intelligent `build`, `deploy` and `destroy` commands which you can +use in your `.gitlab-ci.yml` as-is. It uses [Herokuish](https://github.com/gliderlabs/herokuish), +which uses [Heroku buildpacks](https://devcenter.heroku.com/articles/buildpacks) +to do some of the work, plus some of GitLab's own tools to package it all up. For +your convenience, a [Docker image][kube-image] is also provided. + +You can use the [Kubernetes project service](../../user/project/integrations/kubernetes.md) +to store credentials to your infrastructure provider and they will be available +during the deployment. ## Quick start @@ -26,30 +41,28 @@ The list of supported auto deploy templates is available in the ## Configuration +>**Note:** +In order to understand why the following steps are required, read the +[how it works](#how-it-works) section. + +To configure Autodeploy, you will need to: + 1. Enable a deployment [project service][project-services] to store your -credentials. For example, if you want to deploy to OpenShift you have to -enable [Kubernetes service][kubernetes-service]. -1. Configure GitLab Runner to use Docker or Kubernetes executor with -[privileged mode enabled][docker-in-docker]. + credentials. For example, if you want to deploy to OpenShift you have to + enable [Kubernetes service][kubernetes-service]. +1. Configure GitLab Runner to use the + [Docker or Kubernetes executor](https://docs.gitlab.com/runner/executors/) with + [privileged mode enabled][docker-in-docker]. 1. Navigate to the "Project" tab and click "Set up auto deploy" button. ![Auto deploy button](img/auto_deploy_button.png) 1. Select a template. ![Dropdown with auto deploy templates](img/auto_deploy_dropdown.png) 1. Commit your changes and create a merge request. 1. Test your deployment configuration using a [Review App][review-app] that was -created automatically for you. + created automatically for you. ## Using the Kubernetes deploy example project with Nginx -The Autodeploy templates are based on the [kubernetes-deploy][kube-deploy] -project which is used to simplify the deployment process to Kubernetes by -providing intelligent `build`, `deploy` and `destroy` commands which you can -use in your `.gitlab-ci.yml` as-is. It uses Heroku'ish build packs to do some -of the work, plus some of GitLab's own tools to package it all up. For your -convenience, a [Docker image][kube-image] is also provided. - ---- - A simple example would be the deployment of Nginx on Kubernetes. Consider a `nginx-deployment.yaml` file in your project with contents: @@ -77,7 +90,8 @@ spec: ``` The important part is where we set up `app: __CI_ENVIRONMENT_SLUG__`. As you'll -see later this is replaced by the [`CI_ENVIRONMENT_SLUG` env variable][variables]. +see later this is replaced by the +[`CI_ENVIRONMENT_SLUG` env variable](../variables/README.md#predefined-variables-environment-variables). The `.gitlab-ci.yml` would be: @@ -118,7 +132,7 @@ Next, we replace `__CI_ENVIRONMENT_SLUG__` with the content of the Finally, the Nginx pod is created from the definition of the `nginx-deployment.yaml` file. -## Private Project Support +## Private project support > Experimental support [introduced][mr-2] in GitLab 9.1. @@ -126,7 +140,7 @@ When a project has been marked as private, GitLab's [Container Registry][contain After the pipeline completes, Kubernetes will no longer be able to access the container registry. Restarting a pod, scaling a service, or other actions which require on-going access to the registry will fail. On-going secure access is planned for a subsequent release. -## PostgreSQL Database Support +## PostgreSQL database support > Experimental support [introduced][mr-8] in GitLab 9.1. @@ -134,27 +148,13 @@ In order to support applications that require a database, [PostgreSQL][postgresq PostgreSQL provisioning can be disabled by setting the variable `DISABLE_POSTGRES` to `"yes"`. -### PostgreSQL Variables +The following PostgreSQL variables are supported: 1. `DISABLE_POSTGRES: "yes"`: disable automatic deployment of PostgreSQL 1. `POSTGRES_USER: "my-user"`: use custom username for PostgreSQL 1. `POSTGRES_PASSWORD: "password"`: use custom password for PostgreSQL 1. `POSTGRES_DB: "my database"`: use custom database name for PostgreSQL -[mr-8135]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/8135 -[mr-2]: https://gitlab.com/gitlab-examples/kubernetes-deploy/merge_requests/2 -[mr-8]: https://gitlab.com/gitlab-examples/kubernetes-deploy/merge_requests/8 -[project-settings]: https://docs.gitlab.com/ce/public_access/public_access.html -[project-services]: ../../user/project/integrations/project_services.md -[auto-deploy-templates]: https://gitlab.com/gitlab-org/gitlab-ci-yml/tree/master/autodeploy -[kubernetes-service]: ../../user/project/integrations/kubernetes.md -[docker-in-docker]: ../docker/using_docker_build.md#use-docker-in-docker-executor -[review-app]: ../review_apps/index.md -[kube-image]: https://gitlab.com/gitlab-examples/kubernetes-deploy/container_registry "Kubernetes deploy Container Registry" -[kube-deploy]: https://gitlab.com/gitlab-examples/kubernetes-deploy "Kubernetes deploy example project" -[container-registry]: https://docs.gitlab.com/ce/user/project/container_registry.html -[postgresql]: https://www.postgresql.org/ - ## Auto Monitoring > Introduced in [GitLab 9.5](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/13438). @@ -179,3 +179,18 @@ If you have installed GitLab using a different method: 1. [Deploy Prometheus](../../user/project/integrations/prometheus.md#configuring-your-own-prometheus-server-within-kubernetes) into your Kubernetes cluster 1. If you would like response metrics, ensure you are running at least version 0.9.0 of NGINX Ingress and [enable Prometheus metrics](https://github.com/kubernetes/ingress/blob/master/examples/customization/custom-vts-metrics/nginx/nginx-vts-metrics-conf.yaml). 1. Finally, [annotate](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/) the NGINX Ingress deployment to be scraped by Prometheus using `prometheus.io/scrape: "true"` and `prometheus.io/port: "10254"`. + +[mr-8135]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/8135 +[mr-2]: https://gitlab.com/gitlab-examples/kubernetes-deploy/merge_requests/2 +[mr-8]: https://gitlab.com/gitlab-examples/kubernetes-deploy/merge_requests/8 +[project-settings]: https://docs.gitlab.com/ce/public_access/public_access.html +[project-services]: ../../user/project/integrations/project_services.md +[auto-deploy-templates]: https://gitlab.com/gitlab-org/gitlab-ci-yml/tree/master/autodeploy +[kubernetes-service]: ../../user/project/integrations/kubernetes.md +[docker-in-docker]: ../docker/using_docker_build.md#use-docker-in-docker-executor +[review-app]: ../review_apps/index.md +[kube-image]: https://gitlab.com/gitlab-examples/kubernetes-deploy/container_registry "Kubernetes deploy Container Registry" +[kube-deploy]: https://gitlab.com/gitlab-examples/kubernetes-deploy "Kubernetes deploy example project" +[container-registry]: https://docs.gitlab.com/ce/user/project/container_registry.html +[postgresql]: https://www.postgresql.org/ + From 77b63a2f55304975423583c69e5b8e9a2f2590e3 Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Wed, 30 Aug 2017 09:53:11 +0200 Subject: [PATCH 10/27] Remove confusing Nginx example from Autodeploy docs --- doc/ci/autodeploy/index.md | 77 +------------------------- doc/ci/autodeploy/quick_start_guide.md | 19 +++++-- 2 files changed, 17 insertions(+), 79 deletions(-) diff --git a/doc/ci/autodeploy/index.md b/doc/ci/autodeploy/index.md index 5c9e11373a2..a128cf69c20 100644 --- a/doc/ci/autodeploy/index.md +++ b/doc/ci/autodeploy/index.md @@ -1,4 +1,4 @@ -# Auto deploy +# Auto Deploy >**Notes:** - [Introduced][mr-8135] in GitLab 8.15. @@ -20,8 +20,8 @@ example a database). The Autodeploy templates are based on the [kubernetes-deploy][kube-deploy] project which is used to simplify the deployment process to Kubernetes by -providing intelligent `build`, `deploy` and `destroy` commands which you can -use in your `.gitlab-ci.yml` as-is. It uses [Herokuish](https://github.com/gliderlabs/herokuish), +providing intelligent `build`, `deploy`, and `destroy` commands which you can +use in your `.gitlab-ci.yml` as is. It uses [Herokuish](https://github.com/gliderlabs/herokuish), which uses [Heroku buildpacks](https://devcenter.heroku.com/articles/buildpacks) to do some of the work, plus some of GitLab's own tools to package it all up. For your convenience, a [Docker image][kube-image] is also provided. @@ -61,77 +61,6 @@ To configure Autodeploy, you will need to: 1. Test your deployment configuration using a [Review App][review-app] that was created automatically for you. -## Using the Kubernetes deploy example project with Nginx - -A simple example would be the deployment of Nginx on Kubernetes. -Consider a `nginx-deployment.yaml` file in your project with contents: - -```yaml -apiVersion: extensions/v1beta1 -kind: Deployment -metadata: - name: __CI_ENVIRONMENT_SLUG__ - labels: - app: __CI_ENVIRONMENT_SLUG__ - track: stable -spec: - replicas: 3 - template: - metadata: - labels: - app: __CI_ENVIRONMENT_SLUG__ - track: stable - spec: - containers: - - name: nginx - image: nginx:1.7.9 - ports: - - containerPort: 80 -``` - -The important part is where we set up `app: __CI_ENVIRONMENT_SLUG__`. As you'll -see later this is replaced by the -[`CI_ENVIRONMENT_SLUG` env variable](../variables/README.md#predefined-variables-environment-variables). - -The `.gitlab-ci.yml` would be: - -```yaml -image: registry.gitlab.com/gitlab-examples/kubernetes-deploy - -stages: - - deploy - -kubernetes deploy: - stage: deploy - environment: - name: production - script: - - echo "$KUBE_CA_PEM" > kube_ca.pem - - cat kube_ca.pem - - kubectl config set-cluster default-cluster --server=$KUBE_URL --certificate-authority="$(pwd)/kube_ca.pem" - - kubectl config set-credentials default-admin --token=$KUBE_TOKEN - - kubectl config set-context default-system --cluster=default-cluster --user=default-admin --namespace $KUBE_NAMESPACE - - kubectl config use-context default-system - - - sed -i "s/__CI_ENVIRONMENT_SLUG__/$CI_ENVIRONMENT_SLUG/" nginx-deployment.yaml - - cat nginx-deployment.yaml - - kubectl cluster-info - - kubectl get deployments -l app=$CI_ENVIRONMENT_SLUG - - kubectl create -f nginx-deployment.yaml || kubectl replace -f nginx-deployment.yaml -``` - -Notice that we use a couple of Kubernetes environment variables to configure -the Kubernetes cluster. These are exposed from the -[Kubernetes service](../../user/project/integrations/kubernetes.md#deployment-variables). -The most important one is the `$KUBE_NAMESPACE` which should be unique for -every project. - -Next, we replace `__CI_ENVIRONMENT_SLUG__` with the content of the -`CI_ENVIRONMENT_SLUG` variable, so that the `app` label has the correct value. - -Finally, the Nginx pod is created from the definition of the -`nginx-deployment.yaml` file. - ## Private project support > Experimental support [introduced][mr-2] in GitLab 9.1. diff --git a/doc/ci/autodeploy/quick_start_guide.md b/doc/ci/autodeploy/quick_start_guide.md index 0f7c255147d..f76c2a2cf31 100644 --- a/doc/ci/autodeploy/quick_start_guide.md +++ b/doc/ci/autodeploy/quick_start_guide.md @@ -1,4 +1,4 @@ -# Auto deploy: quick start guide +# Auto Deploy: quick start guide This is a step-by-step guide to deploying a project hosted on GitLab.com to Google Cloud, using Auto Deploy. @@ -43,7 +43,7 @@ You need to copy-paste the ca.crt and token into your project on GitLab.com in t For API URL, you should use the `Endpoint` IP from your cluster page on Google Cloud Platform. -## Expose application to the world +## Expose the application to the internet In order to be able to visit your application, you need to install an NGINX ingress controller and point your domain name to its external IP address. @@ -67,7 +67,7 @@ Find out the external IP address of the `ruby-app-nginx-ingress-controller` by r kubectl get svc ruby-app-nginx-ingress-controller -o jsonpath='{.status.loadBalancer.ingress[0].ip}' ``` -Use this IP address to configure your DNS. This part heavily depends on your preferences and domain provider. But in case you are not sure, just create an A record with a wildcard host like `*.`. +Use this IP address to configure your DNS. This part heavily depends on your preferences and domain provider. But in case you are not sure, just create an A record with a wildcard host like `*.` pointing to the external IP address you found above. Use `nslookup minimal-ruby-app-staging.` to confirm that domain is assigned to the cluster IP. @@ -77,10 +77,19 @@ Visit the home page of your GitLab.com project and press "Set up Auto Deploy" bu ![auto deploy button](img/auto_deploy_btn.png) -You will be redirected to the New file page where you can apply one of the Auto Deploy templates. Select "Kubernetes" to apply the template, then in the file, replace "domain.example.com" with your domain name and any other adjustments you feel comfortable with. +You will be redirected to the "New file" page where you can apply one of the Auto Deploy templates. Select "Kubernetes" to apply the template, then in the file, replace `domain.example.com` with your domain name and make any other adjustments you need. ![auto deploy template](img/auto_deploy_dropdown.png) -Change the target branch to `master`, and submit your changes. This should create a new pipeline with several jobs. If you made only the domain name change, the pipeline will have 3 jobs: `build`, `staging` and `production`. The `build` job will create a docker image with your new change and push it to the GitLab Container Registry. The `staging` job will deploy this image on your cluster. Once the deploy job succeeds you should be able to see your application by visiting the Kubernetes dashboard. Select the namespace of your project, which will look like `ruby-autodeploy-23`, but with a unique ID for your project, and your app will be listed as “staging” under the Deployment tab. +Change the target branch to `master`, and submit your changes. This should create +a new pipeline with several jobs. If you made only the domain name change, the +pipeline will have three jobs: `build`, `staging`, and `production`. + +The `build` job will create a Docker image with your new change and push it to +the GitLab Container Registry. The `staging` job will deploy this image on your +cluster. Once the deploy job succeeds you should be able to see your application by +visiting the Kubernetes dashboard. Select the namespace of your project, which +will look like `ruby-autodeploy-23`, but with a unique ID for your project, and +your app will be listed as "staging" under the "Deployment" tab. Once its ready - just visit http://minimal-ruby-app-staging.yourdomain.com to see “Hello, world!” From 632b24820e4a0bc0e96a2e5900ca6f0aa1e857c5 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Wed, 6 Sep 2017 09:38:48 +0100 Subject: [PATCH 11/27] Moves the action buttons out of the breadcrumbs Closes #36459 --- app/assets/stylesheets/new_nav.scss | 10 ---------- app/views/dashboard/_groups_head.html.haml | 8 ++------ app/views/dashboard/_projects_head.html.haml | 8 ++------ app/views/dashboard/_snippets_head.html.haml | 8 ++++---- app/views/dashboard/issues.html.haml | 7 +------ app/views/dashboard/merge_requests.html.haml | 5 +---- app/views/dashboard/milestones/index.html.haml | 5 +---- app/views/groups/issues.html.haml | 10 +--------- app/views/groups/labels/index.html.haml | 5 +---- app/views/groups/merge_requests.html.haml | 6 +----- app/views/groups/milestones/index.html.haml | 5 +---- app/views/layouts/nav/_breadcrumbs.html.haml | 2 -- app/views/projects/issues/index.html.haml | 5 +---- app/views/projects/labels/index.html.haml | 6 +----- app/views/projects/merge_requests/index.html.haml | 5 +---- app/views/projects/milestones/index.html.haml | 6 +----- app/views/projects/pipeline_schedules/index.html.haml | 6 +----- app/views/projects/snippets/index.html.haml | 6 +----- 18 files changed, 21 insertions(+), 92 deletions(-) diff --git a/app/assets/stylesheets/new_nav.scss b/app/assets/stylesheets/new_nav.scss index e4b52ab480d..2b6c0fc015c 100644 --- a/app/assets/stylesheets/new_nav.scss +++ b/app/assets/stylesheets/new_nav.scss @@ -515,16 +515,6 @@ header.navbar-gitlab-new { } } -.top-area { - .nav-controls-new-nav { - .dropdown { - @media (min-width: $screen-sm-min) { - margin-right: 0; - } - } - } -} - .btn-sign-in { margin-top: 3px; background-color: $indigo-100; diff --git a/app/views/dashboard/_groups_head.html.haml b/app/views/dashboard/_groups_head.html.haml index 11bf3f5d323..7981daa0705 100644 --- a/app/views/dashboard/_groups_head.html.haml +++ b/app/views/dashboard/_groups_head.html.haml @@ -1,7 +1,3 @@ -- if current_user.can_create_group? - - content_for :breadcrumbs_extra do - = link_to "New group", new_group_path, class: "btn btn-new" - .top-area %ul.nav-links = nav_link(page: dashboard_groups_path) do @@ -10,8 +6,8 @@ = nav_link(page: explore_groups_path) do = link_to explore_groups_path, title: 'Explore public groups' do Explore public groups - .nav-controls.nav-controls-new-nav + .nav-controls = render 'shared/groups/search_form' = render 'shared/groups/dropdown' - if current_user.can_create_group? - = link_to "New group", new_group_path, class: "btn btn-new visible-xs" + = link_to "New group", new_group_path, class: "btn btn-new" diff --git a/app/views/dashboard/_projects_head.html.haml b/app/views/dashboard/_projects_head.html.haml index e2a1914ada2..fd2ba9ac1ca 100644 --- a/app/views/dashboard/_projects_head.html.haml +++ b/app/views/dashboard/_projects_head.html.haml @@ -1,10 +1,6 @@ = content_for :flash_message do = render 'shared/project_limit' -- if current_user.can_create_project? - - content_for :breadcrumbs_extra do - = link_to "New project", new_project_path, class: 'btn btn-new' - .top-area.scrolling-tabs-container.inner-page-scroll-tabs .fade-left= icon('angle-left') .fade-right= icon('angle-right') @@ -19,8 +15,8 @@ = link_to explore_root_path, title: 'Explore', data: {placement: 'right'} do Explore projects - .nav-controls.nav-controls-new-nav + .nav-controls = render 'shared/projects/search_form' = render 'shared/projects/dropdown' - if current_user.can_create_project? - = link_to "New project", new_project_path, class: "btn btn-new visible-xs" + = link_to "New project", new_project_path, class: "btn btn-new" diff --git a/app/views/dashboard/_snippets_head.html.haml b/app/views/dashboard/_snippets_head.html.haml index 14c18678ab1..7330f4cb523 100644 --- a/app/views/dashboard/_snippets_head.html.haml +++ b/app/views/dashboard/_snippets_head.html.haml @@ -1,7 +1,3 @@ -- if current_user - - content_for :breadcrumbs_extra do - = link_to "New snippet", new_snippet_path, class: "btn btn-new", title: "New snippet" - .top-area %ul.nav-links = nav_link(page: dashboard_snippets_path, html_options: {class: 'home'}) do @@ -10,3 +6,7 @@ = nav_link(page: explore_snippets_path) do = link_to explore_snippets_path, title: 'Explore snippets', data: {placement: 'right'} do Explore Snippets + + - if current_user + .nav-controls.hidden-xs + = link_to "New snippet", new_snippet_path, class: "btn btn-new", title: "New snippet" diff --git a/app/views/dashboard/issues.html.haml b/app/views/dashboard/issues.html.haml index ad0e205a79f..42941acc508 100644 --- a/app/views/dashboard/issues.html.haml +++ b/app/views/dashboard/issues.html.haml @@ -4,14 +4,9 @@ = content_for :meta_tags do = auto_discovery_link_tag(:atom, params.merge(rss_url_options), title: "#{current_user.name} issues") -- content_for :breadcrumbs_extra do - = link_to params.merge(rss_url_options), class: 'btn has-tooltip append-right-10', title: 'Subscribe' do - = icon('rss') - = render 'shared/new_project_item_select', path: 'issues/new', label: "New issue", with_feature_enabled: 'issues', type: :issues - .top-area = render 'shared/issuable/nav', type: :issues - .nav-controls.visible-xs + .nav-controls = link_to params.merge(rss_url_options), class: 'btn has-tooltip', title: 'Subscribe' do = icon('rss') = render 'shared/new_project_item_select', path: 'issues/new', label: "New issue", with_feature_enabled: 'issues', type: :issues diff --git a/app/views/dashboard/merge_requests.html.haml b/app/views/dashboard/merge_requests.html.haml index ccc74f7cf3d..53cd1130299 100644 --- a/app/views/dashboard/merge_requests.html.haml +++ b/app/views/dashboard/merge_requests.html.haml @@ -2,12 +2,9 @@ - page_title "Merge Requests" - header_title "Merge Requests", merge_requests_dashboard_path(assignee_id: current_user.id) -- content_for :breadcrumbs_extra do - = render 'shared/new_project_item_select', path: 'merge_requests/new', label: "New merge request", with_feature_enabled: 'merge_requests', type: :merge_requests - .top-area = render 'shared/issuable/nav', type: :merge_requests - .nav-controls.visible-xs + .nav-controls = render 'shared/new_project_item_select', path: 'merge_requests/new', label: "New merge request", with_feature_enabled: 'merge_requests', type: :merge_requests = render 'shared/issuable/filter', type: :merge_requests diff --git a/app/views/dashboard/milestones/index.html.haml b/app/views/dashboard/milestones/index.html.haml index 9fffdded1a0..f66e2b40d76 100644 --- a/app/views/dashboard/milestones/index.html.haml +++ b/app/views/dashboard/milestones/index.html.haml @@ -2,13 +2,10 @@ - page_title 'Milestones' - header_title 'Milestones', dashboard_milestones_path -- content_for :breadcrumbs_extra do - = render 'shared/new_project_item_select', path: 'milestones/new', label: 'New milestone', include_groups: true, type: :milestones - .top-area = render 'shared/milestones_filter', counts: @milestone_states - .nav-controls.visible-xs + .nav-controls = render 'shared/new_project_item_select', path: 'milestones/new', label: 'New milestone', include_groups: true, type: :milestones .milestones diff --git a/app/views/groups/issues.html.haml b/app/views/groups/issues.html.haml index 13a4b4c90c9..7f411927429 100644 --- a/app/views/groups/issues.html.haml +++ b/app/views/groups/issues.html.haml @@ -8,18 +8,10 @@ = webpack_bundle_tag 'common_vue' = webpack_bundle_tag 'filtered_search' -- if group_issues_exists - - content_for :breadcrumbs_extra do - = link_to params.merge(rss_url_options), class: 'btn btn-default append-right-10' do - = icon('rss') - %span.icon-label - Subscribe - = render 'shared/new_project_item_select', path: 'issues/new', label: "New issue", type: :issues - - if group_issues_exists .top-area = render 'shared/issuable/nav', type: :issues - .nav-controls.visible-xs + .nav-controls = link_to params.merge(rss_url_options), class: 'btn' do = icon('rss') %span.icon-label diff --git a/app/views/groups/labels/index.html.haml b/app/views/groups/labels/index.html.haml index 9e59a09d459..89165096fe2 100644 --- a/app/views/groups/labels/index.html.haml +++ b/app/views/groups/labels/index.html.haml @@ -1,7 +1,4 @@ - page_title 'Labels' -- if can?(current_user, :admin_label, @group) - - content_for :breadcrumbs_extra do - = link_to "New label", new_group_label_path(@group), class: "btn btn-new" = render "groups/head_issues" @@ -10,7 +7,7 @@ .nav-text Labels can be applied to issues and merge requests. Group labels are available for any project within the group. - .nav-controls.visible-xs + .nav-controls - if can?(current_user, :admin_label, @group) = link_to "New label", new_group_label_path(@group), class: "btn btn-new" diff --git a/app/views/groups/merge_requests.html.haml b/app/views/groups/merge_requests.html.haml index 0344770e0dd..e56dc1fb9c2 100644 --- a/app/views/groups/merge_requests.html.haml +++ b/app/views/groups/merge_requests.html.haml @@ -4,17 +4,13 @@ = webpack_bundle_tag 'common_vue' = webpack_bundle_tag 'filtered_search' -- if current_user - - content_for :breadcrumbs_extra do - = render 'shared/new_project_item_select', path: 'merge_requests/new', label: "New merge request", type: :merge_requests - - if @group_merge_requests.empty? = render 'shared/empty_states/merge_requests', project_select_button: true - else .top-area = render 'shared/issuable/nav', type: :merge_requests - if current_user - .nav-controls.visible-xs + .nav-controls = render 'shared/new_project_item_select', path: 'merge_requests/new', label: "New merge request", type: :merge_requests = render 'shared/issuable/search_bar', type: :merge_requests diff --git a/app/views/groups/milestones/index.html.haml b/app/views/groups/milestones/index.html.haml index 6e7a1af243d..ed582e521c4 100644 --- a/app/views/groups/milestones/index.html.haml +++ b/app/views/groups/milestones/index.html.haml @@ -1,14 +1,11 @@ - page_title "Milestones" -- if can?(current_user, :admin_milestones, @group) - - content_for :breadcrumbs_extra do - = link_to "New milestone", new_group_milestone_path(@group), class: "btn btn-new" = render "groups/head_issues" .top-area = render 'shared/milestones_filter', counts: @milestone_states - .nav-controls.visible-xs + .nav-controls - if can?(current_user, :admin_milestones, @group) = link_to "New milestone", new_group_milestone_path(@group), class: "btn btn-new" diff --git a/app/views/layouts/nav/_breadcrumbs.html.haml b/app/views/layouts/nav/_breadcrumbs.html.haml index feffd7707dc..0b20137ec74 100644 --- a/app/views/layouts/nav/_breadcrumbs.html.haml +++ b/app/views/layouts/nav/_breadcrumbs.html.haml @@ -17,6 +17,4 @@ = render "layouts/nav/breadcrumbs/collapsed_dropdown", location: :after %li %h2.breadcrumbs-sub-title= @breadcrumb_title - - if content_for?(:breadcrumbs_extra) - .breadcrumbs-extra.hidden-xs= yield :breadcrumbs_extra = yield :header_content diff --git a/app/views/projects/issues/index.html.haml b/app/views/projects/issues/index.html.haml index 6fcb5975707..e72c94695bc 100644 --- a/app/views/projects/issues/index.html.haml +++ b/app/views/projects/issues/index.html.haml @@ -13,14 +13,11 @@ = content_for :meta_tags do = auto_discovery_link_tag(:atom, params.merge(rss_url_options), title: "#{@project.name} issues") -- content_for :breadcrumbs_extra do - = render "projects/issues/nav_btns" - - if project_issues(@project).exists? %div{ class: (container_class) } .top-area = render 'shared/issuable/nav', type: :issues - .nav-controls.visible-xs + .nav-controls = render "projects/issues/nav_btns" = render 'shared/issuable/search_bar', type: :issues diff --git a/app/views/projects/labels/index.html.haml b/app/views/projects/labels/index.html.haml index ec9e8444ac5..10d07ce8e45 100644 --- a/app/views/projects/labels/index.html.haml +++ b/app/views/projects/labels/index.html.haml @@ -3,10 +3,6 @@ - hide_class = '' - can_admin_label = can?(current_user, :admin_label, @project) -- if can?(current_user, :admin_label, @project) - - content_for :breadcrumbs_extra do - = link_to "New label", new_namespace_project_label_path(@project.namespace, @project), class: "btn btn-new" - = render "shared/mr_head" - if @labels.exists? || @prioritized_labels.exists? @@ -18,7 +14,7 @@ Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging. - if can_admin_label - .nav-controls.visible-xs + .nav-controls = link_to new_project_label_path(@project), class: "btn btn-new" do New label diff --git a/app/views/projects/merge_requests/index.html.haml b/app/views/projects/merge_requests/index.html.haml index 27c3002366b..fc7190505da 100644 --- a/app/views/projects/merge_requests/index.html.haml +++ b/app/views/projects/merge_requests/index.html.haml @@ -12,16 +12,13 @@ = webpack_bundle_tag 'common_vue' = webpack_bundle_tag 'filtered_search' -- content_for :breadcrumbs_extra do - = render "projects/merge_requests/nav_btns", merge_project: merge_project, new_merge_request_path: new_merge_request_path - = render 'projects/last_push' - if @project.merge_requests.exists? %div{ class: container_class } .top-area = render 'shared/issuable/nav', type: :merge_requests - .nav-controls.visible-xs + .nav-controls = render "projects/merge_requests/nav_btns", merge_project: merge_project, new_merge_request_path: new_merge_request_path = render 'shared/issuable/search_bar', type: :merge_requests diff --git a/app/views/projects/milestones/index.html.haml b/app/views/projects/milestones/index.html.haml index 71ec88ef1c1..c72da2deb3e 100644 --- a/app/views/projects/milestones/index.html.haml +++ b/app/views/projects/milestones/index.html.haml @@ -1,17 +1,13 @@ - @no_container = true - page_title 'Milestones' -- if can?(current_user, :admin_milestone, @project) - - content_for :breadcrumbs_extra do - = link_to "New milestone", new_namespace_project_milestone_path(@project.namespace, @project), class: 'btn btn-new', title: 'New milestone' - = render "shared/mr_head" %div{ class: container_class } .top-area = render 'shared/milestones_filter', counts: milestone_counts(@project.milestones) - .nav-controls.nav-controls-new-nav + .nav-controls = render 'shared/milestones_sort_dropdown' - if can?(current_user, :admin_milestone, @project) = link_to new_project_milestone_path(@project), class: "btn btn-new visible-xs", title: 'New milestone' do diff --git a/app/views/projects/pipeline_schedules/index.html.haml b/app/views/projects/pipeline_schedules/index.html.haml index d9957b54a4d..2b081786b6a 100644 --- a/app/views/projects/pipeline_schedules/index.html.haml +++ b/app/views/projects/pipeline_schedules/index.html.haml @@ -7,10 +7,6 @@ - @no_container = true - page_title _("Pipeline Schedules") -- if can?(current_user, :create_pipeline_schedule, @project) - - content_for :breadcrumbs_extra do - = link_to _('New schedule'), new_namespace_project_pipeline_schedule_path(@project.namespace, @project), class: 'btn btn-create' - = render "projects/pipelines/head" %div{ class: container_class } @@ -20,7 +16,7 @@ = render "tabs", schedule_path_proc: schedule_path_proc, all_schedules: @all_schedules, scope: @scope - if can?(current_user, :create_pipeline_schedule, @project) - .nav-controls.visible-xs + .nav-controls = link_to new_project_pipeline_schedule_path(@project), class: 'btn btn-create' do %span= _('New schedule') diff --git a/app/views/projects/snippets/index.html.haml b/app/views/projects/snippets/index.html.haml index 1803e7f7211..65efc083fdd 100644 --- a/app/views/projects/snippets/index.html.haml +++ b/app/views/projects/snippets/index.html.haml @@ -1,15 +1,11 @@ - page_title "Snippets" -- if can?(current_user, :create_project_snippet, @project) - - content_for :breadcrumbs_extra do - = link_to "New snippet", new_namespace_project_snippet_path(@project.namespace, @project), class: "btn btn-new", title: "New snippet" - - if current_user .top-area - include_private = @project.team.member?(current_user) || current_user.admin? = render partial: 'snippets/snippets_scope_menu', locals: { subject: @project, include_private: include_private } - .nav-controls.visible-xs + .nav-controls - if can?(current_user, :create_project_snippet, @project) = link_to "New snippet", new_project_snippet_path(@project), class: "btn btn-new", title: "New snippet" From 094de17e96eb46e09883bed74bcebd497d110496 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Wed, 6 Sep 2017 13:48:03 +0100 Subject: [PATCH 12/27] spec fixes --- features/steps/group/milestones.rb | 2 +- features/steps/project/issues/issues.rb | 2 +- features/steps/project/issues/milestones.rb | 2 +- features/steps/project/merge_requests.rb | 2 +- features/steps/project/snippets.rb | 2 +- spec/features/dashboard/issues_filter_spec.rb | 2 +- spec/features/issues_spec.rb | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/features/steps/group/milestones.rb b/features/steps/group/milestones.rb index 20edcf75ff1..818bbb50d0e 100644 --- a/features/steps/group/milestones.rb +++ b/features/steps/group/milestones.rb @@ -47,7 +47,7 @@ class Spinach::Features::GroupMilestones < Spinach::FeatureSteps end step 'I click new milestone button' do - page.within('.breadcrumbs') do + page.within('.nav-controls') do click_link "New milestone" end end diff --git a/features/steps/project/issues/issues.rb b/features/steps/project/issues/issues.rb index f7dd4fc21e9..fab96f22739 100644 --- a/features/steps/project/issues/issues.rb +++ b/features/steps/project/issues/issues.rb @@ -62,7 +62,7 @@ class Spinach::Features::ProjectIssues < Spinach::FeatureSteps end step 'I click link "New issue"' do - page.within '.breadcrumbs' do + page.within '.nav-controls' do page.has_link?('New Issue') ? click_link('New Issue') : click_link('New issue') end end diff --git a/features/steps/project/issues/milestones.rb b/features/steps/project/issues/milestones.rb index 307902a887e..16a2d4a6f93 100644 --- a/features/steps/project/issues/milestones.rb +++ b/features/steps/project/issues/milestones.rb @@ -16,7 +16,7 @@ class Spinach::Features::ProjectIssuesMilestones < Spinach::FeatureSteps end step 'I click link "New Milestone"' do - page.within('.breadcrumbs') do + page.within('.nav-controls') do click_link "New milestone" end end diff --git a/features/steps/project/merge_requests.rb b/features/steps/project/merge_requests.rb index 3c3bffd7223..0d49a4ab90d 100644 --- a/features/steps/project/merge_requests.rb +++ b/features/steps/project/merge_requests.rb @@ -14,7 +14,7 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps end step 'I click link "New Merge Request"' do - page.within '.breadcrumbs' do + page.within '.nav-controls' do page.has_link?('New Merge Request') ? click_link("New Merge Request") : click_link('New merge request') end end diff --git a/features/steps/project/snippets.rb b/features/steps/project/snippets.rb index 96b7ba7549f..2a1e6b2bce8 100644 --- a/features/steps/project/snippets.rb +++ b/features/steps/project/snippets.rb @@ -23,7 +23,7 @@ class Spinach::Features::ProjectSnippets < Spinach::FeatureSteps end step 'I click link "New snippet"' do - page.within '.breadcrumbs' do + page.within '.nav-controls' do first(:link, "New snippet").click end end diff --git a/spec/features/dashboard/issues_filter_spec.rb b/spec/features/dashboard/issues_filter_spec.rb index ebc3d196118..facb67ae787 100644 --- a/spec/features/dashboard/issues_filter_spec.rb +++ b/spec/features/dashboard/issues_filter_spec.rb @@ -50,7 +50,7 @@ feature 'Dashboard Issues filtering', :js do it 'updates atom feed link' do visit_issues(milestone_title: '', assignee_id: user.id) - link = find('.breadcrumbs a[title="Subscribe"]') + link = find('.nav-controls a[title="Subscribe"]') params = CGI.parse(URI.parse(link[:href]).query) auto_discovery_link = find('link[type="application/atom+xml"]', visible: false) auto_discovery_params = CGI.parse(URI.parse(auto_discovery_link[:href]).query) diff --git a/spec/features/issues_spec.rb b/spec/features/issues_spec.rb index 11db1105d91..5c284a1fe5f 100644 --- a/spec/features/issues_spec.rb +++ b/spec/features/issues_spec.rb @@ -577,7 +577,7 @@ describe 'Issues' do it 'redirects to signin then back to new issue after signin' do visit project_issues_path(project) - page.within '.breadcrumbs' do + page.within '.nav-controls' do click_link 'New issue' end From c53d5ceae7f5211d1407dcc67aa99e8608eda2d3 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Wed, 6 Sep 2017 16:09:59 +0100 Subject: [PATCH 13/27] fixed breadcrumb container --- app/views/layouts/nav/_breadcrumbs.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/layouts/nav/_breadcrumbs.html.haml b/app/views/layouts/nav/_breadcrumbs.html.haml index 0b20137ec74..7bd3f5306a2 100644 --- a/app/views/layouts/nav/_breadcrumbs.html.haml +++ b/app/views/layouts/nav/_breadcrumbs.html.haml @@ -2,7 +2,7 @@ - hide_top_links = @hide_top_links || false %nav.breadcrumbs{ role: "navigation", class: [container, @content_class] } - .breadcrumbs-container{ class: [container, @content_class] } + .breadcrumbs-container - if defined?(@left_sidebar) = button_tag class: 'toggle-mobile-nav', type: 'button' do %span.sr-only Open sidebar From 66e8a39b3c8497171f7855f9dacc2702149ed15c Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Wed, 6 Sep 2017 16:29:35 +0100 Subject: [PATCH 14/27] fixed new milstone button not being visible --- app/views/projects/milestones/index.html.haml | 2 +- features/steps/project/issues/issues.rb | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/app/views/projects/milestones/index.html.haml b/app/views/projects/milestones/index.html.haml index c72da2deb3e..f3abecdd302 100644 --- a/app/views/projects/milestones/index.html.haml +++ b/app/views/projects/milestones/index.html.haml @@ -10,7 +10,7 @@ .nav-controls = render 'shared/milestones_sort_dropdown' - if can?(current_user, :admin_milestone, @project) - = link_to new_project_milestone_path(@project), class: "btn btn-new visible-xs", title: 'New milestone' do + = link_to new_project_milestone_path(@project), class: "btn btn-new", title: 'New milestone' do New milestone .milestones diff --git a/features/steps/project/issues/issues.rb b/features/steps/project/issues/issues.rb index fab96f22739..ceffc7a757d 100644 --- a/features/steps/project/issues/issues.rb +++ b/features/steps/project/issues/issues.rb @@ -62,9 +62,7 @@ class Spinach::Features::ProjectIssues < Spinach::FeatureSteps end step 'I click link "New issue"' do - page.within '.nav-controls' do - page.has_link?('New Issue') ? click_link('New Issue') : click_link('New issue') - end + page.has_link?('New Issue') ? click_link('New Issue') : click_link('New issue') end step 'I click "author" dropdown' do From 204d9c296ee5f18e7600ddc22040b4d72a6436c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Rodr=C3=ADguez?= Date: Wed, 6 Sep 2017 16:48:42 +0000 Subject: [PATCH 15/27] Update GITALY_SERVER_VERSION to 0.38.0 --- GITALY_SERVER_VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION index 0f1a7dfc7c4..ca75280b09b 100644 --- a/GITALY_SERVER_VERSION +++ b/GITALY_SERVER_VERSION @@ -1 +1 @@ -0.37.0 +0.38.0 From eac86b3e5fbea4afb4c5e0ec2fc30c4c62a663bb Mon Sep 17 00:00:00 2001 From: Jarka Kadlecova Date: Wed, 6 Sep 2017 16:15:27 +0200 Subject: [PATCH 16/27] reset namespace columns in migration --- .gitlab-ci.yml | 1 - db/migrate/20170825104051_migrate_issues_to_ghost_user.rb | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b76c8f00d77..70b0cde17ea 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -412,7 +412,6 @@ db:migrate:reset-mysql: .migration-paths: &migration-paths <<: *dedicated-runner - <<: *only-canonical-masters <<: *pull-cache stage: test variables: diff --git a/db/migrate/20170825104051_migrate_issues_to_ghost_user.rb b/db/migrate/20170825104051_migrate_issues_to_ghost_user.rb index 294141e4fdb..c5fb5762d61 100644 --- a/db/migrate/20170825104051_migrate_issues_to_ghost_user.rb +++ b/db/migrate/20170825104051_migrate_issues_to_ghost_user.rb @@ -18,6 +18,7 @@ class MigrateIssuesToGhostUser < ActiveRecord::Migration ActiveRecord::Base.clear_cache! ::User.reset_column_information + ::Namespace.reset_column_information end def up From c7a77dced766a42306c6a667a574e4cbbb1598ac Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Thu, 17 Aug 2017 17:50:29 -0400 Subject: [PATCH 17/27] Remove the `pretty` parameter for `usage_data` --- app/controllers/admin/application_settings_controller.rb | 3 +-- app/views/admin/cohorts/_usage_ping.html.haml | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app/controllers/admin/application_settings_controller.rb b/app/controllers/admin/application_settings_controller.rb index 8367c22d1ca..4dfb397e82c 100644 --- a/app/controllers/admin/application_settings_controller.rb +++ b/app/controllers/admin/application_settings_controller.rb @@ -20,8 +20,7 @@ class Admin::ApplicationSettingsController < Admin::ApplicationController def usage_data respond_to do |format| format.html do - usage_data = Gitlab::UsageData.data - usage_data_json = params[:pretty] ? JSON.pretty_generate(usage_data) : usage_data.to_json + usage_data_json = JSON.pretty_generate(Gitlab::UsageData.data) render html: Gitlab::Highlight.highlight('payload.json', usage_data_json) end diff --git a/app/views/admin/cohorts/_usage_ping.html.haml b/app/views/admin/cohorts/_usage_ping.html.haml index 73aa95d84f1..3dda386fcf7 100644 --- a/app/views/admin/cohorts/_usage_ping.html.haml +++ b/app/views/admin/cohorts/_usage_ping.html.haml @@ -7,4 +7,4 @@ = succeed '.' do = link_to 'application settings', admin_application_settings_path(anchor: 'usage-statistics') -%pre.usage-data.js-syntax-highlight.code.highlight{ data: { endpoint: usage_data_admin_application_settings_path(format: :html, pretty: true) } } +%pre.usage-data.js-syntax-highlight.code.highlight{ data: { endpoint: usage_data_admin_application_settings_path(format: :html) } } From cf49b53fa366869231e60d3421bac20deaf1e328 Mon Sep 17 00:00:00 2001 From: Joshua Lambert Date: Wed, 6 Sep 2017 20:16:46 +0000 Subject: [PATCH 18/27] Fix broken link on Kubernetes Monitoring page - docs --- doc/user/project/integrations/prometheus_library/kubernetes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/user/project/integrations/prometheus_library/kubernetes.md b/doc/user/project/integrations/prometheus_library/kubernetes.md index eb8cd821ddc..9f0308d8111 100644 --- a/doc/user/project/integrations/prometheus_library/kubernetes.md +++ b/doc/user/project/integrations/prometheus_library/kubernetes.md @@ -23,4 +23,4 @@ Prometheus server up and running. You have two options here: In order to isolate and only display relevant metrics for a given environment however, GitLab needs a method to detect which labels are associated. To do this, GitLab will [look for an `environment` label](metrics.md#identifying-environments). -If you are using [GitLab Auto-Deploy][autodeploy] and one of the two [provided Kubernetes monitoring solutions](../prometheus.md#getting-started-with-prometheus-monitoring), the `environment` label will be automatically added. +If you are using [GitLab Auto-Deploy][../../../ci/autodeploy/index.md] and one of the two [provided Kubernetes monitoring solutions](../prometheus.md#getting-started-with-prometheus-monitoring), the `environment` label will be automatically added. From c2e99b40f71ca7036cc07596aae164e92378263b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Rodr=C3=ADguez?= Date: Wed, 6 Sep 2017 17:47:25 -0300 Subject: [PATCH 19/27] Implement fix for n+1 issue on `flatten_tree` helper --- Gemfile | 2 +- Gemfile.lock | 4 +-- app/helpers/tree_helper.rb | 4 ++- app/views/projects/tree/_tree_item.html.haml | 2 +- lib/gitlab/git/tree.rb | 11 ++++++--- lib/gitlab/gitaly_client/commit_service.rb | 6 ++--- spec/helpers/tree_helper_spec.rb | 26 ++++++++++++++------ spec/lib/gitlab/git/tree_spec.rb | 3 +++ 8 files changed, 38 insertions(+), 20 deletions(-) diff --git a/Gemfile b/Gemfile index 0341f2609ad..0221d41fad7 100644 --- a/Gemfile +++ b/Gemfile @@ -397,7 +397,7 @@ group :ed25519 do end # Gitaly GRPC client -gem 'gitaly-proto', '~> 0.32.0', require: 'gitaly' +gem 'gitaly-proto', '~> 0.33.0', require: 'gitaly' gem 'toml-rb', '~> 0.3.15', require: false diff --git a/Gemfile.lock b/Gemfile.lock index 320d42b8974..c29d304fd48 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -275,7 +275,7 @@ GEM po_to_json (>= 1.0.0) rails (>= 3.2.0) gherkin-ruby (0.3.2) - gitaly-proto (0.32.0) + gitaly-proto (0.33.0) google-protobuf (~> 3.1) grpc (~> 1.0) github-linguist (4.7.6) @@ -1021,7 +1021,7 @@ DEPENDENCIES gettext (~> 3.2.2) gettext_i18n_rails (~> 1.8.0) gettext_i18n_rails_js (~> 1.2.0) - gitaly-proto (~> 0.32.0) + gitaly-proto (~> 0.33.0) github-linguist (~> 4.7.0) gitlab-flowdock-git-hook (~> 1.0.1) gitlab-markup (~> 1.5.1) diff --git a/app/helpers/tree_helper.rb b/app/helpers/tree_helper.rb index e0d3e9b88f3..95dbdc8ec46 100644 --- a/app/helpers/tree_helper.rb +++ b/app/helpers/tree_helper.rb @@ -99,7 +99,9 @@ module TreeHelper end # returns the relative path of the first subdir that doesn't have only one directory descendant - def flatten_tree(tree) + def flatten_tree(root_path, tree) + return tree.flat_path.sub(/\A#{root_path}\//, '') if tree.flat_path.present? + subtree = Gitlab::Git::Tree.where(@repository, @commit.id, tree.path) if subtree.count == 1 && subtree.first.dir? return tree_join(tree.name, flatten_tree(subtree.first)) diff --git a/app/views/projects/tree/_tree_item.html.haml b/app/views/projects/tree/_tree_item.html.haml index 0c9c8750f2c..56197382a70 100644 --- a/app/views/projects/tree/_tree_item.html.haml +++ b/app/views/projects/tree/_tree_item.html.haml @@ -1,7 +1,7 @@ %tr{ class: "tree-item #{tree_hex_class(tree_item)}" } %td.tree-item-file-name = tree_icon(type, tree_item.mode, tree_item.name) - - path = flatten_tree(tree_item) + - path = flatten_tree(@path, tree_item) = link_to project_tree_path(@project, tree_join(@id || @commit.id, path)), title: path do %span.str-truncated= path %td.hidden-xs.tree-commit diff --git a/lib/gitlab/git/tree.rb b/lib/gitlab/git/tree.rb index b54962a4456..5cf336af3c6 100644 --- a/lib/gitlab/git/tree.rb +++ b/lib/gitlab/git/tree.rb @@ -5,7 +5,7 @@ module Gitlab class Tree include Gitlab::EncodingHelper - attr_accessor :id, :root_id, :name, :path, :type, + attr_accessor :id, :root_id, :name, :path, :flat_path, :type, :mode, :commit_id, :submodule_url class << self @@ -19,8 +19,7 @@ module Gitlab Gitlab::GitalyClient.migrate(:tree_entries) do |is_enabled| if is_enabled - client = Gitlab::GitalyClient::CommitService.new(repository) - client.tree_entries(repository, sha, path) + repository.gitaly_commit_client.tree_entries(repository, sha, path) else tree_entries_from_rugged(repository, sha, path) end @@ -88,7 +87,7 @@ module Gitlab end def initialize(options) - %w(id root_id name path type mode commit_id).each do |key| + %w(id root_id name path flat_path type mode commit_id).each do |key| self.send("#{key}=", options[key.to_sym]) # rubocop:disable GitlabSecurity/PublicSend end end @@ -101,6 +100,10 @@ module Gitlab encode! @path end + def flat_path + encode! @flat_path + end + def dir? type == :tree end diff --git a/lib/gitlab/gitaly_client/commit_service.rb b/lib/gitlab/gitaly_client/commit_service.rb index 21a32a7e0db..0825a3a7694 100644 --- a/lib/gitlab/gitaly_client/commit_service.rb +++ b/lib/gitlab/gitaly_client/commit_service.rb @@ -88,14 +88,14 @@ module Gitlab response.flat_map do |message| message.entries.map do |gitaly_tree_entry| - entry_path = gitaly_tree_entry.path.dup Gitlab::Git::Tree.new( id: gitaly_tree_entry.oid, root_id: gitaly_tree_entry.root_oid, type: gitaly_tree_entry.type.downcase, mode: gitaly_tree_entry.mode.to_s(8), - name: File.basename(entry_path), - path: entry_path, + name: File.basename(gitaly_tree_entry.path), + path: GitalyClient.encode(gitaly_tree_entry.path), + flat_path: GitalyClient.encode(gitaly_tree_entry.flat_path), commit_id: gitaly_tree_entry.commit_oid ) end diff --git a/spec/helpers/tree_helper_spec.rb b/spec/helpers/tree_helper_spec.rb index 9523d0f4aa6..d7b66e6f078 100644 --- a/spec/helpers/tree_helper_spec.rb +++ b/spec/helpers/tree_helper_spec.rb @@ -3,25 +3,35 @@ require 'spec_helper' describe TreeHelper do describe 'flatten_tree' do let(:project) { create(:project, :repository) } + let(:repository) { project.repository } + let(:sha) { 'ce369011c189f62c815f5971d096b26759bab0d1' } + let(:tree) { repository.tree(sha, 'files') } + let(:root_path) { 'files' } + let(:tree_item) { tree.entries.find { |entry| entry.path == path } } - before do - @repository = project.repository - @commit = project.commit("e56497bb") - end + subject { flatten_tree(root_path, tree_item) } context "on a directory containing more than one file/directory" do - let(:tree_item) { double(name: "files", path: "files") } + let(:path) { 'files/html' } it "returns the directory name" do - expect(flatten_tree(tree_item)).to match('files') + expect(subject).to match('html') end end context "on a directory containing only one directory" do - let(:tree_item) { double(name: "foo", path: "foo") } + let(:path) { 'files/flat' } it "returns the flattened path" do - expect(flatten_tree(tree_item)).to match('foo/bar') + expect(subject).to match('flat/path/correct') + end + + context "with a nested root path" do + let(:root_path) { 'files/flat' } + + it "returns the flattened path with the root path suffix removed" do + expect(subject).to match('path/correct') + end end end end diff --git a/spec/lib/gitlab/git/tree_spec.rb b/spec/lib/gitlab/git/tree_spec.rb index c07a2d91768..86f7bcb8e38 100644 --- a/spec/lib/gitlab/git/tree_spec.rb +++ b/spec/lib/gitlab/git/tree_spec.rb @@ -20,6 +20,7 @@ describe Gitlab::Git::Tree, seed_helper: true do it { expect(dir.commit_id).to eq(SeedRepo::Commit::ID) } it { expect(dir.name).to eq('encoding') } it { expect(dir.path).to eq('encoding') } + it { expect(dir.flat_path).to eq('encoding') } it { expect(dir.mode).to eq('40000') } context :subdir do @@ -30,6 +31,7 @@ describe Gitlab::Git::Tree, seed_helper: true do it { expect(subdir.commit_id).to eq(SeedRepo::Commit::ID) } it { expect(subdir.name).to eq('html') } it { expect(subdir.path).to eq('files/html') } + it { expect(subdir.flat_path).to eq('files/html') } end context :subdir_file do @@ -40,6 +42,7 @@ describe Gitlab::Git::Tree, seed_helper: true do it { expect(subdir_file.commit_id).to eq(SeedRepo::Commit::ID) } it { expect(subdir_file.name).to eq('popen.rb') } it { expect(subdir_file.path).to eq('files/ruby/popen.rb') } + it { expect(subdir_file.flat_path).to eq('files/ruby/popen.rb') } end end From 2915bb27078a3eae0bac36bd2c3a2e1c4998130c Mon Sep 17 00:00:00 2001 From: blackst0ne Date: Thu, 7 Sep 2017 09:21:52 +1100 Subject: [PATCH 20/27] Add API support for wiki pages --- changelogs/unreleased/wiki_api.yml | 5 + doc/api/README.md | 1 + doc/api/wikis.md | 157 +++++++ lib/api/api.rb | 1 + lib/api/entities.rb | 10 + lib/api/helpers.rb | 6 + lib/api/wikis.rb | 89 ++++ spec/requests/api/wikis_spec.rb | 679 +++++++++++++++++++++++++++++ 8 files changed, 948 insertions(+) create mode 100644 changelogs/unreleased/wiki_api.yml create mode 100644 doc/api/wikis.md create mode 100644 lib/api/wikis.rb create mode 100644 spec/requests/api/wikis_spec.rb diff --git a/changelogs/unreleased/wiki_api.yml b/changelogs/unreleased/wiki_api.yml new file mode 100644 index 00000000000..9d60356aedc --- /dev/null +++ b/changelogs/unreleased/wiki_api.yml @@ -0,0 +1,5 @@ +--- +title: Add API support for wiki pages +merge_request: 13372 +author: Vitaliy @blackst0ne Klachkov +type: added diff --git a/doc/api/README.md b/doc/api/README.md index 266b5f018d9..f8e565ddbe5 100644 --- a/doc/api/README.md +++ b/doc/api/README.md @@ -58,6 +58,7 @@ following locations: - [Validate CI configuration](lint.md) - [V3 to V4](v3_to_v4.md) - [Version](version.md) +- [Wikis](wikis.md) ## Road to GraphQL diff --git a/doc/api/wikis.md b/doc/api/wikis.md new file mode 100644 index 00000000000..10eebc4a3c1 --- /dev/null +++ b/doc/api/wikis.md @@ -0,0 +1,157 @@ +# Wikis API + +> [Introduced][ce-13372] in GitLab 10.0. + +Available only in APIv4. + +## List wiki pages + +Get all wiki pages for a given project. + +``` +GET /projects/:id/wikis +``` + +| Attribute | Type | Required | Description | +| --------- | ------- | -------- | --------------------- | +| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) | +| `with_content` | boolean | no | Include pages' content | + +```bash +curl --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/1/wikis?with_content=1 +``` + +Example response: + +```json +[ + { + "content" : "Here is an instruction how to deploy this project.", + "format" : "markdown", + "slug" : "deploy", + "title" : "deploy" + }, + { + "content" : "Our development process is described here.", + "format" : "markdown", + "slug" : "development", + "title" : "development" + },{ + "content" : "* [Deploy](deploy)\n* [Development](development)", + "format" : "markdown", + "slug" : "home", + "title" : "home" + } +] +``` + +## Get a wiki page + +Get a wiki page for a given project. + +``` +GET /projects/:id/wikis/:slug +``` + +| Attribute | Type | Required | Description | +| --------- | ------- | -------- | --------------------- | +| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) | +| `slug` | string | yes | The slug (a unique string) of the wiki page | + +```bash +curl --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/projects/1/wikis/home +``` + +Example response: + +```json +[ + { + "content" : "home page", + "format" : "markdown", + "slug" : "home", + "title" : "home" + } +] +``` + +## Create a new wiki page + +Creates a new wiki page for the given repository with the given title, slug, and content. + +``` +POST /projects/:id/wikis +``` + +| Attribute | Type | Required | Description | +| ------------- | ------- | -------- | ---------------------------- | +| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) | +| `content` | string | yes | The content of the wiki page | +| `title` | string | yes | The title of the wiki page | +| `format` | string | no | The format of the wiki page. Available formats are: `markdown` (default), `rdoc`, and `asciidoc` | + +```bash +curl --data "format=rdoc&title=Hello&content=Hello world" --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v4/projects/1/wikis" +``` + +Example response: + +```json +{ + "content" : "Hello world", + "format" : "markdown", + "slug" : "Hello", + "title" : "Hello" +} +``` + +## Edit an existing wiki page + +Updates an existing wiki page. At least one parameter is required to update the wiki page. + +``` +PUT /projects/:id/wikis/:slug +``` + +| Attribute | Type | Required | Description | +| --------------- | ------- | --------------------------------- | ------------------------------- | +| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) | +| `content` | string | yes if `title` is not provided | The content of the wiki page | +| `title` | string | yes if `content` is not provided | The title of the wiki page | +| `format` | string | no | The format of the wiki page. Available formats are: `markdown` (default), `rdoc`, and `asciidoc` | +| `slug` | string | yes | The slug (a unique string) of the wiki page | + + +```bash +curl --request PUT --data "format=rdoc&content=documentation&title=Docs" --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v4/projects/1/wikis/foo" +``` + +Example response: + +```json +{ + "content" : "documentation", + "format" : "markdown", + "slug" : "Docs", + "title" : "Docs" +} +``` + +## Delete a wiki page + +Deletes a wiki page with a given slug. + +``` +DELETE /projects/:id/wikis/:slug +``` + +| Attribute | Type | Required | Description | +| --------- | ------- | -------- | --------------------- | +| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) | +| `slug` | string | yes | The slug (a unique string) of the wiki page | + +```bash +curl --request DELETE --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v4/projects/1/wikis/foo" +``` + +On success the HTTP status code is `204` and no JSON response is expected. diff --git a/lib/api/api.rb b/lib/api/api.rb index 94df543853b..9f67cb598f6 100644 --- a/lib/api/api.rb +++ b/lib/api/api.rb @@ -143,6 +143,7 @@ module API mount ::API::Variables mount ::API::GroupVariables mount ::API::Version + mount ::API::Wikis route :any, '*path' do error!('404 Not Found', 404) diff --git a/lib/api/entities.rb b/lib/api/entities.rb index e8dd61e493f..3c0fc4c2564 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -1,5 +1,15 @@ module API module Entities + class WikiPageBasic < Grape::Entity + expose :format + expose :slug + expose :title + end + + class WikiPage < WikiPageBasic + expose :content + end + class UserSafe < Grape::Entity expose :name, :username end diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb index b56fd2388b3..0932f8eb76f 100644 --- a/lib/api/helpers.rb +++ b/lib/api/helpers.rb @@ -35,6 +35,12 @@ module API @project ||= find_project!(params[:id]) end + def wiki_page + page = user_project.wiki.find_page(params[:slug]) + + page || not_found!('Wiki Page') + end + def available_labels @available_labels ||= LabelsFinder.new(current_user, project_id: user_project.id).execute end diff --git a/lib/api/wikis.rb b/lib/api/wikis.rb new file mode 100644 index 00000000000..b3fc4e876ad --- /dev/null +++ b/lib/api/wikis.rb @@ -0,0 +1,89 @@ +module API + class Wikis < Grape::API + helpers do + params :wiki_page_params do + requires :content, type: String, desc: 'Content of a wiki page' + requires :title, type: String, desc: 'Title of a wiki page' + optional :format, + type: String, + values: ProjectWiki::MARKUPS.values.map(&:to_s), + default: 'markdown', + desc: 'Format of a wiki page. Available formats are markdown, rdoc, and asciidoc' + end + end + + resource :projects, requirements: API::PROJECT_ENDPOINT_REQUIREMENTS do + desc 'Get a list of wiki pages' do + success Entities::WikiPageBasic + end + params do + optional :with_content, type: Boolean, default: false, desc: "Include pages' content" + end + get ':id/wikis' do + authorize! :read_wiki, user_project + + entity = params[:with_content] ? Entities::WikiPage : Entities::WikiPageBasic + present user_project.wiki.pages, with: entity + end + + desc 'Get a wiki page' do + success Entities::WikiPage + end + params do + requires :slug, type: String, desc: 'The slug of a wiki page' + end + get ':id/wikis/:slug' do + authorize! :read_wiki, user_project + + present wiki_page, with: Entities::WikiPage + end + + desc 'Create a wiki page' do + success Entities::WikiPage + end + params do + use :wiki_page_params + end + post ':id/wikis' do + authorize! :create_wiki, user_project + + page = WikiPages::CreateService.new(user_project, current_user, params).execute + + if page.valid? + present page, with: Entities::WikiPage + else + render_validation_error!(page) + end + end + + desc 'Update a wiki page' do + success Entities::WikiPage + end + params do + use :wiki_page_params + end + put ':id/wikis/:slug' do + authorize! :create_wiki, user_project + + page = WikiPages::UpdateService.new(user_project, current_user, params).execute(wiki_page) + + if page.valid? + present page, with: Entities::WikiPage + else + render_validation_error!(page) + end + end + + desc 'Delete a wiki page' + params do + requires :slug, type: String, desc: 'The slug of a wiki page' + end + delete ':id/wikis/:slug' do + authorize! :admin_wiki, user_project + + status 204 + WikiPages::DestroyService.new(user_project, current_user).execute(wiki_page) + end + end + end +end diff --git a/spec/requests/api/wikis_spec.rb b/spec/requests/api/wikis_spec.rb new file mode 100644 index 00000000000..9e889d1eecf --- /dev/null +++ b/spec/requests/api/wikis_spec.rb @@ -0,0 +1,679 @@ +require 'spec_helper' + +# For every API endpoint we test 3 states of wikis: +# - disabled +# - enabled only for team members +# - enabled for everyone who has access +# Every state is tested for 3 user roles: +# - guest +# - developer +# - master +# because they are 3 edge cases of using wiki pages. + +describe API::Wikis do + let(:user) { create(:user) } + let(:payload) { { content: 'content', format: 'rdoc', title: 'title' } } + let(:expected_keys_with_content) { %w(content format slug title) } + let(:expected_keys_without_content) { %w(format slug title) } + + shared_examples_for 'returns list of wiki pages' do + context 'when wiki has pages' do + let!(:pages) do + [create(:wiki_page, wiki: project.wiki, attrs: { title: 'page1', content: 'content of page1' }), + create(:wiki_page, wiki: project.wiki, attrs: { title: 'page2', content: 'content of page2' })] + end + + it 'returns the list of wiki pages without content' do + get api(url, user) + + expect(response).to have_http_status(200) + expect(json_response.size).to eq(2) + + json_response.each_with_index do |page, index| + expect(page.keys).to match_array(expected_keys_without_content) + expect(page['slug']).to eq(pages[index].slug) + expect(page['title']).to eq(pages[index].title) + end + end + + it 'returns the list of wiki pages with content' do + get api(url, user), with_content: 1 + + expect(response).to have_http_status(200) + expect(json_response.size).to eq(2) + + json_response.each_with_index do |page, index| + expect(page.keys).to match_array(expected_keys_with_content) + expect(page['content']).to eq(pages[index].content) + expect(page['slug']).to eq(pages[index].slug) + expect(page['title']).to eq(pages[index].title) + end + end + end + + it 'return the empty list of wiki pages' do + get api(url, user) + + expect(response).to have_http_status(200) + expect(json_response.size).to eq(0) + end + end + + shared_examples_for 'returns wiki page' do + it 'returns the wiki page' do + expect(response).to have_http_status(200) + expect(json_response.size).to eq(4) + expect(json_response.keys).to match_array(expected_keys_with_content) + expect(json_response['content']).to eq(page.content) + expect(json_response['slug']).to eq(page.slug) + expect(json_response['title']).to eq(page.title) + end + end + + shared_examples_for 'creates wiki page' do + it 'creates the wiki page' do + post(api(url, user), payload) + + expect(response).to have_http_status(201) + expect(json_response.size).to eq(4) + expect(json_response.keys).to match_array(expected_keys_with_content) + expect(json_response['content']).to eq(payload[:content]) + expect(json_response['slug']).to eq(payload[:title].tr(' ', '-')) + expect(json_response['title']).to eq(payload[:title]) + expect(json_response['rdoc']).to eq(payload[:rdoc]) + end + + [:title, :content].each do |part| + it "responds with validation error on empty #{part}" do + payload.delete(part) + + post(api(url, user), payload) + + expect(response).to have_http_status(400) + expect(json_response.size).to eq(1) + expect(json_response['error']).to eq("#{part} is missing") + end + end + end + + shared_examples_for 'updates wiki page' do + it 'updates the wiki page' do + expect(response).to have_http_status(200) + expect(json_response.size).to eq(4) + expect(json_response.keys).to match_array(expected_keys_with_content) + expect(json_response['content']).to eq(payload[:content]) + expect(json_response['slug']).to eq(payload[:title].tr(' ', '-')) + expect(json_response['title']).to eq(payload[:title]) + end + end + + shared_examples_for '403 Forbidden' do + it 'returns 403 Forbidden' do + expect(response).to have_http_status(403) + expect(json_response.size).to eq(1) + expect(json_response['message']).to eq('403 Forbidden') + end + end + + shared_examples_for '404 Wiki Page Not Found' do + it 'returns 404 Wiki Page Not Found' do + expect(response).to have_http_status(404) + expect(json_response.size).to eq(1) + expect(json_response['message']).to eq('404 Wiki Page Not Found') + end + end + + shared_examples_for '404 Project Not Found' do + it 'returns 404 Project Not Found' do + expect(response).to have_http_status(404) + expect(json_response.size).to eq(1) + expect(json_response['message']).to eq('404 Project Not Found') + end + end + + shared_examples_for '204 No Content' do + it 'returns 204 No Content' do + expect(response).to have_http_status(204) + end + end + + describe 'GET /projects/:id/wikis' do + let(:url) { "/projects/#{project.id}/wikis" } + + context 'when wiki is disabled' do + let(:project) { create(:project, :wiki_disabled) } + + context 'when user is guest' do + before do + get api(url) + end + + include_examples '404 Project Not Found' + end + + context 'when user is developer' do + before do + project.add_developer(user) + + get api(url, user) + end + + include_examples '403 Forbidden' + end + + context 'when user is master' do + before do + project.add_master(user) + + get api(url, user) + end + + include_examples '403 Forbidden' + end + end + + context 'when wiki is available only for team members' do + let(:project) { create(:project, :wiki_private) } + + context 'when user is guest' do + before do + get api(url) + end + + include_examples '404 Project Not Found' + end + + context 'when user is developer' do + before do + project.add_developer(user) + end + + include_examples 'returns list of wiki pages' + end + + context 'when user is master' do + before do + project.add_master(user) + end + + include_examples 'returns list of wiki pages' + end + end + + context 'when wiki is available for everyone with access' do + let(:project) { create(:project) } + + context 'when user is guest' do + before do + get api(url) + end + + include_examples '404 Project Not Found' + end + + context 'when user is developer' do + before do + project.add_developer(user) + end + + include_examples 'returns list of wiki pages' + end + + context 'when user is master' do + before do + project.add_master(user) + end + + include_examples 'returns list of wiki pages' + end + end + end + + describe 'GET /projects/:id/wikis/:slug' do + let(:page) { create(:wiki_page, wiki: project.wiki) } + let(:url) { "/projects/#{project.id}/wikis/#{page.slug}" } + + context 'when wiki is disabled' do + let(:project) { create(:project, :wiki_disabled) } + + context 'when user is guest' do + before do + get api(url) + end + + include_examples '404 Project Not Found' + end + + context 'when user is developer' do + before do + project.add_developer(user) + + get api(url, user) + end + + include_examples '403 Forbidden' + end + + context 'when user is master' do + before do + project.add_master(user) + + get api(url, user) + end + + include_examples '403 Forbidden' + end + end + + context 'when wiki is available only for team members' do + let(:project) { create(:project, :wiki_private) } + + context 'when user is guest' do + before do + get api(url) + end + + include_examples '404 Project Not Found' + end + + context 'when user is developer' do + before do + project.add_developer(user) + get api(url, user) + end + + include_examples 'returns wiki page' + + context 'when page is not existing' do + let(:url) { "/projects/#{project.id}/wikis/unknown" } + + include_examples '404 Wiki Page Not Found' + end + end + + context 'when user is master' do + before do + project.add_master(user) + + get api(url, user) + end + + include_examples 'returns wiki page' + + context 'when page is not existing' do + let(:url) { "/projects/#{project.id}/wikis/unknown" } + + include_examples '404 Wiki Page Not Found' + end + end + end + + context 'when wiki is available for everyone with access' do + let(:project) { create(:project) } + + context 'when user is guest' do + before do + get api(url) + end + + include_examples '404 Project Not Found' + end + + context 'when user is developer' do + before do + project.add_developer(user) + + get api(url, user) + end + + include_examples 'returns wiki page' + + context 'when page is not existing' do + let(:url) { "/projects/#{project.id}/wikis/unknown" } + + include_examples '404 Wiki Page Not Found' + end + end + + context 'when user is master' do + before do + project.add_master(user) + + get api(url, user) + end + + include_examples 'returns wiki page' + + context 'when page is not existing' do + let(:url) { "/projects/#{project.id}/wikis/unknown" } + + include_examples '404 Wiki Page Not Found' + end + end + end + end + + describe 'POST /projects/:id/wikis' do + let(:payload) { { title: 'title', content: 'content' } } + let(:url) { "/projects/#{project.id}/wikis" } + + context 'when wiki is disabled' do + let(:project) { create(:project, :wiki_disabled) } + + context 'when user is guest' do + before do + post(api(url), payload) + end + + include_examples '404 Project Not Found' + end + + context 'when user is developer' do + before do + project.add_developer(user) + post(api(url, user), payload) + end + + include_examples '403 Forbidden' + end + + context 'when user is master' do + before do + project.add_master(user) + post(api(url, user), payload) + end + + include_examples '403 Forbidden' + end + end + + context 'when wiki is available only for team members' do + let(:project) { create(:project, :wiki_private) } + + context 'when user is guest' do + before do + post(api(url), payload) + end + + include_examples '404 Project Not Found' + end + + context 'when user is developer' do + before do + project.add_developer(user) + end + + include_examples 'creates wiki page' + end + + context 'when user is master' do + before do + project.add_master(user) + end + + include_examples 'creates wiki page' + end + end + + context 'when wiki is available for everyone with access' do + let(:project) { create(:project) } + + context 'when user is guest' do + before do + post(api(url), payload) + end + + include_examples '404 Project Not Found' + end + + context 'when user is developer' do + before do + project.add_developer(user) + end + + include_examples 'creates wiki page' + end + + context 'when user is master' do + before do + project.add_master(user) + end + + include_examples 'creates wiki page' + end + end + end + + describe 'PUT /projects/:id/wikis/:slug' do + let(:page) { create(:wiki_page, wiki: project.wiki) } + let(:payload) { { title: 'new title', content: 'new content' } } + let(:url) { "/projects/#{project.id}/wikis/#{page.slug}" } + + context 'when wiki is disabled' do + let(:project) { create(:project, :wiki_disabled) } + + context 'when user is guest' do + before do + put(api(url), payload) + end + + include_examples '404 Project Not Found' + end + + context 'when user is developer' do + before do + project.add_developer(user) + + put(api(url, user), payload) + end + + include_examples '403 Forbidden' + end + + context 'when user is master' do + before do + project.add_master(user) + + put(api(url, user), payload) + end + + include_examples '403 Forbidden' + end + end + + context 'when wiki is available only for team members' do + let(:project) { create(:project, :wiki_private) } + + context 'when user is guest' do + before do + put(api(url), payload) + end + + include_examples '404 Project Not Found' + end + + context 'when user is developer' do + before do + project.add_developer(user) + + put(api(url, user), payload) + end + + include_examples 'updates wiki page' + + context 'when page is not existing' do + let(:url) { "/projects/#{project.id}/wikis/unknown" } + + include_examples '404 Wiki Page Not Found' + end + end + + context 'when user is master' do + before do + project.add_master(user) + + put(api(url, user), payload) + end + + include_examples 'updates wiki page' + + context 'when page is not existing' do + let(:url) { "/projects/#{project.id}/wikis/unknown" } + + include_examples '404 Wiki Page Not Found' + end + end + end + + context 'when wiki is available for everyone with access' do + let(:project) { create(:project) } + + context 'when user is guest' do + before do + put(api(url), payload) + end + + include_examples '404 Project Not Found' + end + + context 'when user is developer' do + before do + project.add_developer(user) + + put(api(url, user), payload) + end + + include_examples 'updates wiki page' + + context 'when page is not existing' do + let(:url) { "/projects/#{project.id}/wikis/unknown" } + + include_examples '404 Wiki Page Not Found' + end + end + + context 'when user is master' do + before do + project.add_master(user) + + put(api(url, user), payload) + end + + include_examples 'updates wiki page' + + context 'when page is not existing' do + let(:url) { "/projects/#{project.id}/wikis/unknown" } + + include_examples '404 Wiki Page Not Found' + end + end + end + end + + describe 'DELETE /projects/:id/wikis/:slug' do + let(:page) { create(:wiki_page, wiki: project.wiki) } + let(:url) { "/projects/#{project.id}/wikis/#{page.slug}" } + + context 'when wiki is disabled' do + let(:project) { create(:project, :wiki_disabled) } + + context 'when user is guest' do + before do + delete(api(url)) + end + + include_examples '404 Project Not Found' + end + + context 'when user is developer' do + before do + project.add_developer(user) + + delete(api(url, user)) + end + + include_examples '403 Forbidden' + end + + context 'when user is master' do + before do + project.add_master(user) + + delete(api(url, user)) + end + + include_examples '403 Forbidden' + end + end + + context 'when wiki is available only for team members' do + let(:project) { create(:project, :wiki_private) } + + context 'when user is guest' do + before do + delete(api(url)) + end + + include_examples '404 Project Not Found' + end + + context 'when user is developer' do + before do + project.add_developer(user) + + delete(api(url, user)) + end + + include_examples '403 Forbidden' + end + + context 'when user is master' do + before do + project.add_master(user) + + delete(api(url, user)) + end + + include_examples '204 No Content' + end + end + + context 'when wiki is available for everyone with access' do + let(:project) { create(:project) } + + context 'when user is guest' do + before do + delete(api(url)) + end + + include_examples '404 Project Not Found' + end + + context 'when user is developer' do + before do + project.add_developer(user) + + delete(api(url, user)) + end + + include_examples '403 Forbidden' + end + + context 'when user is master' do + before do + project.add_master(user) + + delete(api(url, user)) + end + + include_examples '204 No Content' + + context 'when page is not existing' do + let(:url) { "/projects/#{project.id}/wikis/unknown" } + + include_examples '404 Wiki Page Not Found' + end + end + end + end +end From 86cdcfed8b66623015e27d6c85ac139150c39928 Mon Sep 17 00:00:00 2001 From: Michael Kozono Date: Wed, 6 Sep 2017 16:25:57 -0700 Subject: [PATCH 21/27] Remove duplicate task gettext:po_to_json It is already run in "bundle exec rake gitlab:assets:compile". --- .gitlab-ci.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 70b0cde17ea..7b42e661dff 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -247,7 +247,6 @@ setup-test-env: script: - node --version - yarn install --frozen-lockfile --cache-folder .yarn-cache - - bundle exec rake gettext:po_to_json - bundle exec rake gitlab:assets:compile - bundle exec ruby -Ispec -e 'require "spec_helper" ; TestEnv.init' - scripts/gitaly-test-build # Do not use 'bundle exec' here @@ -495,7 +494,6 @@ gitlab:assets:compile: NO_COMPRESSION: "true" script: - yarn install --frozen-lockfile --production --cache-folder .yarn-cache - - bundle exec rake gettext:po_to_json - bundle exec rake gitlab:assets:compile artifacts: name: webpack-report From 2814ea6f7cc2c3cc97fd0f97cb4b598779465552 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Thu, 7 Sep 2017 08:34:47 +0100 Subject: [PATCH 22/27] fixed new issue button not being clicked in spec --- features/steps/project/issues/issues.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/features/steps/project/issues/issues.rb b/features/steps/project/issues/issues.rb index ceffc7a757d..b9460f5b534 100644 --- a/features/steps/project/issues/issues.rb +++ b/features/steps/project/issues/issues.rb @@ -62,7 +62,9 @@ class Spinach::Features::ProjectIssues < Spinach::FeatureSteps end step 'I click link "New issue"' do - page.has_link?('New Issue') ? click_link('New Issue') : click_link('New issue') + page.within '#content-body' do + page.has_link?('New Issue') ? click_link('New Issue') : click_link('New issue') + end end step 'I click "author" dropdown' do From 2103d693276b73a74b496fac028533ec852b88b1 Mon Sep 17 00:00:00 2001 From: Annabel Dunstone Gray Date: Thu, 7 Sep 2017 07:46:01 +0000 Subject: [PATCH 23/27] Fix mr tabs position --- app/assets/stylesheets/pages/diff.scss | 12 ++++++++++-- app/assets/stylesheets/pages/issuable.scss | 8 ++++---- app/assets/stylesheets/pages/merge_requests.scss | 4 ++-- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/app/assets/stylesheets/pages/diff.scss b/app/assets/stylesheets/pages/diff.scss index 8cbf0ec6180..a7acaf6c728 100644 --- a/app/assets/stylesheets/pages/diff.scss +++ b/app/assets/stylesheets/pages/diff.scss @@ -578,12 +578,12 @@ @media (min-width: $screen-sm-min) { position: -webkit-sticky; position: sticky; - top: 34px; + top: 24px; background-color: $white-light; z-index: 190; &.diff-files-changed-merge-request { - top: 84px; + top: 76px; } + .files, @@ -614,6 +614,14 @@ } } +@media (min-width: $screen-sm-min) { + .with-performance-bar { + .diff-files-changed.diff-files-changed-merge-request { + top: 76px + $performance-bar-height; + } + } +} + .diff-file-changes { width: 450px; z-index: 150; diff --git a/app/assets/stylesheets/pages/issuable.scss b/app/assets/stylesheets/pages/issuable.scss index 9f2cb979518..d8a15faf7e9 100644 --- a/app/assets/stylesheets/pages/issuable.scss +++ b/app/assets/stylesheets/pages/issuable.scss @@ -220,7 +220,7 @@ .right-sidebar { position: absolute; - top: $header-height; + top: $new-navbar-height; bottom: 0; right: 0; transition: width .3s; @@ -230,7 +230,7 @@ .issuable-sidebar { width: calc(100% + 100px); - height: calc(100% - #{$header-height}); + height: calc(100% - #{$new-navbar-height}); overflow-y: scroll; overflow-x: hidden; -webkit-overflow-scrolling: touch; @@ -479,10 +479,10 @@ } .with-performance-bar .right-sidebar { - top: $header-height + $performance-bar-height; + top: $new-navbar-height + $performance-bar-height; .issuable-sidebar { - height: calc(100% - #{$header-height} - #{$performance-bar-height}); + height: calc(100% - #{$new-navbar-height} - #{$performance-bar-height}); } } diff --git a/app/assets/stylesheets/pages/merge_requests.scss b/app/assets/stylesheets/pages/merge_requests.scss index 8609f72bdab..439636fe026 100644 --- a/app/assets/stylesheets/pages/merge_requests.scss +++ b/app/assets/stylesheets/pages/merge_requests.scss @@ -645,7 +645,7 @@ } .merge-request-tabs-holder { - top: $header-height; + top: $new-navbar-height; z-index: 200; background-color: $white-light; border-bottom: 1px solid $border-color; @@ -675,7 +675,7 @@ } .with-performance-bar .merge-request-tabs-holder { - top: $header-height + $performance-bar-height; + top: $new-navbar-height + $performance-bar-height; } .merge-request-tabs { From 3dafd75e471110109dc6c36b6acf56603f8a11e4 Mon Sep 17 00:00:00 2001 From: Alessio Caiazza Date: Thu, 7 Sep 2017 11:25:06 +0200 Subject: [PATCH 24/27] Update templates for 10.0 --- vendor/Dockerfile/CONTRIBUTING.md | 47 ++ vendor/gitignore/Actionscript.gitignore | 5 +- vendor/gitignore/Drupal.gitignore | 3 + vendor/gitignore/Kotlin.gitignore | 1 + vendor/gitignore/Nanoc.gitignore | 2 +- vendor/gitignore/Node.gitignore | 2 +- vendor/gitignore/Qt.gitignore | 2 + vendor/gitignore/Swift.gitignore | 1 + vendor/gitignore/Terraform.gitignore | 1 + vendor/gitignore/VisualStudio.gitignore | 4 + .../gitlab-ci-yml/Auto-DevOps.gitlab-ci.yml | 411 ++++++++++++++++++ vendor/gitlab-ci-yml/Bash.gitlab-ci.yml | 34 +- vendor/gitlab-ci-yml/Packer.gitlab-ci.yml | 26 ++ vendor/gitlab-ci-yml/Terraform.gitlab-ci.yml | 55 +++ 14 files changed, 572 insertions(+), 22 deletions(-) create mode 120000 vendor/gitignore/Kotlin.gitignore create mode 100644 vendor/gitlab-ci-yml/Auto-DevOps.gitlab-ci.yml create mode 100644 vendor/gitlab-ci-yml/Packer.gitlab-ci.yml create mode 100644 vendor/gitlab-ci-yml/Terraform.gitlab-ci.yml diff --git a/vendor/Dockerfile/CONTRIBUTING.md b/vendor/Dockerfile/CONTRIBUTING.md index 91b92eafa1b..0878db6dd9e 100644 --- a/vendor/Dockerfile/CONTRIBUTING.md +++ b/vendor/Dockerfile/CONTRIBUTING.md @@ -3,3 +3,50 @@ https://gitlab.com/gitlab-org/Dockerfile. GitLab only mirrors the templates. Please submit your merge requests to https://gitlab.com/gitlab-org/Dockerfile. + +## Contributing + +Thank you for your interest in contributing to this GitLab project! We welcome +all contributions. By participating in this project, you agree to abide by the +[code of conduct](#code-of-conduct). + +## Contributor license agreement + +By submitting code as an individual you agree to the [individual contributor +license agreement][individual-agreement]. + +By submitting code as an entity you agree to the [corporate contributor license +agreement][corporate-agreement]. + +## Code of conduct + +As contributors and maintainers of this project, we pledge to respect all people +who contribute through reporting issues, posting feature requests, updating +documentation, submitting pull requests or patches, and other activities. + +We are committed to making participation in this project a harassment-free +experience for everyone, regardless of level of experience, gender, gender +identity and expression, sexual orientation, disability, personal appearance, +body size, race, ethnicity, age, or religion. + +Examples of unacceptable behavior by participants include the use of sexual +language or imagery, derogatory comments or personal attacks, trolling, public +or private harassment, insults, or other unprofessional conduct. + +Project maintainers have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct. Project maintainers who do not follow the +Code of Conduct may be removed from the project team. + +This code of conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. + +Instances of abusive, harassing, or otherwise unacceptable behavior can be +reported by emailing contact@gitlab.com. + +This Code of Conduct is adapted from the [Contributor Covenant][contributor-covenant], version 1.1.0, +available at [http://contributor-covenant.org/version/1/1/0/](http://contributor-covenant.org/version/1/1/0/). + +[contributor-covenant]: http://contributor-covenant.org +[individual-agreement]: https://docs.gitlab.com/ee/legal/individual_contributor_license_agreement.html +[corporate-agreement]: https://docs.gitlab.com/ee/legal/corporate_contributor_license_agreement.html diff --git a/vendor/gitignore/Actionscript.gitignore b/vendor/gitignore/Actionscript.gitignore index 11e612e9853..5d947ca8879 100644 --- a/vendor/gitignore/Actionscript.gitignore +++ b/vendor/gitignore/Actionscript.gitignore @@ -1,9 +1,8 @@ # Build and Release Folders -bin/ bin-debug/ bin-release/ -[Oo]bj/ # FlashDevelop obj -[Bb]in/ # FlashDevelop bin +[Oo]bj/ +[Bb]in/ # Other files and folders .settings/ diff --git a/vendor/gitignore/Drupal.gitignore b/vendor/gitignore/Drupal.gitignore index 0d2fe537f46..072b683190f 100644 --- a/vendor/gitignore/Drupal.gitignore +++ b/vendor/gitignore/Drupal.gitignore @@ -1,10 +1,12 @@ # Ignore configuration files that may contain sensitive information. sites/*/*settings*.php +sites/example.sites.php # Ignore paths that contain generated content. files/ sites/*/files sites/*/private +sites/*/translations # Ignore default text files robots.txt @@ -16,6 +18,7 @@ robots.txt /UPGRADE.txt /README.txt sites/README.txt +sites/all/libraries/README.txt sites/all/modules/README.txt sites/all/themes/README.txt diff --git a/vendor/gitignore/Kotlin.gitignore b/vendor/gitignore/Kotlin.gitignore new file mode 120000 index 00000000000..c48376eebcf --- /dev/null +++ b/vendor/gitignore/Kotlin.gitignore @@ -0,0 +1 @@ +Java.gitignore \ No newline at end of file diff --git a/vendor/gitignore/Nanoc.gitignore b/vendor/gitignore/Nanoc.gitignore index 3f36ea2a878..6f35daaf478 100644 --- a/vendor/gitignore/Nanoc.gitignore +++ b/vendor/gitignore/Nanoc.gitignore @@ -4,7 +4,7 @@ output/ # Temporary file directory -tmp/ +tmp/nanoc/ # Crash Log crash.log diff --git a/vendor/gitignore/Node.gitignore b/vendor/gitignore/Node.gitignore index 00cbbdf53f6..97e28736892 100644 --- a/vendor/gitignore/Node.gitignore +++ b/vendor/gitignore/Node.gitignore @@ -29,7 +29,7 @@ bower_components # node-waf configuration .lock-wscript -# Compiled binary addons (http://nodejs.org/api/addons.html) +# Compiled binary addons (https://nodejs.org/api/addons.html) build/Release # Dependency directories diff --git a/vendor/gitignore/Qt.gitignore b/vendor/gitignore/Qt.gitignore index 5fa47c5a1f2..fe67fdf1ee6 100644 --- a/vendor/gitignore/Qt.gitignore +++ b/vendor/gitignore/Qt.gitignore @@ -26,6 +26,8 @@ moc_*.cpp moc_*.h qrc_*.cpp ui_*.h +*.qmlc +*.jsc Makefile* *build-* diff --git a/vendor/gitignore/Swift.gitignore b/vendor/gitignore/Swift.gitignore index d5340449396..161179bff3e 100644 --- a/vendor/gitignore/Swift.gitignore +++ b/vendor/gitignore/Swift.gitignore @@ -37,6 +37,7 @@ playground.xcworkspace # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. # Packages/ # Package.pins +# Package.resolved .build/ # CocoaPods diff --git a/vendor/gitignore/Terraform.gitignore b/vendor/gitignore/Terraform.gitignore index 41859c81f1c..f20453be963 100644 --- a/vendor/gitignore/Terraform.gitignore +++ b/vendor/gitignore/Terraform.gitignore @@ -1,5 +1,6 @@ # Compiled files *.tfstate +*.tfstate.*.backup *.tfstate.backup # Module directory diff --git a/vendor/gitignore/VisualStudio.gitignore b/vendor/gitignore/VisualStudio.gitignore index 89c66054885..f652b45c2ee 100644 --- a/vendor/gitignore/VisualStudio.gitignore +++ b/vendor/gitignore/VisualStudio.gitignore @@ -116,6 +116,10 @@ _TeamCity* # DotCover is a Code Coverage Tool *.dotCover +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + # Visual Studio code coverage results *.coverage *.coveragexml diff --git a/vendor/gitlab-ci-yml/Auto-DevOps.gitlab-ci.yml b/vendor/gitlab-ci-yml/Auto-DevOps.gitlab-ci.yml new file mode 100644 index 00000000000..a07edd264c3 --- /dev/null +++ b/vendor/gitlab-ci-yml/Auto-DevOps.gitlab-ci.yml @@ -0,0 +1,411 @@ +# Auto DevOps +# This CI/CD configuration provides a standard pipeline for +# * building a Docker image (using a buildpack if necessary), +# * storing the image in the container registry, +# * running tests from a buildpack, +# * running code quality analysis, +# * creating a review app for each topic branch, +# * and continuous deployment to production +# +# In order to deploy, you must have a Kubernetes cluster configured either +# via a project integration, or via group/project variables. +# AUTO_DEVOPS_DOMAIN must also be set as a variable at the group or project +# level, or manually added below. +# +# If you want to deploy to staging first, or enable canary deploys, +# uncomment the relevant jobs in the pipeline below. +# +# If Auto DevOps fails to detect the proper buildpack, or if you want to +# specify a custom buildpack, set a project variable `BUILDPACK_URL` to the +# repository URL of the buildpack. +# e.g. BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-ruby.git#v142 +# If you need multiple buildpacks, add a file to your project called +# `.buildpacks` that contains the URLs, one on each line, in order. +# Note: Auto CI does not work with multiple buildpacks yet + +image: alpine:latest + +variables: + # AUTO_DEVOPS_DOMAIN is the application deployment domain and should be set as a variable at the group or project level. + # AUTO_DEVOPS_DOMAIN: domain.example.com + + POSTGRES_USER: user + POSTGRES_PASSWORD: testing-password + POSTGRES_ENABLED: "true" + POSTGRES_DB: $CI_ENVIRONMENT_SLUG + +stages: + - build + - test + - review + - staging + - canary + - production + - cleanup + +build: + stage: build + image: docker:git + services: + - docker:dind + variables: + DOCKER_DRIVER: overlay2 + script: + - setup_docker + - build + only: + - branches + +test: + services: + - postgres:latest + variables: + POSTGRES_DB: test + stage: test + image: gliderlabs/herokuish:latest + script: + - setup_test_db + - cp -R . /tmp/app + - /bin/herokuish buildpack test + only: + - branches + +codequality: + image: docker:latest + variables: + DOCKER_DRIVER: overlay2 + allow_failure: true + services: + - docker:dind + script: + - setup_docker + - codeclimate + artifacts: + paths: [codeclimate.json] + +review: + stage: review + script: + - check_kube_domain + - install_dependencies + - download_chart + - ensure_namespace + - install_tiller + - create_secret + - deploy + environment: + name: review/$CI_COMMIT_REF_NAME + url: http://$CI_PROJECT_PATH_SLUG-$CI_ENVIRONMENT_SLUG.$AUTO_DEVOPS_DOMAIN + on_stop: stop_review + only: + refs: + - branches + kubernetes: active + except: + - master + +stop_review: + stage: cleanup + variables: + GIT_STRATEGY: none + script: + - install_dependencies + - delete + environment: + name: review/$CI_COMMIT_REF_NAME + action: stop + when: manual + allow_failure: true + only: + refs: + - branches + kubernetes: active + except: + - master + +# Keys that start with a dot (.) will not be processed by GitLab CI. +# Staging and canary jobs are disabled by default, to enable them +# remove the dot (.) before the job name. +# https://docs.gitlab.com/ee/ci/yaml/README.html#hidden-keys + +# Staging deploys are disabled by default since +# continuous deployment to production is enabled by default +# If you prefer to automatically deploy to staging and +# only manually promote to production, enable this job by removing the dot (.), +# and uncomment the `when: manual` line in the `production` job. + +.staging: + stage: staging + script: + - check_kube_domain + - install_dependencies + - download_chart + - ensure_namespace + - install_tiller + - create_secret + - deploy + environment: + name: staging + url: http://$CI_PROJECT_PATH_SLUG-staging.$AUTO_DEVOPS_DOMAIN + only: + refs: + - master + kubernetes: active + +# Canaries are disabled by default, but if you want them, +# and know what the downsides are, enable this job by removing the dot (.), +# and uncomment the `when: manual` line in the `production` job. + +.canary: + stage: canary + script: + - check_kube_domain + - install_dependencies + - download_chart + - ensure_namespace + - install_tiller + - create_secret + - deploy canary + environment: + name: production + url: http://$CI_PROJECT_PATH_SLUG.$AUTO_DEVOPS_DOMAIN + when: manual + only: + refs: + - master + kubernetes: active + +# This job continuously deploys to production on every push to `master`. +# To make this a manual process, either because you're enabling `staging` +# or `canary` deploys, or you simply want more control over when you deploy +# to production, uncomment the `when: manual` line in the `production` job. + +production: + stage: production + script: + - check_kube_domain + - install_dependencies + - download_chart + - ensure_namespace + - install_tiller + - create_secret + - deploy + - delete canary + environment: + name: production + url: http://$CI_PROJECT_PATH_SLUG.$AUTO_DEVOPS_DOMAIN +# when: manual + only: + refs: + - master + kubernetes: active + +# --------------------------------------------------------------------------- + +.auto_devops: &auto_devops | + # Auto DevOps variables and functions + [[ "$TRACE" ]] && set -x + auto_database_url=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${CI_ENVIRONMENT_SLUG}-postgres:5432/${POSTGRES_DB} + export DATABASE_URL=${DATABASE_URL-$auto_database_url} + export CI_APPLICATION_REPOSITORY=$CI_REGISTRY_IMAGE/$CI_COMMIT_REF_SLUG + export CI_APPLICATION_TAG=$CI_COMMIT_SHA + export CI_CONTAINER_NAME=ci_job_build_${CI_JOB_ID} + export TILLER_NAMESPACE=$KUBE_NAMESPACE + + function codeclimate() { + cc_opts="--env CODECLIMATE_CODE="$PWD" \ + --volume "$PWD":/code \ + --volume /var/run/docker.sock:/var/run/docker.sock \ + --volume /tmp/cc:/tmp/cc" + + docker run ${cc_opts} codeclimate/codeclimate init + docker run ${cc_opts} codeclimate/codeclimate analyze -f json > codeclimate.json + } + + function deploy() { + track="${1-stable}" + name="$CI_ENVIRONMENT_SLUG" + + if [[ "$track" != "stable" ]]; then + name="$name-$track" + fi + + replicas="1" + service_enabled="false" + postgres_enabled="$POSTGRES_ENABLED" + # canary uses stable db + [[ "$track" == "canary" ]] && postgres_enabled="false" + + env_track=$( echo $track | tr -s '[:lower:]' '[:upper:]' ) + env_slug=$( echo ${CI_ENVIRONMENT_SLUG//-/_} | tr -s '[:lower:]' '[:upper:]' ) + + if [[ "$track" == "stable" ]]; then + # for stable track get number of replicas from `PRODUCTION_REPLICAS` + eval new_replicas=\$${env_slug}_REPLICAS + service_enabled="true" + else + # for all tracks get number of replicas from `CANARY_PRODUCTION_REPLICAS` + eval new_replicas=\$${env_track}_${env_slug}_REPLICAS + fi + if [[ -n "$new_replicas" ]]; then + replicas="$new_replicas" + fi + + helm upgrade --install \ + --wait \ + --set service.enabled="$service_enabled" \ + --set releaseOverride="$CI_ENVIRONMENT_SLUG" \ + --set image.repository="$CI_APPLICATION_REPOSITORY" \ + --set image.tag="$CI_APPLICATION_TAG" \ + --set image.pullPolicy=IfNotPresent \ + --set application.track="$track" \ + --set application.database_url="$DATABASE_URL" \ + --set service.url="$CI_ENVIRONMENT_URL" \ + --set replicaCount="$replicas" \ + --set postgresql.enabled="$postgres_enabled" \ + --set postgresql.nameOverride="postgres" \ + --set postgresql.postgresUser="$POSTGRES_USER" \ + --set postgresql.postgresPassword="$POSTGRES_PASSWORD" \ + --set postgresql.postgresDatabase="$POSTGRES_DB" \ + --namespace="$KUBE_NAMESPACE" \ + --version="$CI_PIPELINE_ID-$CI_JOB_ID" \ + "$name" \ + chart/ + + if [[ "$track" == "stable" ]]; then + kubectl rollout status -n "$KUBE_NAMESPACE" -w "deployment/${CI_ENVIRONMENT_SLUG}-auto-deploy" + fi + } + + function install_dependencies() { + apk add -U openssl curl tar gzip bash ca-certificates git + wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://raw.githubusercontent.com/sgerrand/alpine-pkg-glibc/master/sgerrand.rsa.pub + wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.23-r3/glibc-2.23-r3.apk + apk add glibc-2.23-r3.apk + rm glibc-2.23-r3.apk + + curl https://kubernetes-helm.storage.googleapis.com/helm-v2.6.1-linux-amd64.tar.gz | tar zx + mv linux-amd64/helm /usr/bin/ + helm version --client + + curl -L -o /usr/bin/kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl + chmod +x /usr/bin/kubectl + kubectl version --client + } + + function setup_docker() { + if ! docker info &>/dev/null; then + if [ -z "$DOCKER_HOST" -a "$KUBERNETES_PORT" ]; then + export DOCKER_HOST='tcp://localhost:2375' + fi + fi + } + + function setup_test_db() { + if [ -z ${KUBERNETES_PORT+x} ]; then + DB_HOST=postgres + else + DB_HOST=localhost + fi + export DATABASE_URL="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DB_HOST}:5432/${POSTGRES_DB}" + } + + function download_chart() { + if [[ ! -d chart ]]; then + auto_chart=${AUTO_DEVOPS_CHART:-gitlab/auto-deploy-app} + auto_chart_name=$(basename $auto_chart) + auto_chart_name=${auto_chart_name%.tgz} + else + auto_chart="chart" + auto_chart_name="chart" + fi + + helm init --client-only + helm repo add gitlab https://charts.gitlab.io + if [[ ! -d "$auto_chart" ]]; then + helm fetch ${auto_chart} --untar + fi + if [ "$auto_chart_name" != "chart" ]; then + mv ${auto_chart_name} chart + fi + + helm dependency update chart/ + helm dependency build chart/ + } + + function ensure_namespace() { + kubectl describe namespace "$KUBE_NAMESPACE" || kubectl create namespace "$KUBE_NAMESPACE" + } + + function check_kube_domain() { + if [ -z ${AUTO_DEVOPS_DOMAIN+x} ]; then + echo "In order to deploy, AUTO_DEVOPS_DOMAIN must be set as a variable at the group or project level, or manually added in .gitlab-cy.yml" + false + else + true + fi + } + + function build() { + if [[ -f Dockerfile ]]; then + echo "Building Dockerfile-based application..." + docker build -t "$CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG" . + else + echo "Building Heroku-based application using gliderlabs/herokuish docker image..." + docker run -i --name="$CI_CONTAINER_NAME" -v "$(pwd):/tmp/app:ro" gliderlabs/herokuish /bin/herokuish buildpack build + docker commit "$CI_CONTAINER_NAME" "$CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG" + docker rm "$CI_CONTAINER_NAME" >/dev/null + echo "" + + echo "Configuring $CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG docker image..." + docker create --expose 5000 --env PORT=5000 --name="$CI_CONTAINER_NAME" "$CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG" /bin/herokuish procfile start web + docker commit "$CI_CONTAINER_NAME" "$CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG" + docker rm "$CI_CONTAINER_NAME" >/dev/null + echo "" + fi + + if [[ -n "$CI_REGISTRY_USER" ]]; then + echo "Logging to GitLab Container Registry with CI credentials..." + docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY" + echo "" + fi + + echo "Pushing to GitLab Container Registry..." + docker push "$CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG" + echo "" + } + + function install_tiller() { + echo "Checking Tiller..." + helm init --upgrade + kubectl rollout status -n "$TILLER_NAMESPACE" -w "deployment/tiller-deploy" + if ! helm version --debug; then + echo "Failed to init Tiller." + return 1 + fi + echo "" + } + + function create_secret() { + kubectl create secret -n "$KUBE_NAMESPACE" \ + docker-registry gitlab-registry \ + --docker-server="$CI_REGISTRY" \ + --docker-username="$CI_REGISTRY_USER" \ + --docker-password="$CI_REGISTRY_PASSWORD" \ + --docker-email="$GITLAB_USER_EMAIL" \ + -o yaml --dry-run | kubectl replace -n "$KUBE_NAMESPACE" --force -f - + } + + function delete() { + track="${1-stable}" + name="$CI_ENVIRONMENT_SLUG" + + if [[ "$track" != "stable" ]]; then + name="$name-$track" + fi + + helm delete "$name" || true + } + +before_script: + - *auto_devops diff --git a/vendor/gitlab-ci-yml/Bash.gitlab-ci.yml b/vendor/gitlab-ci-yml/Bash.gitlab-ci.yml index 27537689b80..2d218b2e164 100644 --- a/vendor/gitlab-ci-yml/Bash.gitlab-ci.yml +++ b/vendor/gitlab-ci-yml/Bash.gitlab-ci.yml @@ -4,32 +4,32 @@ image: busybox:latest before_script: - - echo "Before script section" - - echo "For example you might run an update here or install a build dependency" - - echo "Or perhaps you might print out some debugging details" + - echo "Before script section" + - echo "For example you might run an update here or install a build dependency" + - echo "Or perhaps you might print out some debugging details" after_script: - echo "After script section" - echo "For example you might do some cleanup here" build1: - stage: build - script: - - echo "Do your build here" + stage: build + script: + - echo "Do your build here" test1: - stage: test - script: - - echo "Do a test here" - - echo "For example run a test suite" + stage: test + script: + - echo "Do a test here" + - echo "For example run a test suite" test2: - stage: test - script: - - echo "Do another parallel test here" - - echo "For example run a lint test" + stage: test + script: + - echo "Do another parallel test here" + - echo "For example run a lint test" deploy1: - stage: deploy - script: - - echo "Do your deploy here" \ No newline at end of file + stage: deploy + script: + - echo "Do your deploy here" diff --git a/vendor/gitlab-ci-yml/Packer.gitlab-ci.yml b/vendor/gitlab-ci-yml/Packer.gitlab-ci.yml new file mode 100644 index 00000000000..fa296057c72 --- /dev/null +++ b/vendor/gitlab-ci-yml/Packer.gitlab-ci.yml @@ -0,0 +1,26 @@ +image: + name: hashicorp/packer:1.0.4 + entrypoint: + - '/usr/bin/env' + - 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' + +before_script: + - packer --version + +stages: + - validate + - deploy + +validate: + stage: validate + script: + - find . -maxdepth 1 -name '*.json' -print0 | xargs -t0n1 packer validate + +build: + stage: deploy + environment: production + script: + - find . -maxdepth 1 -name '*.json' -print0 | xargs -t0n1 packer build + when: manual + only: + - master diff --git a/vendor/gitlab-ci-yml/Terraform.gitlab-ci.yml b/vendor/gitlab-ci-yml/Terraform.gitlab-ci.yml new file mode 100644 index 00000000000..7160fce26a8 --- /dev/null +++ b/vendor/gitlab-ci-yml/Terraform.gitlab-ci.yml @@ -0,0 +1,55 @@ +# Official image for Hashicorp's Terraform. It uses light image which is Alpine +# based as it is much lighter. +# +# Entrypoint is also needed as image by default set `terraform` binary as an +# entrypoint. +image: + name: hashicorp/terraform:light + entrypoint: + - '/usr/bin/env' + - 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' + +# Default output file for Terraform plan +variables: + PLAN: plan.tfplan + +cache: + paths: + - .terraform + +before_script: + - terraform --version + - terraform init + +stages: + - validate + - build + - deploy + +validate: + stage: validate + script: + - terraform validate + +plan: + stage: build + script: + - terraform plan -out=$PLAN + artifacts: + name: plan + paths: + - $PLAN + +# Separate apply job for manual launching Terraform as it can be destructive +# action. +apply: + stage: deploy + environment: + name: production + script: + - terraform apply -input=false $PLAN + dependencies: + - plan + when: manual + only: + - master From a11b1926b7a363f0d370f4f2bb7b4cba4003d854 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Thu, 7 Sep 2017 11:52:26 +0200 Subject: [PATCH 25/27] Update the omniauth-google-oauth2 gem to 0.5.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rémy Coutable --- Gemfile | 2 +- Gemfile.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile b/Gemfile index 2ebc01d8a15..0602560c42d 100644 --- a/Gemfile +++ b/Gemfile @@ -31,7 +31,7 @@ gem 'omniauth-cas3', '~> 1.1.4' gem 'omniauth-facebook', '~> 4.0.0' gem 'omniauth-github', '~> 1.1.1' gem 'omniauth-gitlab', '~> 1.0.2' -gem 'omniauth-google-oauth2', '~> 0.4.1' +gem 'omniauth-google-oauth2', '~> 0.5.2' gem 'omniauth-kerberos', '~> 0.3.0', group: :kerberos gem 'omniauth-oauth2-generic', '~> 0.2.2' gem 'omniauth-saml', '~> 1.7.0' diff --git a/Gemfile.lock b/Gemfile.lock index f7ae8bddd6d..63493482258 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -530,8 +530,8 @@ GEM omniauth-gitlab (1.0.2) omniauth (~> 1.0) omniauth-oauth2 (~> 1.0) - omniauth-google-oauth2 (0.4.1) - jwt (~> 1.5.2) + omniauth-google-oauth2 (0.5.2) + jwt (~> 1.5) multi_json (~> 1.3) omniauth (>= 1.1.1) omniauth-oauth2 (>= 1.3.1) @@ -1076,7 +1076,7 @@ DEPENDENCIES omniauth-facebook (~> 4.0.0) omniauth-github (~> 1.1.1) omniauth-gitlab (~> 1.0.2) - omniauth-google-oauth2 (~> 0.4.1) + omniauth-google-oauth2 (~> 0.5.2) omniauth-kerberos (~> 0.3.0) omniauth-oauth2-generic (~> 0.2.2) omniauth-saml (~> 1.7.0) From 48dbeaa6baf5150fee1082ccac2578831a3539e4 Mon Sep 17 00:00:00 2001 From: Fabio Busatto Date: Thu, 7 Sep 2017 11:23:02 +0000 Subject: [PATCH 26/27] Add Security on protected branches --- doc/ci/pipelines.md | 24 ++++++++++++++++++++++++ doc/user/permissions.md | 8 ++++++++ doc/user/project/protected_branches.md | 8 ++++++++ 3 files changed, 40 insertions(+) diff --git a/doc/ci/pipelines.md b/doc/ci/pipelines.md index 5a2b61fb0cb..ac4a9b0ed27 100644 --- a/doc/ci/pipelines.md +++ b/doc/ci/pipelines.md @@ -222,6 +222,30 @@ total running time should be: Pipeline status and test coverage report badges are available. You can find their respective link in the [Pipelines settings] page. +## Security on protected branches + +A strict security model is enforced when pipelines are executed on +[protected branches](../user/project/protected_branches.md). + +The following actions are allowed on protected branches only if the user is +[allowed to merge or push](../user/project/protected_branches.md#using-the-allowed-to-merge-and-allowed-to-push-settings) +on that specific branch: +- run **manual pipelines** (using Web UI or Pipelines API) +- run **scheduled pipelines** +- run pipelines using **triggers** +- trigger **manual actions** on existing pipelines +- **retry/cancel** existing jobs (using Web UI or Pipelines API) + +**Secret variables** marked as **protected** are accessible only to jobs that +run on protected branches, avoiding untrusted users to get unintended access to +sensitive information like deployment credentials and tokens. + +**Runners** marked as **protected** can run jobs only on protected +branches, avoiding untrusted code to be executed on the protected runner and +preserving deployment keys and other credentials from being unintentionally +accessed. In order to ensure that jobs intended to be executed on protected +runners will not use regular runners, they must be tagged accordingly. + [jobs]: #jobs [jobs-yaml]: yaml/README.md#jobs [manual]: yaml/README.md#manual diff --git a/doc/user/permissions.md b/doc/user/permissions.md index bd0a58c4cca..0c17905aa8c 100644 --- a/doc/user/permissions.md +++ b/doc/user/permissions.md @@ -230,6 +230,14 @@ users: GitLab 8.12 has a completely redesigned job permissions system. To learn more, read through the documentation on the [new CI/CD permissions model](project/new_ci_build_permissions_model.md#new-ci-job-permissions-model). +## Running pipelines on protected branches + +The permission to merge or push to protected branches is used to define if a user can +run CI/CD pipelines and execute actions on jobs that are related to those branches. + +See [Security on protected branches](../ci/pipelines.md#security-on-protected-branches) +for details about the pipelines security model. + ## LDAP users permissions Since GitLab 8.15, LDAP user permissions can now be manually overridden by an admin user. diff --git a/doc/user/project/protected_branches.md b/doc/user/project/protected_branches.md index 0570d9f471f..0cbb0c878c2 100644 --- a/doc/user/project/protected_branches.md +++ b/doc/user/project/protected_branches.md @@ -115,6 +115,14 @@ Deleting a protected branch is only allowed via the web interface, not via Git. This means that you can't accidentally delete a protected branch from your command line or a Git client application. +## Running pipelines on protected branches + +The permission to merge or push to protected branches is used to define if a user can +run CI/CD pipelines and execute actions on jobs that are related to those branches. + +See [Security on protected branches](../../ci/pipelines.md#security-on-protected-branches) +for details about the pipelines security model. + ## Changelog **9.2** From 492eaece7ec80090fd7276758798a2af49fe9763 Mon Sep 17 00:00:00 2001 From: Zeger-Jan van de Weg Date: Thu, 7 Sep 2017 13:53:30 +0200 Subject: [PATCH 27/27] Fix ordering of columns on new table --- .../20170828093725_create_project_auto_dev_ops.rb | 11 +++-------- db/schema.rb | 6 +++--- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/db/migrate/20170828093725_create_project_auto_dev_ops.rb b/db/migrate/20170828093725_create_project_auto_dev_ops.rb index 00bf29f874c..c1bb4f20c1d 100644 --- a/db/migrate/20170828093725_create_project_auto_dev_ops.rb +++ b/db/migrate/20170828093725_create_project_auto_dev_ops.rb @@ -3,19 +3,14 @@ class CreateProjectAutoDevOps < ActiveRecord::Migration DOWNTIME = false - disable_ddl_transaction! - def up create_table :project_auto_devops do |t| - t.belongs_to :project, null: false, index: { unique: true } + t.belongs_to :project, null: false, index: { unique: true }, foreign_key: { on_delete: :cascade } + t.datetime_with_timezone :created_at, null: false + t.datetime_with_timezone :updated_at, null: false t.boolean :enabled, default: nil, null: true t.string :domain end - - add_timestamps_with_timezone(:project_auto_devops, null: false) - - # No need to check for violations as its a new table - add_concurrent_foreign_key(:project_auto_devops, :projects, column: :project_id) end def down diff --git a/db/schema.rb b/db/schema.rb index 73e4993e422..71417f586aa 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -1130,10 +1130,10 @@ ActiveRecord::Schema.define(version: 20170905112933) do create_table "project_auto_devops", force: :cascade do |t| t.integer "project_id", null: false - t.boolean "enabled" - t.string "domain" t.datetime_with_timezone "created_at", null: false t.datetime_with_timezone "updated_at", null: false + t.boolean "enabled" + t.string "domain" end add_index "project_auto_devops", ["project_id"], name: "index_project_auto_devops_on_project_id", unique: true, using: :btree @@ -1755,7 +1755,7 @@ ActiveRecord::Schema.define(version: 20170905112933) do add_foreign_key "personal_access_tokens", "users" add_foreign_key "project_authorizations", "projects", on_delete: :cascade add_foreign_key "project_authorizations", "users", on_delete: :cascade - add_foreign_key "project_auto_devops", "projects", name: "fk_45436b12b2", on_delete: :cascade + add_foreign_key "project_auto_devops", "projects", on_delete: :cascade add_foreign_key "project_features", "projects", name: "fk_18513d9b92", on_delete: :cascade add_foreign_key "project_group_links", "projects", name: "fk_daa8cee94c", on_delete: :cascade add_foreign_key "project_import_data", "projects", name: "fk_ffb9ee3a10", on_delete: :cascade