diff options
156 files changed, 1911 insertions, 1290 deletions
diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION index 95fce8ca25f..897e21587ed 100644 --- a/GITALY_SERVER_VERSION +++ b/GITALY_SERVER_VERSION @@ -1 +1 @@ -0.98.0 +0.100.0 @@ -218,9 +218,6 @@ gem 'ruby-fogbugz', '~> 0.2.1' # Kubernetes integration gem 'kubeclient', '~> 3.0' -# d3 -gem 'd3_rails', '~> 3.5.0' - # Sanitize user input gem 'sanitize', '~> 2.0' gem 'babosa', '~> 1.0.2' @@ -260,7 +257,7 @@ gem 'addressable', '~> 2.5.2' gem 'bootstrap-sass', '~> 3.3.0' gem 'font-awesome-rails', '~> 4.7' gem 'gemojione', '~> 3.3' -gem 'gon', '~> 6.1.0' +gem 'gon', '~> 6.2' gem 'jquery-atwho-rails', '~> 1.3.2' gem 'request_store', '~> 1.3' gem 'select2-rails', '~> 3.5.9' @@ -297,7 +294,7 @@ group :metrics do gem 'influxdb', '~> 0.2', require: false # Prometheus - gem 'prometheus-client-mmap', '~> 0.9.1' + gem 'prometheus-client-mmap', '~> 0.9.2' gem 'raindrops', '~> 0.18' end @@ -434,4 +431,4 @@ gem 'lograge', '~> 0.5' gem 'grape_logging', '~> 1.7' # Asset synchronization -gem 'asset_sync', '~> 2.2.0' +gem 'asset_sync', '~> 2.4' diff --git a/Gemfile.lock b/Gemfile.lock index 2a63ee6a532..6028ce32d2f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -59,7 +59,7 @@ GEM asciidoctor (1.5.6.2) asciidoctor-plantuml (0.0.8) asciidoctor (~> 1.5) - asset_sync (2.2.0) + asset_sync (2.4.0) activemodel (>= 4.1.0) fog-core mime-types (>= 2.99) @@ -147,8 +147,6 @@ GEM creole (0.5.0) css_parser (1.5.0) addressable - d3_rails (3.5.11) - railties (>= 3.1.0) daemons (1.2.3) database_cleaner (1.5.3) debug_inspector (0.0.2) @@ -197,7 +195,7 @@ GEM et-orbi (1.0.3) tzinfo eventmachine (1.0.8) - excon (0.60.0) + excon (0.62.0) execjs (2.6.0) expression_parser (0.9.0) factory_bot (4.8.2) @@ -334,9 +332,8 @@ GEM activesupport (>= 4.2.0) gollum-grit_adapter (1.0.1) gitlab-grit (~> 2.7, >= 2.7.1) - gon (6.1.0) + gon (6.2.0) actionpack (>= 3.0) - json multi_json request_store (>= 1.0) google-api-client (0.19.8) @@ -634,7 +631,7 @@ GEM parser unparser procto (0.0.3) - prometheus-client-mmap (0.9.1) + prometheus-client-mmap (0.9.2) pry (0.10.4) coderay (~> 1.1.0) method_source (~> 0.8.1) @@ -998,7 +995,7 @@ DEPENDENCIES asana (~> 0.6.0) asciidoctor (~> 1.5.6) asciidoctor-plantuml (= 0.0.8) - asset_sync (~> 2.2.0) + asset_sync (~> 2.4) attr_encrypted (~> 3.1.0) awesome_print (~> 1.2.0) babosa (~> 1.0.2) @@ -1024,7 +1021,6 @@ DEPENDENCIES concurrent-ruby (~> 1.0.5) connection_pool (~> 2.0) creole (~> 0.5.0) - d3_rails (~> 3.5.0) database_cleaner (~> 1.5.0) deckar01-task_list (= 2.0.0) default_value_for (~> 3.0.0) @@ -1068,7 +1064,7 @@ DEPENDENCIES gitlab-markup (~> 1.6.2) gitlab-styles (~> 2.3) gitlab_omniauth-ldap (~> 2.0.4) - gon (~> 6.1.0) + gon (~> 6.2) google-api-client (~> 0.19.8) google-protobuf (= 3.5.1) gpgme @@ -1133,7 +1129,7 @@ DEPENDENCIES peek-sidekiq (~> 1.0.3) pg (~> 0.18.2) premailer-rails (~> 1.9.7) - prometheus-client-mmap (~> 0.9.1) + prometheus-client-mmap (~> 0.9.2) pry-byebug (~> 3.4.1) pry-rails (~> 0.3.4) rack-attack (~> 4.4.1) diff --git a/app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js b/app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js index 87f8854f940..1c43fc3cdc7 100644 --- a/app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js +++ b/app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js @@ -82,7 +82,6 @@ export default () => { this.service .fetchCycleAnalyticsData(fetchOptions) - .then(resp => resp.json()) .then((response) => { this.store.setCycleAnalyticsData(response); this.selectDefaultStage(); @@ -116,7 +115,6 @@ export default () => { stage, startDate: this.startDate, }) - .then(resp => resp.json()) .then((response) => { this.isEmptyStage = !response.events.length; this.store.setStageEvents(response.events, stage); diff --git a/app/assets/javascripts/cycle_analytics/cycle_analytics_service.js b/app/assets/javascripts/cycle_analytics/cycle_analytics_service.js index f496c38208d..4cf416c50e5 100644 --- a/app/assets/javascripts/cycle_analytics/cycle_analytics_service.js +++ b/app/assets/javascripts/cycle_analytics/cycle_analytics_service.js @@ -1,16 +1,20 @@ -import Vue from 'vue'; -import VueResource from 'vue-resource'; - -Vue.use(VueResource); +import axios from '~/lib/utils/axios_utils'; export default class CycleAnalyticsService { constructor(options) { - this.requestPath = options.requestPath; - this.cycleAnalytics = Vue.resource(this.requestPath); + this.axios = axios.create({ + baseURL: options.requestPath, + }); } fetchCycleAnalyticsData(options = { startDate: 30 }) { - return this.cycleAnalytics.get({ cycle_analytics: { start_date: options.startDate } }); + return this.axios + .get('', { + params: { + 'cycle_analytics[start_date]': options.startDate, + }, + }) + .then(x => x.data); } fetchStageData(options) { @@ -19,12 +23,12 @@ export default class CycleAnalyticsService { startDate, } = options; - return Vue.http.get(`${this.requestPath}/events/${stage.name}.json`, { - params: { - cycle_analytics: { - start_date: startDate, + return this.axios + .get(`events/${stage.name}.json`, { + params: { + 'cycle_analytics[start_date]': startDate, }, - }, - }); + }) + .then(x => x.data); } } diff --git a/app/assets/javascripts/deploy_keys/service/index.js b/app/assets/javascripts/deploy_keys/service/index.js index 194e95e4fca..9dc3b21f6f6 100644 --- a/app/assets/javascripts/deploy_keys/service/index.js +++ b/app/assets/javascripts/deploy_keys/service/index.js @@ -1,37 +1,24 @@ -import Vue from 'vue'; -import VueResource from 'vue-resource'; - -Vue.use(VueResource); +import axios from '~/lib/utils/axios_utils'; export default class DeployKeysService { constructor(endpoint) { - this.endpoint = endpoint; - - this.resource = Vue.resource( - `${this.endpoint}{/id}`, - {}, - { - enable: { - method: 'PUT', - url: `${this.endpoint}{/id}/enable`, - }, - disable: { - method: 'PUT', - url: `${this.endpoint}{/id}/disable`, - }, - }, - ); + this.axios = axios.create({ + baseURL: endpoint, + }); } getKeys() { - return this.resource.get().then(response => response.json()); + return this.axios.get() + .then(response => response.data); } enableKey(id) { - return this.resource.enable({ id }, {}); + return this.axios.put(`${id}/enable`) + .then(response => response.data); } disableKey(id) { - return this.resource.disable({ id }, {}); + return this.axios.put(`${id}/disable`) + .then(response => response.data); } } diff --git a/app/assets/javascripts/ide/components/commit_sidebar/actions.vue b/app/assets/javascripts/ide/components/commit_sidebar/actions.vue index 6a5790c9dff..b4f3778d946 100644 --- a/app/assets/javascripts/ide/components/commit_sidebar/actions.vue +++ b/app/assets/javascripts/ide/components/commit_sidebar/actions.vue @@ -1,5 +1,5 @@ <script> -import { mapActions, mapState } from 'vuex'; +import { mapActions, mapState, mapGetters } from 'vuex'; import { sprintf, __ } from '~/locale'; import * as consts from '../../stores/modules/commit/constants'; import RadioGroup from './radio_group.vue'; @@ -10,6 +10,7 @@ export default { }, computed: { ...mapState(['currentBranchId', 'changedFiles', 'stagedFiles']), + ...mapGetters(['currentProject']), commitToCurrentBranchText() { return sprintf( __('Commit to %{branchName} branch'), @@ -52,6 +53,7 @@ export default { :show-input="true" /> <radio-group + v-if="currentProject.merge_requests_enabled" :value="$options.commitToNewBranchMR" :label="__('Create a new branch and merge request')" :show-input="true" diff --git a/app/assets/javascripts/ide/components/ide.vue b/app/assets/javascripts/ide/components/ide.vue index c328d1f36d2..cf2566b8019 100644 --- a/app/assets/javascripts/ide/components/ide.vue +++ b/app/assets/javascripts/ide/components/ide.vue @@ -110,8 +110,8 @@ export default { Welcome to the GitLab IDE </h4> <p> - You can select a file in the left sidebar to begin - editing and use the right sidebar to commit your changes. + Select a file from the left sidebar to begin editing. + Afterwards, you'll be able to commit your changes. </p> </div> </div> diff --git a/app/assets/javascripts/ide/lib/common/model.js b/app/assets/javascripts/ide/lib/common/model.js index 016dcda1fa1..b1e43a1e38c 100644 --- a/app/assets/javascripts/ide/lib/common/model.js +++ b/app/assets/javascripts/ide/lib/common/model.js @@ -14,12 +14,12 @@ export default class Model { (this.originalModel = this.monaco.editor.createModel( head ? head.content : this.file.raw, undefined, - new this.monaco.Uri(null, null, `original/${this.file.key}`), + new this.monaco.Uri(null, null, `original/${this.path}`), )), (this.model = this.monaco.editor.createModel( this.content, undefined, - new this.monaco.Uri(null, null, this.file.key), + new this.monaco.Uri(null, null, this.path), )), ); if (this.file.mrChange) { @@ -27,7 +27,7 @@ export default class Model { (this.baseModel = this.monaco.editor.createModel( this.file.baseRaw, undefined, - new this.monaco.Uri(null, null, `target/${this.file.path}`), + new this.monaco.Uri(null, null, `target/${this.path}`), )), ); } diff --git a/app/assets/javascripts/ide/stores/actions/file.js b/app/assets/javascripts/ide/stores/actions/file.js index 3ac9b9222ca..b6baa693104 100644 --- a/app/assets/javascripts/ide/stores/actions/file.js +++ b/app/assets/javascripts/ide/stores/actions/file.js @@ -196,6 +196,8 @@ export const unstageChange = ({ commit }, path) => { }; export const openPendingTab = ({ commit, getters, dispatch, state }, { file, keyPrefix }) => { + if (getters.activeFile && getters.activeFile.key === `${keyPrefix}-${file.key}`) return false; + state.openFiles.forEach(f => eventHub.$emit(`editor.update.model.dispose.${f.key}`)); commit(types.ADD_PENDING_TAB, { file, keyPrefix }); diff --git a/app/assets/stylesheets/print.scss b/app/assets/stylesheets/print.scss index b07a5ae22cd..90ccd4abd90 100644 --- a/app/assets/stylesheets/print.scss +++ b/app/assets/stylesheets/print.scss @@ -36,7 +36,9 @@ ul.notes-form, .gutter-toggle, .issuable-details .content-block-small, .edit-link, -.note-action-button { +.note-action-button, +.right-sidebar, +.flash-container { display: none !important; } @@ -53,3 +55,7 @@ pre { .right-sidebar { top: 0; } + +a[href]::after { + content: none !important; +} diff --git a/app/controllers/import/base_controller.rb b/app/controllers/import/base_controller.rb index bcb856ce3f4..663269a0f92 100644 --- a/app/controllers/import/base_controller.rb +++ b/app/controllers/import/base_controller.rb @@ -7,9 +7,9 @@ class Import::BaseController < ApplicationController def find_jobs(import_type) current_user.created_projects - .includes(:import_state) - .where(import_type: import_type) - .to_json(only: [:id], methods: [:import_status]) + .includes(:import_state) + .where(import_type: import_type) + .to_json(only: [:id], methods: [:import_status]) end def find_or_create_namespace(names, owner) diff --git a/app/models/ci/runner.rb b/app/models/ci/runner.rb index 23078f1c3ed..ed8b30dae49 100644 --- a/app/models/ci/runner.rb +++ b/app/models/ci/runner.rb @@ -58,6 +58,7 @@ module Ci validate :tag_constraints validate :either_projects_or_group validates :access_level, presence: true + validates :runner_type, presence: true acts_as_taggable diff --git a/app/models/clusters/applications/runner.rb b/app/models/clusters/applications/runner.rb index 16efe90fa27..b881b4eaf36 100644 --- a/app/models/clusters/applications/runner.rb +++ b/app/models/clusters/applications/runner.rb @@ -43,12 +43,20 @@ module Clusters def create_and_assign_runner transaction do - project.runners.create!(name: 'kubernetes-cluster', tag_list: %w(kubernetes cluster)).tap do |runner| + project.runners.create!(runner_create_params).tap do |runner| update!(runner_id: runner.id) end end end + def runner_create_params + { + name: 'kubernetes-cluster', + runner_type: :project_type, + tag_list: %w(kubernetes cluster) + } + end + def gitlab_url Gitlab::Routing.url_helpers.root_url(only_path: false) end diff --git a/app/models/concerns/time_trackable.rb b/app/models/concerns/time_trackable.rb index 5911b56c34c..73fc5048dcf 100644 --- a/app/models/concerns/time_trackable.rb +++ b/app/models/concerns/time_trackable.rb @@ -30,6 +30,8 @@ module TimeTrackable return if @time_spent == 0 + touch if touchable? + if @time_spent == :reset reset_spent_time else @@ -53,6 +55,10 @@ module TimeTrackable private + def touchable? + valid? && persisted? + end + def reset_spent_time timelogs.new(time_spent: total_time_spent * -1, user: @time_spent_user) # rubocop:disable Gitlab/ModuleWithInstanceVariables end diff --git a/app/models/repository.rb b/app/models/repository.rb index b75c4aca982..44c6bff6b66 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -37,7 +37,7 @@ class Repository changelog license_blob license_key gitignore koding_yml gitlab_ci_yml branch_names tag_names branch_count tag_count avatar exists? root_ref has_visible_content? - issue_template_names merge_request_template_names).freeze + issue_template_names merge_request_template_names xcode_project?).freeze # Methods that use cache_method but only memoize the value MEMOIZED_CACHED_METHODS = %i(license).freeze @@ -55,7 +55,8 @@ class Repository gitlab_ci: :gitlab_ci_yml, avatar: :avatar, issue_template: :issue_template_names, - merge_request_template: :merge_request_template_names + merge_request_template: :merge_request_template_names, + xcode_config: :xcode_project? }.freeze def initialize(full_path, project, disk_path: nil, is_wiki: false) @@ -594,6 +595,11 @@ class Repository end cache_method :gitlab_ci_yml + def xcode_project? + file_on_head(:xcode_config).present? + end + cache_method :xcode_project? + def head_commit @head_commit ||= commit(self.root_ref) end diff --git a/app/services/projects/destroy_service.rb b/app/services/projects/destroy_service.rb index 71c93660b4b..adbc498d0bf 100644 --- a/app/services/projects/destroy_service.rb +++ b/app/services/projects/destroy_service.rb @@ -87,7 +87,7 @@ module Projects new_path = removal_path(path) if mv_repository(path, new_path) - log_info("Repository \"#{path}\" moved to \"#{new_path}\"") + log_info(%Q{Repository "#{path}" moved to "#{new_path}" for project "#{project.full_path}"}) project.run_after_commit do # self is now project diff --git a/app/services/users/migrate_to_ghost_user_service.rb b/app/services/users/migrate_to_ghost_user_service.rb index 976017dfa82..a2833b1e051 100644 --- a/app/services/users/migrate_to_ghost_user_service.rb +++ b/app/services/users/migrate_to_ghost_user_service.rb @@ -49,7 +49,7 @@ module Users migrate_merge_requests migrate_notes migrate_abuse_reports - migrate_award_emojis + migrate_award_emoji end def migrate_issues @@ -70,7 +70,7 @@ module Users user.reported_abuse_reports.update_all(reporter_id: ghost_user.id) end - def migrate_award_emojis + def migrate_award_emoji user.award_emoji.update_all(user_id: ghost_user.id) end end diff --git a/app/views/groups/runners/_group_runners.html.haml b/app/views/groups/runners/_group_runners.html.haml index 1f9b43e8727..e6c089c3494 100644 --- a/app/views/groups/runners/_group_runners.html.haml +++ b/app/views/groups/runners/_group_runners.html.haml @@ -1,4 +1,4 @@ -- link = link_to 'Runners API', help_page_path('api/runners.md') +- link = link_to _('Runners API'), help_page_path('api/runners.md') %h3 = _('Group Runners') diff --git a/app/views/groups/runners/edit.html.haml b/app/views/groups/runners/edit.html.haml index d4993d9c235..fcd096eeaa0 100644 --- a/app/views/groups/runners/edit.html.haml +++ b/app/views/groups/runners/edit.html.haml @@ -1,4 +1,4 @@ -- page_title "Edit", "#{@runner.description} ##{@runner.id}", "Runners" +- page_title _('Edit'), "#{@runner.description} ##{@runner.id}", 'Runners' %h4 Runner ##{@runner.id} diff --git a/app/views/projects/runners/_group_runners.html.haml b/app/views/projects/runners/_group_runners.html.haml index ec8011182de..dfed0553f84 100644 --- a/app/views/projects/runners/_group_runners.html.haml +++ b/app/views/projects/runners/_group_runners.html.haml @@ -1,4 +1,4 @@ -- link = link_to 'Runners API', help_page_path('api/runners.md') +- link = link_to _('Runners API'), help_page_path('api/runners.md') %h3 = _('Group Runners') @@ -25,7 +25,7 @@ = _('This group does not provide any group Runners yet.') - if can?(current_user, :admin_pipeline, @project.group) - - group_link = link_to 'Group CI/CD settings', group_settings_ci_cd_path(@project.group) + - group_link = link_to _('Group CI/CD settings'), group_settings_ci_cd_path(@project.group) = _('Group masters can register group runners in the %{link}').html_safe % { link: group_link } - else = _('Ask your group master to setup a group Runner.') diff --git a/app/views/projects/runners/_shared_runners.html.haml b/app/views/projects/runners/_shared_runners.html.haml index 969efdb2560..20a5ef039f8 100644 --- a/app/views/projects/runners/_shared_runners.html.haml +++ b/app/views/projects/runners/_shared_runners.html.haml @@ -1,4 +1,5 @@ -%h3 Shared Runners +%h3 + = _('Shared Runners') .bs-callout.shared-runners-description - if Gitlab::CurrentSettings.shared_runners_text.present? @@ -17,8 +18,7 @@ for this project - if @shared_runners_count.zero? - This GitLab instance does not provide any shared Runners yet. Instance - administrators can register shared Runners in the admin area. + = _('This GitLab instance does not provide any shared Runners yet. Instance administrators can register shared Runners in the admin area.') - else %h4.underlined-title Available shared Runners : #{@shared_runners_count} %ul.bordered-list.available-shared-runners diff --git a/app/views/projects/runners/_specific_runners.html.haml b/app/views/projects/runners/_specific_runners.html.haml index f0813e56b71..6c11ce3b394 100644 --- a/app/views/projects/runners/_specific_runners.html.haml +++ b/app/views/projects/runners/_specific_runners.html.haml @@ -1,4 +1,5 @@ -%h3 Specific Runners +%h3 + = _('Specific Runners') = render partial: 'ci/runner/how_to_setup_specific_runner', locals: { registration_token: @project.runners_token } diff --git a/app/views/projects/runners/edit.html.haml b/app/views/projects/runners/edit.html.haml index 56eb526bfd5..d59f9c19862 100644 --- a/app/views/projects/runners/edit.html.haml +++ b/app/views/projects/runners/edit.html.haml @@ -1,4 +1,4 @@ -- page_title "Edit", "#{@runner.description} ##{@runner.id}", "Runners" +- page_title _('Edit'), "#{@runner.description} ##{@runner.id}", 'Runners' %h4 Runner ##{@runner.id} diff --git a/app/views/shared/runners/_form.html.haml b/app/views/shared/runners/_form.html.haml index e958f760cf3..660123d8b07 100644 --- a/app/views/shared/runners/_form.html.haml +++ b/app/views/shared/runners/_form.html.haml @@ -20,11 +20,11 @@ %span.light Indicates whether this runner can pick jobs without tags - unless runner.group_type? .form-group.row - = label :locked, 'Lock to current projects', class: 'col-form-label col-sm-2' + = label :locked, _('Lock to current projects'), class: 'col-form-label col-sm-2' .col-sm-10 .form-check = f.check_box :locked - %span.light When a runner is locked, it cannot be assigned to other projects + %span.light= _('When a runner is locked, it cannot be assigned to other projects') .form-group.row = label_tag :token, class: 'col-form-label col-sm-2' do Token diff --git a/app/views/shared/runners/show.html.haml b/app/views/shared/runners/show.html.haml index 3f6c5c9adc6..ecadc21a458 100644 --- a/app/views/shared/runners/show.html.haml +++ b/app/views/shared/runners/show.html.haml @@ -21,17 +21,17 @@ %th Value %tr %td Active - %td= @runner.active? ? 'Yes' : 'No' + %td= @runner.active? ? _('Yes') : _('No') %tr %td Protected - %td= @runner.ref_protected? ? 'Yes' : 'No' + %td= @runner.ref_protected? ? _('Yes') : _('No') %tr - %td Can run untagged jobs - %td= @runner.run_untagged? ? 'Yes' : 'No' + %td= _('Can run untagged jobs') + %td= @runner.run_untagged? ? _('Yes') : _('No') - unless @runner.group_type? %tr - %td Locked to this project - %td= @runner.locked? ? 'Yes' : 'No' + %td= _('Locked to this project') + %td= @runner.locked? ? _('Yes') : _('No') %tr %td Tags %td @@ -60,7 +60,7 @@ %td Description %td= @runner.description %tr - %td Maximum job timeout + %td= _('Maximum job timeout') %td= @runner.maximum_timeout_human_readable %tr %td Last contact diff --git a/app/workers/object_storage/migrate_uploads_worker.rb b/app/workers/object_storage/migrate_uploads_worker.rb index a6b2c251254..a3ecfa8e711 100644 --- a/app/workers/object_storage/migrate_uploads_worker.rb +++ b/app/workers/object_storage/migrate_uploads_worker.rb @@ -9,85 +9,6 @@ module ObjectStorage SanityCheckError = Class.new(StandardError) - class Upload < ActiveRecord::Base - # Upper limit for foreground checksum processing - CHECKSUM_THRESHOLD = 100.megabytes - - belongs_to :model, polymorphic: true # rubocop:disable Cop/PolymorphicAssociations - - validates :size, presence: true - validates :path, presence: true - validates :model, presence: true - validates :uploader, presence: true - - before_save :calculate_checksum!, if: :foreground_checksummable? - after_commit :schedule_checksum, if: :checksummable? - - scope :stored_locally, -> { where(store: [nil, ObjectStorage::Store::LOCAL]) } - scope :stored_remotely, -> { where(store: ObjectStorage::Store::REMOTE) } - - def self.hexdigest(path) - Digest::SHA256.file(path).hexdigest - end - - def absolute_path - raise ObjectStorage::RemoteStoreError, "Remote object has no absolute path." unless local? - return path unless relative_path? - - uploader_class.absolute_path(self) - end - - def calculate_checksum! - self.checksum = nil - return unless checksummable? - - self.checksum = self.class.hexdigest(absolute_path) - end - - def build_uploader(mounted_as = nil) - uploader_class.new(model, mounted_as).tap do |uploader| - uploader.upload = self - uploader.retrieve_from_store!(identifier) - end - end - - def exist? - File.exist?(absolute_path) - end - - def local? - return true if store.nil? - - store == ObjectStorage::Store::LOCAL - end - - private - - def checksummable? - checksum.nil? && local? && exist? - end - - def foreground_checksummable? - checksummable? && size <= CHECKSUM_THRESHOLD - end - - def schedule_checksum - UploadChecksumWorker.perform_async(id) - end - - def relative_path? - !path.start_with?('/') - end - - def identifier - File.basename(path) - end - - def uploader_class - Object.const_get(uploader) - end - end - class MigrationResult attr_reader :upload attr_accessor :error diff --git a/changelogs/unreleased/23465-print-markdown.yml b/changelogs/unreleased/23465-print-markdown.yml new file mode 100644 index 00000000000..ba950667acc --- /dev/null +++ b/changelogs/unreleased/23465-print-markdown.yml @@ -0,0 +1,5 @@ +--- +title: Fix print styles for markdown pages +merge_request: +author: +type: fixed diff --git a/changelogs/unreleased/45442-updates-updated-at-to-issue-on-time-spent.yml b/changelogs/unreleased/45442-updates-updated-at-to-issue-on-time-spent.yml new file mode 100644 index 00000000000..0694206d4fb --- /dev/null +++ b/changelogs/unreleased/45442-updates-updated-at-to-issue-on-time-spent.yml @@ -0,0 +1,5 @@ +--- +title: Updates updated_at on issuable when setting time spent +merge_request: 18757 +author: Jacopo Beschi @jacopo-beschi +type: added diff --git a/changelogs/unreleased/5750-backport-checksum-git-commanderror-exit-status-128.yml b/changelogs/unreleased/5750-backport-checksum-git-commanderror-exit-status-128.yml new file mode 100644 index 00000000000..d778b44c110 --- /dev/null +++ b/changelogs/unreleased/5750-backport-checksum-git-commanderror-exit-status-128.yml @@ -0,0 +1,6 @@ +--- +title: Raise NoRepository error for non-valid repositories when calculating repository + checksum +merge_request: 18594 +author: +type: fixed diff --git a/changelogs/unreleased/blackst0ne-replace-spinach-project-deploy-keys-feature.yml b/changelogs/unreleased/blackst0ne-replace-spinach-project-deploy-keys-feature.yml new file mode 100644 index 00000000000..7014de4ece7 --- /dev/null +++ b/changelogs/unreleased/blackst0ne-replace-spinach-project-deploy-keys-feature.yml @@ -0,0 +1,5 @@ +--- +title: 'Replace the `project/deploy_keys.feature` spinach test with an rspec analog' +merge_request: 18796 +author: '@blackst0ne' +type: other diff --git a/changelogs/unreleased/blackst0ne-replace-spinach-project-ff-merge-requests-feature.yml b/changelogs/unreleased/blackst0ne-replace-spinach-project-ff-merge-requests-feature.yml new file mode 100644 index 00000000000..7802391ec64 --- /dev/null +++ b/changelogs/unreleased/blackst0ne-replace-spinach-project-ff-merge-requests-feature.yml @@ -0,0 +1,5 @@ +--- +title: 'Replace the `project/ff_merge_requests.feature` spinach test with an rspec analog' +merge_request: 18800 +author: '@blackst0ne' +type: other diff --git a/changelogs/unreleased/blackst0ne-replace-spinach-project-issues-references-feature.yml b/changelogs/unreleased/blackst0ne-replace-spinach-project-issues-references-feature.yml new file mode 100644 index 00000000000..968a937ca5a --- /dev/null +++ b/changelogs/unreleased/blackst0ne-replace-spinach-project-issues-references-feature.yml @@ -0,0 +1,5 @@ +--- +title: 'Replace the `project/issues/references.feature` spinach test with an rspec analog' +merge_request: 18769 +author: '@blackst0ne' +type: other diff --git a/changelogs/unreleased/fix-gb-add-pipeline-builds-foreign-key.yml b/changelogs/unreleased/fix-gb-add-pipeline-builds-foreign-key.yml new file mode 100644 index 00000000000..bded7bb7cc4 --- /dev/null +++ b/changelogs/unreleased/fix-gb-add-pipeline-builds-foreign-key.yml @@ -0,0 +1,5 @@ +--- +title: Add database foreign key constraint between pipelines and build +merge_request: 18822 +author: +type: fixed diff --git a/changelogs/unreleased/fix-project-mirror-data-schema.yml b/changelogs/unreleased/fix-project-mirror-data-schema.yml new file mode 100644 index 00000000000..107f1fe3b9c --- /dev/null +++ b/changelogs/unreleased/fix-project-mirror-data-schema.yml @@ -0,0 +1,6 @@ +--- +title: Fixes database inconsistencies between Community and Enterprise Edition on + import state +merge_request: 18811 +author: +type: fixed diff --git a/changelogs/unreleased/fix-wiki-find-page-invalid-encoding.yml b/changelogs/unreleased/fix-wiki-find-page-invalid-encoding.yml new file mode 100644 index 00000000000..f003bef8671 --- /dev/null +++ b/changelogs/unreleased/fix-wiki-find-page-invalid-encoding.yml @@ -0,0 +1,5 @@ +--- +title: Fix finding wiki pages when they have invalidly-encoded content +merge_request: 18856 +author: +type: fixed diff --git a/changelogs/unreleased/ide-hide-merge-request-if-disabled.yml b/changelogs/unreleased/ide-hide-merge-request-if-disabled.yml new file mode 100644 index 00000000000..9efef2c6839 --- /dev/null +++ b/changelogs/unreleased/ide-hide-merge-request-if-disabled.yml @@ -0,0 +1,5 @@ +--- +title: Hide merge request option in IDE when disabled +merge_request: +author: +type: changed diff --git a/changelogs/unreleased/jr-46209-web-ide-copy.yml b/changelogs/unreleased/jr-46209-web-ide-copy.yml new file mode 100644 index 00000000000..87ccae6ced0 --- /dev/null +++ b/changelogs/unreleased/jr-46209-web-ide-copy.yml @@ -0,0 +1,5 @@ +--- +title: Fix outdated Web IDE welcome copy +merge_request: 18861 +author: +type: fixed diff --git a/changelogs/unreleased/support-active-setting-while-registering-a-runner.yml b/changelogs/unreleased/support-active-setting-while-registering-a-runner.yml new file mode 100644 index 00000000000..6c378fd450a --- /dev/null +++ b/changelogs/unreleased/support-active-setting-while-registering-a-runner.yml @@ -0,0 +1,5 @@ +--- +title: Add support for 'active' setting on Runner Registration API endpoint +merge_request: 18848 +author: +type: changed diff --git a/config/initializers/gollum.rb b/config/initializers/gollum.rb index 81e0577a7c9..ea9cc151a57 100644 --- a/config/initializers/gollum.rb +++ b/config/initializers/gollum.rb @@ -7,6 +7,20 @@ module Gollum end require "gollum-lib" +module Gollum + class Page + def text_data(encoding = nil) + data = if raw_data.respond_to?(:encoding) + raw_data.force_encoding(encoding || Encoding::UTF_8) + else + raw_data + end + + Gitlab::EncodingHelper.encode!(data) + end + end +end + Rails.application.configure do config.after_initialize do Gollum::Page.per_page = Kaminari.config.default_per_page diff --git a/db/migrate/20140313092127_init_schema.rb b/db/migrate/20140313092127_init_schema.rb index e5c3b65fa8d..895298ed4ed 100644 --- a/db/migrate/20140313092127_init_schema.rb +++ b/db/migrate/20140313092127_init_schema.rb @@ -1,4 +1,6 @@ class InitSchema < ActiveRecord::Migration + DOWNTIME = true + def up create_table "broadcast_messages", force: :cascade do |t| t.text "message", null: false diff --git a/db/migrate/20180420010016_add_pipeline_build_foreign_key.rb b/db/migrate/20180420010016_add_pipeline_build_foreign_key.rb new file mode 100644 index 00000000000..6fabe07bc9c --- /dev/null +++ b/db/migrate/20180420010016_add_pipeline_build_foreign_key.rb @@ -0,0 +1,27 @@ +class AddPipelineBuildForeignKey < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + execute <<~SQL + DELETE FROM ci_builds WHERE project_id IS NULL OR commit_id IS NULL + SQL + + execute <<~SQL + DELETE FROM ci_builds WHERE NOT EXISTS + (SELECT true FROM ci_pipelines WHERE ci_pipelines.id = ci_builds.commit_id) + AND stage_id IS NULL + SQL + + add_concurrent_foreign_key(:ci_builds, :ci_pipelines, column: :commit_id) + end + + def down + return unless foreign_key_exists?(:ci_builds, :ci_pipelines, column: :commit_id) + + remove_foreign_key(:ci_builds, column: :commit_id) + end +end diff --git a/db/migrate/20180420010616_cleanup_build_stage_migration.rb b/db/migrate/20180420010616_cleanup_build_stage_migration.rb index 0342695ec3d..24777294101 100644 --- a/db/migrate/20180420010616_cleanup_build_stage_migration.rb +++ b/db/migrate/20180420010616_cleanup_build_stage_migration.rb @@ -2,6 +2,7 @@ class CleanupBuildStageMigration < ActiveRecord::Migration include Gitlab::Database::MigrationHelpers DOWNTIME = false + TMP_INDEX = 'tmp_id_stage_partial_null_index'.freeze disable_ddl_transaction! @@ -13,16 +14,48 @@ class CleanupBuildStageMigration < ActiveRecord::Migration end def up + disable_statement_timeout + + ## + # We steal from the background migrations queue to catch up with the + # scheduled migrations set. + # Gitlab::BackgroundMigration.steal('MigrateBuildStage') + ## + # We add temporary index, to make iteration over batches more performant. + # Conditional here is to avoid the need of doing that in a separate + # migration file to make this operation idempotent. + # + unless index_exists_by_name?(:ci_builds, TMP_INDEX) + add_concurrent_index(:ci_builds, :id, where: 'stage_id IS NULL', name: TMP_INDEX) + end + + ## + # We check if there are remaining rows that should be migrated (for example + # if Sidekiq / Redis fails / is restarted, what could result in not all + # background migrations being executed correctly. + # + # We migrate remaining rows synchronously in a blocking way, to make sure + # that when this migration is done we are confident that all rows are + # already migrated. + # Build.where('stage_id IS NULL').each_batch(of: 50) do |batch| range = batch.pluck('MIN(id)', 'MAX(id)').first Gitlab::BackgroundMigration::MigrateBuildStage.new.perform(*range) end + + ## + # We remove temporary index, because it is not required during standard + # operations and runtime. + # + remove_concurrent_index_by_name(:ci_builds, TMP_INDEX) end def down - # noop + if index_exists_by_name?(:ci_builds, TMP_INDEX) + remove_concurrent_index_by_name(:ci_builds, TMP_INDEX) + end end end diff --git a/db/migrate/20180508100222_add_not_null_constraint_to_project_mirror_data_foreign_key.rb b/db/migrate/20180508100222_add_not_null_constraint_to_project_mirror_data_foreign_key.rb new file mode 100644 index 00000000000..82087d15ccb --- /dev/null +++ b/db/migrate/20180508100222_add_not_null_constraint_to_project_mirror_data_foreign_key.rb @@ -0,0 +1,21 @@ +class AddNotNullConstraintToProjectMirrorDataForeignKey < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + class ProjectImportState < ActiveRecord::Base + include EachBatch + + self.table_name = 'project_mirror_data' + end + + def up + ProjectImportState.where(project_id: nil).delete_all + + change_column_null :project_mirror_data, :project_id, false + end + + def down + change_column_null :project_mirror_data, :project_id, true + end +end diff --git a/db/migrate/20180508102840_add_unique_constraint_to_project_mirror_data_project_id_index.rb b/db/migrate/20180508102840_add_unique_constraint_to_project_mirror_data_project_id_index.rb new file mode 100644 index 00000000000..acb976b52fa --- /dev/null +++ b/db/migrate/20180508102840_add_unique_constraint_to_project_mirror_data_project_id_index.rb @@ -0,0 +1,31 @@ +class AddUniqueConstraintToProjectMirrorDataProjectIdIndex < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + add_concurrent_index(:project_mirror_data, + :project_id, + unique: true, + name: 'index_project_mirror_data_on_project_id_unique') + + remove_concurrent_index_by_name(:project_mirror_data, 'index_project_mirror_data_on_project_id') + + rename_index(:project_mirror_data, + 'index_project_mirror_data_on_project_id_unique', + 'index_project_mirror_data_on_project_id') + end + + def down + rename_index(:project_mirror_data, + 'index_project_mirror_data_on_project_id', + 'index_project_mirror_data_on_project_id_old') + + add_concurrent_index(:project_mirror_data, :project_id) + + remove_concurrent_index_by_name(:project_mirror_data, + 'index_project_mirror_data_on_project_id_old') + end +end diff --git a/db/migrate/20180508135515_set_runner_type_not_null.rb b/db/migrate/20180508135515_set_runner_type_not_null.rb new file mode 100644 index 00000000000..dd043ec7179 --- /dev/null +++ b/db/migrate/20180508135515_set_runner_type_not_null.rb @@ -0,0 +1,9 @@ +class SetRunnerTypeNotNull < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + def change + change_column_null(:ci_runners, :runner_type, false) + end +end diff --git a/db/schema.rb b/db/schema.rb index 6fd10785d77..95adccf0d5c 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20180508055821) do +ActiveRecord::Schema.define(version: 20180508135515) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -497,7 +497,7 @@ ActiveRecord::Schema.define(version: 20180508055821) do t.integer "access_level", default: 0, null: false t.string "ip_address" t.integer "maximum_timeout" - t.integer "runner_type", limit: 2 + t.integer "runner_type", limit: 2, null: false end add_index "ci_runners", ["contacted_at"], name: "index_ci_runners_on_contacted_at", using: :btree @@ -1529,14 +1529,14 @@ ActiveRecord::Schema.define(version: 20180508055821) do add_index "project_import_data", ["project_id"], name: "index_project_import_data_on_project_id", using: :btree create_table "project_mirror_data", force: :cascade do |t| - t.integer "project_id" + t.integer "project_id", null: false t.string "status" t.string "jid" t.text "last_error" end add_index "project_mirror_data", ["jid"], name: "index_project_mirror_data_on_jid", using: :btree - add_index "project_mirror_data", ["project_id"], name: "index_project_mirror_data_on_project_id", using: :btree + add_index "project_mirror_data", ["project_id"], name: "index_project_mirror_data_on_project_id", unique: true, using: :btree add_index "project_mirror_data", ["status"], name: "index_project_mirror_data_on_status", using: :btree create_table "project_statistics", force: :cascade do |t| @@ -2148,6 +2148,7 @@ ActiveRecord::Schema.define(version: 20180508055821) do add_foreign_key "ci_build_trace_sections", "ci_builds", column: "build_id", name: "fk_4ebe41f502", on_delete: :cascade add_foreign_key "ci_build_trace_sections", "projects", on_delete: :cascade add_foreign_key "ci_builds", "ci_pipelines", column: "auto_canceled_by_id", name: "fk_a2141b1522", on_delete: :nullify + add_foreign_key "ci_builds", "ci_pipelines", column: "commit_id", name: "fk_d3130c9a7f", on_delete: :cascade add_foreign_key "ci_builds", "ci_stages", column: "stage_id", name: "fk_3a9eaa254d", on_delete: :cascade add_foreign_key "ci_builds", "projects", name: "fk_befce0568a", on_delete: :cascade add_foreign_key "ci_builds_metadata", "ci_builds", column: "build_id", on_delete: :cascade diff --git a/doc/README.md b/doc/README.md index a2e152ce383..c929ba7a59e 100644 --- a/doc/README.md +++ b/doc/README.md @@ -1,5 +1,6 @@ --- comments: false +description: 'Learn how to use and administer GitLab, the most scalable Git-based fully integrated platform for software development.' --- # GitLab Documentation diff --git a/doc/administration/external_database.md b/doc/administration/external_database.md new file mode 100644 index 00000000000..31199f2cdc7 --- /dev/null +++ b/doc/administration/external_database.md @@ -0,0 +1,17 @@ +# Configure GitLab using an external PostgreSQL service + +If you're hosting GitLab on a cloud provider, you can optionally use a +managed service for PostgreSQL. For example, AWS offers a managed Relational +Database Service (RDS) that runs PostgreSQL. + +Alternatively, you may opt to manage your own PostgreSQL instance or cluster +separate from the GitLab Omnibus package. + +If you use a cloud-managed service, or provide your own PostgreSQL instance: + +1. Setup PostgreSQL according to the + [database requirements document](../install/requirements.md#database). +1. Set up a `gitlab` username with a password of your choice. The `gitlab` user + needs privileges to create the `gitlabhq_production` database. +1. Configure the GitLab application servers with the appropriate details. + This step is covered in [Configuring GitLab for HA](high_availability/gitlab.md). diff --git a/doc/administration/index.md b/doc/administration/index.md index 5551a04959c..df935095e61 100644 --- a/doc/administration/index.md +++ b/doc/administration/index.md @@ -1,3 +1,7 @@ +--- +description: 'Learn how to install, configure, update, and maintain your GitLab instance.' +--- + # Administrator documentation **[CORE ONLY]** Learn how to administer your GitLab instance (Community Edition and diff --git a/doc/administration/pages/index.md b/doc/administration/pages/index.md index 9b3b1e48efd..c0221533f13 100644 --- a/doc/administration/pages/index.md +++ b/doc/administration/pages/index.md @@ -1,3 +1,7 @@ +--- +description: 'Learn how to administer GitLab Pages.' +--- + # GitLab Pages administration > **Notes:** @@ -8,8 +12,6 @@ GitLab from source, follow the [Pages source installation document](source.md). - To learn how to use GitLab Pages, read the [user documentation][pages-userguide]. ---- - This document describes how to set up the _latest_ GitLab Pages feature. Make sure to read the [changelog](#changelog) if you are upgrading to a new GitLab version as it may include new features and changes needed to be made in your @@ -24,8 +26,6 @@ SNI and exposes pages using HTTP2 by default. You are encouraged to read its [README][pages-readme] to fully understand how it works. ---- - In the case of [custom domains](#custom-domains) (but not [wildcard domains](#wildcard-domains)), the Pages daemon needs to listen on ports `80` and/or `443`. For that reason, there is some flexibility in the way diff --git a/doc/administration/raketasks/project_import_export.md b/doc/administration/raketasks/project_import_export.md index 39b1883375e..ecc4ac6b29b 100644 --- a/doc/administration/raketasks/project_import_export.md +++ b/doc/administration/raketasks/project_import_export.md @@ -1,4 +1,4 @@ -# Project import/export +# Project import/export administration **[CORE ONLY]** >**Note:** > diff --git a/doc/articles/openshift_and_gitlab/index.md b/doc/articles/openshift_and_gitlab/index.md index b7594cfef7f..76fdb2eb00a 100644 --- a/doc/articles/openshift_and_gitlab/index.md +++ b/doc/articles/openshift_and_gitlab/index.md @@ -1 +1,4 @@ -This document was moved to [another location](../../install/openshift_and_gitlab/index.html). +--- +redirect_to: '../../install/openshift_and_gitlab/index.html' +--- + diff --git a/doc/ci/README.md b/doc/ci/README.md index 6aa0e5885db..8d1d72c2a2b 100644 --- a/doc/ci/README.md +++ b/doc/ci/README.md @@ -1,5 +1,6 @@ --- comments: false +description: "Learn how to use GitLab CI/CD, the GitLab built-in Continuous Integration, Continuous Deployment, and Continuous Delivery toolset to build, test, and deploy your application." --- # GitLab Continuous Integration (GitLab CI/CD) diff --git a/doc/ci/examples/container_scanning.md b/doc/ci/examples/container_scanning.md index eb76521cc02..a9501f6c577 100644 --- a/doc/ci/examples/container_scanning.md +++ b/doc/ci/examples/container_scanning.md @@ -23,7 +23,7 @@ sast:container: - docker:stable-dind script: - docker run -d --name db arminc/clair-db:latest - - docker run -p 6060:6060 --link db:postgres -d --name clair arminc/clair-local-scan:v2.0.1 + - docker run -p 6060:6060 --link db:postgres -d --name clair --restart on-failure arminc/clair-local-scan:v2.0.1 - apk add -U wget ca-certificates - docker pull ${CI_APPLICATION_REPOSITORY}:${CI_APPLICATION_TAG} - wget https://github.com/arminc/clair-scanner/releases/download/v8/clair-scanner_linux_amd64 diff --git a/doc/ci/runners/README.md b/doc/ci/runners/README.md index 821413900fd..703a7f030ed 100644 --- a/doc/ci/runners/README.md +++ b/doc/ci/runners/README.md @@ -11,7 +11,7 @@ Ideally, the GitLab Runner should not be installed on the same machine as GitLab Read the [requirements documentation](../../install/requirements.md#gitlab-runner) for more information. -## Shared vs specific Runners +## Shared, specific and group Runners After [installing the Runner][install], you can either register it as shared or specific. You can only register a shared Runner if you have admin access to @@ -32,6 +32,9 @@ are: Runners. For example, if you want to deploy a certain project, you can setup a specific Runner to have the right credentials for this. The [usage of tags](#using-tags) may be useful in this case. Specific Runners process jobs using a [FIFO] queue. +- **Group Runners** are useful when you have multiple projects under one group + and would like all projects to have access to a set of Runners. Group Runners + process jobs using a [FIFO] queue. A Runner that is specific only runs for the specified project(s). A shared Runner can run jobs for every project that has enabled the option **Allow shared Runners** @@ -66,7 +69,7 @@ Runners to disabled. ## Registering a specific Runner -Registering a specific can be done in two ways: +Registering a specific Runner can be done in two ways: 1. Creating a Runner with the project registration token 1. Converting a shared Runner into a specific Runner (one-way, admin only) @@ -79,6 +82,14 @@ visit the project you want to make the Runner work for in GitLab: 1. Go to **Settings > CI/CD** to obtain the token 1. [Register the Runner][register] +## Registering a group Runner + +Creating a group Runner requires Master permissions for the group. To create a +group Runner visit the group you want to make the Runner work for in GitLab: + +1. Go to **Settings > CI/CD** to obtain the token +1. [Register the Runner][register] + ### Making an existing shared Runner specific If you are an admin on your GitLab instance, you can turn any shared Runner into @@ -121,7 +132,7 @@ To enable/disable a Runner in your project: > **Note**: Consider that if you don't lock your specific Runner to a specific project, any -user with Master role in you project can assign your runner to another arbitrary +user with Master role in you project can assign your Runner to another arbitrary project without requiring your authorization, so use it with caution. An admin can enable/disable a specific Runner for projects: diff --git a/doc/ci/services/docker-services.md b/doc/ci/services/docker-services.md index 787c5e462e4..e5fc7a3c85f 100644 --- a/doc/ci/services/docker-services.md +++ b/doc/ci/services/docker-services.md @@ -1,9 +1,3 @@ --- -comments: false +redirect_to: 'README.md' --- - -# GitLab CI Services - -- [Using MySQL](mysql.md) -- [Using PostgreSQL](postgres.md) -- [Using Redis](redis.md) diff --git a/doc/ci/yaml/README.md b/doc/ci/yaml/README.md index fb6d9826d08..2a17a51d7f8 100644 --- a/doc/ci/yaml/README.md +++ b/doc/ci/yaml/README.md @@ -738,10 +738,15 @@ cache: rspec: script: test cache: + key: rspec paths: - binaries/ ``` +Note that since cache is shared between jobs, if you're using different +paths for different jobs, you should also set a different **cache:key** +otherwise cache content can be overwritten. + ### `cache:key` > Introduced in GitLab Runner v1.0.0. @@ -756,10 +761,9 @@ or any other way that fits your workflow. This way, you can fine tune caching, allowing you to cache data between different jobs or even different branches. The `cache:key` variable can use any of the -[predefined variables](../variables/README.md), and the default key, if not set, -is `$CI_JOB_NAME-$CI_COMMIT_REF_NAME` which translates as "per-job and -per-branch". It is the default across the project, therefore everything is -shared between pipelines and jobs running on the same branch by default. +[predefined variables](../variables/README.md), and the default key, if not +set, is just literal `default` which means everything is shared between each +pipelines and jobs by default, starting from GitLab 9.0. NOTE: **Note:** The `cache:key` variable cannot contain the `/` character, or the equivalent @@ -779,7 +783,7 @@ If you use **Windows Batch** to run your shell scripts you need to replace ```yaml cache: - key: "%CI_JOB_STAGE%-%CI_COMMIT_REF_SLUG%" + key: "%CI_COMMIT_REF_SLUG%" paths: - binaries/ ``` @@ -789,7 +793,7 @@ If you use **Windows PowerShell** to run your shell scripts you need to replace ```yaml cache: - key: "$env:CI_JOB_STAGE-$env:CI_COMMIT_REF_SLUG" + key: "$env:CI_COMMIT_REF_SLUG" paths: - binaries/ ``` @@ -1572,7 +1576,7 @@ capitalization, the commit will be created but the pipeline will be skipped. ## Validate the .gitlab-ci.yml Each instance of GitLab CI has an embedded debug tool called Lint, which validates the -content of your `.gitlab-ci.yml` files. You can find the Lint under the page `ci/lint` of your +content of your `.gitlab-ci.yml` files. You can find the Lint under the page `ci/lint` of your project namespace (e.g, `http://gitlab-example.com/gitlab-org/project-123/-/ci/lint`) ## Using reserved keywords diff --git a/doc/container_registry/README.md b/doc/container_registry/README.md index fe3e4681ba7..5d2f5edcb18 100644 --- a/doc/container_registry/README.md +++ b/doc/container_registry/README.md @@ -1 +1 @@ -This document was moved in [user/project/container_registry](../user/project/container_registry.md). +This document was moved to [another location](../user/project/container_registry.md). diff --git a/doc/customization/issue_closing.md b/doc/customization/issue_closing.md index d14ba6ad522..680c51e7524 100644 --- a/doc/customization/issue_closing.md +++ b/doc/customization/issue_closing.md @@ -1,8 +1,3 @@ --- -comments: false +redirect_to: '../user/project/issues/automatic_issue_closing.md' --- - -This document was split into: - -- [administration/issue_closing_pattern.md](../administration/issue_closing_pattern.md). -- [user/project/issues/automatic_issue_closing](../user/project/issues/automatic_issue_closing.md). diff --git a/doc/development/README.md b/doc/development/README.md index 32ae86a7150..898c60e96c0 100644 --- a/doc/development/README.md +++ b/doc/development/README.md @@ -1,5 +1,6 @@ --- comments: false +description: 'Learn how to contribute to GitLab.' --- # GitLab development guides diff --git a/doc/development/doc_styleguide.md b/doc/development/doc_styleguide.md index 5da015ca557..5d595c33915 100644 --- a/doc/development/doc_styleguide.md +++ b/doc/development/doc_styleguide.md @@ -1,3 +1,7 @@ +--- +description: 'Writing styles, markup, formatting, and reusing regular expressions throughout the GitLab Documentation.' +--- + # Documentation style guidelines The documentation style guide defines the markup structure used in @@ -21,23 +25,39 @@ Check the GitLab handbook for the [writing styles guidelines](https://about.gitl - Use [single spaces][] instead of double spaces - Jump a line between different markups (e.g., after every paragraph, header, list, etc) - Capitalize "G" and "L" in GitLab -- Capitalize feature, products, and methods names. E.g.: GitLab Runner, Geo, -Issue Boards, Git, Prometheus, Continuous Integration. +- Use sentence case for titles, headings, labels, menu items, and buttons. +- Use title case when referring to [features](https://about.gitlab.com/features/) or [products](https://about.gitlab.com/pricing/), and methods. Note that some features are also objects (e.g. "Merge Requests" and "merge requests"). E.g.: GitLab Runner, Geo, Issue Boards, Git, Prometheus, Continuous Integration. ## Formatting +- Use double asterisks (`**`) to mark a word or text in bold (`**bold**`) +- Use undescore (`_`) for text in italics (`_italic_`) +- Jump a line between different markups, for example: + + ```md + ## Header + + Paragraph. + + - List item + - List item + ``` + +### Punctuation + +For punctuation rules, please refer to the [GitLab UX guide](https://design.gitlab.com/content/punctuation/). + +### Ordered and unordered lists + - Use dashes (`-`) for unordered lists instead of asterisks (`*`) - Use the number one (`1`) for ordered lists -- Use underscores (`_`) to mark a word or text in italics -- Use double asterisks (`**`) to mark a word or text in bold -- When using lists, prefer not to end each item with a period. You can use - them if there are multiple sentences, just keep the last sentence without - a period +- For punctuation in bullet lists, please refer to the [GitLab UX guide](https://design.gitlab.com/content/punctuation/) ## Headings -- Add only one H1 title in each document, by adding `#` at the beginning of - it (when using markdown). For subheadings, use `##`, `###` and so on +- Add **only one H1** in each document, by adding `#` at the beginning of + it (when using markdown). The `h1` will be the document `<title>`. +- For subheadings, use `##`, `###` and so on - Avoid putting numbers in headings. Numbers shift, hence documentation anchor links shift too, which eventually leads to dead links. If you think it is compelling to add numbers in headings, make sure to at least discuss it with @@ -106,21 +126,75 @@ Inside the document: - If a heading is placed right after an image, always add three dashes (`---`) between the image and the heading -## Notes +## Alert boxes -- Notes should be quoted with the word `Note:` being bold. Use this form: +Whenever you want to call the attention to a particular sentence, +use the following markup for highlighting. - ```md - >**Note:** - This is something to note. - ``` +_Note that the alert boxes only work for one paragraph only. Multiple paragraphs, +lists, headers, etc will not render correctly._ + +### Note + +```md +NOTE: **Note:** +This is something to note. +``` + +How it renders in docs.gitlab.com: + +NOTE: **Note:** +This is something to note. + +### Tip + +```md +TIP: **Tip:** +This is a tip. +``` + +How it renders in docs.gitlab.com: + +TIP: **Tip:** +This is a tip. + +### Caution + +```md +CAUTION: **Caution:** +This is something to be cautious about. +``` + +How it renders in docs.gitlab.com: + +CAUTION: **Caution:** +This is something to be cautious about. + +### Danger - which renders to: +```md +DANGER: **Danger:** +This is a breaking change, a bug, or something very important to note. +``` + +How it renders in docs.gitlab.com: - >**Note:** - This is something to note. +DANGER: **Danger:** +This is a breaking change, a bug, or something very important to note. - If the note spans across multiple lines it's OK to split the line. +## Blockquotes + +For highlighting a text within a blue blockquote, use this format: + +```md +> This is a blockquote. +``` + +which renders in docs.gitlab.com to: + +> This is a blockquote. + +If the text spans across multiple lines it's OK to split the line. ## Specific sections and terms @@ -137,7 +211,7 @@ below. > Introduced in GitLab 8.3. ``` -- If possible every feature should have a link to the MR, issue, or epic that introduced it. +- Whenever possible, every feature should have a link to the MR, issue, or epic that introduced it. The above note would be then transformed to: ```md @@ -152,11 +226,9 @@ below. the feature is available in: ```md - > [Introduced][ee-1234] in [GitLab Starter](https://about.gitlab.com/products/) 8.3. + > [Introduced][ee-1234] in [GitLab Starter](https://about.gitlab.com/pricing/) 8.3. ``` - Otherwise, leave this mention out. - ### Product badges When a feature is available in EE-only tiers, add the corresponding tier according to the diff --git a/doc/development/testing_guide/best_practices.md b/doc/development/testing_guide/best_practices.md index 7b32e0a47e1..61fa5459b91 100644 --- a/doc/development/testing_guide/best_practices.md +++ b/doc/development/testing_guide/best_practices.md @@ -230,6 +230,11 @@ describe "#==" do end ``` +### Prometheus tests + +Prometheus metrics may be preserved from one test run to another. To ensure that metrics are +reset before each example, add the `:prometheus` tag to the Rspec test. + ### Matchers Custom matchers should be created to clarify the intent and/or hide the diff --git a/doc/development/writing_documentation.md b/doc/development/writing_documentation.md index 9bca4637830..1c41fc7611f 100644 --- a/doc/development/writing_documentation.md +++ b/doc/development/writing_documentation.md @@ -1,3 +1,7 @@ +--- +description: Learn how to contribute to GitLab Documentation. +--- + # GitLab Documentation guidelines - **General Documentation**: written by the [developers responsible by creating features](#contributing-to-docs). Should be submitted in the same merge request containing code. Feature proposals (by GitLab contributors) should also be accompanied by its respective documentation. They can be later improved by PMs and Technical Writers. @@ -201,6 +205,19 @@ Things to note: built-in help page, that's why we omit it in `git grep`. - Use the checklist on the documentation MR description template. +#### Alternative redirection method + +Alternatively to the method described above, you can simply replace the content +of the old file with a frontmatter containing a redirect link: + +```yaml +--- +redirect_to: '../path/to/file/README.md' +--- +``` + +It supports both full and relative URLs, e.g. `https://docs.gitlab.com/ee/path/to/file.html`, `../path/to/file.html`, `path/to/file.md`. Note that any `*.md` paths will be compiled to `*.html`. + ### Redirections for pages with Disqus comments If the documentation page being relocated already has any Disqus comments, diff --git a/doc/install/README.md b/doc/install/README.md index 5dadf57ea9a..27df03c6ac6 100644 --- a/doc/install/README.md +++ b/doc/install/README.md @@ -1,5 +1,6 @@ --- comments: false +description: Read through the GitLab installation methods. --- # Installation diff --git a/doc/install/azure/index.md b/doc/install/azure/index.md index b0c3ad960bb..21694b02d18 100644 --- a/doc/install/azure/index.md +++ b/doc/install/azure/index.md @@ -1,3 +1,8 @@ +--- +description: 'Learn how to spin up a +pre-configured GitLab VM on Microsoft Azure and have your very own private GitLab instance up and running in around 30 minutes.' +--- + # Install GitLab on Microsoft Azure > _This article was originally written by Dave Wentzel and [published on the GitLab Blog][Original-Blog-Post]._ diff --git a/doc/install/docker.md b/doc/install/docker.md index 933756072ff..c7dc9db70c5 100644 --- a/doc/install/docker.md +++ b/doc/install/docker.md @@ -1,4 +1,4 @@ -# GitLab Docker images +# Install GitLab with Docker [Docker](https://www.docker.com) and container technology have been revolutionizing the software world for the past few years. They combine the performance and efficiency of native execution with the abstraction, security, and immutability of virtualization. diff --git a/doc/install/google_cloud_platform/index.md b/doc/install/google_cloud_platform/index.md index 2691495e0d4..ab5f7507f24 100644 --- a/doc/install/google_cloud_platform/index.md +++ b/doc/install/google_cloud_platform/index.md @@ -1,3 +1,7 @@ +--- +description: 'Learn how to install a GitLab instance on Google Cloud Platform.' +--- + # Installing GitLab on Google Cloud Platform ![GCP landing page](img/gcp_landing.png) diff --git a/doc/install/kubernetes/index.md b/doc/install/kubernetes/index.md index 7d8b8fc1597..aeaa739edab 100644 --- a/doc/install/kubernetes/index.md +++ b/doc/install/kubernetes/index.md @@ -1,4 +1,9 @@ +--- +description: 'Read through the different methods to deploy GitLab on Kubernetes.' +--- + # Installing GitLab on Kubernetes + > **Note**: These charts have been tested on Google Kubernetes Engine and Azure Container Service. Other Kubernetes installations may work as well, if not please [open an issue](https://gitlab.com/charts/charts.gitlab.io/issues). The easiest method to deploy GitLab on [Kubernetes](https://kubernetes.io/) is @@ -16,6 +21,7 @@ should be deployed, upgraded, and configured. * [Community Contributed Charts](#community-contributed-charts): Community contributed charts, deprecated by the official GitLab chart. ## GitLab-Omnibus Chart (Recommended) + > **Note**: This chart is in beta while [additional features](https://gitlab.com/charts/charts.gitlab.io/issues/68) are being added. This chart is the best available way to operate GitLab on Kubernetes. It deploys and configures nearly all features of GitLab, including: a [Runner](https://docs.gitlab.com/runner/), [Container Registry](../../user/project/container_registry.html#gitlab-container-registry), [Mattermost](https://docs.gitlab.com/omnibus/gitlab-mattermost/), [automatic SSL](https://github.com/kubernetes/charts/tree/master/stable/kube-lego), and a [load balancer](https://github.com/kubernetes/ingress/tree/master/controllers/nginx). It is based on our [GitLab Omnibus Docker Images](https://docs.gitlab.com/omnibus/docker/README.html). diff --git a/doc/install/openshift_and_gitlab/index.md b/doc/install/openshift_and_gitlab/index.md index e6ccfccd33f..1ced1fb513d 100644 --- a/doc/install/openshift_and_gitlab/index.md +++ b/doc/install/openshift_and_gitlab/index.md @@ -6,7 +6,7 @@ article_type: tutorial date: 2016-06-28 --- -# Getting started with OpenShift Origin 3 and GitLab +# How to install GitLab on OpenShift Origin 3 ## Introduction diff --git a/doc/legal/README.md b/doc/legal/README.md index 6413f1d645f..d991429a652 100644 --- a/doc/legal/README.md +++ b/doc/legal/README.md @@ -4,5 +4,4 @@ comments: false # Legal -- [Corporate contributor license agreement](corporate_contributor_license_agreement.md) -- [Individual contributor license agreement](individual_contributor_license_agreement.md) +Please read through the [GitLab License Agreement](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md). diff --git a/doc/legal/corporate_contributor_license_agreement.md b/doc/legal/corporate_contributor_license_agreement.md index ebb24ba0a7f..e5fc7a3c85f 100644 --- a/doc/legal/corporate_contributor_license_agreement.md +++ b/doc/legal/corporate_contributor_license_agreement.md @@ -1,2 +1,3 @@ -This document has been replaced by a Developer Certificate of Origin and License, -as described in [Contributing.md](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md).
\ No newline at end of file +--- +redirect_to: 'README.md' +--- diff --git a/doc/legal/individual_contributor_license_agreement.md b/doc/legal/individual_contributor_license_agreement.md index ebb24ba0a7f..e5fc7a3c85f 100644 --- a/doc/legal/individual_contributor_license_agreement.md +++ b/doc/legal/individual_contributor_license_agreement.md @@ -1,2 +1,3 @@ -This document has been replaced by a Developer Certificate of Origin and License, -as described in [Contributing.md](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md).
\ No newline at end of file +--- +redirect_to: 'README.md' +--- diff --git a/doc/raketasks/features.md b/doc/raketasks/features.md index fee49cc27cc..57c16f110e4 100644 --- a/doc/raketasks/features.md +++ b/doc/raketasks/features.md @@ -1,4 +1,4 @@ -# Features +# Namespaces ## Enable usernames and namespaces for user projects diff --git a/doc/raketasks/web_hooks.md b/doc/raketasks/web_hooks.md index 2ebf7c48f4e..5f3143f76cd 100644 --- a/doc/raketasks/web_hooks.md +++ b/doc/raketasks/web_hooks.md @@ -1,4 +1,4 @@ -# Webhooks +# Webhooks administration **[CORE ONLY]** ## Add a webhook for **ALL** projects: diff --git a/doc/topics/git/how_to_install_git/index.md b/doc/topics/git/how_to_install_git/index.md index 6c909a1ba86..58d86f7d387 100644 --- a/doc/topics/git/how_to_install_git/index.md +++ b/doc/topics/git/how_to_install_git/index.md @@ -4,6 +4,7 @@ author_gitlab: SeanPackham level: beginner article_type: user guide date: 2017-05-15 +description: 'This article describes how to install Git on macOS, Ubuntu Linux and Windows.' --- # Installing Git diff --git a/doc/university/training/gitlab_flow.md b/doc/university/training/gitlab_flow.md index 02a6ad48a38..d7bc7bda43f 100644 --- a/doc/university/training/gitlab_flow.md +++ b/doc/university/training/gitlab_flow.md @@ -2,39 +2,31 @@ comments: false --- -# GitLab Flow +# What is the GitLab Flow - A simplified branching strategy - All features and fixes first go to master - Allows for 'production' or 'stable' branches - Bug fixes/hot fix patches are cherry-picked from master ---- - -# Feature branches +## Feature branches - Create a feature/bugfix branch to do all work - Use merge requests to merge to master ![inline](gitlab_flow/feature_branches.png) ---- - -# Production branch +## Production branch - One, long-running production release branch as opposed to individual stable branches - Consider creating a tag for each version that gets deployed ---- - -# Production branch +## Production branch ![inline](gitlab_flow/production_branch.png) ---- - -# Release branch +## Release branch - Useful if you release software to customers - When preparing a new release, create stable branch @@ -43,15 +35,11 @@ comments: false - Cherry-pick critical bug fixes to stable branch for patch release - Never commit bug fixes directly to stable branch ---- - -# Release branch +## Release branch ![inline](gitlab_flow/release_branches.png) ---- - -# More details +## More details -Blog post on 'GitLab Flow' at -[http://doc.gitlab.com/ee/workflow/gitlab_flow.html](http://doc.gitlab.com/ee/workflow/gitlab_flow.html) +For more information read through the [GitLab Flow](../../workflow/gitlab_flow.md) +documentation. diff --git a/doc/university/training/topics/gitlab_flow.md b/doc/university/training/topics/gitlab_flow.md index b8049b5c80e..f6006ce0a60 100644 --- a/doc/university/training/topics/gitlab_flow.md +++ b/doc/university/training/topics/gitlab_flow.md @@ -1,57 +1,3 @@ --- -comments: false +redirect_to: '../gitlab_flow.md' --- - -# GitLab Flow - ----------- - -- A simplified branching strategy -- All features and fixes first go to master -- Allows for 'production' or 'stable' branches -- Bug fixes/hot fix patches are cherry-picked from master - ----------- - -### Feature branches - -- Create a feature/bugfix branch to do all work -- Use merge requests to merge to master - -![inline](http://gitlab.com/gitlab-org/University/raw/5baea0fe222a915d0500e40747d35eb18681cdc3/training/gitlab_flow/feature_branches.png) - ----------- - -## Production branch - -- One, long-running production release branch - as opposed to individual stable branches -- Consider creating a tag for each version that gets deployed - ----------- - -## Production branch - -![inline](http://gitlab.com/gitlab-org/University/raw/5baea0fe222a915d0500e40747d35eb18681cdc3/training/gitlab_flow/production_branch.png) - ----------- - -## Release branch - -- Useful if you release software to customers -- When preparing a new release, create stable branch - from master -- Consider creating a tag for each version -- Cherry-pick critical bug fixes to stable branch for patch release -- Never commit bug fixes directly to stable branch - ----------- - -![inline](http://gitlab.com/gitlab-org/University/raw/5baea0fe222a915d0500e40747d35eb18681cdc3/training/gitlab_flow/release_branches.png) - ----------- - -## More details - -Blog post on 'GitLab Flow' at -[http://doc.gitlab.com/ee/workflow/gitlab_flow.html](http://doc.gitlab.com/ee/workflow/gitlab_flow.html) diff --git a/doc/university/training/topics/merge_requests.md b/doc/university/training/topics/merge_requests.md index 4e8c9de85a1..d7b771cd87b 100644 --- a/doc/university/training/topics/merge_requests.md +++ b/doc/university/training/topics/merge_requests.md @@ -2,7 +2,7 @@ comments: false --- -# Merge requests +# Code review and collaboration with Merge Requests ---------- diff --git a/doc/user/admin_area/labels.md b/doc/user/admin_area/labels.md index 9e2a89ebdf6..e383142c33e 100644 --- a/doc/user/admin_area/labels.md +++ b/doc/user/admin_area/labels.md @@ -1,4 +1,4 @@ -# Labels +# Labels administration **[CORE ONLY]** ## Default Labels diff --git a/doc/user/group/index.md b/doc/user/group/index.md index 88f4bb2ee04..30761a66563 100644 --- a/doc/user/group/index.md +++ b/doc/user/group/index.md @@ -40,20 +40,20 @@ In GitLab, a namespace is a unique name to be used as a user name, a group name, - `http://gitlab.example.com/groupname` - `http://gitlab.example.com/groupname/subgroup_name` -For example, consider a user called John: +For example, consider a user named Alex: -1. John creates his account on GitLab.com with the username `john`; -his profile will be accessed under `https://gitlab.example.com/john` -1. John creates a group for his team with the groupname `john-team`; -his group and its projects will be accessed under `https://gitlab.example.com/john-team` -1. John creates a subgroup of `john-team` with the subgroup name `marketing`; -his subgroup and its projects will be accessed under `https://gitlab.example.com/john-team/marketing` +1. Alex creates an account on GitLab.com with the username `alex`; +their profile will be accessed under `https://gitlab.example.com/alex` +1. Alex creates a group for their team with the groupname `alex-team`; +the group and its projects will be accessed under `https://gitlab.example.com/alex-team` +1. Alex creates a subgroup of `alex-team` with the subgroup name `marketing`; +this subgroup and its projects will be accessed under `https://gitlab.example.com/alex-team/marketing` By doing so: -- Any team member mentions John with `@john` -- John mentions everyone from his team with `@john-team` -- John mentions only his marketing team with `@john-team/marketing` +- Any team member mentions Alex with `@alex` +- Alex mentions everyone from their team with `@alex-team` +- Alex mentions only the marketing team with `@alex-team/marketing` ## Issues and merge requests within a group diff --git a/doc/user/index.md b/doc/user/index.md index 2494df46f1c..a50e5e8fbf8 100644 --- a/doc/user/index.md +++ b/doc/user/index.md @@ -1,3 +1,7 @@ +--- +description: 'Read through the GitLab User documentation to learn how to use, configure, and customize GitLab and GitLab.com to your own needs.' +--- + # User documentation Welcome to GitLab! We're glad to have you here! diff --git a/doc/user/permissions.md b/doc/user/permissions.md index a9ba2a51242..0808e3949be 100644 --- a/doc/user/permissions.md +++ b/doc/user/permissions.md @@ -1,3 +1,7 @@ +--- +description: 'Understand and explore the user permission levels in GitLab, and what features each of them grants you access to.' +--- + # Permissions Users have different abilities depending on the access level they have in a diff --git a/doc/user/project/pages/index.md b/doc/user/project/pages/index.md index a97ce84b861..4b5c2539c4b 100644 --- a/doc/user/project/pages/index.md +++ b/doc/user/project/pages/index.md @@ -1,3 +1,7 @@ +--- +description: 'Learn how to use GitLab Pages to deploy a static website at no additional cost.' +--- + # GitLab Pages With GitLab Pages it's easy to publish your project website. GitLab Pages is a hosting service for static websites, at no additional cost. diff --git a/doc/user/project/pages/introduction.md b/doc/user/project/pages/introduction.md index 0b5076b8c5d..fe4d15adfa1 100644 --- a/doc/user/project/pages/introduction.md +++ b/doc/user/project/pages/introduction.md @@ -1,4 +1,4 @@ -# GitLab Pages +# Exploring GitLab Pages > **Notes:** > - This feature was [introduced][ee-80] in GitLab EE 8.3. @@ -14,9 +14,7 @@ deploy static pages for your individual projects, your user or your group. Read [GitLab Pages on GitLab.com](#gitlab-pages-on-gitlab-com) for specific information, if you are using GitLab.com to host your website. -Read through [All you Need to Know About GitLab Pages][pages-index-guide] for a list of all learning materials we have prepared for GitLab Pages (webpages, articles, guides, blog posts, video tutorials). - -## Getting started with GitLab Pages +## Getting started with GitLab Pages domains > **Note:** > In the rest of this document we will assume that the general domain name that diff --git a/doc/user/project/settings/import_export.md b/doc/user/project/settings/import_export.md index 2c90f4b4413..b8bac01959e 100644 --- a/doc/user/project/settings/import_export.md +++ b/doc/user/project/settings/import_export.md @@ -5,6 +5,7 @@ > - [Introduced][ce-3050] in GitLab 8.9. > - Importing will not be possible if the import instance version differs from > that of the exporter. +> - For GitLab admins, please read through [Project import/export administration](../../../administration/raketasks/project_import_export.md). > - For existing installations, the project import option has to be enabled in > application settings (`/admin/application_settings`) under 'Import sources'. > Ask your administrator if you don't see the **GitLab export** button when diff --git a/doc/workflow/protected_branches.md b/doc/workflow/protected_branches.md index aa48b8f750e..ced7d391ace 100644 --- a/doc/workflow/protected_branches.md +++ b/doc/workflow/protected_branches.md @@ -1 +1 @@ -This document is moved to [user/project/protected_branches.md](../user/project/protected_branches.md) +This document was moved to [another location](../user/project/protected_branches.md). diff --git a/ee/app/controllers/ee/ldap/omniauth_callbacks_controller.rb b/ee/app/controllers/ee/ldap/omniauth_callbacks_controller.rb deleted file mode 100644 index f1e851a210b..00000000000 --- a/ee/app/controllers/ee/ldap/omniauth_callbacks_controller.rb +++ /dev/null @@ -1,22 +0,0 @@ -module EE - module Ldap - module OmniauthCallbacksController - extend ::Gitlab::Utils::Override - - override :sign_in_and_redirect - def sign_in_and_redirect(user) - # The counter gets incremented in `sign_in_and_redirect` - show_ldap_sync_flash if user.sign_in_count == 0 - - super - end - - private - - def show_ldap_sync_flash - flash[:notice] = 'LDAP sync in progress. This could take a few minutes. '\ - 'Refresh the page to see the changes.' - end - end - end -end diff --git a/ee/spec/controllers/ldap/omniauth_callbacks_controller_spec.rb b/ee/spec/controllers/ldap/omniauth_callbacks_controller_spec.rb deleted file mode 100644 index 0835ff35846..00000000000 --- a/ee/spec/controllers/ldap/omniauth_callbacks_controller_spec.rb +++ /dev/null @@ -1,29 +0,0 @@ -require 'spec_helper' - -describe Ldap::OmniauthCallbacksController do - include_context 'Ldap::OmniauthCallbacksController' - - it "displays LDAP sync flash on first sign in" do - post provider - - expect(flash[:notice]).to match(/LDAP sync in progress*/) - end - - it "skips LDAP sync flash on subsequent sign ins" do - user.update!(sign_in_count: 1) - - post provider - - expect(flash[:notice]).to eq nil - end - - context 'access denied' do - let(:valid_login?) { false } - - it 'logs a failure event' do - stub_licensed_features(extended_audit_events: true) - - expect { post provider }.to change(SecurityEvent, :count).by(1) - end - end -end diff --git a/features/project/deploy_keys.feature b/features/project/deploy_keys.feature deleted file mode 100644 index 6f1ed9ff5b6..00000000000 --- a/features/project/deploy_keys.feature +++ /dev/null @@ -1,46 +0,0 @@ -Feature: Project Deploy Keys - Background: - Given I sign in as a user - And I own project "Shop" - - @javascript - Scenario: I should see deploy keys list - Given project has deploy key - When I visit project deploy keys page - Then I should see project deploy key - - @javascript - Scenario: I should see project deploy keys - Given other projects have deploy keys - When I visit project deploy keys page - Then I should see other project deploy key - And I should only see the same deploy key once - - @javascript - Scenario: I should see public deploy keys - Given public deploy key exists - When I visit project deploy keys page - Then I should see public deploy key - - @javascript - Scenario: I add new deploy key - Given I visit project deploy keys page - And I submit new deploy key - Then I should be on deploy keys page - And I should see newly created deploy key - - @javascript - Scenario: I attach other project deploy key to project - Given other projects have deploy keys - And I visit project deploy keys page - When I click attach deploy key - Then I should be on deploy keys page - And I should see newly created deploy key - - @javascript - Scenario: I attach public deploy key to project - Given public deploy key exists - And I visit project deploy keys page - When I click attach deploy key - Then I should be on deploy keys page - And I should see newly created deploy key diff --git a/features/project/ff_merge_requests.feature b/features/project/ff_merge_requests.feature deleted file mode 100644 index 39035d551d1..00000000000 --- a/features/project/ff_merge_requests.feature +++ /dev/null @@ -1,41 +0,0 @@ -Feature: Project Ff Merge Requests - Background: - Given I sign in as a user - And I own project "Shop" - And project "Shop" have "Bug NS-05" open merge request with diffs inside - And merge request "Bug NS-05" is mergeable - - @javascript - Scenario: I do ff-only merge for rebased branch - Given ff merge enabled - And merge request "Bug NS-05" is rebased - When I visit merge request page "Bug NS-05" - Then I should see ff-only merge button - When I accept this merge request - Then I should see merged request - - @javascript - Scenario: I do ff-only merge for merged branch - Given ff merge enabled - And merge request "Bug NS-05" merged target - When I visit merge request page "Bug NS-05" - Then I should see ff-only merge button - When I accept this merge request - Then I should see merged request - - @javascript - Scenario: I do rebase before ff-only merge - Given ff merge enabled - And rebase before merge enabled - When I visit merge request page "Bug NS-05" - Then I should see rebase button - When I press rebase button - Then I should see rebase in progress message - - @javascript - Scenario: I do rebase before regular merge - Given rebase before merge enabled - When I visit merge request page "Bug NS-05" - Then I should see rebase button - When I press rebase button - Then I should see rebase in progress message diff --git a/features/project/issues/references.feature b/features/project/issues/references.feature deleted file mode 100644 index 4ae2d653337..00000000000 --- a/features/project/issues/references.feature +++ /dev/null @@ -1,33 +0,0 @@ -@project_issues -Feature: Project Issues References - Background: - Given I sign in as "John Doe" - And public project "Community" - And "John Doe" owns public project "Community" - And project "Community" has "Community issue" open issue - And I logout - And I sign in as "Mary Jane" - And private project "Enterprise" - And "Mary Jane" owns private project "Enterprise" - And project "Enterprise" has "Enterprise issue" open issue - And project "Enterprise" has "Enterprise fix" open merge request - And I visit issue page "Enterprise issue" - And I leave a comment referencing issue "Community issue" - And I visit merge request page "Enterprise fix" - And I leave a comment referencing issue "Community issue" - And I logout - - @javascript - Scenario: Viewing the public issue as a "John Doe" - Given I sign in as "John Doe" - When I visit issue page "Community issue" - Then I should not see any related merge requests - And I should see no notes at all - - @javascript - Scenario: Viewing the public issue as "Mary Jane" - Given I sign in as "Mary Jane" - When I visit issue page "Community issue" - Then I should see the "Enterprise fix" related merge request - And I should see a note linking to "Enterprise fix" merge request - And I should see a note linking to "Enterprise issue" issue diff --git a/features/steps/project/deploy_keys.rb b/features/steps/project/deploy_keys.rb deleted file mode 100644 index 8e2f594328d..00000000000 --- a/features/steps/project/deploy_keys.rb +++ /dev/null @@ -1,94 +0,0 @@ -class Spinach::Features::ProjectDeployKeys < Spinach::FeatureSteps - include SharedAuthentication - include SharedProject - include SharedPaths - - step 'project has deploy key' do - create(:deploy_keys_project, project: @project) - end - - step 'I should see project deploy key' do - page.within(find('.deploy-keys')) do - find('.js-deployKeys-tab-enabled_keys').click() - expect(page).to have_content deploy_key.title - end - end - - step 'I should see other project deploy key' do - page.within(find('.deploy-keys')) do - find('.js-deployKeys-tab-available_project_keys').click() - expect(page).to have_content other_deploy_key.title - end - end - - step 'I should see public deploy key' do - page.within(find('.deploy-keys')) do - find('.js-deployKeys-tab-public_keys').click() - expect(page).to have_content public_deploy_key.title - end - end - - step 'I click \'New Deploy Key\'' do - click_link 'New deploy key' - end - - step 'I submit new deploy key' do - fill_in "deploy_key_title", with: "laptop" - fill_in "deploy_key_key", with: "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzrEJUIR6Y03TCE9rIJ+GqTBvgb8t1jI9h5UBzCLuK4VawOmkLornPqLDrGbm6tcwM/wBrrLvVOqi2HwmkKEIecVO0a64A4rIYScVsXIniHRS6w5twyn1MD3sIbN+socBDcaldECQa2u1dI3tnNVcs8wi77fiRe7RSxePsJceGoheRQgC8AZ510UdIlO+9rjIHUdVN7LLyz512auAfYsgx1OfablkQ/XJcdEwDNgi9imI6nAXhmoKUm1IPLT2yKajTIC64AjLOnE0YyCh6+7RFMpiMyu1qiOCpdjYwTgBRiciNRZCH8xIedyCoAmiUgkUT40XYHwLuwiPJICpkAzp7Q== user@laptop" - click_button "Add key" - end - - step 'I should be on deploy keys page' do - expect(current_path).to eq project_settings_repository_path(@project) - end - - step 'I should see newly created deploy key' do - @project.reload - page.within(find('.deploy-keys')) do - find('.js-deployKeys-tab-enabled_keys').click() - expect(page).to have_content(deploy_key.title) - end - end - - step 'other projects have deploy keys' do - @second_project = create(:project, namespace: create(:group)) - @second_project.add_master(current_user) - create(:deploy_keys_project, project: @second_project) - - @third_project = create(:project, namespace: create(:group)) - @third_project.add_master(current_user) - create(:deploy_keys_project, project: @third_project, deploy_key: @second_project.deploy_keys.first) - end - - step 'I should only see the same deploy key once' do - page.within(find('.deploy-keys')) do - expect(find('.js-deployKeys-tab-available_project_keys .badge')).to have_content('1') - end - end - - step 'public deploy key exists' do - create(:deploy_key, public: true) - end - - step 'I click attach deploy key' do - page.within(find('.deploy-keys')) do - find('.badge', text: '1').click() - click_button 'Enable' - expect(page).not_to have_selector('.fa-spinner') - end - end - - protected - - def deploy_key - @project.deploy_keys.last - end - - def other_deploy_key - @second_project.deploy_keys.last - end - - def public_deploy_key - DeployKey.are_public.last - end -end diff --git a/features/steps/project/ff_merge_requests.rb b/features/steps/project/ff_merge_requests.rb deleted file mode 100644 index 27efcfd65b6..00000000000 --- a/features/steps/project/ff_merge_requests.rb +++ /dev/null @@ -1,87 +0,0 @@ -class Spinach::Features::ProjectFfMergeRequests < Spinach::FeatureSteps - include SharedAuthentication - include SharedIssuable - include SharedProject - include SharedNote - include SharedPaths - include SharedMarkdown - include SharedDiffNote - include SharedUser - include WaitForRequests - - step 'project "Shop" have "Bug NS-05" open merge request with diffs inside' do - create(:merge_request_with_diffs, - title: "Bug NS-05", - source_project: project, - target_project: project, - author: project.users.first) - end - - step 'merge request is mergeable' do - expect(page).to have_button 'Merge' - end - - step 'I should see ff-only merge button' do - expect(page).to have_content "Fast-forward merge without a merge commit" - expect(page).to have_button 'Merge' - end - - step 'merge request "Bug NS-05" is mergeable' do - merge_request.mark_as_mergeable - end - - step 'I accept this merge request' do - page.within '.mr-state-widget' do - click_button "Merge" - end - end - - step 'I should see merged request' do - page.within '.status-box' do - expect(page).to have_content "Merged" - wait_for_requests - end - end - - step 'ff merge enabled' do - project = merge_request.target_project - project.merge_requests_ff_only_enabled = true - project.save! - end - - step 'I should see rebase button' do - expect(page).to have_button "Rebase" - end - - step 'merge request "Bug NS-05" is rebased' do - merge_request.source_branch = 'flatten-dir' - merge_request.target_branch = 'improve/awesome' - merge_request.reload_diff - merge_request.save! - end - - step 'merge request "Bug NS-05" merged target' do - merge_request.source_branch = 'merged-target' - merge_request.target_branch = 'improve/awesome' - merge_request.reload_diff - merge_request.save! - end - - step 'rebase before merge enabled' do - project = merge_request.target_project - project.merge_requests_rebase_enabled = true - project.save! - end - - step 'I press rebase button' do - click_button "Rebase" - end - - step "I should see rebase in progress message" do - expect(page).to have_content("Rebase in progress") - end - - def merge_request - @merge_request ||= MergeRequest.find_by!(title: "Bug NS-05") - end -end diff --git a/features/steps/shared/issuable.rb b/features/steps/shared/issuable.rb index 195a9e64a12..f4ded455440 100644 --- a/features/steps/shared/issuable.rb +++ b/features/steps/shared/issuable.rb @@ -5,13 +5,6 @@ module SharedIssuable find('.js-issuable-edit', visible: true).click end - step 'project "Community" has "Community issue" open issue' do - create_issuable_for_project( - project_name: 'Community', - title: 'Community issue' - ) - end - step 'project "Community" has "Community fix" open merge request' do create_issuable_for_project( project_name: 'Community', @@ -59,32 +52,11 @@ module SharedIssuable visit project_merge_request_path(mr.target_project, mr) end - step 'I visit issue page "Community issue"' do - issue = Issue.find_by(title: 'Community issue') - visit project_issue_path(issue.project, issue) - end - step 'I visit issue page "Community fix"' do mr = MergeRequest.find_by(title: 'Community fix') visit project_merge_request_path(mr.target_project, mr) end - step 'I should not see any related merge requests' do - page.within '.issue-details' do - expect(page).not_to have_content('#merge-requests .merge-requests-title') - end - end - - step 'I should see the "Enterprise fix" related merge request' do - page.within '#merge-requests .merge-requests-title' do - expect(page).to have_content('1 Related Merge Request') - end - - page.within '#merge-requests ul' do - expect(page).to have_content('Enterprise fix') - end - end - step 'I should see a note linking to "Enterprise fix" merge request' do visible_note( issuable: MergeRequest.find_by(title: 'Enterprise fix'), diff --git a/features/steps/shared/paths.rb b/features/steps/shared/paths.rb index b6c648a707d..a6bf7008955 100644 --- a/features/steps/shared/paths.rb +++ b/features/steps/shared/paths.rb @@ -240,10 +240,6 @@ module SharedPaths visit project_settings_integrations_path(@project) end - step 'I visit project deploy keys page' do - visit project_deploy_keys_path(@project) - end - step 'I visit project find file page' do visit project_find_file_path(@project, root_ref) end @@ -336,11 +332,6 @@ module SharedPaths wait_for_requests end - step 'I visit merge request page "Bug NS-05"' do - visit merge_request_path("Bug NS-05") - wait_for_requests - end - step 'I visit merge request page "Bug NS-07"' do visit merge_request_path("Bug NS-07") wait_for_requests diff --git a/lib/api/runner.rb b/lib/api/runner.rb index cd7d6603171..649feba1036 100644 --- a/lib/api/runner.rb +++ b/lib/api/runner.rb @@ -11,13 +11,14 @@ module API requires :token, type: String, desc: 'Registration token' optional :description, type: String, desc: %q(Runner's description) optional :info, type: Hash, desc: %q(Runner's metadata) + optional :active, type: Boolean, desc: 'Should Runner be active' optional :locked, type: Boolean, desc: 'Should Runner be locked for current project' optional :run_untagged, type: Boolean, desc: 'Should Runner handle untagged jobs' optional :tag_list, type: Array[String], desc: %q(List of Runner's tags) optional :maximum_timeout, type: Integer, desc: 'Maximum timeout set when this Runner will handle the job' end post '/' do - attributes = attributes_for_keys([:description, :locked, :run_untagged, :tag_list, :maximum_timeout]) + attributes = attributes_for_keys([:description, :active, :locked, :run_untagged, :tag_list, :maximum_timeout]) .merge(get_runner_details_from_request) runner = diff --git a/lib/gitlab/file_detector.rb b/lib/gitlab/file_detector.rb index cc2638172ec..77af7a868d0 100644 --- a/lib/gitlab/file_detector.rb +++ b/lib/gitlab/file_detector.rb @@ -14,6 +14,7 @@ module Gitlab avatar: /\Alogo\.(png|jpg|gif)\z/, issue_template: %r{\A\.gitlab/issue_templates/[^/]+\.md\z}, merge_request_template: %r{\A\.gitlab/merge_request_templates/[^/]+\.md\z}, + xcode_config: %r{\A[^/]*\.(xcodeproj|xcworkspace)\z}, # Configuration files gitignore: '.gitignore', diff --git a/lib/gitlab/git/blame.rb b/lib/gitlab/git/blame.rb index 6d6ed065f79..4158d50cd9e 100644 --- a/lib/gitlab/git/blame.rb +++ b/lib/gitlab/git/blame.rb @@ -15,10 +15,7 @@ module Gitlab def each @blames.each do |blame| - yield( - Gitlab::Git::Commit.new(@repo, blame.commit), - blame.line - ) + yield(blame.commit, blame.line) end end @@ -60,9 +57,8 @@ module Gitlab end end - # load all commits in single call - commits.keys.each do |key| - commits[key] = @repo.lookup(key) + Gitlab::Git::Commit.batch_by_oid(@repo, commits.keys).each do |commit| + commits[commit.sha] = commit end # get it together diff --git a/lib/gitlab/git/blob.rb b/lib/gitlab/git/blob.rb index eabcf46cf58..d78d29b7ac6 100644 --- a/lib/gitlab/git/blob.rb +++ b/lib/gitlab/git/blob.rb @@ -62,6 +62,12 @@ module Gitlab end end + # Returns an array of Blob instances just with the metadata, that means + # the data attribute has no content. + def batch_metadata(repository, blob_references) + batch(repository, blob_references, blob_size_limit: 0) + end + # Find LFS blobs given an array of sha ids # Returns array of Gitlab::Git::Blob # Does not guarantee blob data will be set diff --git a/lib/gitlab/git/raw_diff_change.rb b/lib/gitlab/git/raw_diff_change.rb index 6042e993113..98de9328071 100644 --- a/lib/gitlab/git/raw_diff_change.rb +++ b/lib/gitlab/git/raw_diff_change.rb @@ -28,13 +28,14 @@ module Gitlab # 85bc2f9753afd5f4fc5d7c75f74f8d526f26b4f3 107 R060\tfiles/js/commit.js.coffee\tfiles/js/commit.coffee def parse(raw_change) @blob_id, @blob_size, @raw_operation, raw_paths = raw_change.split(' ', 4) + @blob_size = @blob_size.to_i @operation = extract_operation @old_path, @new_path = extract_paths(raw_paths) end def extract_paths(file_path) case operation - when :renamed + when :copied, :renamed file_path.split(/\t/) when :deleted [file_path, nil] diff --git a/lib/gitlab/git/repository.rb b/lib/gitlab/git/repository.rb index bc61834ff7d..5d47f8b2075 100644 --- a/lib/gitlab/git/repository.rb +++ b/lib/gitlab/git/repository.rb @@ -30,6 +30,7 @@ module Gitlab EMPTY_REPOSITORY_CHECKSUM = '0000000000000000000000000000000000000000'.freeze NoRepository = Class.new(StandardError) + InvalidRepository = Class.new(StandardError) InvalidBlobName = Class.new(StandardError) InvalidRef = Class.new(StandardError) GitError = Class.new(StandardError) @@ -578,29 +579,40 @@ module Gitlab count_commits(from: from, to: to, **options) end + # Counts the amount of commits between `from` and `to`. + def count_commits_between(from, to, options = {}) + count_commits(from: from, to: to, **options) + end + # old_rev and new_rev are commit ID's # the result of this method is an array of Gitlab::Git::RawDiffChange def raw_changes_between(old_rev, new_rev) - gitaly_migrate(:raw_changes_between) do |is_enabled| - if is_enabled - gitaly_repository_client.raw_changes_between(old_rev, new_rev) - .each_with_object([]) do |msg, arr| - msg.raw_changes.each { |change| arr << ::Gitlab::Git::RawDiffChange.new(change) } - end - else - result = [] + @raw_changes_between ||= {} + + @raw_changes_between[[old_rev, new_rev]] ||= begin + return [] if new_rev.blank? || new_rev == Gitlab::Git::BLANK_SHA - circuit_breaker.perform do - Open3.pipeline_r(git_diff_cmd(old_rev, new_rev), format_git_cat_file_script, git_cat_file_cmd) do |last_stdout, wait_threads| - last_stdout.each_line { |line| result << ::Gitlab::Git::RawDiffChange.new(line.chomp!) } + gitaly_migrate(:raw_changes_between) do |is_enabled| + if is_enabled + gitaly_repository_client.raw_changes_between(old_rev, new_rev) + .each_with_object([]) do |msg, arr| + msg.raw_changes.each { |change| arr << ::Gitlab::Git::RawDiffChange.new(change) } + end + else + result = [] - if wait_threads.any? { |waiter| !waiter.value&.success? } - raise ::Gitlab::Git::Repository::GitError, "Unabled to obtain changes between #{old_rev} and #{new_rev}" + circuit_breaker.perform do + Open3.pipeline_r(git_diff_cmd(old_rev, new_rev), format_git_cat_file_script, git_cat_file_cmd) do |last_stdout, wait_threads| + last_stdout.each_line { |line| result << ::Gitlab::Git::RawDiffChange.new(line.chomp!) } + + if wait_threads.any? { |waiter| !waiter.value&.success? } + raise ::Gitlab::Git::Repository::GitError, "Unabled to obtain changes between #{old_rev} and #{new_rev}" + end end end - end - result + result + end end end rescue ArgumentError => e @@ -1584,7 +1596,7 @@ module Gitlab def checksum gitaly_migrate(:calculate_checksum, - status: Gitlab::GitalyClient::MigrationStatus::OPT_OUT) do |is_enabled| + status: Gitlab::GitalyClient::MigrationStatus::OPT_OUT) do |is_enabled| if is_enabled gitaly_repository_client.calculate_checksum else @@ -2533,10 +2545,12 @@ module Gitlab output, status = run_git(args) if status.nil? || !status.zero? - # Empty repositories return with a non-zero status and an empty output. - return EMPTY_REPOSITORY_CHECKSUM if output&.empty? + # Non-valid git repositories return 128 as the status code and an error output + raise InvalidRepository if status == 128 && output.to_s.downcase =~ /not a git repository/ + # Empty repositories returns with a non-zero status and an empty output. + raise ChecksumError, output unless output.blank? - raise ChecksumError, output + return EMPTY_REPOSITORY_CHECKSUM end refs = output.split("\n") diff --git a/lib/gitlab/gitaly_client/repository_service.rb b/lib/gitlab/gitaly_client/repository_service.rb index 662b3d6cd0c..132a5947f17 100644 --- a/lib/gitlab/gitaly_client/repository_service.rb +++ b/lib/gitlab/gitaly_client/repository_service.rb @@ -292,6 +292,8 @@ module Gitlab request = Gitaly::CalculateChecksumRequest.new(repository: @gitaly_repo) response = GitalyClient.call(@storage, :repository_service, :calculate_checksum, request) response.checksum.presence + rescue GRPC::DataLoss => e + raise Gitlab::Git::Repository::InvalidRepository.new(e) end def raw_changes_between(from, to) diff --git a/lib/gitlab/metrics/prometheus.rb b/lib/gitlab/metrics/prometheus.rb index d12ba0ec176..d41a855bff1 100644 --- a/lib/gitlab/metrics/prometheus.rb +++ b/lib/gitlab/metrics/prometheus.rb @@ -25,6 +25,14 @@ module Gitlab end end + def reset_registry! + clear_memoization(:registry) + + REGISTRY_MUTEX.synchronize do + ::Prometheus::Client.reset! + end + end + def registry strong_memoize(:registry) do REGISTRY_MUTEX.synchronize do diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 728c3605131..20377dc81b2 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: gitlab 1.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-05-02 22:28+0200\n" -"PO-Revision-Date: 2018-05-02 22:28+0200\n" +"POT-Creation-Date: 2018-05-09 09:24+0200\n" +"PO-Revision-Date: 2018-05-09 09:24+0200\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: \n" @@ -104,6 +104,12 @@ msgstr "" msgid "+ %{moreCount} more" msgstr "" +msgid "- Runner is active and can process any new jobs" +msgstr "" + +msgid "- Runner is paused and will not receive any new jobs" +msgstr "" + msgid "- show less" msgstr "" @@ -156,6 +162,9 @@ msgstr "" msgid "<strong>Removes</strong> source branch" msgstr "" +msgid "A 'Runner' is a process which runs a job. You can setup as many Runners as you need." +msgstr "" + msgid "A collection of graphs regarding Continuous Integration" msgstr "" @@ -387,6 +396,9 @@ msgstr "" msgid "Artifacts" msgstr "" +msgid "Ask your group master to setup a group Runner." +msgstr "" + msgid "Assign custom color like #FF0000" msgstr "" @@ -474,6 +486,12 @@ msgstr "" msgid "Available" msgstr "" +msgid "Available group Runners : %{runners}" +msgstr "" + +msgid "Available group Runners : %{runners}." +msgstr "" + msgid "Avatar will be removed. Are you sure?" msgstr "" @@ -716,6 +734,9 @@ msgstr "" msgid "CI/CD configuration" msgstr "" +msgid "CI/CD settings" +msgstr "" + msgid "CICD|An explicit %{ci_file} needs to be specified before you can begin using Continuous Integration and Delivery." msgstr "" @@ -749,6 +770,9 @@ msgstr "" msgid "CICD|You need to specify a domain if you want to use Auto Review Apps and Auto Deploy stages." msgstr "" +msgid "Can run untagged jobs" +msgstr "" + msgid "Cancel" msgstr "" @@ -1652,6 +1676,15 @@ msgstr "" msgid "Directory name" msgstr "" +msgid "Disable" +msgstr "" + +msgid "Disable for this project" +msgstr "" + +msgid "Disable group Runners" +msgstr "" + msgid "Discard changes" msgstr "" @@ -1703,6 +1736,9 @@ msgstr "" msgid "Due date" msgstr "" +msgid "Each Runner can be in one of the following states:" +msgstr "" + msgid "Edit" msgstr "" @@ -1724,6 +1760,9 @@ msgstr "" msgid "Embed" msgstr "" +msgid "Enable" +msgstr "" + msgid "Enable Auto DevOps" msgstr "" @@ -1736,6 +1775,12 @@ msgstr "" msgid "Enable and configure Prometheus metrics." msgstr "" +msgid "Enable for this project" +msgstr "" + +msgid "Enable group Runners" +msgstr "" + msgid "Enable or disable version check and usage ping." msgstr "" @@ -1978,6 +2023,9 @@ msgstr "" msgid "GitLab CI Linter has been moved" msgstr "" +msgid "GitLab Group Runners can execute code for all the projects in this group." +msgstr "" + msgid "GitLab Runner section" msgstr "" @@ -2002,9 +2050,18 @@ msgstr "" msgid "Got it!" msgstr "" +msgid "Group CI/CD settings" +msgstr "" + msgid "Group ID" msgstr "" +msgid "Group Runners" +msgstr "" + +msgid "Group masters can register group runners in the %{link}" +msgstr "" + msgid "GroupSettings|Prevent sharing a project within %{group} with other groups" msgstr "" @@ -2315,9 +2372,18 @@ msgstr "" msgid "Lock %{issuableDisplayName}" msgstr "" +msgid "Lock to current projects" +msgstr "" + msgid "Locked" msgstr "" +msgid "Locked to current projects" +msgstr "" + +msgid "Locked to this project" +msgstr "" + msgid "Login" msgstr "" @@ -2348,6 +2414,9 @@ msgstr "" msgid "Maximum git storage failures" msgstr "" +msgid "Maximum job timeout" +msgstr "" + msgid "May" msgstr "" @@ -2491,6 +2560,9 @@ msgstr "" msgid "New tag" msgstr "" +msgid "No" +msgstr "" + msgid "No assignee" msgstr "" @@ -2680,6 +2752,9 @@ msgstr "" msgid "Password" msgstr "" +msgid "Pause" +msgstr "" + msgid "Pending" msgstr "" @@ -3145,6 +3220,9 @@ msgstr "" msgid "Register / Sign In" msgstr "" +msgid "Register and see your runners for this group." +msgstr "" + msgid "Related Commits" msgstr "" @@ -3169,6 +3247,12 @@ msgstr "" msgid "Remind later" msgstr "" +msgid "Remove" +msgstr "" + +msgid "Remove Runner" +msgstr "" + msgid "Remove avatar" msgstr "" @@ -3202,6 +3286,9 @@ msgstr "" msgid "Resolve discussion" msgstr "" +msgid "Resume" +msgstr "" + msgid "Retry" msgstr "" @@ -3234,6 +3321,15 @@ msgstr "" msgid "Runners" msgstr "" +msgid "Runners API" +msgstr "" + +msgid "Runners can be placed on separate users, servers, and even on your local machine." +msgstr "" + +msgid "Runners settings" +msgstr "" + msgid "Running" msgstr "" @@ -3360,6 +3456,9 @@ msgstr "" msgid "Share" msgstr "" +msgid "Shared Runners" +msgstr "" + msgid "Show command" msgstr "" @@ -3515,6 +3614,9 @@ msgstr "" msgid "Spam and Anti-bot Protection" msgstr "" +msgid "Specific Runners" +msgstr "" + msgid "Specify the following URL during the Runner setup:" msgstr "" @@ -3772,9 +3874,18 @@ msgstr "" msgid "There was an error when unsubscribing from this label." msgstr "" +msgid "They can be managed using the %{link}." +msgstr "" + +msgid "This GitLab instance does not provide any shared Runners yet. Instance administrators can register shared Runners in the admin area." +msgstr "" + msgid "This directory" msgstr "" +msgid "This group does not provide any group Runners yet." +msgstr "" + msgid "This is a confidential issue." msgstr "" @@ -3832,6 +3943,9 @@ msgstr "" msgid "This project" msgstr "" +msgid "This project does not belong to a group and can therefore not make use of group Runners." +msgstr "" + msgid "This repository" msgstr "" @@ -4016,6 +4130,9 @@ msgstr "" msgid "To import an SVN repository, check out %{svn_link}." msgstr "" +msgid "To start serving your jobs you can add Runners to your group" +msgstr "" + msgid "To validate your GitLab CI configurations, go to 'CI/CD → Pipelines' inside your project, and click on the 'CI Lint' button." msgstr "" @@ -4187,6 +4304,9 @@ msgstr "" msgid "Web terminal" msgstr "" +msgid "When a runner is locked, it cannot be assigned to other projects" +msgstr "" + msgid "When enabled, users cannot use GitLab until the terms have been accepted." msgstr "" @@ -4304,6 +4424,9 @@ msgstr "" msgid "Write a commit message..." msgstr "" +msgid "Yes" +msgstr "" + msgid "You are going to remove %{group_name}. Removed groups CANNOT be restored! Are you ABSOLUTELY sure?" msgstr "" @@ -4447,6 +4570,9 @@ msgstr "" msgid "estimateCommand|%{slash_command} will update the estimated time with the latest command." msgstr "" +msgid "for this project" +msgstr "" + msgid "importing" msgstr "" diff --git a/package.json b/package.json index 596b7d019c6..04103ab4957 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "worker-loader": "^1.1.1" }, "devDependencies": { - "axios-mock-adapter": "^1.10.0", + "axios-mock-adapter": "^1.15.0", "babel-eslint": "^8.0.2", "babel-plugin-istanbul": "^4.1.6", "babel-plugin-rewire": "^1.1.0", diff --git a/qa/qa/page/project/job/show.rb b/qa/qa/page/project/job/show.rb index 21bda74efb2..83bb224b5c3 100644 --- a/qa/qa/page/project/job/show.rb +++ b/qa/qa/page/project/job/show.rb @@ -1,18 +1,28 @@ module QA::Page module Project::Job class Show < QA::Page::Base + COMPLETED_STATUSES = %w[passed failed canceled blocked skipped manual].freeze # excludes created, pending, running + PASSED_STATUS = 'passed'.freeze + view 'app/views/projects/jobs/show.html.haml' do element :build_output, '.js-build-output' end - def output - css = '.js-build-output' + view 'app/assets/javascripts/vue_shared/components/ci_badge_link.vue' do + element :status_badge, 'ci-status' + end - wait(reload: false) do - has_css?(css) - end + def completed? + COMPLETED_STATUSES.include? find('.ci-status').text + end - find(css).text + def passed? + find('.ci-status').text == PASSED_STATUS + end + + # Reminder: You may wish to wait for a particular job status before checking output + def output + find('.js-build-output').text end end end diff --git a/qa/qa/specs/features/project/deploy_key_clone_spec.rb b/qa/qa/specs/features/project/deploy_key_clone_spec.rb index 98ea86bf75e..bf8fa230244 100644 --- a/qa/qa/specs/features/project/deploy_key_clone_spec.rb +++ b/qa/qa/specs/features/project/deploy_key_clone_spec.rb @@ -87,16 +87,12 @@ module QA Page::Project::Show.act { wait_for_push } Page::Menu::Side.act { click_ci_cd_pipelines } Page::Project::Pipeline::Index.act { go_to_latest_pipeline } - - Page::Project::Pipeline::Show.act do - go_to_first_job - - wait do - !has_content?('running') - end - end + Page::Project::Pipeline::Show.act { go_to_first_job } Page::Project::Job::Show.perform do |job| + job.wait(reload: false) { job.completed? } + + expect(job.passed?).to be_truthy, "Job status did not become \"passed\"." expect(job.output).to include(sha1sum) end end diff --git a/spec/factories/ci/runners.rb b/spec/factories/ci/runners.rb index 34b8b246d0f..cdc170b9ccb 100644 --- a/spec/factories/ci/runners.rb +++ b/spec/factories/ci/runners.rb @@ -6,6 +6,7 @@ FactoryBot.define do is_shared false active true access_level :not_protected + runner_type :project_type trait :online do contacted_at Time.now @@ -13,6 +14,7 @@ FactoryBot.define do trait :shared do is_shared true + runner_type :instance_type end trait :specific do diff --git a/spec/factories/merge_requests.rb b/spec/factories/merge_requests.rb index d26cb0c3417..fab0ec22450 100644 --- a/spec/factories/merge_requests.rb +++ b/spec/factories/merge_requests.rb @@ -41,6 +41,11 @@ FactoryBot.define do state :merged end + trait :merged_target do + source_branch "merged-target" + target_branch "improve/awesome" + end + trait :closed do state :closed end diff --git a/spec/features/issuables/markdown_references/internal_references_spec.rb b/spec/features/issuables/markdown_references/internal_references_spec.rb new file mode 100644 index 00000000000..8af4b157cd8 --- /dev/null +++ b/spec/features/issuables/markdown_references/internal_references_spec.rb @@ -0,0 +1,80 @@ +require "rails_helper" + +describe "Internal references", :js do + include Spec::Support::Helpers::Features::NotesHelpers + + let(:private_project_user) { private_project.owner } + let(:private_project) { create(:project, :private, :repository) } + let(:private_project_issue) { create(:issue, project: private_project) } + let(:private_project_merge_request) { create(:merge_request, source_project: private_project) } + let(:public_project_user) { public_project.owner } + let(:public_project) { create(:project, :public, :repository) } + let(:public_project_issue) { create(:issue, project: public_project) } + + context "when referencing to open issue" do + context "from private project" do + context "from issue" do + before do + sign_in(private_project_user) + + visit(project_issue_path(private_project, private_project_issue)) + + add_note("##{public_project_issue.to_reference(private_project)}") + end + + context "when user doesn't have access to private project" do + before do + sign_in(public_project_user) + + visit(project_issue_path(public_project, public_project_issue)) + end + + it { expect(page).not_to have_css(".note") } + end + end + + context "from merge request" do + before do + sign_in(private_project_user) + + visit(project_merge_request_path(private_project, private_project_merge_request)) + + add_note("##{public_project_issue.to_reference(private_project)}") + end + + context "when user doesn't have access to private project" do + before do + sign_in(public_project_user) + + visit(project_issue_path(public_project, public_project_issue)) + end + + it "doesn't show any references" do + page.within(".issue-details") do + expect(page).not_to have_content("#merge-requests .merge-requests-title") + end + end + end + + context "when user has access to private project" do + before do + visit(project_issue_path(public_project, public_project_issue)) + end + + it "shows references" do + page.within("#merge-requests .merge-requests-title") do + expect(page).to have_content("1 Related Merge Request") + end + + page.within("#merge-requests ul") do + expect(page).to have_content(private_project_merge_request.title) + end + + expect(page).to have_content("mentioned in merge request #{private_project_merge_request.to_reference(public_project)}") + .and have_content(private_project_user.name) + end + end + end + end + end +end diff --git a/spec/features/issuables/markdown_references/jira_spec.rb b/spec/features/issuables/markdown_references/jira_spec.rb new file mode 100644 index 00000000000..fa0ab88624e --- /dev/null +++ b/spec/features/issuables/markdown_references/jira_spec.rb @@ -0,0 +1,187 @@ +require "rails_helper" + +describe "Jira", :js do + let(:user) { create(:user) } + let(:actual_project) { create(:project, :public, :repository) } + let(:merge_request) { create(:merge_request, target_project: actual_project, source_project: actual_project) } + let(:issue_actual_project) { create(:issue, project: actual_project) } + let!(:other_project) { create(:project, :public) } + let!(:issue_other_project) { create(:issue, project: other_project) } + let(:issues) { [issue_actual_project, issue_other_project] } + + shared_examples "correct references" do + before do + remotelink = double(:remotelink, all: [], build: double(save!: true)) + + stub_request(:get, "https://jira.example.com/rest/api/2/issue/JIRA-5") + stub_request(:post, "https://jira.example.com/rest/api/2/issue/JIRA-5/comment") + allow_any_instance_of(JIRA::Resource::Issue).to receive(:remotelink).and_return(remotelink) + + sign_in(user) + + visit(merge_request_path(merge_request)) + + build_note + end + + it "creates a link to the referenced issue on the preview" do + find(".js-md-preview-button").click + + wait_for_requests + + page.within(".md-preview-holder") do + links_expectations + end + end + + it "creates a link to the referenced issue after submit" do + click_button("Comment") + + wait_for_requests + + page.within("#diff-notes-app") do + links_expectations + end + end + + it "creates a note on the referenced issues" do + click_button("Comment") + + wait_for_requests + + if referenced_issues.include?(issue_actual_project) + visit(issue_path(issue_actual_project)) + + page.within("#notes") do + expect(page).to have_content("#{user.to_reference} mentioned in merge request #{merge_request.to_reference}") + end + end + + if referenced_issues.include?(issue_other_project) + visit(issue_path(issue_other_project)) + + page.within("#notes") do + expect(page).to have_content("#{user.to_reference} mentioned in merge request #{merge_request.to_reference(other_project)}") + end + end + end + end + + context "when internal issues tracker is enabled for the other project" do + context "when only internal issues tracker is enabled for the actual project" do + include_examples "correct references" do + let(:referenced_issues) { [issue_actual_project, issue_other_project] } + let(:jira_referenced) { false } + end + end + + context "when both external and internal issues trackers are enabled for the actual project" do + before do + create(:jira_service, project: actual_project) + end + + include_examples "correct references" do + let(:referenced_issues) { [issue_actual_project, issue_other_project] } + let(:jira_referenced) { true } + end + end + + context "when only external issues tracker is enabled for the actual project" do + let(:actual_project) { create(:project, :public, :repository, :issues_disabled) } + + before do + create(:jira_service, project: actual_project) + end + + include_examples "correct references" do + let(:referenced_issues) { [issue_other_project] } + let(:jira_referenced) { true } + end + end + + context "when no tracker is enabled for the actual project" do + let(:actual_project) { create(:project, :public, :repository, :issues_disabled) } + + include_examples 'correct references' do + let(:referenced_issues) { [issue_other_project] } + let(:jira_referenced) { false } + end + end + end + + context "when internal issues tracker is disabled for the other project" do + let(:other_project) { create(:project, :public, :repository, :issues_disabled) } + + context "when only internal issues tracker is enabled for the actual project" do + include_examples "correct references" do + let(:referenced_issues) { [issue_actual_project] } + let(:jira_referenced) { false } + end + end + + context "when both external and internal issues trackers are enabled for the actual project" do + before do + create(:jira_service, project: actual_project) + end + + include_examples "correct references" do + let(:referenced_issues) { [issue_actual_project] } + let(:jira_referenced) { true } + end + end + + context "when only external issues tracker is enabled for the actual project" do + let(:actual_project) { create(:project, :public, :repository, :issues_disabled) } + + before do + create(:jira_service, project: actual_project) + end + + include_examples "correct references" do + let(:referenced_issues) { [] } + let(:jira_referenced) { true } + end + end + + context "when no issues tracker is enabled for the actual project" do + let(:actual_project) { create(:project, :public, :repository, :issues_disabled) } + + include_examples "correct references" do + let(:referenced_issues) { [] } + let(:jira_referenced) { false } + end + end + end + + private + + def build_note + markdown = <<~HEREDOC + Referencing internal issue #{issue_actual_project.to_reference}, + cross-project #{issue_other_project.to_reference(actual_project)} external JIRA-5 + and non existing #999 + HEREDOC + + page.within("#diff-notes-app") do + fill_in("note_note", with: markdown) + end + end + + def links_expectations + issues.each do |issue| + if referenced_issues.include?(issue) + expect(page).to have_link(issue.to_reference, href: issue_path(issue)) + else + expect(page).not_to have_link(issue.to_reference, href: issue_path(issue)) + end + end + + if jira_referenced + expect(page).to have_link("JIRA-5", href: "https://jira.example.com/browse/JIRA-5") + else + expect(page).not_to have_link("JIRA-5", href: "https://jira.example.com/browse/JIRA-5") + end + + expect(page).not_to have_link("#999") + end +end diff --git a/spec/features/issuables/markdown_references_spec.rb b/spec/features/issuables/markdown_references_spec.rb deleted file mode 100644 index dd4e10a9886..00000000000 --- a/spec/features/issuables/markdown_references_spec.rb +++ /dev/null @@ -1,193 +0,0 @@ -require 'rails_helper' - -describe 'Markdown References', :js do - let(:user) { create(:user) } - let(:actual_project) { create(:project, :public, :repository) } - let(:merge_request) { create(:merge_request, target_project: actual_project, source_project: actual_project)} - let(:issue_actual_project) { create(:issue, project: actual_project) } - let!(:other_project) { create(:project, :public) } - let!(:issue_other_project) { create(:issue, project: other_project) } - let(:issues) { [issue_actual_project, issue_other_project] } - - def build_note - markdown = "Referencing internal issue #{issue_actual_project.to_reference}, " + - "cross-project #{issue_other_project.to_reference(actual_project)} external JIRA-5 " + - "and non existing #999" - - page.within('#diff-notes-app') do - fill_in 'note_note', with: markdown - end - end - - shared_examples 'correct references' do - before do - remotelink = double(:remotelink, all: [], build: double(save!: true)) - - stub_request(:get, "https://jira.example.com/rest/api/2/issue/JIRA-5") - stub_request(:post, "https://jira.example.com/rest/api/2/issue/JIRA-5/comment") - allow_any_instance_of(JIRA::Resource::Issue).to receive(:remotelink).and_return(remotelink) - - sign_in(user) - visit merge_request_path(merge_request) - build_note - end - - def links_expectations - issues.each do |issue| - if referenced_issues.include?(issue) - expect(page).to have_link(issue.to_reference, href: issue_path(issue)) - else - expect(page).not_to have_link(issue.to_reference, href: issue_path(issue)) - end - end - - if jira_referenced - expect(page).to have_link('JIRA-5', href: 'https://jira.example.com/browse/JIRA-5') - else - expect(page).not_to have_link('JIRA-5', href: 'https://jira.example.com/browse/JIRA-5') - end - - expect(page).not_to have_link('#999') - end - - it 'creates a link to the referenced issue on the preview' do - find('.js-md-preview-button').click - wait_for_requests - - page.within('.md-preview-holder') do - links_expectations - end - end - - it 'creates a link to the referenced issue after submit' do - click_button 'Comment' - wait_for_requests - - page.within('#diff-notes-app') do - links_expectations - end - end - - it 'creates a note on the referenced issues' do - click_button 'Comment' - wait_for_requests - - if referenced_issues.include?(issue_actual_project) - visit issue_path(issue_actual_project) - - page.within('#notes') do - expect(page).to have_content( - "#{user.to_reference} mentioned in merge request #{merge_request.to_reference}" - ) - end - end - - if referenced_issues.include?(issue_other_project) - visit issue_path(issue_other_project) - - page.within('#notes') do - expect(page).to have_content( - "#{user.to_reference} mentioned in merge request #{merge_request.to_reference(other_project)}" - ) - end - end - end - end - - context 'when internal issues tracker is enabled for the other project' do - context 'when only internal issues tracker is enabled for the actual project' do - include_examples 'correct references' do - let(:referenced_issues) { [issue_actual_project, issue_other_project] } - let(:jira_referenced) { false } - end - end - - context 'when both external and internal issues trackers are enabled for the actual project' do - before do - create(:jira_service, project: actual_project) - end - - include_examples 'correct references' do - let(:referenced_issues) { [issue_actual_project, issue_other_project] } - let(:jira_referenced) { true } - end - end - - context 'when only external issues tracker is enabled for the actual project' do - before do - create(:jira_service, project: actual_project) - - actual_project.issues_enabled = false - actual_project.save! - end - - include_examples 'correct references' do - let(:referenced_issues) { [issue_other_project] } - let(:jira_referenced) { true } - end - end - - context 'when no tracker is enabled for the actual project' do - before do - actual_project.issues_enabled = false - actual_project.save! - end - - include_examples 'correct references' do - let(:referenced_issues) { [issue_other_project] } - let(:jira_referenced) { false } - end - end - end - - context 'when internal issues tracker is disabled for the other project' do - before do - other_project.issues_enabled = false - other_project.save! - end - - context 'when only internal issues tracker is enabled for the actual project' do - include_examples 'correct references' do - let(:referenced_issues) { [issue_actual_project] } - let(:jira_referenced) { false } - end - end - - context 'when both external and internal issues trackers are enabled for the actual project' do - before do - create(:jira_service, project: actual_project) - end - - include_examples 'correct references' do - let(:referenced_issues) { [issue_actual_project] } - let(:jira_referenced) { true } - end - end - - context 'when only external issues tracker is enabled for the actual project' do - before do - create(:jira_service, project: actual_project) - - actual_project.issues_enabled = false - actual_project.save! - end - - include_examples 'correct references' do - let(:referenced_issues) { [] } - let(:jira_referenced) { true } - end - end - - context 'when no issues tracker is enabled for the actual project' do - before do - actual_project.issues_enabled = false - actual_project.save! - end - - include_examples 'correct references' do - let(:referenced_issues) { [] } - let(:jira_referenced) { false } - end - end - end -end diff --git a/spec/features/projects/merge_requests/user_merges_merge_request_spec.rb b/spec/features/projects/merge_requests/user_merges_merge_request_spec.rb new file mode 100644 index 00000000000..6539e6e9208 --- /dev/null +++ b/spec/features/projects/merge_requests/user_merges_merge_request_spec.rb @@ -0,0 +1,43 @@ +require "spec_helper" + +describe "User merges a merge request", :js do + let(:user) { project.owner } + + before do + sign_in(user) + end + + shared_examples "fast forward merge a merge request" do + it "merges a merge request" do + expect(page).to have_content("Fast-forward merge without a merge commit").and have_button("Merge") + + page.within(".mr-state-widget") do + click_button("Merge") + end + + page.within(".status-box") do + expect(page).to have_content("Merged") + end + end + end + + context "ff-only merge" do + let(:project) { create(:project, :public, :repository, merge_requests_ff_only_enabled: true) } + + before do + visit(merge_request_path(merge_request)) + end + + context "when branch is rebased" do + let!(:merge_request) { create(:merge_request, :rebased, source_project: project) } + + it_behaves_like "fast forward merge a merge request" + end + + context "when branch is merged" do + let!(:merge_request) { create(:merge_request, :merged_target, source_project: project) } + + it_behaves_like "fast forward merge a merge request" + end + end +end diff --git a/spec/features/projects/merge_requests/user_rebases_merge_request_spec.rb b/spec/features/projects/merge_requests/user_rebases_merge_request_spec.rb new file mode 100644 index 00000000000..92e1c9942b1 --- /dev/null +++ b/spec/features/projects/merge_requests/user_rebases_merge_request_spec.rb @@ -0,0 +1,34 @@ +require "spec_helper" + +describe "User rebases a merge request", :js do + let(:merge_request) { create(:merge_request, :simple, source_project: project) } + let(:user) { project.owner } + + before do + sign_in(user) + end + + shared_examples "rebases" do + it "rebases" do + visit(merge_request_path(merge_request)) + + expect(page).to have_button("Rebase") + + click_button("Rebase") + + expect(page).to have_content("Rebase in progress") + end + end + + context "when merge is regular" do + let(:project) { create(:project, :public, :repository, merge_requests_rebase_enabled: true) } + + it_behaves_like "rebases" + end + + context "when merge is ff-only" do + let(:project) { create(:project, :public, :repository, merge_requests_ff_only_enabled: true) } + + it_behaves_like "rebases" + end +end diff --git a/spec/features/projects/settings/user_interacts_with_deploy_keys_spec.rb b/spec/features/projects/settings/user_interacts_with_deploy_keys_spec.rb new file mode 100644 index 00000000000..71a077039b7 --- /dev/null +++ b/spec/features/projects/settings/user_interacts_with_deploy_keys_spec.rb @@ -0,0 +1,125 @@ +require "spec_helper" + +describe "User interacts with deploy keys", :js do + let(:project) { create(:project, :repository) } + let(:user) { project.owner } + + before do + sign_in(user) + end + + shared_examples "attaches a key" do + it "attaches key" do + visit(project_deploy_keys_path(project)) + + page.within(".deploy-keys") do + find(".badge", text: "1").click + + click_button("Enable") + + expect(page).not_to have_selector(".fa-spinner") + expect(current_path).to eq(project_settings_repository_path(project)) + + find(".js-deployKeys-tab-enabled_keys").click + + expect(page).to have_content(deploy_key.title) + end + end + end + + context "viewing deploy keys" do + let(:deploy_key) { create(:deploy_key) } + + context "when project has keys" do + before do + create(:deploy_keys_project, project: project, deploy_key: deploy_key) + end + + it "shows deploy keys" do + visit(project_deploy_keys_path(project)) + + page.within(".deploy-keys") do + expect(page).to have_content(deploy_key.title) + end + end + end + + context "when another project has keys" do + let(:another_project) { create(:project) } + + before do + create(:deploy_keys_project, project: another_project, deploy_key: deploy_key) + + another_project.add_master(user) + end + + it "shows deploy keys" do + visit(project_deploy_keys_path(project)) + + page.within(".deploy-keys") do + find('.js-deployKeys-tab-available_project_keys').click + + expect(page).to have_content(deploy_key.title) + expect(find(".js-deployKeys-tab-available_project_keys .badge")).to have_content("1") + end + end + end + + context "when there are public deploy keys" do + let!(:deploy_key) { create(:deploy_key, public: true) } + + it "shows public deploy keys" do + visit(project_deploy_keys_path(project)) + + page.within(".deploy-keys") do + find(".js-deployKeys-tab-public_keys").click + + expect(page).to have_content(deploy_key.title) + end + end + end + end + + context "adding deploy keys" do + before do + visit(project_deploy_keys_path(project)) + end + + it "adds new key" do + DEPLOY_KEY_TITLE = attributes_for(:key)[:title] + DEPLOY_KEY_BODY = attributes_for(:key)[:key] + + fill_in("deploy_key_title", with: DEPLOY_KEY_TITLE) + fill_in("deploy_key_key", with: DEPLOY_KEY_BODY) + + click_button("Add key") + + expect(current_path).to eq(project_settings_repository_path(project)) + + page.within(".deploy-keys") do + expect(page).to have_content(DEPLOY_KEY_TITLE) + end + end + end + + context "attaching existing keys" do + context "from another project" do + let(:another_project) { create(:project) } + let(:deploy_key) { create(:deploy_key) } + + before do + create(:deploy_keys_project, project: another_project, deploy_key: deploy_key) + + another_project.add_master(user) + end + + it_behaves_like "attaches a key" + end + + context "when keys are public" do + let!(:deploy_key) { create(:deploy_key, public: true) } + + it_behaves_like "attaches a key" + end + end +end diff --git a/spec/helpers/projects_helper_spec.rb b/spec/helpers/projects_helper_spec.rb index 8fcb175416f..f8877b6d1aa 100644 --- a/spec/helpers/projects_helper_spec.rb +++ b/spec/helpers/projects_helper_spec.rb @@ -283,7 +283,7 @@ describe ProjectsHelper do end it 'removes the repo path' do - repo = "#{storage_path}/namespace/test.git" + repo = File.join(storage_path, 'namespace/test.git') import_error = "Could not clone #{repo}\n" expect(sanitize_repo_path(project, import_error)).to eq('Could not clone [REPOS PATH]/namespace/test.git') diff --git a/spec/javascripts/deploy_keys/components/app_spec.js b/spec/javascripts/deploy_keys/components/app_spec.js index 3f9e25a8862..183d7cf2d41 100644 --- a/spec/javascripts/deploy_keys/components/app_spec.js +++ b/spec/javascripts/deploy_keys/components/app_spec.js @@ -1,28 +1,25 @@ -import _ from 'underscore'; import Vue from 'vue'; +import MockAdapter from 'axios-mock-adapter'; +import axios from '~/lib/utils/axios_utils'; import eventHub from '~/deploy_keys/eventhub'; import deployKeysApp from '~/deploy_keys/components/app.vue'; +import { TEST_HOST } from 'spec/test_constants'; describe('Deploy keys app component', () => { const data = getJSONFixture('deploy_keys/keys.json'); let vm; + let mock; - const deployKeysResponse = (request, next) => { - next( - request.respondWith(JSON.stringify(data), { - status: 200, - }), - ); - }; + beforeEach((done) => { + // setup axios mock before component + mock = new MockAdapter(axios); + mock.onGet(`${TEST_HOST}/dummy/`).replyOnce(200, data); - beforeEach(done => { const Component = Vue.extend(deployKeysApp); - Vue.http.interceptors.push(deployKeysResponse); - vm = new Component({ propsData: { - endpoint: '/test', + endpoint: `${TEST_HOST}/dummy`, projectId: '8', }, }).$mount(); @@ -31,7 +28,7 @@ describe('Deploy keys app component', () => { }); afterEach(() => { - Vue.http.interceptors = _.without(Vue.http.interceptors, deployKeysResponse); + mock.restore(); }); it('renders loading icon', done => { diff --git a/spec/javascripts/ide/components/commit_sidebar/actions_spec.js b/spec/javascripts/ide/components/commit_sidebar/actions_spec.js index 144e78d14b5..27f10caccb1 100644 --- a/spec/javascripts/ide/components/commit_sidebar/actions_spec.js +++ b/spec/javascripts/ide/components/commit_sidebar/actions_spec.js @@ -3,6 +3,7 @@ import store from '~/ide/stores'; import commitActions from '~/ide/components/commit_sidebar/actions.vue'; import { createComponentWithStore } from 'spec/helpers/vue_mount_component_helper'; import { resetStore } from 'spec/ide/helpers'; +import { projectData } from 'spec/ide/mock_data'; describe('IDE commit sidebar actions', () => { let vm; @@ -13,6 +14,8 @@ describe('IDE commit sidebar actions', () => { vm = createComponentWithStore(Component, store); vm.$store.state.currentBranchId = 'master'; + vm.$store.state.currentProjectId = 'abcproject'; + Vue.set(vm.$store.state.projects, 'abcproject', { ...projectData }); vm.$mount(); @@ -32,4 +35,15 @@ describe('IDE commit sidebar actions', () => { it('renders current branch text', () => { expect(vm.$el.textContent).toContain('Commit to master branch'); }); + + it('hides merge request option when project merge requests are disabled', done => { + vm.$store.state.projects.abcproject.merge_requests_enabled = false; + + vm.$nextTick(() => { + expect(vm.$el.querySelectorAll('input[type="radio"]').length).toBe(2); + expect(vm.$el.textContent).not.toContain('Create a new branch and merge request'); + + done(); + }); + }); }); diff --git a/spec/javascripts/ide/components/commit_sidebar/form_spec.js b/spec/javascripts/ide/components/commit_sidebar/form_spec.js index ce7c134bc97..8b47a365582 100644 --- a/spec/javascripts/ide/components/commit_sidebar/form_spec.js +++ b/spec/javascripts/ide/components/commit_sidebar/form_spec.js @@ -4,6 +4,7 @@ import CommitForm from '~/ide/components/commit_sidebar/form.vue'; import { activityBarViews } from '~/ide/constants'; import { createComponentWithStore } from 'spec/helpers/vue_mount_component_helper'; import getSetTimeoutPromise from 'spec/helpers/set_timeout_promise_helper'; +import { projectData } from 'spec/ide/mock_data'; import { resetStore } from '../../helpers'; describe('IDE commit form', () => { @@ -14,6 +15,8 @@ describe('IDE commit form', () => { spyOnProperty(window, 'innerHeight').and.returnValue(800); store.state.changedFiles.push('test'); + store.state.currentProjectId = 'abcproject'; + Vue.set(store.state.projects, 'abcproject', { ...projectData }); vm = createComponentWithStore(Component, store).$mount(); }); diff --git a/spec/javascripts/ide/lib/common/model_spec.js b/spec/javascripts/ide/lib/common/model_spec.js index 7a6c22b6d27..c278bf92b08 100644 --- a/spec/javascripts/ide/lib/common/model_spec.js +++ b/spec/javascripts/ide/lib/common/model_spec.js @@ -28,6 +28,10 @@ describe('Multi-file editor library model', () => { expect(model.originalModel).not.toBeNull(); expect(model.model).not.toBeNull(); expect(model.baseModel).not.toBeNull(); + + expect(model.originalModel.uri.path).toBe('original/path--path'); + expect(model.model.uri.path).toBe('path--path'); + expect(model.baseModel.uri.path).toBe('target/path--path'); }); it('creates model with head file to compare against', () => { diff --git a/spec/javascripts/ide/mock_data.js b/spec/javascripts/ide/mock_data.js index 3c6d75ab5e4..c059862b9d1 100644 --- a/spec/javascripts/ide/mock_data.js +++ b/spec/javascripts/ide/mock_data.js @@ -12,4 +12,5 @@ export const projectData = { }, }, mergeRequests: {}, + merge_requests_enabled: true, }; diff --git a/spec/javascripts/ide/stores/actions/file_spec.js b/spec/javascripts/ide/stores/actions/file_spec.js index 3ef5a859001..7bebc2288e3 100644 --- a/spec/javascripts/ide/stores/actions/file_spec.js +++ b/spec/javascripts/ide/stores/actions/file_spec.js @@ -569,6 +569,22 @@ describe('IDE store file actions', () => { .catch(done.fail); }); + it('returns false when already opened', done => { + store.state.openFiles.push({ + ...f, + active: true, + key: `pending-${f.key}`, + }); + + store + .dispatch('openPendingTab', { file: f, keyPrefix: 'pending' }) + .then(added => { + expect(added).toBe(false); + }) + .then(done) + .catch(done.fail); + }); + it('pushes router URL when added', done => { store.state.currentBranchId = 'master'; diff --git a/spec/lib/gitlab/git/blob_spec.rb b/spec/lib/gitlab/git/blob_spec.rb index 67d898e787e..e2547ed0311 100644 --- a/spec/lib/gitlab/git/blob_spec.rb +++ b/spec/lib/gitlab/git/blob_spec.rb @@ -251,6 +251,26 @@ describe Gitlab::Git::Blob, seed_helper: true do end end + describe '.batch_metadata' do + let(:blob_references) do + [ + [SeedRepo::Commit::ID, "files/ruby/popen.rb"], + [SeedRepo::Commit::ID, 'six'] + ] + end + + subject { described_class.batch_metadata(repository, blob_references) } + + it 'returns an empty data attribute' do + first_blob, last_blob = subject + + expect(first_blob.data).to be_blank + expect(first_blob.path).to eq("files/ruby/popen.rb") + expect(last_blob.data).to be_blank + expect(last_blob.path).to eq("six") + end + end + describe '.batch_lfs_pointers' do let(:tree_object) { repository.rugged.rev_parse('master^{tree}') } diff --git a/spec/lib/gitlab/git/raw_diff_change_spec.rb b/spec/lib/gitlab/git/raw_diff_change_spec.rb index eedde34534f..a0bb37fd84a 100644 --- a/spec/lib/gitlab/git/raw_diff_change_spec.rb +++ b/spec/lib/gitlab/git/raw_diff_change_spec.rb @@ -12,7 +12,7 @@ describe Gitlab::Git::RawDiffChange do expect(change.operation).to eq(:unknown) expect(change.old_path).to be_blank expect(change.new_path).to be_blank - expect(change.blob_size).to be_blank + expect(change.blob_size).to eq(0) end end diff --git a/spec/lib/gitlab/git/repository_spec.rb b/spec/lib/gitlab/git/repository_spec.rb index 9f091975959..cce84276fe3 100644 --- a/spec/lib/gitlab/git/repository_spec.rb +++ b/spec/lib/gitlab/git/repository_spec.rb @@ -2275,7 +2275,22 @@ describe Gitlab::Git::Repository, seed_helper: true do expect(empty_repo.checksum).to eq '0000000000000000000000000000000000000000' end - it 'raises a no repository exception when there is no repo' do + it 'raises Gitlab::Git::Repository::InvalidRepository error for non-valid git repo' do + FileUtils.rm_rf(File.join(storage_path, 'non-valid.git')) + + system(git_env, *%W(#{Gitlab.config.git.bin_path} clone --bare #{TEST_REPO_PATH} non-valid.git), + chdir: SEED_STORAGE_PATH, + out: '/dev/null', + err: '/dev/null') + + File.truncate(File.join(storage_path, 'non-valid.git/HEAD'), 0) + + non_valid = described_class.new('default', 'non-valid.git', '') + + expect { non_valid.checksum }.to raise_error(Gitlab::Git::Repository::InvalidRepository) + end + + it 'raises Gitlab::Git::Repository::NoRepository error when there is no repo' do broken_repo = described_class.new('default', 'a/path.git', '') expect { broken_repo.checksum }.to raise_error(Gitlab::Git::Repository::NoRepository) diff --git a/spec/lib/gitlab/metrics/prometheus_spec.rb b/spec/lib/gitlab/metrics/prometheus_spec.rb new file mode 100644 index 00000000000..3d4dd5fdf01 --- /dev/null +++ b/spec/lib/gitlab/metrics/prometheus_spec.rb @@ -0,0 +1,18 @@ +require 'spec_helper' + +describe Gitlab::Metrics::Prometheus, :prometheus do + let(:all_metrics) { Gitlab::Metrics } + let(:registry) { all_metrics.registry } + + describe '#reset_registry!' do + it 'clears existing metrics' do + registry.counter(:test, 'test metric') + + expect(registry.metrics.count).to eq(1) + + all_metrics.reset_registry! + + expect(all_metrics.registry.metrics.count).to eq(0) + end + end +end diff --git a/spec/migrations/add_not_null_constraint_to_project_mirror_data_foreign_key_spec.rb b/spec/migrations/add_not_null_constraint_to_project_mirror_data_foreign_key_spec.rb new file mode 100644 index 00000000000..6fd3cb1f44e --- /dev/null +++ b/spec/migrations/add_not_null_constraint_to_project_mirror_data_foreign_key_spec.rb @@ -0,0 +1,18 @@ +require 'spec_helper' +require Rails.root.join('db', 'migrate', '20180508100222_add_not_null_constraint_to_project_mirror_data_foreign_key.rb') + +describe AddNotNullConstraintToProjectMirrorDataForeignKey, :migration do + let(:namespaces) { table(:namespaces) } + let(:projects) { table(:projects) } + let(:import_state) { table(:project_mirror_data) } + + before do + import_state.create!(id: 1, project_id: nil, status: :started) + end + + it 'removes every import state without an associated project_id' do + expect do + subject.up + end.to change { import_state.count }.from(1).to(0) + end +end diff --git a/spec/migrations/add_pipeline_build_foreign_key_spec.rb b/spec/migrations/add_pipeline_build_foreign_key_spec.rb new file mode 100644 index 00000000000..e9413f52f19 --- /dev/null +++ b/spec/migrations/add_pipeline_build_foreign_key_spec.rb @@ -0,0 +1,32 @@ +require 'spec_helper' +require Rails.root.join('db', 'migrate', '20180420010016_add_pipeline_build_foreign_key.rb') + +describe AddPipelineBuildForeignKey, :migration do + let(:namespaces) { table(:namespaces) } + let(:projects) { table(:projects) } + let(:pipelines) { table(:ci_pipelines) } + let(:builds) { table(:ci_builds) } + + before do + namespaces.create(id: 10, name: 'gitlab-org', path: 'gitlab-org') + projects.create!(id: 11, namespace_id: 10, name: 'gitlab', path: 'gitlab') + pipelines.create!(id: 12, project_id: 11, ref: 'master', sha: 'adf43c3a') + + builds.create!(id: 101, commit_id: 12, project_id: 11) + builds.create!(id: 102, commit_id: 222, project_id: 11) + builds.create!(id: 103, commit_id: 333, project_id: 11) + builds.create!(id: 104, commit_id: 12, project_id: 11) + builds.create!(id: 106, commit_id: nil, project_id: 11) + builds.create!(id: 107, commit_id: 12, project_id: nil) + end + + it 'adds foreign key after removing orphans' do + expect(builds.all.count).to eq 6 + expect(foreign_key_exists?(:ci_builds, :ci_pipelines, column: :commit_id)).to be_falsey + + migrate! + + expect(builds.all.pluck(:id)).to eq [101, 104] + expect(foreign_key_exists?(:ci_builds, :ci_pipelines, column: :commit_id)).to be_truthy + end +end diff --git a/spec/models/ci/runner_spec.rb b/spec/models/ci/runner_spec.rb index cc4d4e5e4ae..eb59ba7cbe9 100644 --- a/spec/models/ci/runner_spec.rb +++ b/spec/models/ci/runner_spec.rb @@ -3,6 +3,7 @@ require 'spec_helper' describe Ci::Runner do describe 'validation' do it { is_expected.to validate_presence_of(:access_level) } + it { is_expected.to validate_presence_of(:runner_type) } context 'when runner is not allowed to pick untagged jobs' do context 'when runner does not have tags' do @@ -198,7 +199,7 @@ describe Ci::Runner do end describe '#assign_to' do - let!(:project) { FactoryBot.create :project } + let!(:project) { FactoryBot.create(:project) } let!(:shared_runner) { FactoryBot.create(:ci_runner, :shared) } before do diff --git a/spec/models/clusters/applications/runner_spec.rb b/spec/models/clusters/applications/runner_spec.rb index 64d995a73c1..5f2c723d483 100644 --- a/spec/models/clusters/applications/runner_spec.rb +++ b/spec/models/clusters/applications/runner_spec.rb @@ -74,9 +74,8 @@ describe Clusters::Applications::Runner do it 'assigns the new runner to runner' do subject - gitlab_runner.reload - expect(gitlab_runner.runner).not_to be_nil + expect(gitlab_runner.reload.runner).to be_project_type end end diff --git a/spec/models/concerns/issuable_spec.rb b/spec/models/concerns/issuable_spec.rb index 05693f067e1..3d3092b8ac9 100644 --- a/spec/models/concerns/issuable_spec.rb +++ b/spec/models/concerns/issuable_spec.rb @@ -495,6 +495,14 @@ describe Issuable do expect(issue.total_time_spent).to eq(1800) end + + it 'updates issues updated_at' do + issue + + Timecop.travel(1.minute.from_now) do + expect { spend_time(1800) }.to change { issue.updated_at } + end + end end context 'substracting time' do @@ -510,9 +518,13 @@ describe Issuable do context 'when time to substract exceeds the total time spent' do it 'raise a validation error' do - expect do - spend_time(-3600) - end.to raise_error(ActiveRecord::RecordInvalid) + Timecop.travel(1.minute.from_now) do + expect do + expect do + spend_time(-3600) + end.to raise_error(ActiveRecord::RecordInvalid) + end.not_to change { issue.updated_at } + end end end end diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index a6e835e563d..5b452f17979 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -309,12 +309,12 @@ describe Project do describe 'project token' do it 'sets an random token if none provided' do - project = FactoryBot.create :project, runners_token: '' + project = FactoryBot.create(:project, runners_token: '') expect(project.runners_token).not_to eq('') end it 'does not set an random token if one provided' do - project = FactoryBot.create :project, runners_token: 'my-token' + project = FactoryBot.create(:project, runners_token: 'my-token') expect(project.runners_token).to eq('my-token') end end @@ -639,7 +639,7 @@ describe Project do describe '#to_param' do context 'with namespace' do before do - @group = create :group, name: 'gitlab' + @group = create(:group, name: 'gitlab') @project = create(:project, name: 'gitlabhq', namespace: @group) end @@ -866,8 +866,8 @@ describe Project do describe '#star_count' do it 'counts stars from multiple users' do - user1 = create :user - user2 = create :user + user1 = create(:user) + user2 = create(:user) project = create(:project, :public) expect(project.star_count).to eq(0) @@ -889,7 +889,7 @@ describe Project do end it 'counts stars on the right project' do - user = create :user + user = create(:user) project1 = create(:project, :public) project2 = create(:project, :public) @@ -1148,9 +1148,9 @@ describe Project do describe '#any_runners?' do context 'shared runners' do - let(:project) { create :project, shared_runners_enabled: shared_runners_enabled } - let(:specific_runner) { create :ci_runner } - let(:shared_runner) { create :ci_runner, :shared } + let(:project) { create(:project, shared_runners_enabled: shared_runners_enabled) } + let(:specific_runner) { create(:ci_runner) } + let(:shared_runner) { create(:ci_runner, :shared) } context 'for shared runners disabled' do let(:shared_runners_enabled) { false } @@ -1208,9 +1208,9 @@ describe Project do end context 'group runners' do - let(:project) { create :project, group_runners_enabled: group_runners_enabled } - let(:group) { create :group, projects: [project] } - let(:group_runner) { create :ci_runner, groups: [group] } + let(:project) { create(:project, group_runners_enabled: group_runners_enabled) } + let(:group) { create(:group, projects: [project]) } + let(:group_runner) { create(:ci_runner, groups: [group]) } context 'for group runners disabled' do let(:group_runners_enabled) { false } @@ -1292,7 +1292,7 @@ describe Project do end describe '#pages_deployed?' do - let(:project) { create :project } + let(:project) { create(:project) } subject { project.pages_deployed? } @@ -1310,8 +1310,8 @@ describe Project do end describe '#pages_url' do - let(:group) { create :group, name: group_name } - let(:project) { create :project, namespace: group, name: project_name } + let(:group) { create(:group, name: group_name) } + let(:project) { create(:project, namespace: group, name: project_name) } let(:domain) { 'Example.com' } subject { project.pages_url } @@ -1337,8 +1337,8 @@ describe Project do end describe '#pages_group_url' do - let(:group) { create :group, name: group_name } - let(:project) { create :project, namespace: group, name: project_name } + let(:group) { create(:group, name: group_name) } + let(:project) { create(:project, namespace: group, name: project_name) } let(:domain) { 'Example.com' } let(:port) { 1234 } @@ -1455,8 +1455,8 @@ describe Project do let(:private_group) { create(:group, visibility_level: 0) } let(:internal_group) { create(:group, visibility_level: 10) } - let(:private_project) { create :project, :private, group: private_group } - let(:internal_project) { create :project, :internal, group: internal_group } + let(:private_project) { create(:project, :private, group: private_group) } + let(:internal_project) { create(:project, :internal, group: internal_group) } context 'when group is private project can not be internal' do it { expect(private_project.visibility_level_allowed?(Gitlab::VisibilityLevel::INTERNAL)).to be_falsey } @@ -2450,8 +2450,8 @@ describe Project do end describe '#pages_url' do - let(:group) { create :group, name: 'Group' } - let(:nested_group) { create :group, parent: group } + let(:group) { create(:group, name: 'Group') } + let(:nested_group) { create(:group, parent: group) } let(:domain) { 'Example.com' } subject { project.pages_url } @@ -2462,7 +2462,7 @@ describe Project do end context 'top-level group' do - let(:project) { create :project, namespace: group, name: project_name } + let(:project) { create(:project, namespace: group, name: project_name) } context 'group page' do let(:project_name) { 'group.example.com' } @@ -2478,7 +2478,7 @@ describe Project do end context 'nested group' do - let(:project) { create :project, namespace: nested_group, name: project_name } + let(:project) { create(:project, namespace: nested_group, name: project_name) } let(:expected_url) { "http://group.example.com/#{nested_group.path}/#{project.path}" } context 'group page' do @@ -2496,7 +2496,7 @@ describe Project do end describe '#http_url_to_repo' do - let(:project) { create :project } + let(:project) { create(:project) } it 'returns the url to the repo without a username' do expect(project.http_url_to_repo).to eq("#{project.web_url}.git") diff --git a/spec/models/project_wiki_spec.rb b/spec/models/project_wiki_spec.rb index d6c4031329d..f1142832f1a 100644 --- a/spec/models/project_wiki_spec.rb +++ b/spec/models/project_wiki_spec.rb @@ -159,6 +159,17 @@ describe ProjectWiki do expect(page.title).to eq("autre pagé") end end + + context 'pages with invalidly-encoded content' do + before do + create_page("encoding is fun", "f\xFCr".b) + end + + it "can find the page" do + page = subject.find_page("encoding is fun") + expect(page.content).to eq("fr") + end + end end context 'when Gitaly wiki_find_page is enabled' do diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index 4b736b02b7d..a7755a505d8 100644 --- a/spec/models/repository_spec.rb +++ b/spec/models/repository_spec.rb @@ -1733,7 +1733,8 @@ describe Repository do :gitlab_ci, :avatar, :issue_template, - :merge_request_template + :merge_request_template, + :xcode_config ]) repository.after_change_head @@ -2058,6 +2059,36 @@ describe Repository do end end + describe '#xcode_project?' do + before do + allow(repository).to receive(:tree).with(:head).and_return(double(:tree, blobs: [blob])) + end + + context 'when the root contains a *.xcodeproj file' do + let(:blob) { double(:blob, path: 'Foo.xcodeproj') } + + it 'returns true' do + expect(repository.xcode_project?).to be_truthy + end + end + + context 'when the root contains a *.xcworkspace file' do + let(:blob) { double(:blob, path: 'Foo.xcworkspace') } + + it 'returns true' do + expect(repository.xcode_project?).to be_truthy + end + end + + context 'when the root contains no XCode config file' do + let(:blob) { double(:blob, path: 'subdir/Foo.xcworkspace') } + + it 'returns false' do + expect(repository.xcode_project?).to be_falsey + end + end + end + describe "#keep_around" do it "does not fail if we attempt to reference bad commit" do expect(repository.kept_around?('abc1234')).to be_falsey diff --git a/spec/requests/api/runner_spec.rb b/spec/requests/api/runner_spec.rb index 082605827b7..da392c5ab81 100644 --- a/spec/requests/api/runner_spec.rb +++ b/spec/requests/api/runner_spec.rb @@ -41,6 +41,7 @@ describe API::Runner, :clean_gitlab_redis_shared_state do expect(json_response['id']).to eq(runner.id) expect(json_response['token']).to eq(runner.token) expect(runner.run_untagged).to be true + expect(runner.active).to be true expect(runner.token).not_to eq(registration_token) expect(runner).to be_instance_type end @@ -129,6 +130,28 @@ describe API::Runner, :clean_gitlab_redis_shared_state do end end + context 'when option for activating a Runner is provided' do + context 'when active is set to true' do + it 'creates runner' do + post api('/runners'), token: registration_token, + active: true + + expect(response).to have_gitlab_http_status 201 + expect(Ci::Runner.first.active).to be true + end + end + + context 'when active is set to false' do + it 'creates runner' do + post api('/runners'), token: registration_token, + active: false + + expect(response).to have_gitlab_http_status 201 + expect(Ci::Runner.first.active).to be false + end + end + end + context 'when maximum job timeout is specified' do it 'creates runner' do post api('/runners'), token: registration_token, diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index b4fc596a751..d3de2331244 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -137,6 +137,13 @@ RSpec.configure do |config| reset_delivered_emails! end + config.before(:example, :prometheus) do + matching_files = File.join(::Prometheus::Client.configuration.multiprocess_files_dir, "*.db") + Dir[matching_files].map { |filename| File.delete(filename) if File.file?(filename) } + + Gitlab::Metrics.reset_registry! + end + config.around(:each, :use_clean_rails_memory_store_caching) do |example| caching_store = Rails.cache Rails.cache = ActiveSupport::Cache::MemoryStore.new diff --git a/spec/support/api/time_tracking_shared_examples.rb b/spec/support/api/time_tracking_shared_examples.rb index dd3089d22e5..52e1bc55191 100644 --- a/spec/support/api/time_tracking_shared_examples.rb +++ b/spec/support/api/time_tracking_shared_examples.rb @@ -70,8 +70,12 @@ shared_examples 'time tracking endpoints' do |issuable_name| end it "add spent time for #{issuable_name}" do - post api("/projects/#{project.id}/#{issuable_collection_name}/#{issuable.iid}/add_spent_time", user), - duration: '2h' + Timecop.travel(1.minute.from_now) do + expect do + post api("/projects/#{project.id}/#{issuable_collection_name}/#{issuable.iid}/add_spent_time", user), + duration: '2h' + end.to change { issuable.reload.updated_at } + end expect(response).to have_gitlab_http_status(201) expect(json_response['human_total_time_spent']).to eq('2h') @@ -79,7 +83,11 @@ shared_examples 'time tracking endpoints' do |issuable_name| context 'when subtracting time' do it 'subtracts time of the total spent time' do - issuable.update_attributes!(spend_time: { duration: 7200, user_id: user.id }) + Timecop.travel(1.minute.from_now) do + expect do + issuable.update_attributes!(spend_time: { duration: 7200, user_id: user.id }) + end.to change { issuable.reload.updated_at } + end post api("/projects/#{project.id}/#{issuable_collection_name}/#{issuable.iid}/add_spent_time", user), duration: '-1h' @@ -93,8 +101,12 @@ shared_examples 'time tracking endpoints' do |issuable_name| it 'does not modify the total time spent' do issuable.update_attributes!(spend_time: { duration: 7200, user_id: user.id }) - post api("/projects/#{project.id}/#{issuable_collection_name}/#{issuable.iid}/add_spent_time", user), - duration: '-1w' + Timecop.travel(1.minute.from_now) do + expect do + post api("/projects/#{project.id}/#{issuable_collection_name}/#{issuable.iid}/add_spent_time", user), + duration: '-1w' + end.not_to change { issuable.reload.updated_at } + end expect(response).to have_gitlab_http_status(400) expect(json_response['message']['time_spent'].first).to match(/exceeds the total time spent/) @@ -110,7 +122,11 @@ shared_examples 'time tracking endpoints' do |issuable_name| end it "resets spent time for #{issuable_name}" do - post api("/projects/#{project.id}/#{issuable_collection_name}/#{issuable.iid}/reset_spent_time", user) + Timecop.travel(1.minute.from_now) do + expect do + post api("/projects/#{project.id}/#{issuable_collection_name}/#{issuable.iid}/reset_spent_time", user) + end.to change { issuable.reload.updated_at } + end expect(response).to have_gitlab_http_status(200) expect(json_response['total_time_spent']).to eq(0) diff --git a/spec/support/forgery_protection.rb b/spec/support/forgery_protection.rb index a5e7b761651..fa87d5fa881 100644 --- a/spec/support/forgery_protection.rb +++ b/spec/support/forgery_protection.rb @@ -1,11 +1,18 @@ +module ForgeryProtection + def with_forgery_protection + ActionController::Base.allow_forgery_protection = true + yield + ensure + ActionController::Base.allow_forgery_protection = false + end + + module_function :with_forgery_protection +end + RSpec.configure do |config| config.around(:each, :allow_forgery_protection) do |example| - begin - ActionController::Base.allow_forgery_protection = true - + ForgeryProtection.with_forgery_protection do example.call - ensure - ActionController::Base.allow_forgery_protection = false end end end diff --git a/spec/support/helpers/migrations_helpers.rb b/spec/support/helpers/migrations_helpers.rb index 5d6f662e8fe..84abec75c26 100644 --- a/spec/support/helpers/migrations_helpers.rb +++ b/spec/support/helpers/migrations_helpers.rb @@ -24,6 +24,16 @@ module MigrationsHelpers end end + def foreign_key_exists?(source, target = nil, column: nil) + ActiveRecord::Base.connection.foreign_keys(source).any? do |key| + if column + key.options[:column].to_s == column.to_s + else + key.to_table.to_s == target.to_s + end + end + end + def reset_column_in_all_models clear_schema_cache! diff --git a/spec/support/services/migrate_to_ghost_user_service_shared_examples.rb b/spec/support/services/migrate_to_ghost_user_service_shared_examples.rb index adfd256dff1..1478c6b5a47 100644 --- a/spec/support/services/migrate_to_ghost_user_service_shared_examples.rb +++ b/spec/support/services/migrate_to_ghost_user_service_shared_examples.rb @@ -86,7 +86,7 @@ shared_examples "migrating a deleted user's associated records to the ghost user end it "blocks the user before #{record_class_name} migration begins" do - expect(service).to receive("migrate_#{record_class_name.parameterize('_')}s".to_sym) do + expect(service).to receive("migrate_#{record_class_name.parameterize('_').pluralize}".to_sym) do expect(user.reload).to be_blocked end diff --git a/spec/uploaders/workers/object_storage/migrate_uploads_worker_spec.rb b/spec/uploaders/workers/object_storage/migrate_uploads_worker_spec.rb index 7a7dcb71680..aed62f97448 100644 --- a/spec/uploaders/workers/object_storage/migrate_uploads_worker_spec.rb +++ b/spec/uploaders/workers/object_storage/migrate_uploads_worker_spec.rb @@ -7,113 +7,138 @@ describe ObjectStorage::MigrateUploadsWorker, :sidekiq do end end - let!(:projects) { create_list(:project, 10, :with_avatar) } - let(:uploads) { Upload.all } let(:model_class) { Project } - let(:mounted_as) { :avatar } + let(:uploads) { Upload.all } let(:to_store) { ObjectStorage::Store::REMOTE } - before do - stub_uploads_object_storage(AvatarUploader) - end - - describe '.enqueue!' do - def enqueue! - described_class.enqueue!(uploads, Project, mounted_as, to_store) - end + shared_examples "uploads migration worker" do + describe '.enqueue!' do + def enqueue! + described_class.enqueue!(uploads, Project, mounted_as, to_store) + end - it 'is guarded by .sanity_check!' do - expect(described_class).to receive(:perform_async) - expect(described_class).to receive(:sanity_check!) + it 'is guarded by .sanity_check!' do + expect(described_class).to receive(:perform_async) + expect(described_class).to receive(:sanity_check!) - enqueue! - end + enqueue! + end - context 'sanity_check! fails' do - include_context 'sanity_check! fails' + context 'sanity_check! fails' do + include_context 'sanity_check! fails' - it 'does not enqueue a job' do - expect(described_class).not_to receive(:perform_async) + it 'does not enqueue a job' do + expect(described_class).not_to receive(:perform_async) - expect { enqueue! }.to raise_error(described_class::SanityCheckError) + expect { enqueue! }.to raise_error(described_class::SanityCheckError) + end end end - end - describe '.sanity_check!' do - shared_examples 'raises a SanityCheckError' do - let(:mount_point) { nil } + describe '.sanity_check!' do + shared_examples 'raises a SanityCheckError' do + let(:mount_point) { nil } - it do - expect { described_class.sanity_check!(uploads, model_class, mount_point) } - .to raise_error(described_class::SanityCheckError) + it do + expect { described_class.sanity_check!(uploads, model_class, mount_point) } + .to raise_error(described_class::SanityCheckError) + end end - end - context 'uploader types mismatch' do - let!(:outlier) { create(:upload, uploader: 'FileUploader') } + before do + stub_const("WrongModel", Class.new) + end - include_examples 'raises a SanityCheckError' - end + context 'uploader types mismatch' do + let!(:outlier) { create(:upload, uploader: 'GitlabUploader') } - context 'model types mismatch' do - let!(:outlier) { create(:upload, model_type: 'Potato') } + include_examples 'raises a SanityCheckError' + end - include_examples 'raises a SanityCheckError' - end + context 'model types mismatch' do + let!(:outlier) { create(:upload, model_type: 'WrongModel') } - context 'mount point not found' do - include_examples 'raises a SanityCheckError' do - let(:mount_point) { :potato } + include_examples 'raises a SanityCheckError' end - end - end - describe '#perform' do - def perform - described_class.new.perform(uploads.ids, model_class.to_s, mounted_as, to_store) - rescue ObjectStorage::MigrateUploadsWorker::Report::MigrationFailures - # swallow + context 'mount point not found' do + include_examples 'raises a SanityCheckError' do + let(:mount_point) { :potato } + end + end end - shared_examples 'outputs correctly' do |success: 0, failures: 0| - total = success + failures + describe '#perform' do + def perform + described_class.new.perform(uploads.ids, model_class.to_s, mounted_as, to_store) + rescue ObjectStorage::MigrateUploadsWorker::Report::MigrationFailures + # swallow + end + + shared_examples 'outputs correctly' do |success: 0, failures: 0| + total = success + failures - if success > 0 - it 'outputs the reports' do - expect(Rails.logger).to receive(:info).with(%r{Migrated #{success}/#{total} files}) + if success > 0 + it 'outputs the reports' do + expect(Rails.logger).to receive(:info).with(%r{Migrated #{success}/#{total} files}) - perform + perform + end end - end - if failures > 0 - it 'outputs upload failures' do - expect(Rails.logger).to receive(:warn).with(/Error .* I am a teapot/) + if failures > 0 + it 'outputs upload failures' do + expect(Rails.logger).to receive(:warn).with(/Error .* I am a teapot/) - perform + perform + end end end - end - it_behaves_like 'outputs correctly', success: 10 + it_behaves_like 'outputs correctly', success: 10 + + it 'migrates files' do + perform - it 'migrates files' do - perform + expect(Upload.where(store: ObjectStorage::Store::LOCAL).count).to eq(0) + end - aggregate_failures do - projects.each do |project| - expect(project.reload.avatar.upload.local?).to be_falsey + context 'migration is unsuccessful' do + before do + allow_any_instance_of(ObjectStorage::Concern) + .to receive(:migrate!).and_raise(CarrierWave::UploadError, "I am a teapot.") end + + it_behaves_like 'outputs correctly', failures: 10 end end + end - context 'migration is unsuccessful' do - before do - allow_any_instance_of(ObjectStorage::Concern).to receive(:migrate!).and_raise(CarrierWave::UploadError, "I am a teapot.") - end + context "for AvatarUploader" do + let!(:projects) { create_list(:project, 10, :with_avatar) } + let(:mounted_as) { :avatar } - it_behaves_like 'outputs correctly', failures: 10 + before do + stub_uploads_object_storage(AvatarUploader) + end + + it_behaves_like "uploads migration worker" + end + + context "for FileUploader" do + let!(:projects) { create_list(:project, 10) } + let(:secret) { SecureRandom.hex } + let(:mounted_as) { nil } + + before do + stub_uploads_object_storage(FileUploader) + + projects.map do |project| + uploader = FileUploader.new(project) + uploader.store!(fixture_file_upload('spec/fixtures/doc_sample.txt')) + end end + + it_behaves_like "uploads migration worker" end end diff --git a/vendor/gitignore/Global/JetBrains.gitignore b/vendor/gitignore/Global/JetBrains.gitignore index a83a428c844..b09cb3dbc04 100644 --- a/vendor/gitignore/Global/JetBrains.gitignore +++ b/vendor/gitignore/Global/JetBrains.gitignore @@ -4,7 +4,8 @@ # User-specific stuff .idea/**/workspace.xml .idea/**/tasks.xml -.idea/dictionaries +.idea/**/dictionaries +.idea/**/shelf # Sensitive or high-churn files .idea/**/dataSources/ diff --git a/vendor/gitignore/Global/Vim.gitignore b/vendor/gitignore/Global/Vim.gitignore index 6d21783d471..19cfe22f583 100644 --- a/vendor/gitignore/Global/Vim.gitignore +++ b/vendor/gitignore/Global/Vim.gitignore @@ -12,3 +12,5 @@ Session.vim *~ # Auto-generated tag files tags +# Persistent undo +[._]*.un~ diff --git a/vendor/gitignore/Java.gitignore b/vendor/gitignore/Java.gitignore index 6143e53f9e3..a1c2a238a96 100644 --- a/vendor/gitignore/Java.gitignore +++ b/vendor/gitignore/Java.gitignore @@ -13,6 +13,7 @@ # Package Files # *.jar *.war +*.nar *.ear *.zip *.tar.gz diff --git a/vendor/gitignore/Objective-C.gitignore b/vendor/gitignore/Objective-C.gitignore index 09dfede4814..86de6aa3f5f 100644 --- a/vendor/gitignore/Objective-C.gitignore +++ b/vendor/gitignore/Objective-C.gitignore @@ -52,7 +52,7 @@ Carthage/Build fastlane/report.xml fastlane/Preview.html -fastlane/screenshots +fastlane/screenshots/**/*.png fastlane/test_output # Code Injection diff --git a/vendor/gitignore/Swift.gitignore b/vendor/gitignore/Swift.gitignore index 161179bff3e..312d1f652c6 100644 --- a/vendor/gitignore/Swift.gitignore +++ b/vendor/gitignore/Swift.gitignore @@ -64,5 +64,5 @@ Carthage/Build fastlane/report.xml fastlane/Preview.html -fastlane/screenshots +fastlane/screenshots/**/*.png fastlane/test_output diff --git a/vendor/gitignore/TeX.gitignore b/vendor/gitignore/TeX.gitignore index c560658e45c..e6598ba1727 100644 --- a/vendor/gitignore/TeX.gitignore +++ b/vendor/gitignore/TeX.gitignore @@ -198,6 +198,9 @@ pythontex-files-*/ # easy-todo *.lod +# xmpincl +*.xmpi + # xindy *.xdy @@ -234,3 +237,6 @@ TSWLatexianTemp* # standalone packages *.sta + +# generated if using elsarticle.cls +*.spl diff --git a/vendor/gitignore/Unity.gitignore b/vendor/gitignore/Unity.gitignore index a7c0c70a0b4..0210746b1a5 100644 --- a/vendor/gitignore/Unity.gitignore +++ b/vendor/gitignore/Unity.gitignore @@ -6,7 +6,7 @@ Assets/AssetStoreTools* # Visual Studio cache directory -/.vs/ +.vs/ # Autogenerated VS/MD/Consulo solution and project files ExportedObj/ @@ -22,6 +22,7 @@ ExportedObj/ *.booproj *.svd *.pdb +*.opendb # Unity3D generated meta files *.pidb.meta diff --git a/vendor/gitignore/VisualStudio.gitignore b/vendor/gitignore/VisualStudio.gitignore index 29063cf6072..3e759b75bf4 100644 --- a/vendor/gitignore/VisualStudio.gitignore +++ b/vendor/gitignore/VisualStudio.gitignore @@ -240,6 +240,7 @@ Backup*/ UpgradeLog*.XML UpgradeLog*.htm ServiceFabricBackup/ +*.rptproj.bak # SQL Server files *.mdf diff --git a/vendor/gitlab-ci-yml/Chef.gitlab-ci.yml b/vendor/gitlab-ci-yml/Chef.gitlab-ci.yml index ff7c87c29f0..4d5b6484d6e 100644 --- a/vendor/gitlab-ci-yml/Chef.gitlab-ci.yml +++ b/vendor/gitlab-ci-yml/Chef.gitlab-ci.yml @@ -7,7 +7,7 @@ image: "chef/chefdk" services: - - docker:stable-dind + - docker:dind variables: DOCKER_HOST: "tcp://docker:2375" diff --git a/vendor/gitlab-ci-yml/Docker.gitlab-ci.yml b/vendor/gitlab-ci-yml/Docker.gitlab-ci.yml index 58d48d1284b..eeefadaa019 100644 --- a/vendor/gitlab-ci-yml/Docker.gitlab-ci.yml +++ b/vendor/gitlab-ci-yml/Docker.gitlab-ci.yml @@ -2,7 +2,7 @@ image: docker:latest services: - - docker:stable-dind + - docker:dind before_script: - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY diff --git a/vendor/gitlab-ci-yml/Maven.gitlab-ci.yml b/vendor/gitlab-ci-yml/Maven.gitlab-ci.yml index ba2efbd03a0..d5ee7ed2c13 100644 --- a/vendor/gitlab-ci-yml/Maven.gitlab-ci.yml +++ b/vendor/gitlab-ci-yml/Maven.gitlab-ci.yml @@ -24,7 +24,7 @@ variables: MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true" # Cache downloaded dependencies and plugins between builds. -# To keep cache across branches add 'key: "$CI_JOB_REF_NAME"' +# To keep cache across branches add 'key: "$CI_JOB_NAME"' cache: paths: - .m2/repository diff --git a/vendor/gitlab-ci-yml/Swift.gitlab-ci.yml b/vendor/gitlab-ci-yml/Swift.gitlab-ci.yml index c9c35906d1c..10d0b05d9f8 100644 --- a/vendor/gitlab-ci-yml/Swift.gitlab-ci.yml +++ b/vendor/gitlab-ci-yml/Swift.gitlab-ci.yml @@ -1,5 +1,5 @@ # Lifted from: https://about.gitlab.com/2016/03/10/setting-up-gitlab-ci-for-ios-projects/ -# This file assumes an own GitLab CI runner, setup on an OS X system. +# This file assumes an own GitLab CI runner, setup on an macOS system. stages: - build - archive @@ -8,11 +8,11 @@ build_project: stage: build script: - xcodebuild clean -project ProjectName.xcodeproj -scheme SchemeName | xcpretty - - xcodebuild test -project ProjectName.xcodeproj -scheme SchemeName -destination 'platform=iOS Simulator,name=iPhone 6s,OS=9.2' | xcpretty -s + - xcodebuild test -project ProjectName.xcodeproj -scheme SchemeName -destination 'platform=iOS Simulator,name=iPhone 8,OS=11.3' | xcpretty -s tags: - - ios_9-2 - - xcode_7-2 - - osx_10-11 + - ios_11-3 + - xcode_9-3 + - macos_10-13 archive_project: stage: archive @@ -25,6 +25,6 @@ archive_project: paths: - build/ProjectName.ipa tags: - - ios_9-2 - - xcode_7-2 - - osx_10-11 + - ios_11-3 + - xcode_9-3 + - macos_10-13 diff --git a/vendor/licenses.csv b/vendor/licenses.csv index ca88f867fe5..07861631a07 100644 --- a/vendor/licenses.csv +++ b/vendor/licenses.csv @@ -4,22 +4,19 @@ @babel/template,7.0.0-beta.32,MIT @babel/traverse,7.0.0-beta.32,MIT @babel/types,7.0.0-beta.32,MIT -@gitlab-org/gitlab-svgs,1.17.0,SEE LICENSE IN LICENSE +@gitlab-org/gitlab-svgs,1.20.0,SEE LICENSE IN LICENSE +@mrmlnc/readdir-enhanced,2.2.1,MIT +@sindresorhus/is,0.7.0,MIT @types/jquery,2.0.48,MIT -JSONStream,1.3.2,MIT RedCloth,4.3.2,MIT abbrev,1.0.9,ISC abbrev,1.1.1,ISC -accepts,1.3.3,MIT accepts,1.3.4,MIT ace-rails-ap,4.1.2,MIT acorn,3.3.0,MIT -acorn,4.0.13,MIT -acorn,5.1.1,MIT acorn,5.4.1,MIT -acorn-dynamic-import,2.0.2,MIT +acorn-dynamic-import,3.0.0,MIT acorn-jsx,3.0.1,MIT -acorn-node,1.3.0,Apache 2.0 actionmailer,4.2.10,MIT actionpack,4.2.10,MIT actionview,4.2.10,MIT @@ -28,14 +25,12 @@ activemodel,4.2.10,MIT activerecord,4.2.10,MIT activesupport,4.2.10,MIT acts-as-taggable-on,5.0.0,MIT -address,1.0.3,MIT addressable,2.5.2,Apache 2.0 addressparser,1.0.1,MIT aes_key_wrap,1.0.1,MIT after,0.8.2,MIT agent-base,2.1.1,MIT ajv,4.11.8,MIT -ajv,5.2.2,MIT ajv,5.5.2,MIT ajv,6.1.1,MIT ajv-keywords,1.5.1,MIT @@ -52,8 +47,10 @@ ansi-escapes,3.0.0,MIT ansi-html,0.0.7,Apache 2.0 ansi-regex,2.1.1,MIT ansi-regex,3.0.0,MIT +ansi-styles,1.0.0,MIT ansi-styles,2.2.1,MIT -ansi-styles,3.2.0,MIT +ansi-styles,3.2.1,MIT +any-observable,0.2.0,MIT anymatch,1.3.2,ISC anymatch,2.0.0,ISC append-transform,0.4.0,MIT @@ -65,14 +62,12 @@ arr-diff,2.0.0,MIT arr-diff,4.0.0,MIT arr-flatten,1.1.0,MIT arr-union,3.1.0,MIT -array-filter,0.0.1,MIT +array-differ,1.0.0,MIT array-find,1.0.0,MIT array-find-index,1.0.2,MIT array-flatten,1.1.1,MIT array-flatten,2.1.1,MIT array-includes,3.0.3,MIT -array-map,0.0.0,MIT -array-reduce,0.0.0,MIT array-slice,0.2.3,MIT array-union,1.0.2,MIT array-uniq,1.0.3,MIT @@ -88,11 +83,11 @@ asn1.js,4.10.1,MIT assert,1.4.1,MIT assert-plus,0.2.0,MIT assert-plus,1.0.0,MIT -asset_sync,2.2.0,MIT +asset_sync,2.4.0,MIT assign-symbols,1.0.0,MIT +ast-types,0.10.1,MIT ast-types,0.11.1,MIT -astw,2.2.0,MIT -async,0.9.2,MIT +ast-types,0.11.3,MIT async,1.5.2,MIT async,2.1.5,MIT async,2.4.1,MIT @@ -102,7 +97,7 @@ async-limiter,1.0.0,MIT asynckit,0.4.0,MIT atob,2.0.3,(MIT OR Apache-2.0) atomic,1.1.99,Apache 2.0 -attr_encrypted,3.0.3,MIT +attr_encrypted,3.1.0,MIT attr_required,1.0.0,MIT autoprefixer,6.7.7,MIT autoprefixer-rails,6.2.3,MIT @@ -115,7 +110,7 @@ axios,0.15.3,MIT axios,0.17.1,MIT axios-mock-adapter,1.10.0,MIT babel-code-frame,6.26.0,MIT -babel-core,6.26.0,MIT +babel-core,6.26.3,MIT babel-eslint,8.0.2,MIT babel-generator,6.26.0,MIT babel-helper-bindify-decorators,6.24.1,MIT @@ -132,20 +127,25 @@ babel-helper-regex,6.26.0,MIT babel-helper-remap-async-to-generator,6.24.1,MIT babel-helper-replace-supers,6.24.1,MIT babel-helpers,6.24.1,MIT -babel-loader,7.1.2,MIT +babel-loader,7.1.4,MIT babel-messages,6.23.0,MIT babel-plugin-check-es2015-constants,6.22.0,MIT -babel-plugin-istanbul,4.1.5,New BSD +babel-plugin-istanbul,4.1.6,New BSD +babel-plugin-rewire,1.1.0,ISC babel-plugin-syntax-async-functions,6.13.0,MIT babel-plugin-syntax-async-generators,6.13.0,MIT +babel-plugin-syntax-class-constructor-call,6.18.0,MIT babel-plugin-syntax-class-properties,6.13.0,MIT babel-plugin-syntax-decorators,6.13.0,MIT babel-plugin-syntax-dynamic-import,6.18.0,MIT babel-plugin-syntax-exponentiation-operator,6.13.0,MIT +babel-plugin-syntax-export-extensions,6.13.0,MIT +babel-plugin-syntax-flow,6.18.0,MIT babel-plugin-syntax-object-rest-spread,6.13.0,MIT babel-plugin-syntax-trailing-function-commas,6.22.0,MIT babel-plugin-transform-async-generator-functions,6.24.1,MIT babel-plugin-transform-async-to-generator,6.24.1,MIT +babel-plugin-transform-class-constructor-call,6.24.1,MIT babel-plugin-transform-class-properties,6.24.1,MIT babel-plugin-transform-decorators,6.24.1,MIT babel-plugin-transform-define,1.3.0,MIT @@ -172,6 +172,8 @@ babel-plugin-transform-es2015-template-literals,6.22.0,MIT babel-plugin-transform-es2015-typeof-symbol,6.23.0,MIT babel-plugin-transform-es2015-unicode-regex,6.24.1,MIT babel-plugin-transform-exponentiation-operator,6.24.1,MIT +babel-plugin-transform-export-extensions,6.22.0,MIT +babel-plugin-transform-flow-strip-types,6.22.0,MIT babel-plugin-transform-object-rest-spread,6.23.0,MIT babel-plugin-transform-regenerator,6.26.0,MIT babel-plugin-transform-strict-mode,6.24.1,MIT @@ -179,6 +181,7 @@ babel-preset-es2015,6.24.1,MIT babel-preset-es2016,6.24.1,MIT babel-preset-es2017,6.24.1,MIT babel-preset-latest,6.24.1,MIT +babel-preset-stage-1,6.24.1,MIT babel-preset-stage-2,6.24.1,MIT babel-preset-stage-3,6.24.1,MIT babel-register,6.26.0,MIT @@ -189,6 +192,7 @@ babel-types,6.26.0,MIT babosa,1.0.2,MIT babylon,6.18.0,MIT babylon,7.0.0-beta.32,MIT +babylon,7.0.0-beta.44,MIT backo2,1.0.2,MIT balanced-match,0.4.2,MIT balanced-match,1.0.0,MIT @@ -206,13 +210,13 @@ better-assert,1.0.2,MIT bfj-node4,5.2.1,MIT big.js,3.1.3,MIT binary-extensions,1.11.0,MIT +binaryextensions,2.1.1,MIT bindata,2.4.3,ruby bitsyntax,0.0.4,UNKNOWN bl,1.1.2,MIT blackst0ne-mermaid,7.1.0-fixed,MIT blob,0.0.4,MIT* block-stream,0.0.9,ISC -bluebird,3.5.0,MIT bluebird,3.5.1,MIT bn.js,4.11.8,MIT body-parser,1.18.2,MIT @@ -224,25 +228,19 @@ bootstrap-sass,3.3.6,MIT bootstrap_form,2.7.0,MIT boxen,1.3.0,MIT brace-expansion,1.1.11,MIT -brace-expansion,1.1.8,MIT braces,0.1.5,MIT braces,1.8.5,MIT braces,2.3.1,MIT brorand,1.1.0,MIT browser,2.2.0,MIT -browser-pack,6.0.4,MIT -browser-resolve,1.11.2,MIT -browserify,14.5.0,MIT browserify-aes,1.1.1,MIT browserify-cipher,1.0.0,MIT browserify-des,1.0.0,MIT browserify-rsa,4.0.1,MIT browserify-sign,4.0.4,ISC browserify-zlib,0.1.4,MIT -browserify-zlib,0.2.0,MIT browserslist,1.7.7,MIT buffer,4.9.1,MIT -buffer,5.1.0,MIT buffer-indexof,1.1.0,MIT buffer-more-ints,0.0.2,MIT buffer-xor,1.0.3,MIT @@ -254,13 +252,13 @@ bytes,2.5.0,MIT bytes,3.0.0,MIT cacache,10.0.4,ISC cache-base,1.0.1,MIT -cached-path-relative,1.0.1,MIT +cacheable-request,2.1.4,MIT +call-me-maybe,1.0.1,MIT caller-path,0.1.0,MIT callsite,1.0.0,MIT* callsites,0.2.0,MIT camelcase,1.2.1,MIT camelcase,2.1.1,MIT -camelcase,3.0.0,MIT camelcase,4.1.0,MIT camelcase-keys,2.1.0,MIT caniuse-api,1.6.1,MIT @@ -271,16 +269,19 @@ caseless,0.11.0,Apache 2.0 caseless,0.12.0,Apache 2.0 cause,0.1,MIT center-align,0.1.3,MIT +chalk,0.4.0,MIT chalk,1.1.3,MIT -chalk,2.3.0,MIT -chalk,2.3.1,MIT +chalk,2.4.0,MIT +chalk,2.4.1,MIT chardet,0.4.2,MIT +charenc,0.0.2,New BSD charlock_holmes,0.7.6,MIT chart.js,1.0.2,MIT check-types,7.3.0,MIT chokidar,1.7.0,MIT chokidar,2.0.2,MIT chownr,1.0.1,ISC +chrome-trace-event,0.1.2,MIT chronic,0.10.2,MIT chronic_duration,0.10.6,MIT chunky_png,1.3.5,MIT @@ -294,11 +295,21 @@ classlist-polyfill,1.2.0,Unlicense cli-boxes,1.0.0,MIT cli-cursor,1.0.2,MIT cli-cursor,2.1.0,MIT +cli-spinners,0.1.2,MIT +cli-table,0.3.1,MIT +cli-truncate,0.2.1,MIT cli-width,2.1.0,ISC clipboard,1.7.1,MIT cliui,2.1.0,ISC -cliui,3.2.0,ISC +cliui,4.0.0,ISC clone,1.0.2,MIT +clone,1.0.3,MIT +clone,2.1.1,MIT +clone-buffer,1.0.0,MIT +clone-response,1.0.2,MIT +clone-stats,0.0.1,MIT +clone-stats,1.0.0,MIT +cloneable-readable,1.0.0,MIT co,3.0.6,MIT co,4.6.0,MIT coa,1.0.1,MIT @@ -310,11 +321,11 @@ color-convert,1.9.1,MIT color-name,1.1.2,MIT color-string,0.3.0,MIT colormin,1.1.2,MIT +colors,1.0.3,MIT colors,1.1.2,MIT combine-lists,1.0.1,MIT -combine-source-map,0.7.2,MIT -combine-source-map,0.8.0,MIT combined-stream,1.0.6,MIT +commander,2.13.0,MIT commander,2.15.1,MIT commondir,1.0.1,MIT commonmarker,0.17.8,MIT @@ -323,9 +334,8 @@ component-emitter,1.2.1,MIT component-inherit,0.0.3,MIT* compressible,2.0.11,MIT compression,1.7.0,MIT -compression-webpack-plugin,1.1.7,MIT +compression-webpack-plugin,1.1.11,MIT concat-map,0.0.1,MIT -concat-stream,1.5.2,MIT concat-stream,1.6.0,MIT concurrent-ruby-ext,1.0.5,MIT configstore,3.1.1,Simplified BSD @@ -339,21 +349,18 @@ constants-browserify,1.0.0,MIT contains-path,0.1.0,MIT content-disposition,0.5.2,MIT content-type,1.0.4,MIT -convert-source-map,1.1.3,MIT -convert-source-map,1.5.0,MIT +convert-source-map,1.5.1,MIT cookie,0.3.1,MIT cookie-signature,1.0.6,MIT copy-concurrently,1.0.5,ISC copy-descriptor,0.1.1,MIT -copy-webpack-plugin,4.4.1,MIT +copy-webpack-plugin,4.5.1,MIT core-js,2.3.0,MIT -core-js,2.4.1,MIT -core-js,2.5.1,MIT core-js,2.5.3,MIT core-util-is,1.0.2,MIT -cosmiconfig,2.1.1,MIT +cosmiconfig,2.2.2,MIT crack,0.4.3,MIT -crass,1.0.3,MIT +crass,1.0.4,MIT create-ecdh,4.0.0,MIT create-error-class,3.0.2,MIT create-hash,1.1.3,MIT @@ -361,13 +368,14 @@ create-hmac,1.1.6,MIT creole,0.5.0,ruby cropper,2.3.0,MIT cross-spawn,5.1.0,MIT +cross-spawn,6.0.5,MIT +crypt,0.0.2,New BSD cryptiles,2.0.5,New BSD cryptiles,3.1.2,New BSD -crypto-browserify,3.11.0,MIT crypto-browserify,3.12.0,MIT crypto-random-string,1.0.0,MIT css-color-names,0.0.4,MIT -css-loader,0.28.9,MIT +css-loader,0.28.11,MIT css-selector-tokenizer,0.7.0,MIT css_parser,1.5.0,MIT cssesc,0.1.0,MIT @@ -400,10 +408,13 @@ d3-transition,1.1.1,New BSD d3_rails,3.5.11,MIT dagre-d3-renderer,0.4.24,MIT dagre-layout,0.8.0,MIT +dargs,5.1.0,MIT dashdash,1.14.1,MIT data-uri-to-buffer,1.2.0,MIT +date-fns,1.29.0,MIT date-format,1.2.0,MIT date-now,0.1.4,MIT +dateformat,3.0.3,MIT de-indent,1.0.2,MIT debug,2.2.0,MIT debug,2.6.8,MIT @@ -418,6 +429,7 @@ decode-uri-component,0.2.0,MIT decompress-response,3.3.0,MIT deep-equal,1.0.1,MIT deep-extend,0.4.2,MIT +deep-extend,0.5.1,MIT deep-is,0.1.3,MIT default-require-extensions,1.0.0,MIT default_value_for,3.0.2,MIT @@ -433,19 +445,19 @@ delayed-stream,1.0.0,MIT delegate,3.1.2,MIT delegates,1.0.0,MIT depd,1.1.1,MIT -deps-sort,2.0.0,MIT des.js,1.0.0,MIT descendants_tracker,0.0.4,MIT destroy,1.0.4,MIT +detect-conflict,1.0.1,MIT detect-indent,4.0.0,MIT detect-libc,1.0.3,Apache 2.0 detect-node,2.0.3,ISC -detect-port-alt,1.1.5,MIT -detective,4.7.1,MIT -devise,4.2.0,MIT +device_detector,1.0.0,LGPL +devise,4.4.3,MIT devise-two-factor,3.0.0,MIT di,0.0.1,MIT diff,3.4.0,New BSD +diff,3.5.0,New BSD diff-lcs,1.3,"MIT,Artistic-2.0,GPL-2.0+" diffie-hellman,5.0.2,MIT diffy,3.1.0,MIT @@ -464,38 +476,43 @@ domelementtype,1.1.3,Simplified BSD domelementtype,1.3.0,Simplified BSD domhandler,2.4.1,Simplified BSD domutils,1.6.2,Simplified BSD -doorkeeper,4.3.1,MIT +doorkeeper,4.3.2,MIT doorkeeper-openid_connect,1.3.0,MIT dot-prop,4.2.0,MIT double-ended-queue,2.1.0-0,MIT dropzone,4.2.0,MIT dropzonejs-rails,0.7.2,MIT duplexer,0.1.1,MIT -duplexer2,0.1.4,New BSD duplexer3,0.1.4,New BSD duplexify,3.5.3,MIT ecc-jsbn,0.1.1,MIT +editions,1.3.4,MIT ee-first,1.1.1,MIT ejs,2.5.7,Apache 2.0 +ejs,2.5.9,Apache 2.0 electron-to-chromium,1.3.3,ISC +elegant-spinner,1.0.1,MIT elliptic,6.4.0,MIT email_reply_trimmer,0.1.6,MIT emoji-unicode-version,0.2.1,MIT emojis-list,2.1.0,MIT encodeurl,1.0.2,MIT encryptor,3.0.0,MIT -end-of-stream,1.4.0,MIT end-of-stream,1.4.1,MIT engine.io,3.1.5,MIT engine.io-client,3.1.5,MIT engine.io-parser,2.1.2,MIT enhanced-resolve,0.9.1,MIT -enhanced-resolve,3.4.1,MIT +enhanced-resolve,4.0.0,MIT ent,2.2.0,MIT entities,1.1.1,Simplified BSD +envinfo,4.4.2,MIT equalizer,0.0.11,MIT errno,0.1.4,MIT +errno,0.1.7,MIT +error,7.0.2,MIT error-ex,1.3.0,MIT +error-ex,1.3.1,MIT erubis,2.7.0,MIT es-abstract,1.10.0,MIT es-to-primitive,1.1.1,MIT @@ -525,7 +542,6 @@ eslint-plugin-promise,3.5.0,ISC eslint-plugin-vue,4.0.1,MIT eslint-scope,3.7.1,Simplified BSD eslint-visitor-keys,1.0.0,Apache 2.0 -espree,3.5.0,Simplified BSD espree,3.5.2,Simplified BSD esprima,2.7.3,Simplified BSD esprima,3.1.3,Simplified BSD @@ -545,7 +561,7 @@ eventemitter3,1.2.0,MIT events,1.1.1,MIT eventsource,0.1.6,MIT evp_bytestokey,1.0.3,MIT -excon,0.60.0,MIT +excon,0.62.0,MIT execa,0.7.0,MIT execjs,2.6.0,MIT exit-hook,1.1.1,MIT @@ -562,14 +578,16 @@ extend,3.0.1,MIT extend-shallow,2.0.1,MIT extend-shallow,3.0.2,MIT external-editor,2.1.0,MIT +external-editor,2.2.0,MIT extglob,0.3.2,MIT extglob,2.0.4,MIT extsprintf,1.3.0,MIT extsprintf,1.4.0,MIT faraday,0.12.2,MIT -faraday_middleware,0.11.0.1,MIT +faraday_middleware,0.12.2,MIT faraday_middleware-multi_json,0.0.6,MIT fast-deep-equal,1.0.0,MIT +fast-glob,2.2.1,MIT fast-json-stable-stringify,2.0.0,MIT fast-levenshtein,2.0.6,MIT fast_blank,1.0.0,MIT @@ -581,11 +599,10 @@ ffi,1.9.18,New BSD figures,1.7.0,MIT figures,2.0.0,MIT file-entry-cache,2.0.0,MIT -file-loader,1.1.8,MIT +file-loader,1.1.11,MIT file-uri-to-path,1.0.0,MIT filename-regex,2.0.1,MIT fileset,2.0.3,MIT -filesize,3.5.11,New BSD filesize,3.6.0,New BSD fill-range,2.2.3,MIT fill-range,4.0.0,MIT @@ -594,11 +611,13 @@ find-cache-dir,1.0.0,MIT find-root,0.1.2,MIT find-up,1.1.2,MIT find-up,2.1.0,MIT +first-chunk-stream,2.0.0,MIT flat-cache,1.2.2,MIT flatten,1.0.2,MIT flipper,0.13.0,MIT flipper-active_record,0.13.0,MIT flipper-active_support_cache_store,0.13.0,MIT +flow-parser,0.66.0,MIT flowdock,0.7.1,MIT flush-write-stream,1.0.2,MIT fog-aliyun,0.2.0,MIT @@ -649,19 +668,25 @@ get_process_mem,0.2.0,MIT getpass,0.1.7,MIT gettext_i18n_rails,1.8.0,MIT gettext_i18n_rails_js,1.3.0,MIT -gitaly-proto,0.94.0,MIT +gh-got,6.0.0,MIT +gitaly-proto,0.99.0,MIT github-linguist,5.3.3,MIT -github-markup,1.6.1,MIT +github-markup,1.7.0,MIT +github-username,4.1.0,MIT gitlab-flowdock-git-hook,1.0.1,MIT +gitlab-gollum-lib,4.2.7.2,MIT +gitlab-gollum-rugged_adapter,0.4.4,MIT gitlab-grit,2.8.2,MIT gitlab-markup,1.6.3,MIT gitlab_omniauth-ldap,2.0.4,MIT glob,5.0.15,ISC glob,7.1.1,ISC glob,7.1.2,ISC +glob-all,3.1.0,MIT glob-base,0.3.0,MIT glob-parent,2.0.0,ISC glob-parent,3.1.0,ISC +glob-to-regexp,0.3.0,BSD global-dirs,0.1.1,MIT global-modules,1.0.0,MIT global-prefix,1.0.2,MIT @@ -671,10 +696,8 @@ globals,9.18.0,MIT globby,5.0.0,MIT globby,6.1.0,MIT globby,7.1.1,MIT -goldiloader,2.0.1,MIT +globby,8.0.1,MIT gollum-grit_adapter,1.0.1,MIT -gollum-lib,4.2.7,MIT -gollum-rugged_adapter,0.4.4,MIT gon,6.1.0,MIT good-listener,1.2.2,MIT google-api-client,0.19.8,Apache 2.0 @@ -683,15 +706,16 @@ googleapis-common-protos-types,1.0.1,Apache 2.0 googleauth,0.6.2,Apache 2.0 got,6.7.1,MIT got,7.1.0,MIT +got,8.3.0,MIT gpgme,2.0.13,LGPL-2.1+ graceful-fs,4.1.11,ISC grape,1.0.2,MIT -grape-entity,0.6.0,MIT +grape-entity,0.7.1,MIT grape-route-helpers,2.1.0,MIT grape_logging,1.7.0,MIT graphlib,2.1.1,MIT -grpc,1.10.0,Apache 2.0 -gzip-size,3.0.0,MIT +grouped-queue,0.3.3,MIT +grpc,1.11.0,Apache 2.0 gzip-size,4.1.0,MIT hamlit,2.6.1,MIT handle-thing,1.2.5,MIT @@ -704,6 +728,7 @@ har-validator,5.0.3,ISC has,1.0.1,MIT has-ansi,2.0.0,MIT has-binary2,1.0.2,MIT +has-color,0.1.7,MIT has-cors,1.1.0,MIT has-flag,1.0.0,MIT has-flag,2.0.0,MIT @@ -739,16 +764,16 @@ html-entities,1.2.0,MIT html-pipeline,2.7.1,MIT html2text,0.2.0,MIT htmlentities,4.3.4,MIT -htmlescape,1.1.1,MIT htmlparser2,3.9.2,MIT http,2.2.2,MIT +http-cache-semantics,3.8.1,Simplified BSD http-cookie,1.0.3,MIT http-deceiver,1.2.7,MIT http-errors,1.6.2,MIT http-form_data,1.0.3,MIT http-proxy,1.16.2,MIT http-proxy-agent,1.0.0,MIT -http-proxy-middleware,0.17.4,MIT +http-proxy-middleware,0.18.0,MIT http-signature,1.1.1,MIT http-signature,1.2.0,MIT http_parser.rb,0.6.0,MIT @@ -757,7 +782,6 @@ httpclient,2.8.3,ruby httpntlm,1.6.1,MIT httpreq,0.4.24,MIT https-browserify,0.0.1,MIT -https-browserify,1.0.0,MIT https-proxy-agent,1.0.0,MIT i18n,0.9.5,MIT ice_nine,0.11.2,MIT @@ -767,7 +791,6 @@ icss-replace-symbols,1.1.0,ISC icss-utils,2.1.0,ISC ieee754,1.1.8,New BSD iferr,0.1.5,MIT -ignore,3.3.3,MIT ignore,3.3.7,MIT ignore-by-default,1.0.1,ISC immediate,3.0.6,MIT @@ -776,6 +799,7 @@ import-local,1.0.0,MIT imports-loader,0.8.0,MIT imurmurhash,0.1.4,MIT indent-string,2.1.0,MIT +indent-string,3.2.0,MIT indexes-of,1.0.1,MIT indexof,0.0.1,MIT* inflection,1.10.0,MIT @@ -785,12 +809,13 @@ influxdb,0.2.3,MIT inherits,2.0.1,ISC inherits,2.0.3,ISC ini,1.3.5,ISC -inline-source-map,0.6.2,MIT inquirer,0.12.0,MIT inquirer,3.3.0,MIT -insert-module-globals,7.0.1,MIT +inquirer,5.2.0,MIT internal-ip,1.2.0,MIT interpret,1.0.1,MIT +interpret,1.1.0,MIT +into-stream,3.1.0,MIT invariant,2.2.2,New BSD invert-kv,1.0.0,MIT ip,1.0.1,MIT @@ -803,7 +828,6 @@ is-accessor-descriptor,0.1.6,MIT is-accessor-descriptor,1.0.0,MIT is-arrayish,0.2.1,MIT is-binary-path,1.0.1,MIT -is-buffer,1.1.5,MIT is-buffer,1.1.6,MIT is-builtin-module,1.0.0,MIT is-callable,1.1.3,MIT @@ -812,6 +836,7 @@ is-data-descriptor,1.0.0,MIT is-date-object,1.0.1,MIT is-descriptor,0.1.6,MIT is-descriptor,1.0.2,MIT +is-directory,0.3.1,MIT is-dotfile,1.0.3,MIT is-equal-shallow,0.1.3,MIT is-extendable,0.1.1,MIT @@ -826,7 +851,6 @@ is-glob,3.1.0,MIT is-glob,4.0.0,MIT is-installed-globally,0.1.0,MIT is-my-ip-valid,1.0.0,MIT -is-my-json-valid,2.16.0,MIT is-my-json-valid,2.17.2,MIT is-npm,1.0.0,MIT is-number,0.1.1,MIT @@ -835,6 +859,7 @@ is-number,3.0.0,MIT is-number,4.0.0,MIT is-obj,1.0.1,MIT is-object,1.0.1,MIT +is-observable,0.2.0,MIT is-odd,2.0.0,MIT is-path-cwd,1.0.0,MIT is-path-in-cwd,1.0.0,MIT @@ -850,7 +875,7 @@ is-regex,1.0.4,MIT is-relative,0.2.1,MIT is-resolvable,1.0.0,MIT is-retry-allowed,1.1.0,MIT -is-root,1.0.0,MIT +is-scoped,1.0.0,MIT is-stream,1.1.0,MIT is-svg,2.1.0,MIT is-symbol,1.0.1,MIT @@ -864,7 +889,6 @@ isarray,0.0.1,MIT isarray,1.0.0,MIT isarray,2.0.1,MIT isbinaryfile,3.0.2,MIT -isexe,1.1.2,ISC isexe,2.0.0,ISC isobject,2.1.0,MIT isobject,3.0.1,MIT @@ -872,11 +896,14 @@ isstream,0.1.2,MIT istanbul,0.4.5,New BSD istanbul-api,1.2.1,New BSD istanbul-lib-coverage,1.1.1,New BSD +istanbul-lib-coverage,1.2.0,New BSD istanbul-lib-hook,1.1.0,New BSD +istanbul-lib-instrument,1.10.1,New BSD istanbul-lib-instrument,1.9.1,New BSD istanbul-lib-report,1.1.2,New BSD istanbul-lib-source-maps,1.2.2,New BSD istanbul-reports,1.1.3,New BSD +istextorbinary,2.2.1,MIT isurl,1.0.0,MIT jasmine-core,2.9.0,MIT jasmine-jquery,2.1.1,MIT @@ -889,23 +916,25 @@ jquery.waitforimages,2.2.0,MIT js-base64,2.1.9,New BSD js-cookie,2.1.3,MIT js-tokens,3.0.2,MIT +js-yaml,3.11.0,MIT js-yaml,3.7.0,MIT js-yaml,3.9.1,MIT jsbn,0.1.1,MIT +jscodeshift,0.4.1,New BSD +jscodeshift,0.5.0,New BSD jsesc,0.5.0,MIT jsesc,1.3.0,MIT json,1.8.6,ruby +json-buffer,3.0.0,MIT json-jwt,1.9.2,MIT -json-loader,0.5.7,MIT +json-parse-better-errors,1.0.2,MIT json-schema,0.2.3,BSD json-schema-traverse,0.3.1,MIT -json-stable-stringify,0.0.1,MIT json-stable-stringify,1.0.1,MIT json-stringify-safe,5.0.1,ISC json3,3.3.2,MIT json5,0.5.1,MIT jsonify,0.0.0,Public Domain -jsonparse,1.3.1,MIT jsonpointer,4.0.1,MIT jsprim,1.4.1,MIT jszip,3.1.3,(MIT OR GPL-3.0) @@ -915,14 +944,15 @@ kaminari,1.0.1,MIT kaminari-actionview,1.0.1,MIT kaminari-activerecord,1.0.1,MIT kaminari-core,1.0.1,MIT -karma,2.0.0,MIT +karma,2.0.2,MIT karma-chrome-launcher,2.2.0,MIT -karma-coverage-istanbul-reporter,1.4.1,MIT +karma-coverage-istanbul-reporter,1.4.2,MIT karma-jasmine,1.1.1,MIT karma-mocha-reporter,2.2.5,MIT karma-sourcemap-loader,0.3.7,MIT -karma-webpack,2.0.7,MIT +karma-webpack,3.0.0,MIT katex,0.8.3,MIT +keyv,3.0.0,MIT kgio,2.10.0,LGPL-2.1+ killable,1.0.0,ISC kind-of,3.2.2,MIT @@ -930,27 +960,28 @@ kind-of,4.0.0,MIT kind-of,5.1.0,MIT kind-of,6.0.2,MIT kubeclient,3.0.0,MIT -labeled-stream-splicer,2.0.0,MIT latest-version,3.1.0,MIT lazy-cache,1.0.4,MIT lazy-cache,2.0.2,MIT lcid,1.0.0,MIT levn,0.3.0,MIT -lexical-scope,1.2.0,MIT libbase64,0.1.0,MIT libmime,3.0.0,MIT libqp,1.1.0,MIT licensee,8.9.2,MIT lie,3.1.1,MIT +listr,0.13.0,MIT +listr-silent-renderer,1.1.1,MIT +listr-update-renderer,0.4.0,MIT +listr-verbose-renderer,0.4.1,MIT little-plugger,1.1.4,MIT load-json-file,1.1.0,MIT -load-json-file,2.0.0,MIT +load-json-file,4.0.0,MIT loader-runner,2.3.0,MIT -loader-utils,0.2.16,MIT loader-utils,1.1.0,MIT locale,2.1.2,"ruby,LGPLv3+" locate-path,2.0.0,MIT -lodash,3.10.1,MIT +lodash,4.17.10,MIT lodash,4.17.4,MIT lodash,4.17.5,MIT lodash._baseget,3.7.2,MIT @@ -968,24 +999,28 @@ lodash.isarray,3.0.4,MIT lodash.isfunction,3.0.9,MIT lodash.isstring,4.0.1,MIT lodash.kebabcase,4.0.1,MIT -lodash.memoize,3.0.4,MIT lodash.memoize,4.1.2,MIT lodash.mergewith,4.6.0,MIT lodash.snakecase,4.0.1,MIT lodash.startswith,4.2.1,MIT lodash.uniq,4.5.0,MIT lodash.words,4.2.0,MIT +log-symbols,1.0.2,MIT log-symbols,2.1.0,MIT +log-symbols,2.2.0,MIT +log-update,1.0.2,MIT log4js,2.5.3,Apache 2.0 logging,2.2.2,MIT loggly,1.1.1,MIT loglevel,1.4.1,MIT -lograge,0.5.1,MIT +loglevelnext,1.0.3,MIT +lograge,0.10.0,MIT longest,1.0.1,MIT loofah,2.2.2,MIT loose-envify,1.3.1,MIT loud-rejection,1.6.0,MIT lowercase-keys,1.0.0,MIT +lru-cache,2.2.4,MIT lru-cache,2.6.5,ISC lru-cache,4.1.1,ISC macaddress,0.2.8,MIT @@ -994,6 +1029,7 @@ mail_room,0.9.1,MIT mailcomposer,4.0.1,MIT mailgun-js,0.7.15,MIT make-dir,1.0.0,MIT +make-dir,1.2.0,MIT map-cache,0.2.2,MIT map-obj,1.0.1,MIT map-stream,0.1.0,UNKNOWN @@ -1004,19 +1040,25 @@ math-expression-evaluator,1.2.16,MIT md5.js,1.3.4,MIT media-typer,0.3.0,MIT mem,1.1.0,MIT +mem-fs,1.1.3,MIT +mem-fs-editor,4.0.1,MIT memoist,0.16.0,MIT memory-fs,0.2.0,MIT memory-fs,0.4.1,MIT meow,3.7.0,MIT merge-descriptors,1.0.1,MIT +merge2,1.2.2,MIT method_source,0.8.2,MIT methods,1.1.2,MIT micromatch,2.3.11,MIT +micromatch,3.1.10,MIT micromatch,3.1.6,MIT +micromatch,3.1.9,MIT miller-rabin,4.0.1,MIT mime,1.4.1,MIT mime,1.6.0,MIT -mime-db,1.29.0,MIT +mime,2.2.0,MIT +mime,2.3.1,MIT mime-db,1.33.0,MIT mime-types,2.1.18,MIT mime-types,3.1,MIT @@ -1028,15 +1070,14 @@ mini_mime,1.0.0,MIT mini_portile2,2.3.0,MIT minimalistic-assert,1.0.0,ISC minimalistic-crypto-utils,1.0.1,MIT -minimatch,3.0.3,ISC minimatch,3.0.4,ISC minimist,0.0.10,MIT minimist,0.0.8,MIT +minimist,0.1.0,MIT minimist,1.2.0,MIT mississippi,2.0.0,Simplified BSD mixin-deep,1.3.1,MIT mkdirp,0.5.1,MIT -module-deps,4.1.1,MIT moment,2.19.2,MIT monaco-editor,0.10.0,MIT mousetrap,1.4.6,Apache 2.0 @@ -1048,21 +1089,24 @@ multi_json,1.13.1,MIT multi_xml,0.6.0,MIT multicast-dns,6.1.1,MIT multicast-dns-service-types,1.1.0,MIT +multimatch,2.1.0,MIT multipart-post,2.0.0,MIT mustermann,1.0.2,MIT mustermann-grape,1.0.0,MIT mute-stream,0.0.5,ISC mute-stream,0.0.7,ISC mysql2,0.4.10,MIT -name-all-modules-plugin,1.0.1,MIT nan,2.8.0,MIT nanomatch,1.2.9,MIT natural-compare,1.4.0,MIT negotiator,0.6.1,MIT +neo-async,2.5.0,MIT net-ldap,0.16.0,MIT net-ssh,4.2.0,MIT netmask,1.0.6,MIT netrc,0.11.0,MIT +nice-try,1.0.4,MIT +node-dir,0.1.8,MIT node-forge,0.6.33,New BSD node-libs-browser,1.1.1,MIT node-libs-browser,2.0.0,MIT @@ -1075,8 +1119,9 @@ nodemailer-shared,1.1.0,MIT nodemailer-smtp-pool,2.8.2,MIT nodemailer-smtp-transport,2.7.2,MIT nodemailer-wellknown,0.1.10,MIT -nodemon,1.15.1,MIT +nodemon,1.17.3,MIT nokogiri,1.8.2,MIT +nomnom,1.8.1,MIT nopt,1.0.10,MIT nopt,3.0.6,ISC nopt,4.0.1,ISC @@ -1084,6 +1129,7 @@ normalize-package-data,2.4.0,Simplified BSD normalize-path,2.1.1,MIT normalize-range,0.1.2,MIT normalize-url,1.9.1,MIT +normalize-url,2.0.1,MIT npm-run-path,2.0.2,MIT npmlog,4.1.2,ISC null-check,1.0.0,MIT @@ -1108,10 +1154,9 @@ omniauth-authentiq,0.3.1,MIT omniauth-azure-oauth2,0.0.9,MIT omniauth-cas3,1.1.4,MIT omniauth-facebook,4.0.0,MIT -omniauth-github,1.1.2,MIT +omniauth-github,1.3.0,MIT omniauth-gitlab,1.0.2,MIT omniauth-google-oauth2,0.5.3,MIT -omniauth-jwt,0.0.2,MIT omniauth-kerberos,0.3.0,MIT omniauth-multipassword,0.4.2,MIT omniauth-oauth,1.1.0,MIT @@ -1130,36 +1175,39 @@ opener,1.4.3,(WTFPL OR MIT) opn,5.2.0,MIT optimist,0.6.1,MIT optionator,0.8.2,MIT +ora,0.2.3,MIT org-ruby,0.9.12,MIT original,1.0.0,MIT orm_adapter,0.5.0,MIT os,0.9.6,MIT os-browserify,0.2.1,MIT -os-browserify,0.3.0,MIT os-homedir,1.0.2,MIT -os-locale,1.4.0,MIT os-locale,2.1.0,MIT os-tmpdir,1.0.2,MIT osenv,0.1.5,ISC p-cancelable,0.3.0,MIT +p-cancelable,0.4.1,MIT +p-each-series,1.0.0,MIT p-finally,1.0.0,MIT -p-limit,1.1.0,MIT +p-is-promise,1.1.0,MIT +p-lazy,1.0.0,MIT p-limit,1.2.0,MIT p-locate,2.0.0,MIT p-map,1.1.1,MIT -p-timeout,1.2.0,MIT +p-reduce,1.0.0,MIT +p-timeout,1.2.1,MIT +p-timeout,2.0.1,MIT p-try,1.0.0,MIT pac-proxy-agent,1.1.0,MIT pac-resolver,2.0.0,MIT package-json,4.0.1,MIT pako,0.2.9,MIT -pako,1.0.5,(MIT AND Zlib) pako,1.0.6,(MIT AND Zlib) parallel-transform,1.1.0,MIT -parents,1.0.1,MIT parse-asn1,5.1.0,ISC parse-glob,3.0.4,MIT parse-json,2.2.0,MIT +parse-json,4.0.0,MIT parse-passwd,1.0.0,MIT parseqs,0.0.5,MIT parseuri,0.0.5,MIT @@ -1173,18 +1221,15 @@ path-is-absolute,1.0.1,MIT path-is-inside,1.0.2,(WTFPL OR MIT) path-key,2.0.1,MIT path-parse,1.0.5,MIT -path-platform,0.11.15,MIT path-proxy,1.0.0,MIT path-to-regexp,0.1.7,MIT path-type,1.1.0,MIT -path-type,2.0.0,MIT path-type,3.0.0,MIT pause-stream,0.0.11,Apache 2.0 pbkdf2,3.0.14,MIT peek,1.0.1,MIT peek-gc,0.0.2,MIT peek-mysql2,1.1.0,MIT -peek-performance_bar,1.3.1,MIT peek-pg,1.3.0,MIT peek-rblineprof,0.2.0,MIT peek-redis,1.2.0,MIT @@ -1206,9 +1251,8 @@ portfinder,1.0.13,MIT posix-character-classes,0.1.1,MIT posix-spawn,0.3.13,MIT postcss,5.2.16,MIT -postcss,6.0.14,MIT -postcss,6.0.15,MIT postcss,6.0.19,MIT +postcss,6.0.21,MIT postcss-calc,5.3.1,MIT postcss-colormin,2.2.2,MIT postcss-convert-values,2.6.1,MIT @@ -1248,13 +1292,15 @@ prelude-ls,1.1.2,MIT premailer,1.10.4,New BSD premailer-rails,1.9.7,MIT prepend-http,1.0.4,MIT +prepend-http,2.0.0,MIT preserve,0.2.0,MIT +prettier,1.10.2,MIT prettier,1.11.1,MIT prettier,1.8.2,MIT +pretty-bytes,4.0.2,MIT prismjs,1.6.0,MIT private,0.1.8,MIT process,0.11.10,MIT -process,0.11.9,MIT process-nextick-args,1.0.7,MIT process-nextick-args,2.0.0,MIT progress,1.1.8,MIT @@ -1263,6 +1309,7 @@ promise-inflight,1.0.1,ISC proxy-addr,2.0.3,MIT proxy-agent,2.0.0,MIT prr,0.0.0,MIT +prr,1.0.1,MIT ps-tree,1.1.0,MIT pseudomap,1.0.2,ISC pstree.remy,1.1.0,MIT @@ -1280,11 +1327,12 @@ qs,6.2.3,New BSD qs,6.4.0,New BSD qs,6.5.1,New BSD query-string,4.3.2,MIT +query-string,5.1.1,MIT querystring,0.2.0,MIT querystring-es3,0.2.1,MIT querystringify,0.0.4,MIT querystringify,1.0.0,MIT -rack,1.6.9,MIT +rack,1.6.10,MIT rack-accept,0.4.5,MIT rack-attack,4.4.1,MIT rack-cors,1.0.2,MIT @@ -1300,7 +1348,7 @@ rails-i18n,4.0.9,MIT railties,4.2.10,MIT rainbow,2.2.2,MIT raindrops,0.18.0,LGPL-2.1+ -rake,12.3.0,MIT +rake,12.3.1,MIT randomatic,1.1.7,MIT randombytes,2.0.6,MIT randomfill,1.0.4,MIT @@ -1313,27 +1361,24 @@ rb-fsevent,0.10.2,MIT rb-inotify,0.9.10,MIT rbnacl,4.0.2,MIT rbnacl-libsodium,1.0.11,MIT -rc,1.2.1,(BSD-2-Clause OR MIT OR Apache-2.0) rc,1.2.5,(BSD-2-Clause OR MIT OR Apache-2.0) rdoc,4.2.2,ruby re2,1.1.1,New BSD -react-dev-utils,5.0.0,MIT -react-error-overlay,4.0.0,MIT -read-only-stream,2.0.0,MIT +read-chunk,2.1.0,MIT read-pkg,1.1.0,MIT -read-pkg,2.0.0,MIT +read-pkg,3.0.0,MIT read-pkg-up,1.0.1,MIT -read-pkg-up,2.0.0,MIT +read-pkg-up,3.0.0,MIT readable-stream,1.1.14,MIT readable-stream,2.0.6,MIT -readable-stream,2.3.3,MIT readable-stream,2.3.4,MIT readdirp,2.1.0,MIT readline2,1.0.1,MIT recaptcha,3.0.0,MIT +recast,0.12.9,MIT +recast,0.14.7,MIT rechoir,0.6.2,MIT recursive-open-struct,1.0.5,MIT -recursive-readdir,2.2.1,MIT redcarpet,3.4.0,MIT redent,1.0.0,MIT redis,2.8.0,MIT @@ -1364,6 +1409,8 @@ repeat-element,1.1.2,MIT repeat-string,0.2.2,MIT repeat-string,1.6.1,MIT repeating,2.0.1,MIT +replace-ext,0.0.1,MIT +replace-ext,1.0.0,MIT representable,3.0.4,MIT request,2.75.0,Apache 2.0 request,2.81.0,Apache 2.0 @@ -1378,24 +1425,27 @@ require-uncached,1.0.3,MIT requires-port,1.0.0,MIT resolve,1.1.7,MIT resolve,1.5.0,MIT +resolve,1.7.1,MIT resolve-cwd,2.0.0,MIT resolve-dir,1.0.1,MIT resolve-from,1.0.1,MIT resolve-from,3.0.0,MIT resolve-url,0.2.1,MIT -responders,2.3.0,MIT +responders,2.4.0,MIT +responselike,1.0.2,MIT rest-client,2.0.2,MIT restore-cursor,1.0.1,MIT restore-cursor,2.0.0,MIT ret,0.1.15,MIT retriable,3.1.1,MIT right-align,0.1.3,MIT +rimraf,2.2.8,MIT rimraf,2.6.1,ISC rimraf,2.6.2,ISC rinku,2.0.0,ISC ripemd160,2.0.1,MIT rotp,2.1.2,MIT -rouge,2.2.1,MIT +rouge,3.1.1,MIT rqrcode,0.7.0,MIT rqrcode-rails3,0.1.7,MIT ruby-enum,0.7.2,MIT @@ -1413,6 +1463,7 @@ run-queue,1.0.3,ISC rx-lite,3.1.2,Apache 2.0 rx-lite,4.0.8,Apache 2.0 rx-lite-aggregates,4.0.8,Apache 2.0 +rxjs,5.5.10,Apache 2.0 safe-buffer,5.1.1,MIT safe-regex,1.1.0,MIT safe_yaml,1.0.4,MIT @@ -1423,8 +1474,8 @@ sass-listen,4.0.0,MIT sass-rails,5.0.6,MIT sawyer,0.8.1,MIT sax,1.2.2,ISC -schema-utils,0.3.0,MIT schema-utils,0.4.5,MIT +scoped-regex,1.0.0,MIT securecompare,1.0.0,MIT seed-fu,2.3.7,MIT select,1.1.2,MIT @@ -1452,11 +1503,11 @@ setprototypeof,1.1.0,ISC settingslogic,2.0.9,MIT sexp_processor,4.9.0,MIT sha.js,2.4.10,MIT -shasum,1.0.2,MIT +sha1,1.1.1,New BSD shebang-command,1.2.0,MIT shebang-regex,1.0.0,MIT -shell-quote,1.6.1,MIT shelljs,0.7.8,New BSD +shelljs,0.8.1,New BSD sidekiq,5.0.5,LGPL sidekiq-cron,0.6.0,MIT sidekiq-limit_fetch,3.4.0,MIT @@ -1466,6 +1517,7 @@ slack-node,0.2.0,MIT slack-notifier,1.5.1,MIT slash,1.0.0,MIT slice-ansi,0.0.4,MIT +slide,1.1.6,ISC smart-buffer,1.1.15,MIT smtp-connection,2.12.0,MIT snapdragon,0.8.1,MIT @@ -1483,6 +1535,7 @@ socks,1.1.10,MIT socks,1.1.9,MIT socks-proxy-agent,2.1.1,MIT sort-keys,1.1.2,MIT +sort-keys,2.0.0,MIT source-list-map,2.0.0,MIT source-map,0.2.0,New BSD source-map,0.4.4,New BSD @@ -1516,50 +1569,51 @@ statuses,1.3.1,MIT statuses,1.4.0,MIT stream-browserify,2.0.1,MIT stream-combiner,0.0.4,MIT -stream-combiner2,1.1.1,MIT stream-each,1.2.2,MIT -stream-http,2.6.3,MIT stream-http,2.8.0,MIT stream-shift,1.0.0,MIT -stream-splicer,2.0.0,MIT +stream-to-observable,0.2.0,MIT streamroller,0.7.0,MIT strict-uri-encode,1.1.0,MIT +string-template,0.2.1,MIT string-width,1.0.2,MIT -string-width,2.0.0,MIT string-width,2.1.1,MIT string_decoder,0.10.31,MIT string_decoder,1.0.3,MIT -stringex,2.7.1,MIT +stringex,2.8.4,MIT stringstream,0.0.5,MIT +strip-ansi,0.1.1,MIT strip-ansi,3.0.1,MIT strip-ansi,4.0.0,MIT strip-bom,2.0.0,MIT strip-bom,3.0.0,MIT +strip-bom-stream,2.0.0,MIT strip-eof,1.0.0,MIT strip-indent,1.0.1,MIT strip-json-comments,2.0.1,MIT -style-loader,0.20.2,MIT -subarg,1.0.0,MIT +style-loader,0.21.0,MIT supports-color,2.0.0,MIT supports-color,3.2.3,MIT -supports-color,4.2.1,MIT -supports-color,4.5.0,MIT supports-color,5.1.0,MIT supports-color,5.2.0,MIT +supports-color,5.4.0,MIT svg4everybody,2.1.9,CC0-1.0 svgo,0.7.2,MIT -syntax-error,1.4.0,MIT +symbol-observable,0.2.4,MIT +symbol-observable,1.0.1,MIT sys-filesystem,1.1.6,Artistic 2.0 table,3.8.3,New BSD tapable,0.1.10,MIT -tapable,0.2.8,MIT +tapable,1.0.0,MIT tar,2.2.1,ISC tar-pack,3.4.1,Simplified BSD +temp,0.8.3,MIT temple,0.7.7,MIT term-size,1.2.0,MIT -test-exclude,4.1.1,ISC +test-exclude,4.2.1,ISC text,1.3.1,MIT text-table,0.2.0,MIT +textextensions,2.2.0,MIT thor,0.19.4,MIT thread_safe,0.3.6,Apache 2.0 three,0.84.0,MIT @@ -1570,7 +1624,6 @@ through2,2.0.3,MIT thunkify,2.1.2,MIT thunky,0.1.0,MIT* tilt,2.0.6,MIT -time-stamp,2.0.0,MIT timeago.js,3.0.2,MIT timed-out,4.0.1,MIT timers-browserify,1.4.2,MIT @@ -1585,6 +1638,7 @@ to-fast-properties,1.0.3,MIT to-fast-properties,2.0.0,MIT to-object-path,0.3.0,MIT to-regex,3.0.1,MIT +to-regex,3.0.2,MIT to-regex-range,2.1.1,MIT toml-rb,1.0.0,MIT touch,3.1.0,ISC @@ -1597,7 +1651,6 @@ tryer,1.0.0,MIT tryit,1.0.3,MIT tsscmp,1.0.5,MIT tty-browserify,0.0.0,MIT -tty-browserify,0.0.1,MIT tunnel-agent,0.4.3,Apache 2.0 tunnel-agent,0.6.0,Apache 2.0 tweetnacl,0.14.5,Unlicense @@ -1608,16 +1661,17 @@ tzinfo,1.2.5,MIT u2f,0.2.1,MIT uber,0.1.0,MIT uglifier,2.7.2,MIT +uglify-es,3.3.9,Simplified BSD uglify-js,2.8.29,Simplified BSD uglify-to-browserify,1.0.2,MIT -uglifyjs-webpack-plugin,0.4.6,MIT +uglifyjs-webpack-plugin,1.2.5,MIT uid-number,0.0.6,ISC ultron,1.1.1,MIT -umd,3.0.1,MIT unc-path-regex,0.1.2,MIT undefsafe,2.0.2,MIT +underscore,1.6.0,MIT underscore,1.7.0,MIT -underscore,1.8.3,MIT +underscore,1.9.0,MIT unf,0.1.4,BSD unf_ext,0.0.7.5,MIT unicorn,5.1.0,ruby @@ -1631,25 +1685,30 @@ unique-slug,2.0.0,ISC unique-string,1.0.0,MIT unpipe,1.0.0,MIT unset-value,1.0.0,MIT +untildify,3.0.2,MIT unzip-response,2.0.1,MIT upath,1.0.2,MIT update-notifier,2.3.0,Simplified BSD urix,0.1.0,MIT url,0.11.0,MIT -url-loader,0.6.2,MIT +url-join,2.0.5,MIT +url-join,4.0.0,MIT +url-loader,1.0.1,MIT url-parse,1.0.5,MIT url-parse,1.1.9,MIT url-parse-lax,1.0.0,MIT +url-parse-lax,3.0.0,MIT url-to-options,1.0.1,MIT url_safe_base64,0.2.2,MIT use,2.0.2,MIT user-home,2.0.0,MIT -useragent,2.3.0,MIT +useragent,2.2.1,MIT util,0.10.3,MIT util-deprecate,1.0.2,MIT utils-merge,1.0.1,MIT uuid,3.2.1,MIT uws,9.14.0,Zlib +v8-compile-cache,1.1.2,MIT validate-npm-package-license,3.0.1,Apache 2.0 validates_hostname,1.0.6,MIT vary,1.1.1,MIT @@ -1657,38 +1716,46 @@ vary,1.1.2,MIT vendors,1.0.1,MIT verror,1.10.0,MIT version_sorter,2.1.0,MIT +vinyl,1.2.0,MIT +vinyl,2.1.0,MIT +vinyl-file,2.0.0,MIT virtus,1.0.5,MIT visibilityjs,1.2.4,MIT vm-browserify,0.0.4,MIT vmstat,2.3.0,MIT void-elements,2.0.1,MIT -vue,2.5.13,MIT +vue,2.5.16,MIT vue-eslint-parser,2.0.1,MIT -vue-hot-reload-api,2.2.4,MIT -vue-loader,14.1.1,MIT -vue-resource,1.3.5,MIT +vue-hot-reload-api,2.3.0,MIT +vue-loader,14.2.2,MIT +vue-resource,1.5.0,MIT vue-router,3.0.1,MIT -vue-style-loader,4.0.2,MIT -vue-template-compiler,2.5.13,MIT +vue-style-loader,4.1.0,MIT +vue-template-compiler,2.5.16,MIT vue-template-es2015-compiler,1.6.0,MIT +vue-virtual-scroll-list,1.2.5,MIT vuex,3.0.1,MIT -warden,1.2.6,MIT -watchpack,1.4.0,MIT +warden,1.2.7,MIT +watchpack,1.5.0,MIT wbuf,1.7.2,MIT -webpack,3.11.0,MIT -webpack-bundle-analyzer,2.10.0,MIT -webpack-dev-middleware,1.12.2,MIT -webpack-dev-server,2.11.2,MIT +webpack,4.7.0,MIT +webpack-addons,1.1.5,MIT +webpack-bundle-analyzer,2.11.1,MIT +webpack-cli,2.1.2,MIT +webpack-dev-middleware,2.0.6,MIT +webpack-dev-middleware,3.1.3,MIT +webpack-dev-server,3.1.4,MIT +webpack-log,1.1.2,MIT +webpack-log,1.2.0,MIT webpack-rails,0.9.10,MIT webpack-sources,1.0.1,MIT -webpack-stats-plugin,0.1.5,MIT +webpack-sources,1.1.0,MIT +webpack-stats-plugin,0.2.1,MIT websocket-driver,0.6.5,MIT websocket-extensions,0.1.1,MIT when,3.7.8,MIT whet.extend,0.9.9,MIT -which,1.2.12,ISC which,1.3.0,ISC -which-module,1.0.0,ISC which-module,2.0.0,ISC wide-align,1.1.2,ISC widest-line,2.0.0,MIT @@ -1697,10 +1764,12 @@ window-size,0.1.0,MIT wordwrap,0.0.2,MIT wordwrap,0.0.3,MIT wordwrap,1.0.0,MIT -worker-loader,1.1.0,MIT +worker-farm,1.5.2,MIT +worker-loader,1.1.1,MIT wrap-ansi,2.1.0,MIT wrappy,1.0.2,ISC write,0.2.1,MIT +write-file-atomic,1.3.4,ISC write-file-atomic,2.3.0,ISC ws,3.3.3,MIT ws,4.0.0,MIT @@ -1712,9 +1781,12 @@ xtend,4.0.1,MIT y18n,3.2.1,ISC y18n,4.0.0,ISC yallist,2.1.2,ISC +yargs,1.2.6,MIT +yargs,11.0.0,MIT +yargs,11.1.0,MIT yargs,3.10.0,MIT -yargs,6.6.0,MIT -yargs,8.0.2,MIT -yargs-parser,4.2.1,ISC -yargs-parser,7.0.0,ISC +yargs-parser,9.0.2,ISC yeast,0.1.2,MIT +yeoman-environment,2.0.5,Simplified BSD +yeoman-environment,2.0.6,Simplified BSD +yeoman-generator,2.0.5,Simplified BSD diff --git a/yarn.lock b/yarn.lock index 69816faae65..df9576ed858 100644 --- a/yarn.lock +++ b/yarn.lock @@ -444,9 +444,9 @@ aws4@^1.2.1, aws4@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" -axios-mock-adapter@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/axios-mock-adapter/-/axios-mock-adapter-1.10.0.tgz#3ccee65466439a2c7567e932798fc0377d39209d" +axios-mock-adapter@^1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/axios-mock-adapter/-/axios-mock-adapter-1.15.0.tgz#fbc06825d8302c95c3334d21023bba996255d45d" dependencies: deep-equal "^1.0.1" @@ -5410,10 +5410,6 @@ lodash.deburr@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/lodash.deburr/-/lodash.deburr-4.1.0.tgz#ddb1bbb3ef07458c0177ba07de14422cb033ff9b" -lodash.endswith@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.endswith/-/lodash.endswith-4.2.1.tgz#fed59ac1738ed3e236edd7064ec456448b37bc09" - lodash.escaperegexp@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" @@ -5429,14 +5425,6 @@ lodash.isarray@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" -lodash.isfunction@^3.0.8: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - lodash.kebabcase@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.0.1.tgz#5e63bc9aa2a5562ff3b97ca7af2f803de1bcb90e" @@ -5459,10 +5447,6 @@ lodash.snakecase@4.0.1: lodash.deburr "^4.0.0" lodash.words "^4.0.0" -lodash.startswith@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.startswith/-/lodash.startswith-4.2.1.tgz#c598c4adce188a27e53145731cdc6c0e7177600c" - lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -8795,13 +8779,8 @@ unzip-response@^2.0.1: resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" upath@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.2.tgz#80aaae5395abc5fd402933ae2f58694f0860204c" - dependencies: - lodash.endswith "^4.2.1" - lodash.isfunction "^3.0.8" - lodash.isstring "^4.0.1" - lodash.startswith "^4.2.1" + version "1.0.5" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.5.tgz#02cab9ecebe95bbec6d5fc2566325725ab6d1a73" update-notifier@^2.3.0: version "2.3.0" |