Add latest changes from gitlab-org/gitlab@master
|
@ -0,0 +1,28 @@
|
|||
<!-- Title suggestion: [Feature flag] Remove FEATURE_FLAG_NAME -->
|
||||
|
||||
## Feature
|
||||
|
||||
The `:feature_name` feature flag was previously [enabled by default](URL) and should be removed.
|
||||
|
||||
## Owners
|
||||
|
||||
- Group: ~"group::GROUP_NAME"
|
||||
- Slack channel: `#g_GROUP_NAME`
|
||||
- DRI: USERNAME
|
||||
- PM: USERNAME
|
||||
|
||||
**Removal**
|
||||
|
||||
This is an __important__ phase, that should be either done in the next Milestone or as soon as possible. For the cleanup phase, please follow our documentation on how to [clean up the feature flag](https://docs.gitlab.com/ee/development/feature_flags/controls.html#cleaning-up).
|
||||
|
||||
- [ ] Remove `:feature_name` feature flag
|
||||
- [ ] Remove all references to the feature flag from the codebase
|
||||
- [ ] Remove the YAML definitions for the feature from the repository
|
||||
- [ ] Create a Changelog Entry
|
||||
|
||||
- [ ] Clean up the feature flag from all environments by running this chatops command in `#production` channel `/chatops run feature delete some_feature`.
|
||||
|
||||
- [ ] Close this issue after the feature flag is removed from the codebase.
|
||||
|
||||
/label ~"feature flag" ~"technical debt"
|
||||
/assign DRI
|
|
@ -59,7 +59,7 @@ Are there any other stages or teams involved that need to be kept in the loop?
|
|||
|
||||
<!-- Please check which steps are needed and remove those which don't apply -->
|
||||
|
||||
**Initial Rollout**
|
||||
**Rollout Steps**
|
||||
|
||||
*Preparation Phase*
|
||||
- [ ] Enable on staging (`/chatops run feature set feature_name true --staging`)
|
||||
|
@ -85,28 +85,14 @@ Are there any other stages or teams involved that need to be kept in the loop?
|
|||
- For actor-based rollout: `/chatops run feature set feature_name 10 --actors`
|
||||
- For time-based rollout: `/chatops run feature set feature_name 10`
|
||||
|
||||
*Full Rollout Phase*
|
||||
- [ ] Make the feature flag enabled by default i.e. Change `default_enabled` to `true`
|
||||
|
||||
- [ ] Cross post chatops slack command to `#support_gitlab-com` ([more guidance when this is necessary in the dev docs](https://docs.gitlab.com/ee/development/feature_flags/controls.html#where-to-run-commands)) and in your team channel
|
||||
|
||||
|
||||
**Cleanup**
|
||||
|
||||
This is an __important__ phase, that should be either done in the next Milestone or as soon as possible. For the cleanup phase, please follow our documentation on how to [clean up the feature flag](https://docs.gitlab.com/ee/development/feature_flags/controls.html#cleaning-up).
|
||||
|
||||
<!-- The checklist here is to keep track of it's status for stakeholders -->
|
||||
- [ ] Announce on the issue that the flag has been enabled
|
||||
|
||||
- [ ] Remove `:feature_name` feature flag
|
||||
- [ ] Remove all references to the feature flag from the codebase
|
||||
- [ ] Remove the YAML definitions for the feature from the repository
|
||||
- [ ] Create a Changelog Entry
|
||||
|
||||
- [ ] Clean up the feature flag from all environments by running this chatops command in `#production` channel `/chatops run feature delete some_feature`.
|
||||
|
||||
**Final Step**
|
||||
|
||||
- [ ] Close this rollout issue for the feature flag after the feature flag is removed from the codebase.
|
||||
- [ ] Create a cleanup issue using the "Feature Flag Removal" template
|
||||
|
||||
## Rollback Steps
|
||||
|
||||
|
|
2
Gemfile
|
@ -485,7 +485,7 @@ gem 'gitaly', '~> 13.11.0.pre.rc1'
|
|||
|
||||
gem 'grpc', '~> 1.30.2'
|
||||
|
||||
gem 'google-protobuf', '~> 3.15.8'
|
||||
gem 'google-protobuf', '~> 3.14.0'
|
||||
|
||||
gem 'toml-rb', '~> 1.0.0'
|
||||
|
||||
|
|
|
@ -518,7 +518,7 @@ GEM
|
|||
signet (~> 0.12)
|
||||
google-cloud-env (1.4.0)
|
||||
faraday (>= 0.17.3, < 2.0)
|
||||
google-protobuf (3.15.8)
|
||||
google-protobuf (3.14.0)
|
||||
googleapis-common-protos-types (1.0.5)
|
||||
google-protobuf (~> 3.11)
|
||||
googleauth (0.14.0)
|
||||
|
@ -1466,7 +1466,7 @@ DEPENDENCIES
|
|||
gitlab_omniauth-ldap (~> 2.1.1)
|
||||
gon (~> 6.4.0)
|
||||
google-api-client (~> 0.33)
|
||||
google-protobuf (~> 3.15.8)
|
||||
google-protobuf (~> 3.14.0)
|
||||
gpgme (~> 2.0.19)
|
||||
grape (~> 1.5.2)
|
||||
grape-entity (~> 0.7.1)
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
<script>
|
||||
import { GlButton, GlSprintf } from '@gitlab/ui';
|
||||
import { __ } from '~/locale';
|
||||
import PipelineEditorFileNav from '~/pipeline_editor/components/file_nav/pipeline_editor_file_nav.vue';
|
||||
import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
GlButton,
|
||||
GlSprintf,
|
||||
PipelineEditorFileNav,
|
||||
},
|
||||
i18n: {
|
||||
title: __('Optimize your workflow with CI/CD Pipelines'),
|
||||
|
@ -22,6 +24,9 @@ export default {
|
|||
},
|
||||
},
|
||||
computed: {
|
||||
showFileNav() {
|
||||
return this.glFeatures.pipelineEditorBranchSwitcher;
|
||||
},
|
||||
showCTAButton() {
|
||||
return this.glFeatures.pipelineEditorEmptyStateAction;
|
||||
},
|
||||
|
@ -34,23 +39,28 @@ export default {
|
|||
};
|
||||
</script>
|
||||
<template>
|
||||
<div class="gl-display-flex gl-flex-direction-column gl-align-items-center gl-mt-11">
|
||||
<img :src="emptyStateIllustrationPath" />
|
||||
<h1 class="gl-font-size-h1">{{ $options.i18n.title }}</h1>
|
||||
<p class="gl-mt-3">
|
||||
<gl-sprintf :message="$options.i18n.body">
|
||||
<template #code="{ content }">
|
||||
<code>{{ content }}</code>
|
||||
</template>
|
||||
</gl-sprintf>
|
||||
</p>
|
||||
<gl-button
|
||||
v-if="showCTAButton"
|
||||
variant="confirm"
|
||||
class="gl-mt-3"
|
||||
@click="createEmptyConfigFile"
|
||||
>
|
||||
{{ $options.i18n.btnText }}
|
||||
</gl-button>
|
||||
<div>
|
||||
<div class="gl-mb-5">
|
||||
<pipeline-editor-file-nav v-if="showFileNav" v-on="$listeners" />
|
||||
</div>
|
||||
<div class="gl-display-flex gl-flex-direction-column gl-align-items-center gl-mt-11">
|
||||
<img :src="emptyStateIllustrationPath" />
|
||||
<h1 class="gl-font-size-h1">{{ $options.i18n.title }}</h1>
|
||||
<p class="gl-mt-3">
|
||||
<gl-sprintf :message="$options.i18n.body">
|
||||
<template #code="{ content }">
|
||||
<code>{{ content }}</code>
|
||||
</template>
|
||||
</gl-sprintf>
|
||||
</p>
|
||||
<gl-button
|
||||
v-if="showCTAButton"
|
||||
variant="confirm"
|
||||
class="gl-mt-3"
|
||||
@click="createEmptyConfigFile"
|
||||
>
|
||||
{{ $options.i18n.btnText }}
|
||||
</gl-button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
@ -18,7 +18,6 @@ export const resolvers = {
|
|||
repository: {
|
||||
__typename: 'Repository',
|
||||
branches: [
|
||||
{ __typename: 'Branch', name: 'master' },
|
||||
{ __typename: 'Branch', name: 'main' },
|
||||
{ __typename: 'Branch', name: 'develop' },
|
||||
{ __typename: 'Branch', name: 'production' },
|
||||
|
|
|
@ -80,6 +80,12 @@ export default {
|
|||
|
||||
this.lastCommittedContent = fileContent;
|
||||
this.currentCiFileContent = fileContent;
|
||||
|
||||
// make sure to reset the start screen flag during a refetch
|
||||
// e.g. when switching branches
|
||||
if (fileContent.length) {
|
||||
this.showStartScreen = false;
|
||||
}
|
||||
},
|
||||
error(error) {
|
||||
this.handleBlobContentError(error);
|
||||
|
@ -236,6 +242,7 @@ export default {
|
|||
<pipeline-editor-empty-state
|
||||
v-else-if="showStartScreen"
|
||||
@createEmptyConfigFile="setNewEmptyCiConfigFile"
|
||||
@refetchContent="refetchContent"
|
||||
/>
|
||||
<div v-else>
|
||||
<pipeline-editor-messages
|
||||
|
|
|
@ -71,7 +71,7 @@ class InvitesController < ApplicationController
|
|||
def ensure_member_exists
|
||||
return if member
|
||||
|
||||
render_404
|
||||
redirect_back_or_default(options: { alert: _("The invitation can not be found with the provided invite token.") })
|
||||
end
|
||||
|
||||
def track_invite_join_click
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Types
|
||||
module Packages
|
||||
module Maven
|
||||
class MetadatumType < BaseObject
|
||||
graphql_name 'MavenMetadata'
|
||||
description 'Maven metadata'
|
||||
|
||||
authorize :read_package
|
||||
|
||||
field :id, ::Types::GlobalIDType[::Packages::Maven::Metadatum], null: false, description: 'ID of the metadatum.'
|
||||
field :created_at, Types::TimeType, null: false, description: 'Date of creation.'
|
||||
field :updated_at, Types::TimeType, null: false, description: 'Date of most recent update.'
|
||||
field :path, GraphQL::STRING_TYPE, null: false, description: 'Path of the Maven package.'
|
||||
field :app_group, GraphQL::STRING_TYPE, null: false, description: 'App group of the Maven package.'
|
||||
field :app_version, GraphQL::STRING_TYPE, null: true, description: 'App version of the Maven package.'
|
||||
field :app_name, GraphQL::STRING_TYPE, null: false, description: 'App name of the Maven package.'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -6,7 +6,7 @@ module Types
|
|||
graphql_name 'PackageMetadata'
|
||||
description 'Represents metadata associated with a Package'
|
||||
|
||||
possible_types ::Types::Packages::Composer::MetadatumType, ::Types::Packages::Conan::MetadatumType
|
||||
possible_types ::Types::Packages::Composer::MetadatumType, ::Types::Packages::Conan::MetadatumType, ::Types::Packages::Maven::MetadatumType
|
||||
|
||||
def self.resolve_type(object, context)
|
||||
case object
|
||||
|
@ -14,6 +14,8 @@ module Types
|
|||
::Types::Packages::Composer::MetadatumType
|
||||
when ::Packages::Conan::Metadatum
|
||||
::Types::Packages::Conan::MetadatumType
|
||||
when ::Packages::Maven::Metadatum
|
||||
::Types::Packages::Maven::MetadatumType
|
||||
else
|
||||
# NOTE: This method must be kept in sync with `PackageWithoutVersionsType#metadata`,
|
||||
# which must never produce data that this discriminator cannot handle.
|
||||
|
|
|
@ -44,6 +44,8 @@ module Types
|
|||
object.composer_metadatum
|
||||
when 'conan'
|
||||
object.conan_metadatum
|
||||
when 'maven'
|
||||
object.maven_metadatum
|
||||
else
|
||||
nil
|
||||
end
|
||||
|
|
|
@ -18,7 +18,7 @@ module Ci
|
|||
"initial-branch-name": params[:branch_name],
|
||||
"lint-help-page-path" => help_page_path('ci/lint', anchor: 'validate-basic-logic-and-syntax'),
|
||||
"new-merge-request-path" => namespace_project_new_merge_request_path,
|
||||
"pipeline_etag" => graphql_etag_pipeline_sha_path(project.commit.sha),
|
||||
"pipeline_etag" => project.commit ? graphql_etag_pipeline_sha_path(commit_sha) : '',
|
||||
"project-path" => project.path,
|
||||
"project-full-path" => project.full_path,
|
||||
"project-namespace" => project.namespace.full_path,
|
||||
|
|
|
@ -36,6 +36,15 @@ module BulkImports
|
|||
end
|
||||
end
|
||||
|
||||
def self.config(exportable)
|
||||
case exportable
|
||||
when ::Project
|
||||
Exports::ProjectConfig.new(exportable)
|
||||
when ::Group
|
||||
Exports::GroupConfig.new(exportable)
|
||||
end
|
||||
end
|
||||
|
||||
def exportable_relation?
|
||||
return unless exportable
|
||||
|
||||
|
@ -54,12 +63,7 @@ module BulkImports
|
|||
|
||||
def config
|
||||
strong_memoize(:config) do
|
||||
case exportable
|
||||
when ::Project
|
||||
Exports::ProjectConfig.new(exportable)
|
||||
when ::Group
|
||||
Exports::GroupConfig.new(exportable)
|
||||
end
|
||||
self.class.config(exportable)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -13,11 +13,6 @@ module BulkImports
|
|||
attributes_finder.find_root(exportable_class_sym)
|
||||
end
|
||||
|
||||
def validate_user_permissions!(user)
|
||||
user.can?(ability, exportable) ||
|
||||
raise(::Gitlab::ImportExport::Error.permission_error(user, exportable))
|
||||
end
|
||||
|
||||
def export_path
|
||||
strong_memoize(:export_path) do
|
||||
relative_path = File.join(base_export_path, SecureRandom.hex)
|
||||
|
@ -56,10 +51,6 @@ module BulkImports
|
|||
raise NotImplementedError
|
||||
end
|
||||
|
||||
def ability
|
||||
raise NotImplementedError
|
||||
end
|
||||
|
||||
def base_export_path
|
||||
raise NotImplementedError
|
||||
end
|
||||
|
|
|
@ -3,8 +3,6 @@
|
|||
module BulkImports
|
||||
module Exports
|
||||
class GroupConfig < BaseConfig
|
||||
private
|
||||
|
||||
def base_export_path
|
||||
exportable.full_path
|
||||
end
|
||||
|
@ -12,10 +10,6 @@ module BulkImports
|
|||
def import_export_yaml
|
||||
::Gitlab::ImportExport.group_config_file
|
||||
end
|
||||
|
||||
def ability
|
||||
:admin_group
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,8 +3,6 @@
|
|||
module BulkImports
|
||||
module Exports
|
||||
class ProjectConfig < BaseConfig
|
||||
private
|
||||
|
||||
def base_export_path
|
||||
exportable.disk_path
|
||||
end
|
||||
|
@ -12,10 +10,6 @@ module BulkImports
|
|||
def import_export_yaml
|
||||
::Gitlab::ImportExport.config_file
|
||||
end
|
||||
|
||||
def ability
|
||||
:admin_project
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -704,6 +704,10 @@ class Group < Namespace
|
|||
Gitlab::ServiceDesk.supported? && all_projects.service_desk_enabled.exists?
|
||||
end
|
||||
|
||||
def to_ability_name
|
||||
model_name.singular
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def update_two_factor_requirement
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Packages
|
||||
module Helm
|
||||
def self.table_name_prefix
|
||||
'packages_helm_'
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,30 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Packages
|
||||
module Helm
|
||||
class FileMetadatum < ApplicationRecord
|
||||
self.primary_key = :package_file_id
|
||||
|
||||
belongs_to :package_file, inverse_of: :helm_file_metadatum
|
||||
|
||||
validates :package_file, presence: true
|
||||
validate :valid_helm_package_type
|
||||
|
||||
validates :channel,
|
||||
presence: true,
|
||||
length: { maximum: 63 },
|
||||
format: { with: Gitlab::Regex.helm_channel_regex }
|
||||
|
||||
validates :metadata,
|
||||
json_schema: { filename: "helm_metadata" }
|
||||
|
||||
private
|
||||
|
||||
def valid_helm_package_type
|
||||
return if package_file&.package&.helm?
|
||||
|
||||
errors.add(:package_file, _('Package type must be Helm'))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -47,6 +47,7 @@ class Packages::Package < ApplicationRecord
|
|||
validate :package_already_taken, if: :npm?
|
||||
validates :name, format: { with: Gitlab::Regex.conan_recipe_component_regex }, if: :conan?
|
||||
validates :name, format: { with: Gitlab::Regex.generic_package_name_regex }, if: :generic?
|
||||
validates :name, format: { with: Gitlab::Regex.helm_package_regex }, if: :helm?
|
||||
validates :name, format: { with: Gitlab::Regex.npm_package_name_regex }, if: :npm?
|
||||
validates :name, format: { with: Gitlab::Regex.nuget_package_name_regex }, if: :nuget?
|
||||
validates :name, format: { with: Gitlab::Regex.debian_package_name_regex }, if: :debian_package?
|
||||
|
@ -56,6 +57,7 @@ class Packages::Package < ApplicationRecord
|
|||
validates :version, format: { with: Gitlab::Regex.maven_version_regex }, if: -> { version? && maven? }
|
||||
validates :version, format: { with: Gitlab::Regex.pypi_version_regex }, if: :pypi?
|
||||
validates :version, format: { with: Gitlab::Regex.prefixed_semver_regex }, if: :golang?
|
||||
validates :version, format: { with: Gitlab::Regex.prefixed_semver_regex }, if: :helm?
|
||||
validates :version, format: { with: Gitlab::Regex.semver_regex }, if: -> { composer_tag_version? || npm? }
|
||||
|
||||
validates :version,
|
||||
|
@ -70,7 +72,7 @@ class Packages::Package < ApplicationRecord
|
|||
|
||||
enum package_type: { maven: 1, npm: 2, conan: 3, nuget: 4, pypi: 5,
|
||||
composer: 6, generic: 7, golang: 8, debian: 9,
|
||||
rubygems: 10 }
|
||||
rubygems: 10, helm: 11 }
|
||||
|
||||
enum status: { default: 0, hidden: 1, processing: 2, error: 3 }
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ class Packages::PackageFile < ApplicationRecord
|
|||
delegate :project, :project_id, to: :package
|
||||
delegate :conan_file_type, to: :conan_file_metadatum
|
||||
delegate :file_type, :architecture, :fields, to: :debian_file_metadatum, prefix: :debian
|
||||
delegate :channel, :metadata, to: :helm_file_metadatum, prefix: :helm
|
||||
|
||||
belongs_to :package
|
||||
|
||||
|
@ -13,9 +14,11 @@ class Packages::PackageFile < ApplicationRecord
|
|||
has_many :package_file_build_infos, inverse_of: :package_file, class_name: 'Packages::PackageFileBuildInfo'
|
||||
has_many :pipelines, through: :package_file_build_infos
|
||||
has_one :debian_file_metadatum, inverse_of: :package_file, class_name: 'Packages::Debian::FileMetadatum'
|
||||
has_one :helm_file_metadatum, inverse_of: :package_file, class_name: 'Packages::Helm::FileMetadatum'
|
||||
|
||||
accepts_nested_attributes_for :conan_file_metadatum
|
||||
accepts_nested_attributes_for :debian_file_metadatum
|
||||
accepts_nested_attributes_for :helm_file_metadatum
|
||||
|
||||
validates :package, presence: true
|
||||
validates :file, presence: true
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
# frozen_string_literal: true
|
||||
module Packages
|
||||
module Maven
|
||||
class MetadatumPolicy < BasePolicy
|
||||
delegate { @subject.package }
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,27 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module BulkImports
|
||||
class ExportService
|
||||
def initialize(exportable:, user:)
|
||||
@exportable = exportable
|
||||
@current_user = user
|
||||
end
|
||||
|
||||
def execute
|
||||
Export.config(exportable).exportable_relations.each do |relation|
|
||||
RelationExportWorker.perform_async(current_user.id, exportable.id, exportable.class.name, relation)
|
||||
end
|
||||
|
||||
ServiceResponse.success
|
||||
rescue StandardError => e
|
||||
ServiceResponse.error(
|
||||
message: e.class,
|
||||
http_status: :unprocessable_entity
|
||||
)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
attr_reader :exportable, :current_user
|
||||
end
|
||||
end
|
|
@ -0,0 +1,106 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module BulkImports
|
||||
class RelationExportService
|
||||
include Gitlab::ImportExport::CommandLineUtil
|
||||
|
||||
def initialize(user, exportable, relation, jid)
|
||||
@user = user
|
||||
@exportable = exportable
|
||||
@relation = relation
|
||||
@jid = jid
|
||||
end
|
||||
|
||||
def execute
|
||||
find_or_create_export! do |export|
|
||||
remove_existing_export_file!(export)
|
||||
serialize_relation_to_file(export.relation_definition)
|
||||
compress_exported_relation
|
||||
upload_compressed_file(export)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
attr_reader :user, :exportable, :relation, :jid
|
||||
|
||||
def find_or_create_export!
|
||||
validate_user_permissions!
|
||||
|
||||
export = exportable.bulk_import_exports.safe_find_or_create_by!(relation: relation)
|
||||
export.update!(status_event: 'start', jid: jid)
|
||||
|
||||
yield export
|
||||
|
||||
export.update!(status_event: 'finish', error: nil)
|
||||
rescue StandardError => e
|
||||
Gitlab::ErrorTracking.track_exception(e, exportable_id: exportable.id, exportable_type: exportable.class.name)
|
||||
|
||||
export&.update(status_event: 'fail_op', error: e.class)
|
||||
end
|
||||
|
||||
def validate_user_permissions!
|
||||
ability = "admin_#{exportable.to_ability_name}"
|
||||
|
||||
user.can?(ability, exportable) ||
|
||||
raise(::Gitlab::ImportExport::Error.permission_error(user, exportable))
|
||||
end
|
||||
|
||||
def remove_existing_export_file!(export)
|
||||
upload = export.upload
|
||||
|
||||
return unless upload&.export_file&.file
|
||||
|
||||
upload.remove_export_file!
|
||||
upload.save!
|
||||
end
|
||||
|
||||
def serialize_relation_to_file(relation_definition)
|
||||
serializer.serialize_relation(relation_definition)
|
||||
end
|
||||
|
||||
def compress_exported_relation
|
||||
gzip(dir: export_path, filename: ndjson_filename)
|
||||
end
|
||||
|
||||
def upload_compressed_file(export)
|
||||
compressed_filename = File.join(export_path, "#{ndjson_filename}.gz")
|
||||
upload = ExportUpload.find_or_initialize_by(export_id: export.id) # rubocop: disable CodeReuse/ActiveRecord
|
||||
|
||||
File.open(compressed_filename) { |file| upload.export_file = file }
|
||||
|
||||
upload.save!
|
||||
end
|
||||
|
||||
def export_config
|
||||
@export_config ||= Export.config(exportable)
|
||||
end
|
||||
|
||||
def export_path
|
||||
@export_path ||= export_config.export_path
|
||||
end
|
||||
|
||||
def exportable_tree
|
||||
@exportable_tree ||= export_config.exportable_tree
|
||||
end
|
||||
|
||||
# rubocop: disable CodeReuse/Serializer
|
||||
def serializer
|
||||
@serializer ||= ::Gitlab::ImportExport::JSON::StreamingSerializer.new(
|
||||
exportable,
|
||||
exportable_tree,
|
||||
json_writer,
|
||||
exportable_path: ''
|
||||
)
|
||||
end
|
||||
# rubocop: enable CodeReuse/Serializer
|
||||
|
||||
def json_writer
|
||||
@json_writer ||= ::Gitlab::ImportExport::JSON::NdjsonWriter.new(export_path)
|
||||
end
|
||||
|
||||
def ndjson_filename
|
||||
@ndjson_filename ||= "#{relation}.ndjson"
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,128 @@
|
|||
{
|
||||
"description": "Helm metadata",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"home": {
|
||||
"type": "string"
|
||||
},
|
||||
"sources": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"version": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": {
|
||||
"type": "string"
|
||||
},
|
||||
"keywords": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"maintainers": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"email": {
|
||||
"type": "string"
|
||||
},
|
||||
"url": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"icon": {
|
||||
"type": "string"
|
||||
},
|
||||
"apiVersion": {
|
||||
"type": "string"
|
||||
},
|
||||
"condition": {
|
||||
"type": "string"
|
||||
},
|
||||
"tags": {
|
||||
"type": "string"
|
||||
},
|
||||
"appVersion": {
|
||||
"type": "string"
|
||||
},
|
||||
"deprecated": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"annotations": {
|
||||
"type": "object",
|
||||
"patternProperties": {
|
||||
".+": {
|
||||
"type": "string"
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"kubeVersion": {
|
||||
"type": "string"
|
||||
},
|
||||
"dependencies": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"version": {
|
||||
"type": "string"
|
||||
},
|
||||
"repository": {
|
||||
"type": "string"
|
||||
},
|
||||
"condition": {
|
||||
"type": "string"
|
||||
},
|
||||
"tags": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"enabled": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"import-values": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
|
||||
}
|
||||
},
|
||||
"alias": {
|
||||
"type": "string",
|
||||
"pattern": "^[a-zA-Z0-9_-]+$"
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": ["application", "library"]
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"name",
|
||||
"version",
|
||||
"apiVersion"
|
||||
]
|
||||
}
|
|
@ -1837,6 +1837,16 @@
|
|||
:idempotent:
|
||||
:tags:
|
||||
- :exclude_from_kubernetes
|
||||
- :name: bulk_imports_relation_export
|
||||
:worker_name: BulkImports::RelationExportWorker
|
||||
:feature_category: :importers
|
||||
:has_external_dependencies:
|
||||
:urgency: :low
|
||||
:resource_boundary: :unknown
|
||||
:weight: 1
|
||||
:idempotent: true
|
||||
:tags:
|
||||
- :exclude_from_kubernetes
|
||||
- :name: chat_notification
|
||||
:worker_name: ChatNotificationWorker
|
||||
:feature_category: :chatops
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module BulkImports
|
||||
class RelationExportWorker
|
||||
include ApplicationWorker
|
||||
include ExceptionBacktrace
|
||||
|
||||
idempotent!
|
||||
loggable_arguments 2, 3
|
||||
feature_category :importers
|
||||
tags :exclude_from_kubernetes
|
||||
sidekiq_options status_expiration: StuckExportJobsWorker::EXPORT_JOBS_EXPIRATION
|
||||
|
||||
def perform(user_id, exportable_id, exportable_class, relation)
|
||||
user = User.find(user_id)
|
||||
exportable = exportable(exportable_id, exportable_class)
|
||||
|
||||
RelationExportService.new(user, exportable, relation, jid).execute
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def exportable(exportable_id, exportable_class)
|
||||
exportable_class.classify.constantize.find(exportable_id)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Add Maven to Package Graphql types
|
||||
merge_request: 60808
|
||||
author:
|
||||
type: added
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Invalid invite tokens should redirect to the GitLab product
|
||||
merge_request: 60666
|
||||
author:
|
||||
type: other
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Add Group relations export API
|
||||
merge_request: 59978
|
||||
author:
|
||||
type: added
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Create packages_helm_file_metadata table
|
||||
merge_request: 57017
|
||||
author: Mathieu Parent
|
||||
type: added
|
|
@ -1,16 +0,0 @@
|
|||
---
|
||||
key_path: usage_activity_by_stage_monthly.release.projects_mirrored_with_pipelines_enabled
|
||||
description: Projects with repository mirroring enabled
|
||||
product_section: ops
|
||||
product_stage:
|
||||
product_group: group::release
|
||||
product_category:
|
||||
value_type: number
|
||||
status: data_available
|
||||
time_frame: 28d
|
||||
data_source:
|
||||
distribution:
|
||||
- ce
|
||||
tier:
|
||||
- free
|
||||
skip_validation: true
|
|
@ -1,16 +0,0 @@
|
|||
---
|
||||
key_path: counts.projects_mirrored_with_pipelines_enabled
|
||||
description: Projects with repository mirroring enabled
|
||||
product_section: ops
|
||||
product_stage:
|
||||
product_group: group::release
|
||||
product_category:
|
||||
value_type: number
|
||||
status: data_available
|
||||
time_frame: all
|
||||
data_source: database
|
||||
distribution:
|
||||
- ce
|
||||
tier:
|
||||
- free
|
||||
skip_validation: true
|
|
@ -1,16 +0,0 @@
|
|||
---
|
||||
key_path: usage_activity_by_stage.release.projects_mirrored_with_pipelines_enabled
|
||||
description: Projects with repository mirroring enabled
|
||||
product_section: ops
|
||||
product_stage:
|
||||
product_group: group::release
|
||||
product_category:
|
||||
value_type: number
|
||||
status: data_available
|
||||
time_frame: all
|
||||
data_source:
|
||||
distribution:
|
||||
- ce
|
||||
tier:
|
||||
- free
|
||||
skip_validation: true
|
|
@ -58,6 +58,8 @@
|
|||
- 1
|
||||
- - bulk_imports_pipeline
|
||||
- 1
|
||||
- - bulk_imports_relation_export
|
||||
- 1
|
||||
- - chaos
|
||||
- 2
|
||||
- - chat_notification
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class CreatePackagesHelmFileMetadata < ActiveRecord::Migration[6.0]
|
||||
include Gitlab::Database::MigrationHelpers
|
||||
|
||||
DOWNTIME = false
|
||||
|
||||
def change
|
||||
create_table_with_constraints :packages_helm_file_metadata, id: false do |t|
|
||||
t.timestamps_with_timezone
|
||||
t.references :package_file, primary_key: true, index: false, default: nil, null: false, foreign_key: { to_table: :packages_package_files, on_delete: :cascade }, type: :bigint
|
||||
t.text :channel, null: false
|
||||
t.jsonb :metadata
|
||||
|
||||
t.text_limit :channel, 63
|
||||
|
||||
t.index :channel
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,9 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddHelmMaxFileSizeToPlanLimits < ActiveRecord::Migration[6.0]
|
||||
DOWNTIME = false
|
||||
|
||||
def change
|
||||
add_column :plan_limits, :helm_max_file_size, :bigint, default: 5.megabyte, null: false
|
||||
end
|
||||
end
|
|
@ -0,0 +1 @@
|
|||
b17c853b2bc82cfa83cd82b8023eca39d875d898b99e78c81d767a73391a0b75
|
|
@ -0,0 +1 @@
|
|||
3f9e229fc13075c2a2d42931b163c8069089458d66bc565609b393e07460f25d
|
|
@ -15639,6 +15639,15 @@ CREATE SEQUENCE packages_events_id_seq
|
|||
|
||||
ALTER SEQUENCE packages_events_id_seq OWNED BY packages_events.id;
|
||||
|
||||
CREATE TABLE packages_helm_file_metadata (
|
||||
created_at timestamp with time zone NOT NULL,
|
||||
updated_at timestamp with time zone NOT NULL,
|
||||
package_file_id bigint NOT NULL,
|
||||
channel text NOT NULL,
|
||||
metadata jsonb,
|
||||
CONSTRAINT check_c34067922d CHECK ((char_length(channel) <= 63))
|
||||
);
|
||||
|
||||
CREATE TABLE packages_maven_metadata (
|
||||
id bigint NOT NULL,
|
||||
package_id bigint NOT NULL,
|
||||
|
@ -16015,7 +16024,8 @@ CREATE TABLE plan_limits (
|
|||
pull_mirror_interval_seconds integer DEFAULT 300 NOT NULL,
|
||||
daily_invites integer DEFAULT 0 NOT NULL,
|
||||
rubygems_max_file_size bigint DEFAULT '3221225472'::bigint NOT NULL,
|
||||
terraform_module_max_file_size bigint DEFAULT 1073741824 NOT NULL
|
||||
terraform_module_max_file_size bigint DEFAULT 1073741824 NOT NULL,
|
||||
helm_max_file_size bigint DEFAULT 5242880 NOT NULL
|
||||
);
|
||||
|
||||
CREATE SEQUENCE plan_limits_id_seq
|
||||
|
@ -21273,6 +21283,9 @@ ALTER TABLE ONLY packages_dependency_links
|
|||
ALTER TABLE ONLY packages_events
|
||||
ADD CONSTRAINT packages_events_pkey PRIMARY KEY (id);
|
||||
|
||||
ALTER TABLE ONLY packages_helm_file_metadata
|
||||
ADD CONSTRAINT packages_helm_file_metadata_pkey PRIMARY KEY (package_file_id);
|
||||
|
||||
ALTER TABLE ONLY packages_maven_metadata
|
||||
ADD CONSTRAINT packages_maven_metadata_pkey PRIMARY KEY (id);
|
||||
|
||||
|
@ -23610,6 +23623,8 @@ CREATE INDEX index_packages_dependency_links_on_dependency_id ON packages_depend
|
|||
|
||||
CREATE INDEX index_packages_events_on_package_id ON packages_events USING btree (package_id);
|
||||
|
||||
CREATE INDEX index_packages_helm_file_metadata_on_channel ON packages_helm_file_metadata USING btree (channel);
|
||||
|
||||
CREATE INDEX index_packages_maven_metadata_on_package_id_and_path ON packages_maven_metadata USING btree (package_id, path);
|
||||
|
||||
CREATE INDEX index_packages_maven_metadata_on_path ON packages_maven_metadata USING btree (path);
|
||||
|
@ -26645,6 +26660,9 @@ ALTER TABLE ONLY fork_network_members
|
|||
ALTER TABLE ONLY operations_feature_flag_scopes
|
||||
ADD CONSTRAINT fk_rails_a50a04d0a4 FOREIGN KEY (feature_flag_id) REFERENCES operations_feature_flags(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY packages_helm_file_metadata
|
||||
ADD CONSTRAINT fk_rails_a559865345 FOREIGN KEY (package_file_id) REFERENCES packages_package_files(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY cluster_projects
|
||||
ADD CONSTRAINT fk_rails_a5a958bca1 FOREIGN KEY (cluster_id) REFERENCES clusters(id) ON DELETE CASCADE;
|
||||
|
||||
|
|
|
@ -8667,7 +8667,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
|
|||
|
||||
##### `Group.complianceFrameworks`
|
||||
|
||||
Compliance frameworks available to projects in this namespace. Available only when feature flag `ff_custom_compliance_frameworks` is enabled.
|
||||
Compliance frameworks available to projects in this namespace.
|
||||
|
||||
Returns [`ComplianceFrameworkConnection`](#complianceframeworkconnection).
|
||||
|
||||
|
@ -9551,6 +9551,22 @@ Represents an entry from the Cloud License history.
|
|||
| <a id="licensehistoryentrytype"></a>`type` | [`String!`](#string) | Type of the license. |
|
||||
| <a id="licensehistoryentryusersinlicensecount"></a>`usersInLicenseCount` | [`Int`](#int) | Number of paid users in the license. |
|
||||
|
||||
### `MavenMetadata`
|
||||
|
||||
Maven metadata.
|
||||
|
||||
#### Fields
|
||||
|
||||
| Name | Type | Description |
|
||||
| ---- | ---- | ----------- |
|
||||
| <a id="mavenmetadataappgroup"></a>`appGroup` | [`String!`](#string) | App group of the Maven package. |
|
||||
| <a id="mavenmetadataappname"></a>`appName` | [`String!`](#string) | App name of the Maven package. |
|
||||
| <a id="mavenmetadataappversion"></a>`appVersion` | [`String`](#string) | App version of the Maven package. |
|
||||
| <a id="mavenmetadatacreatedat"></a>`createdAt` | [`Time!`](#time) | Date of creation. |
|
||||
| <a id="mavenmetadataid"></a>`id` | [`PackagesMavenMetadatumID!`](#packagesmavenmetadatumid) | ID of the metadatum. |
|
||||
| <a id="mavenmetadatapath"></a>`path` | [`String!`](#string) | Path of the Maven package. |
|
||||
| <a id="mavenmetadataupdatedat"></a>`updatedAt` | [`Time!`](#time) | Date of most recent update. |
|
||||
|
||||
### `MergeRequest`
|
||||
|
||||
#### Fields
|
||||
|
@ -10207,7 +10223,7 @@ Contains statistics about a milestone.
|
|||
|
||||
##### `Namespace.complianceFrameworks`
|
||||
|
||||
Compliance frameworks available to projects in this namespace. Available only when feature flag `ff_custom_compliance_frameworks` is enabled.
|
||||
Compliance frameworks available to projects in this namespace.
|
||||
|
||||
Returns [`ComplianceFrameworkConnection`](#complianceframeworkconnection).
|
||||
|
||||
|
@ -13999,6 +14015,7 @@ Values for sorting package.
|
|||
| <a id="packagetypeenumdebian"></a>`DEBIAN` | Packages from the Debian package manager. |
|
||||
| <a id="packagetypeenumgeneric"></a>`GENERIC` | Packages from the Generic package manager. |
|
||||
| <a id="packagetypeenumgolang"></a>`GOLANG` | Packages from the Golang package manager. |
|
||||
| <a id="packagetypeenumhelm"></a>`HELM` | Packages from the Helm package manager. |
|
||||
| <a id="packagetypeenummaven"></a>`MAVEN` | Packages from the Maven package manager. |
|
||||
| <a id="packagetypeenumnpm"></a>`NPM` | Packages from the npm package manager. |
|
||||
| <a id="packagetypeenumnuget"></a>`NUGET` | Packages from the Nuget package manager. |
|
||||
|
@ -14780,6 +14797,12 @@ A `PackagesConanMetadatumID` is a global ID. It is encoded as a string.
|
|||
|
||||
An example `PackagesConanMetadatumID` is: `"gid://gitlab/Packages::Conan::Metadatum/1"`.
|
||||
|
||||
### `PackagesMavenMetadatumID`
|
||||
|
||||
A `PackagesMavenMetadatumID` is a global ID. It is encoded as a string.
|
||||
|
||||
An example `PackagesMavenMetadatumID` is: `"gid://gitlab/Packages::Maven::Metadatum/1"`.
|
||||
|
||||
### `PackagesPackageFileID`
|
||||
|
||||
A `PackagesPackageFileID` is a global ID. It is encoded as a string.
|
||||
|
@ -14915,6 +14938,7 @@ One of:
|
|||
|
||||
- [`ComposerMetadata`](#composermetadata)
|
||||
- [`ConanMetadata`](#conanmetadata)
|
||||
- [`MavenMetadata`](#mavenmetadata)
|
||||
|
||||
#### `VulnerabilityDetail`
|
||||
|
||||
|
|
|
@ -4694,11 +4694,11 @@ Projects with repository mirroring enabled
|
|||
|
||||
[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181920_projects_mirrored_with_pipelines_enabled.yml)
|
||||
|
||||
Group: `group::release`
|
||||
Group: `group::continuous integration`
|
||||
|
||||
Status: `data_available`
|
||||
|
||||
Tiers: `free`
|
||||
Tiers: `premium`, `ultimate`
|
||||
|
||||
### `counts.projects_mock_ci_active`
|
||||
|
||||
|
@ -16310,15 +16310,15 @@ Tiers: `free`
|
|||
|
||||
### `usage_activity_by_stage.release.projects_mirrored_with_pipelines_enabled`
|
||||
|
||||
Projects with repository mirroring enabled
|
||||
Count creator_id from projects with repository mirroring enabled.
|
||||
|
||||
[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181934_projects_mirrored_with_pipelines_enabled.yml)
|
||||
|
||||
Group: `group::release`
|
||||
Group: `group::continuous integration`
|
||||
|
||||
Status: `data_available`
|
||||
|
||||
Tiers: `free`
|
||||
Tiers: `premium`, `ultimate`
|
||||
|
||||
### `usage_activity_by_stage.release.releases`
|
||||
|
||||
|
@ -18230,15 +18230,15 @@ Tiers: `free`
|
|||
|
||||
### `usage_activity_by_stage_monthly.release.projects_mirrored_with_pipelines_enabled`
|
||||
|
||||
Projects with repository mirroring enabled
|
||||
Count creator_id from projects with repository mirroring enabled.
|
||||
|
||||
[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181943_projects_mirrored_with_pipelines_enabled.yml)
|
||||
|
||||
Group: `group::release`
|
||||
Group: `group::continuous integration`
|
||||
|
||||
Status: `data_available`
|
||||
|
||||
Tiers: `free`
|
||||
Tiers: `premium`, `ultimate`
|
||||
|
||||
### `usage_activity_by_stage_monthly.release.releases`
|
||||
|
||||
|
|
Before Width: | Height: | Size: 50 KiB |
|
@ -1,117 +1,8 @@
|
|||
---
|
||||
type: reference, howto
|
||||
stage: Manage
|
||||
group: Import
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
redirect_to: 'index.md'
|
||||
---
|
||||
|
||||
# Gemnasium **(ULTIMATE)**
|
||||
This document was deleted.
|
||||
|
||||
This guide describes how to migrate from Gemnasium.com to your own GitLab
|
||||
instance or GitLab.com.
|
||||
|
||||
## Why is Gemnasium.com closed?
|
||||
|
||||
Gemnasium was [acquired by GitLab](https://about.gitlab.com/press/releases/2018-01-30-gemnasium-acquisition.html)
|
||||
in January 2018. Since May 15, 2018, the services provided by Gemnasium are no longer available.
|
||||
The team behind Gemnasium has joined GitLab as the new Security Products team
|
||||
and is working on a [wide range of tools](../../application_security/index.md),
|
||||
including:
|
||||
|
||||
- [Dependency Scanning](../../application_security/dependency_scanning/index.md)
|
||||
- [SAST](../../application_security/sast/index.md)
|
||||
- [DAST](../../application_security/dast/index.md)
|
||||
- [Container Scanning](../../application_security/container_scanning/index.md)
|
||||
|
||||
If you want to continue monitoring your dependencies, see the
|
||||
[Migrating to GitLab](#migrating-to-gitlab) section below.
|
||||
|
||||
## What happened to my account?
|
||||
|
||||
Your account has been automatically closed on May 15th, 2018. If you had a paid
|
||||
subscription at that time, your card will be refunded on a
|
||||
<!-- vale gitlab.Spelling = NO --> pro rata temporis <!-- vale gitlab.Spelling = YES --> basis.
|
||||
You may contact `gemnasium@gitlab.com` regarding your closed account.
|
||||
|
||||
## Are my account/data transferred to GitLab Inc.?
|
||||
|
||||
All accounts and data have been deleted on May 15th, 2018. GitLab Inc.
|
||||
doesn't know anything about your private data, nor your projects, and therefore
|
||||
if they were vulnerable or not. GitLab Inc. takes personal information very seriously.
|
||||
|
||||
## What happened to my badge?
|
||||
|
||||
To avoid broken 404 images, all badges pointing to Gemnasium.com are a
|
||||
placeholder, inviting you to migrate to GitLab (and pointing to this page).
|
||||
|
||||
## Migrating to GitLab
|
||||
|
||||
Gemnasium has been ported and integrated directly into GitLab CI/CD.
|
||||
You can still benefit from our dependency monitoring features, and it requires
|
||||
some steps to migrate your projects. There is no automatic import since GitLab
|
||||
doesn't know anything about any projects which existed on Gemnasium.com.
|
||||
Security features are free for public (open-source) projects hosted on GitLab.com.
|
||||
|
||||
### If your project is hosted on GitLab (`https://gitlab.com` / self-managed)
|
||||
|
||||
You're almost set! If you're already using
|
||||
[Auto DevOps](../../../topics/autodevops/), you are already covered.
|
||||
Otherwise, you must configure your `.gitlab-ci.yml` according to the
|
||||
[dependency scanning page](../../application_security/dependency_scanning/index.md).
|
||||
|
||||
### If your project is hosted on GitHub (`https://github.com` / GitHub Enterprise)
|
||||
|
||||
Since [GitLab 10.6 comes with GitHub integration](https://about.gitlab.com/solutions/github/),
|
||||
GitLab users can now create a CI/CD project in GitLab connected to an external
|
||||
GitHub.com or GitHub Enterprise repository. This will automatically prompt
|
||||
GitLab CI/CD to run whenever code is pushed to GitHub and post CI/CD results
|
||||
back to both GitLab and GitHub when completed.
|
||||
|
||||
<!-- vale gitlab.Spelling = NO -->
|
||||
|
||||
1. Create a new project, and select **CI/CD for external repository**:
|
||||
|
||||
![Create new Project](img/gemnasium/create_project_v13_5.png)
|
||||
<!-- vale gitlab.Spelling = YES -->
|
||||
|
||||
1. Use the **GitHub** button to connect your repositories.
|
||||
|
||||
![Connect from GitHub](img/gemnasium/connect_github_v13_5.png)
|
||||
|
||||
1. Select the project(s) to be set up with GitLab CI/CD and choose **Connect**.
|
||||
|
||||
![Select projects](img/gemnasium/select_project_v13_5.png)
|
||||
|
||||
After the configuration is done, you may click on your new
|
||||
project on GitLab.
|
||||
|
||||
![click on connected project](img/gemnasium/project_connected.png)
|
||||
|
||||
Your project is now mirrored on GitLab, where the runners are able to access
|
||||
your source code and run your tests.
|
||||
|
||||
Optional step: If you set this up on GitLab.com, make sure the project is
|
||||
public (in the project settings) if your GitHub project is public, since
|
||||
the security feature is available only for [GitLab Ultimate](https://about.gitlab.com/pricing/).
|
||||
|
||||
1. To set up the dependency scanning job, corresponding to what Gemnasium was
|
||||
doing, you must create a `.gitlab-ci.yml` file, or update it according to
|
||||
the [dependency scanning docs](../../application_security/dependency_scanning/index.md).
|
||||
The mirroring is pull-only by default, so you may create or update the file on
|
||||
GitHub:
|
||||
|
||||
![Edit YAML file](img/gemnasium/edit_gitlab-ci.png)
|
||||
|
||||
1. Once your file has been committed, a new pipeline automatically
|
||||
triggers if your file is valid:
|
||||
|
||||
![pipeline](img/gemnasium/pipeline.png)
|
||||
|
||||
1. The result of the job is visible directly from the pipeline view:
|
||||
|
||||
![Security Dashboard](../../application_security/security_dashboard/img/pipeline_security_dashboard_v13_3.png)
|
||||
|
||||
NOTE:
|
||||
If you don't commit very often to your project, you may want to use
|
||||
[scheduled pipelines](../../../ci/pipelines/schedules.md) to run the job on a regular
|
||||
basis.
|
||||
<!-- This redirect file can be deleted after <2021-08-15>. -->
|
||||
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
|
Before Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 77 KiB |
Before Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 22 KiB |
|
@ -20,7 +20,6 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
1. [From TFVC](tfvc.md)
|
||||
1. [From repository by URL](repo_by_url.md)
|
||||
1. [By uploading a manifest file (AOSP)](manifest.md)
|
||||
1. [From Gemnasium](gemnasium.md)
|
||||
1. [From Phabricator](phabricator.md)
|
||||
1. [From Jira (issues only)](jira.md)
|
||||
|
||||
|
|
|
@ -32,38 +32,19 @@ Adjust your project's name, description, avatar, [default branch](../repository/
|
|||
|
||||
The project description also partially supports [standard Markdown](../../markdown.md#standard-markdown-and-extensions-in-gitlab). You can use [emphasis](../../markdown.md#emphasis), [links](../../markdown.md#links), and [line-breaks](../../markdown.md#line-breaks) to add more context to the project description.
|
||||
|
||||
#### Compliance framework **(PREMIUM)**
|
||||
|
||||
You can select a framework label to identify that your project has certain compliance requirements or needs additional oversight. Available labels include:
|
||||
|
||||
- GDPR (General Data Protection Regulation)
|
||||
- HIPAA (Health Insurance Portability and Accountability Act)
|
||||
- PCI-DSS (Payment Card Industry-Data Security Standard)
|
||||
- SOC 2 (Service Organization Control 2)
|
||||
- SOX (Sarbanes-Oxley)
|
||||
|
||||
NOTE:
|
||||
Compliance framework labels do not affect your project settings.
|
||||
|
||||
#### Custom compliance frameworks
|
||||
#### Compliance frameworks **(PREMIUM)**
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/276221) in GitLab 13.9.
|
||||
> - [Deployed behind a feature flag](../../feature_flags.md).
|
||||
> - [Enabled by default](https://gitlab.com/gitlab-org/gitlab/-/issues/287779) in GitLab 13.11.
|
||||
> - Enabled on GitLab.com.
|
||||
> - Recommended for production use.
|
||||
> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/287779) in GitLab 13.12.
|
||||
|
||||
WARNING:
|
||||
This feature might not be available to you. Check the **version history** note above for details.
|
||||
You can create a framework label to identify that your project has certain compliance requirements or needs additional oversight.
|
||||
|
||||
GitLab 13.9 introduces custom compliance frameworks at the group-level. A group owner can create a compliance framework label
|
||||
and assign it to any number of projects within that group or subgroups. When this feature is enabled, projects can only
|
||||
be assigned compliance framework labels that already exist within that group.
|
||||
Group owners can create, edit and delete compliance frameworks by going to **Settings** > **General** and expanding the **Compliance frameworks** section.
|
||||
Compliance frameworks created can then be assigned to any number of projects via the project settings page inside the group or subgroups.
|
||||
|
||||
If existing [Compliance frameworks](#compliance-framework) are not sufficient, project and group owners
|
||||
can now create their own.
|
||||
|
||||
New compliance framework labels can be created and updated using GraphQL.
|
||||
NOTE:
|
||||
Attempting to create compliance frameworks on subgroups via GraphQL will cause the framework to be created on the root ancestor if the user has the correct permissions.
|
||||
The web UI presents a read-only view to discourage this behavior.
|
||||
|
||||
#### Compliance pipeline configuration **(ULTIMATE)**
|
||||
|
||||
|
@ -79,7 +60,7 @@ This feature might not be available to you. Check the **version history** note a
|
|||
Group owners can use the compliance pipeline configuration to define compliance requirements
|
||||
such as scans or tests, and enforce them in individual projects.
|
||||
|
||||
The [custom compliance framework](#custom-compliance-frameworks) feature allows group owners to specify the location
|
||||
The [custom compliance framework](#compliance-frameworks) feature allows group owners to specify the location
|
||||
of a compliance pipeline configuration stored and managed in a dedicated project, distinct from a developer's project.
|
||||
|
||||
When you set up the compliance pipeline configuration field, use the
|
||||
|
@ -387,22 +368,3 @@ Add the URL of a Jaeger server to allow your users to [easily access the Jaeger
|
|||
|
||||
[Add Storage credentials](../../../operations/incident_management/status_page.md#sync-incidents-to-the-status-page)
|
||||
to enable the syncing of public Issues to a [deployed status page](../../../operations/incident_management/status_page.md#create-a-status-page-project).
|
||||
|
||||
### Enable or disable custom compliance frameworks **(PREMIUM)**
|
||||
|
||||
Enabling or disabling custom compliance frameworks is under development and not ready for production use. It is
|
||||
deployed behind a feature flag that is **disabled by default**.
|
||||
[GitLab administrators with access to the GitLab Rails console](../../../administration/feature_flags.md)
|
||||
can enable it.
|
||||
|
||||
To enable it:
|
||||
|
||||
```ruby
|
||||
Feature.enable(:ff_custom_compliance_frameworks, Group.find(<group id>))
|
||||
```
|
||||
|
||||
To disable it:
|
||||
|
||||
```ruby
|
||||
Feature.disable(:ff_custom_compliance_frameworks, Group.find(<group id>))
|
||||
```
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module API
|
||||
module Entities
|
||||
module BulkImports
|
||||
class ExportStatus < Grape::Entity
|
||||
expose :relation
|
||||
expose :status
|
||||
expose :error
|
||||
expose :updated_at
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -43,6 +43,43 @@ module API
|
|||
render_api_error!(message: 'Group export could not be started.')
|
||||
end
|
||||
end
|
||||
|
||||
desc 'Start relations export' do
|
||||
detail 'This feature was introduced in GitLab 13.12'
|
||||
end
|
||||
post ':id/export_relations' do
|
||||
response = ::BulkImports::ExportService.new(exportable: user_group, user: current_user).execute
|
||||
|
||||
if response.success?
|
||||
accepted!
|
||||
else
|
||||
render_api_error!(message: 'Group relations export could not be started.')
|
||||
end
|
||||
end
|
||||
|
||||
desc 'Download relations export' do
|
||||
detail 'This feature was introduced in GitLab 13.12'
|
||||
end
|
||||
params do
|
||||
requires :relation, type: String, desc: 'Group relation name'
|
||||
end
|
||||
get ':id/export_relations/download' do
|
||||
export = user_group.bulk_import_exports.find_by_relation(params[:relation])
|
||||
file = export&.upload&.export_file
|
||||
|
||||
if file
|
||||
present_carrierwave_file!(file)
|
||||
else
|
||||
render_api_error!('404 Not found', 404)
|
||||
end
|
||||
end
|
||||
|
||||
desc 'Relations export status' do
|
||||
detail 'This feature was introduced in GitLab 13.12'
|
||||
end
|
||||
get ':id/export_relations/status' do
|
||||
present user_group.bulk_import_exports, with: Entities::BulkImports::ExportStatus
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -14,6 +14,19 @@ module Gitlab
|
|||
untar_with_options(archive: archive, dir: dir, options: 'zxf')
|
||||
end
|
||||
|
||||
def gzip(dir:, filename:)
|
||||
filepath = File.join(dir, filename)
|
||||
cmd = %W(gzip #{filepath})
|
||||
|
||||
_, status = Gitlab::Popen.popen(cmd)
|
||||
|
||||
if status == 0
|
||||
status
|
||||
else
|
||||
raise Gitlab::ImportExport::Error.file_compression_error
|
||||
end
|
||||
end
|
||||
|
||||
def mkdir_p(path)
|
||||
FileUtils.mkdir_p(path, mode: DEFAULT_DIR_MODE)
|
||||
FileUtils.chmod(DEFAULT_DIR_MODE, path)
|
||||
|
|
|
@ -38,16 +38,6 @@ module Gitlab
|
|||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
attr_reader :json_writer, :relations_schema, :exportable
|
||||
|
||||
def serialize_root
|
||||
attributes = exportable.as_json(
|
||||
relations_schema.merge(include: nil, preloads: nil))
|
||||
json_writer.write_attributes(@exportable_path, attributes)
|
||||
end
|
||||
|
||||
def serialize_relation(definition)
|
||||
raise ArgumentError, 'definition needs to be Hash' unless definition.is_a?(Hash)
|
||||
raise ArgumentError, 'definition needs to have exactly one Hash element' unless definition.one?
|
||||
|
@ -64,6 +54,16 @@ module Gitlab
|
|||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
attr_reader :json_writer, :relations_schema, :exportable
|
||||
|
||||
def serialize_root
|
||||
attributes = exportable.as_json(
|
||||
relations_schema.merge(include: nil, preloads: nil))
|
||||
json_writer.write_attributes(@exportable_path, attributes)
|
||||
end
|
||||
|
||||
def serialize_many_relations(key, records, options)
|
||||
enumerator = Enumerator.new do |items|
|
||||
key_preloads = preloads&.dig(key)
|
||||
|
|
|
@ -125,6 +125,18 @@ module Gitlab
|
|||
@debian_component_regex ||= %r{#{debian_distribution_regex}}.freeze
|
||||
end
|
||||
|
||||
def helm_channel_regex
|
||||
@helm_channel_regex ||= %r{\A[-\.\_a-zA-Z0-9]+\z}.freeze
|
||||
end
|
||||
|
||||
def helm_package_regex
|
||||
@helm_package_regex ||= %r{#{helm_channel_regex}}.freeze
|
||||
end
|
||||
|
||||
def helm_version_regex
|
||||
@helm_version_regex ||= %r{#{prefixed_semver_regex}}.freeze
|
||||
end
|
||||
|
||||
def unbounded_semver_regex
|
||||
# See the official regex: https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string
|
||||
|
||||
|
|
|
@ -8182,9 +8182,6 @@ msgstr ""
|
|||
msgid "Compliance framework"
|
||||
msgstr ""
|
||||
|
||||
msgid "Compliance framework (optional)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Compliance framework (optional)"
|
||||
msgstr ""
|
||||
|
||||
|
@ -21915,7 +21912,7 @@ msgstr ""
|
|||
msgid "No compliance frameworks are in use."
|
||||
msgstr ""
|
||||
|
||||
msgid "No compliance frameworks are in use. Create one using the GraphQL API."
|
||||
msgid "No compliance frameworks are in use. Create one from the %{link} section in Group Settings."
|
||||
msgstr ""
|
||||
|
||||
msgid "No confirmation email received? Please check your spam folder or"
|
||||
|
@ -23026,6 +23023,9 @@ msgstr ""
|
|||
msgid "Package type must be Debian"
|
||||
msgstr ""
|
||||
|
||||
msgid "Package type must be Helm"
|
||||
msgstr ""
|
||||
|
||||
msgid "Package type must be Maven"
|
||||
msgstr ""
|
||||
|
||||
|
@ -31895,6 +31895,9 @@ msgstr ""
|
|||
msgid "The interval must be one of %{intervals}."
|
||||
msgstr ""
|
||||
|
||||
msgid "The invitation can not be found with the provided invite token."
|
||||
msgstr ""
|
||||
|
||||
msgid "The invitation could not be accepted."
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -51,9 +51,9 @@
|
|||
"@babel/preset-env": "^7.10.1",
|
||||
"@gitlab/at.js": "1.5.7",
|
||||
"@gitlab/favicon-overlay": "2.0.0",
|
||||
"@gitlab/svgs": "1.191.0",
|
||||
"@gitlab/svgs": "1.192.0",
|
||||
"@gitlab/tributejs": "1.0.0",
|
||||
"@gitlab/ui": "29.11.0",
|
||||
"@gitlab/ui": "29.13.0",
|
||||
"@gitlab/visual-review-tools": "1.6.1",
|
||||
"@rails/actioncable": "^6.0.3-4",
|
||||
"@rails/ujs": "^6.0.3-4",
|
||||
|
|
|
@ -15,10 +15,11 @@ RSpec.describe InvitesController do
|
|||
context 'when invite token is not valid' do
|
||||
let(:raw_invite_token) { '_bogus_token_' }
|
||||
|
||||
it 'renders the 404 page' do
|
||||
it 'redirects to root' do
|
||||
request
|
||||
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
expect(response).to redirect_to(root_path)
|
||||
expect(controller).to set_flash[:alert].to('The invitation can not be found with the provided invite token.')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -94,6 +94,22 @@ FactoryBot.define do
|
|||
end
|
||||
end
|
||||
|
||||
factory :helm_package do
|
||||
sequence(:name) { |n| "package-#{n}" }
|
||||
sequence(:version) { |n| "v1.0.#{n}" }
|
||||
package_type { :helm }
|
||||
|
||||
transient do
|
||||
without_package_files { false }
|
||||
end
|
||||
|
||||
after :create do |package, evaluator|
|
||||
unless evaluator.without_package_files
|
||||
create :helm_package_file, package: package
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
factory :npm_package do
|
||||
sequence(:name) { |n| "@#{project.root_namespace.path}/package-#{n}"}
|
||||
version { '1.0.0' }
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
FactoryBot.define do
|
||||
factory :helm_file_metadatum, class: 'Packages::Helm::FileMetadatum' do
|
||||
package_file { association(:helm_package_file, without_loaded_metadatum: true) }
|
||||
channel { 'stable' }
|
||||
metadata { { 'name': package_file.package.name, 'version': package_file.package.version, 'apiVersion': 'v2' } }
|
||||
end
|
||||
end
|
|
@ -201,6 +201,23 @@ FactoryBot.define do
|
|||
end
|
||||
end
|
||||
|
||||
factory :helm_package_file do
|
||||
package { association(:helm_package, without_package_files: true) }
|
||||
file_name { "#{package.name}-#{package.version}.tgz" }
|
||||
file_fixture { "spec/fixtures/packages/helm/rook-ceph-v1.5.8.tgz" }
|
||||
|
||||
transient do
|
||||
without_loaded_metadatum { false }
|
||||
channel { 'stable' }
|
||||
end
|
||||
|
||||
after :create do |package_file, evaluator|
|
||||
unless evaluator.without_loaded_metadatum
|
||||
create :helm_file_metadatum, package_file: package_file, channel: evaluator.channel
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
trait(:jar) do
|
||||
file_fixture { 'spec/fixtures/packages/maven/my-app-1.0-20180724.124855-1.jar' }
|
||||
file_name { 'my-app-1.0-20180724.124855-1.jar' }
|
||||
|
|
|
@ -80,6 +80,7 @@
|
|||
"anyOf": [
|
||||
{ "$ref": "./package_composer_metadata.json" },
|
||||
{ "$ref": "./package_conan_metadata.json" },
|
||||
{ "$ref": "./package_maven_metadata.json" },
|
||||
{ "type": "null" }
|
||||
]
|
||||
},
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
{
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["id", "createdAt", "updatedAt", "path", "appGroup", "appName"],
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"createdAt": {
|
||||
"type": "string"
|
||||
},
|
||||
"updatedAt": {
|
||||
"type": "string"
|
||||
},
|
||||
"path": {
|
||||
"type": "string"
|
||||
},
|
||||
"appGroup": {
|
||||
"type": "string"
|
||||
},
|
||||
"appVersion": {
|
||||
"type": ["string", "null"]
|
||||
},
|
||||
"appName": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1237,8 +1237,8 @@ export const mockPipelineWithAttachedMR = {
|
|||
title: 'Update README.md',
|
||||
source_branch: 'feature-1234',
|
||||
source_branch_path: '/root/detached-merge-request-pipelines/branches/feature-1234',
|
||||
target_branch: 'master',
|
||||
target_branch_path: '/root/detached-merge-request-pipelines/branches/master',
|
||||
target_branch: 'main',
|
||||
target_branch_path: '/root/detached-merge-request-pipelines/branches/main',
|
||||
},
|
||||
ref: {
|
||||
name: 'test-branch',
|
||||
|
@ -1269,8 +1269,8 @@ export const mockPipelineDetached = {
|
|||
title: 'Update README.md',
|
||||
source_branch: 'feature-1234',
|
||||
source_branch_path: '/root/detached-merge-request-pipelines/branches/feature-1234',
|
||||
target_branch: 'master',
|
||||
target_branch_path: '/root/detached-merge-request-pipelines/branches/master',
|
||||
target_branch: 'main',
|
||||
target_branch_path: '/root/detached-merge-request-pipelines/branches/main',
|
||||
},
|
||||
ref: {
|
||||
name: 'test-branch',
|
||||
|
@ -1296,8 +1296,8 @@ export const mockJobsInTable = [
|
|||
__typename: 'DetailedStatus',
|
||||
},
|
||||
id: 'gid://gitlab/Ci::Build/2004',
|
||||
refName: 'master',
|
||||
refPath: '/root/ci-project/-/commits/master',
|
||||
refName: 'main',
|
||||
refPath: '/root/ci-project/-/commits/main',
|
||||
tags: [],
|
||||
shortSha: '2d5d8323',
|
||||
commitPath: '/root/ci-project/-/commit/2d5d83230bdea0e003d83ef4c16d2bf9a8808ebe',
|
||||
|
@ -1334,8 +1334,8 @@ export const mockJobsInTable = [
|
|||
__typename: 'DetailedStatus',
|
||||
},
|
||||
id: 'gid://gitlab/Ci::Build/2021',
|
||||
refName: 'master',
|
||||
refPath: '/root/ci-project/-/commits/master',
|
||||
refName: 'main',
|
||||
refPath: '/root/ci-project/-/commits/main',
|
||||
tags: [],
|
||||
shortSha: '2d5d8323',
|
||||
commitPath: '/root/ci-project/-/commit/2d5d83230bdea0e003d83ef4c16d2bf9a8808ebe',
|
||||
|
@ -1379,8 +1379,8 @@ export const mockJobsInTable = [
|
|||
__typename: 'DetailedStatus',
|
||||
},
|
||||
id: 'gid://gitlab/Ci::Build/2015',
|
||||
refName: 'master',
|
||||
refPath: '/root/ci-project/-/commits/master',
|
||||
refName: 'main',
|
||||
refPath: '/root/ci-project/-/commits/main',
|
||||
tags: [],
|
||||
shortSha: '2d5d8323',
|
||||
commitPath: '/root/ci-project/-/commit/2d5d83230bdea0e003d83ef4c16d2bf9a8808ebe',
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
import { GlButton, GlSprintf } from '@gitlab/ui';
|
||||
import { shallowMount } from '@vue/test-utils';
|
||||
import PipelineEditorFileNav from '~/pipeline_editor/components/file_nav/pipeline_editor_file_nav.vue';
|
||||
import PipelineEditorEmptyState from '~/pipeline_editor/components/ui/pipeline_editor_empty_state.vue';
|
||||
|
||||
describe('Pipeline editor empty state', () => {
|
||||
let wrapper;
|
||||
const defaultProvide = {
|
||||
glFeatures: {
|
||||
pipelineEditorBranchSwitcher: true,
|
||||
pipelineEditorEmptyStateAction: false,
|
||||
},
|
||||
emptyStateIllustrationPath: 'my/svg/path',
|
||||
|
@ -17,6 +19,7 @@ describe('Pipeline editor empty state', () => {
|
|||
});
|
||||
};
|
||||
|
||||
const findFileNav = () => wrapper.findComponent(PipelineEditorFileNav);
|
||||
const findSvgImage = () => wrapper.find('img');
|
||||
const findTitle = () => wrapper.find('h1');
|
||||
const findConfirmButton = () => wrapper.findComponent(GlButton);
|
||||
|
@ -45,6 +48,10 @@ describe('Pipeline editor empty state', () => {
|
|||
expect(findDescription().html()).toContain(wrapper.vm.$options.i18n.body);
|
||||
});
|
||||
|
||||
it('renders the file nav', () => {
|
||||
expect(findFileNav().exists()).toBe(true);
|
||||
});
|
||||
|
||||
describe('with feature flag off', () => {
|
||||
it('does not renders a CTA button', () => {
|
||||
expect(findConfirmButton().exists()).toBe(false);
|
||||
|
@ -75,5 +82,17 @@ describe('Pipeline editor empty state', () => {
|
|||
await findConfirmButton().vm.$emit('click');
|
||||
expect(wrapper.emitted(expectedEvent)).toHaveLength(1);
|
||||
});
|
||||
|
||||
describe('with branch switcher feature flag OFF', () => {
|
||||
it('does not render the file nav', () => {
|
||||
createComponent({
|
||||
provide: {
|
||||
glFeatures: { pipelineEditorBranchSwitcher: false },
|
||||
},
|
||||
});
|
||||
|
||||
expect(findFileNav().exists()).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -17,7 +17,7 @@ Object {
|
|||
"environment": "prd",
|
||||
"except": Object {
|
||||
"refs": Array [
|
||||
"master@gitlab-org/gitlab",
|
||||
"main@gitlab-org/gitlab",
|
||||
"/^release/.*$/@gitlab-org/gitlab",
|
||||
],
|
||||
},
|
||||
|
@ -44,7 +44,7 @@ Object {
|
|||
"environment": "stg",
|
||||
"except": Object {
|
||||
"refs": Array [
|
||||
"master@gitlab-org/gitlab",
|
||||
"main@gitlab-org/gitlab",
|
||||
"/^release/.*$/@gitlab-org/gitlab",
|
||||
],
|
||||
},
|
||||
|
|
|
@ -4,7 +4,7 @@ import { unwrapStagesWithNeeds } from '~/pipelines/components/unwrapping_utils';
|
|||
export const mockProjectNamespace = 'user1';
|
||||
export const mockProjectPath = 'project1';
|
||||
export const mockProjectFullPath = `${mockProjectNamespace}/${mockProjectPath}`;
|
||||
export const mockDefaultBranch = 'master';
|
||||
export const mockDefaultBranch = 'main';
|
||||
export const mockNewMergeRequestPath = '/-/merge_requests/new';
|
||||
export const mockCommitSha = 'aabbccdd';
|
||||
export const mockCommitNextSha = 'eeffgghh';
|
||||
|
@ -143,7 +143,6 @@ export const mockProjectBranches = {
|
|||
repository: {
|
||||
__typename: 'Repository',
|
||||
branches: [
|
||||
{ __typename: 'Branch', name: 'master' },
|
||||
{ __typename: 'Branch', name: 'main' },
|
||||
{ __typename: 'Branch', name: 'develop' },
|
||||
{ __typename: 'Branch', name: 'production' },
|
||||
|
@ -186,7 +185,7 @@ export const mockLintResponse = {
|
|||
when: 'on_success',
|
||||
allow_failure: false,
|
||||
only: null,
|
||||
except: { refs: ['master@gitlab-org/gitlab', '/^release/.*$/@gitlab-org/gitlab'] },
|
||||
except: { refs: ['main@gitlab-org/gitlab', '/^release/.*$/@gitlab-org/gitlab'] },
|
||||
},
|
||||
{
|
||||
name: 'job_2',
|
||||
|
@ -199,7 +198,7 @@ export const mockLintResponse = {
|
|||
when: 'on_success',
|
||||
allow_failure: true,
|
||||
only: { refs: ['web', 'chat', 'pushes'] },
|
||||
except: { refs: ['master@gitlab-org/gitlab', '/^release/.*$/@gitlab-org/gitlab'] },
|
||||
except: { refs: ['main@gitlab-org/gitlab', '/^release/.*$/@gitlab-org/gitlab'] },
|
||||
},
|
||||
],
|
||||
};
|
||||
|
@ -242,7 +241,7 @@ export const mockJobs = [
|
|||
when: 'on_success',
|
||||
allowFailure: false,
|
||||
only: { refs: ['branches@gitlab-org/gitlab'] },
|
||||
except: { refs: ['master@gitlab-org/gitlab', '/^release/.*$/@gitlab-org/gitlab'] },
|
||||
except: { refs: ['main@gitlab-org/gitlab', '/^release/.*$/@gitlab-org/gitlab'] },
|
||||
},
|
||||
];
|
||||
|
||||
|
|
|
@ -301,20 +301,35 @@ describe('Pipeline editor app component', () => {
|
|||
});
|
||||
|
||||
describe('when refetching content', () => {
|
||||
beforeEach(async () => {
|
||||
it('refetches blob content', async () => {
|
||||
await createComponentWithApollo();
|
||||
|
||||
jest
|
||||
.spyOn(wrapper.vm.$apollo.queries.initialCiFileContent, 'refetch')
|
||||
.mockImplementation(jest.fn());
|
||||
});
|
||||
|
||||
it('refetches blob content', async () => {
|
||||
expect(wrapper.vm.$apollo.queries.initialCiFileContent.refetch).toHaveBeenCalledTimes(0);
|
||||
|
||||
await wrapper.vm.refetchContent();
|
||||
|
||||
expect(wrapper.vm.$apollo.queries.initialCiFileContent.refetch).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it('hides start screen when refetch fetches CI file', async () => {
|
||||
mockBlobContentData.mockRejectedValue({
|
||||
response: {
|
||||
status: httpStatusCodes.NOT_FOUND,
|
||||
},
|
||||
});
|
||||
await createComponentWithApollo();
|
||||
|
||||
expect(findEmptyState().exists()).toBe(true);
|
||||
expect(findEditorHome().exists()).toBe(false);
|
||||
|
||||
mockBlobContentData.mockResolvedValue(mockCiYml);
|
||||
await wrapper.vm.$apollo.queries.initialCiFileContent.refetch();
|
||||
|
||||
expect(findEmptyState().exists()).toBe(false);
|
||||
expect(findEditorHome().exists()).toBe(true);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -4,6 +4,6 @@ require 'spec_helper'
|
|||
|
||||
RSpec.describe GitlabSchema.types['PackageTypeEnum'] do
|
||||
it 'exposes all package types' do
|
||||
expect(described_class.values.keys).to contain_exactly(*%w[MAVEN NPM CONAN NUGET PYPI COMPOSER GENERIC GOLANG DEBIAN RUBYGEMS])
|
||||
expect(described_class.values.keys).to contain_exactly(*%w[MAVEN NPM CONAN NUGET PYPI COMPOSER GENERIC GOLANG DEBIAN RUBYGEMS HELM])
|
||||
end
|
||||
end
|
||||
|
|
|
@ -36,21 +36,44 @@ RSpec.describe Ci::PipelineEditorHelper do
|
|||
|
||||
subject(:pipeline_editor_data) { helper.js_pipeline_editor_data(project) }
|
||||
|
||||
it 'returns pipeline editor data' do
|
||||
expect(pipeline_editor_data).to eq({
|
||||
"ci-config-path": project.ci_config_path_or_default,
|
||||
"commit-sha" => project.commit.sha,
|
||||
"default-branch" => project.default_branch,
|
||||
"empty-state-illustration-path" => 'foo',
|
||||
"initial-branch-name": nil,
|
||||
"lint-help-page-path" => help_page_path('ci/lint', anchor: 'validate-basic-logic-and-syntax'),
|
||||
"new-merge-request-path" => '/mock/project/-/merge_requests/new',
|
||||
"pipeline_etag" => graphql_etag_pipeline_sha_path(project.commit.sha),
|
||||
"project-path" => project.path,
|
||||
"project-full-path" => project.full_path,
|
||||
"project-namespace" => project.namespace.full_path,
|
||||
"yml-help-page-path" => help_page_path('ci/yaml/README')
|
||||
})
|
||||
context 'with a project with commits' do
|
||||
it 'returns pipeline editor data' do
|
||||
expect(pipeline_editor_data).to eq({
|
||||
"ci-config-path": project.ci_config_path_or_default,
|
||||
"commit-sha" => project.commit.sha,
|
||||
"default-branch" => project.default_branch,
|
||||
"empty-state-illustration-path" => 'foo',
|
||||
"initial-branch-name": nil,
|
||||
"lint-help-page-path" => help_page_path('ci/lint', anchor: 'validate-basic-logic-and-syntax'),
|
||||
"new-merge-request-path" => '/mock/project/-/merge_requests/new',
|
||||
"pipeline_etag" => graphql_etag_pipeline_sha_path(project.commit.sha),
|
||||
"project-path" => project.path,
|
||||
"project-full-path" => project.full_path,
|
||||
"project-namespace" => project.namespace.full_path,
|
||||
"yml-help-page-path" => help_page_path('ci/yaml/README')
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
context 'with an empty project' do
|
||||
let(:project) { create(:project, :empty_repo) }
|
||||
|
||||
it 'returns pipeline editor data' do
|
||||
expect(pipeline_editor_data).to eq({
|
||||
"ci-config-path": project.ci_config_path_or_default,
|
||||
"commit-sha" => '',
|
||||
"default-branch" => project.default_branch,
|
||||
"empty-state-illustration-path" => 'foo',
|
||||
"initial-branch-name": nil,
|
||||
"lint-help-page-path" => help_page_path('ci/lint', anchor: 'validate-basic-logic-and-syntax'),
|
||||
"new-merge-request-path" => '/mock/project/-/merge_requests/new',
|
||||
"pipeline_etag" => '',
|
||||
"project-path" => project.path,
|
||||
"project-full-path" => project.full_path,
|
||||
"project-namespace" => project.namespace.full_path,
|
||||
"yml-help-page-path" => help_page_path('ci/yaml/README')
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe API::Entities::BulkImports::ExportStatus do
|
||||
let_it_be(:export) { create(:bulk_import_export) }
|
||||
|
||||
let(:entity) { described_class.new(export, request: double) }
|
||||
|
||||
subject { entity.as_json }
|
||||
|
||||
it 'has the correct attributes' do
|
||||
expect(subject).to eq({
|
||||
relation: export.relation,
|
||||
status: export.status,
|
||||
error: export.error,
|
||||
updated_at: export.updated_at
|
||||
})
|
||||
end
|
||||
end
|
|
@ -35,4 +35,19 @@ RSpec.describe Gitlab::ImportExport::CommandLineUtil do
|
|||
it 'has the right mask for uploads' do
|
||||
expect(file_permissions("#{path}/uploads")).to eq(0755) # originally 555
|
||||
end
|
||||
|
||||
describe '#gzip' do
|
||||
it 'compresses specified file' do
|
||||
tempfile = Tempfile.new('test', path)
|
||||
filename = File.basename(tempfile.path)
|
||||
|
||||
subject.gzip(dir: path, filename: filename)
|
||||
end
|
||||
|
||||
context 'when exception occurs' do
|
||||
it 'raises an exception' do
|
||||
expect { subject.gzip(dir: path, filename: 'test') }.to raise_error(Gitlab::ImportExport::Error)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -628,6 +628,50 @@ RSpec.describe Gitlab::Regex do
|
|||
it { is_expected.not_to match('hé') }
|
||||
end
|
||||
|
||||
describe '.helm_channel_regex' do
|
||||
subject { described_class.helm_channel_regex }
|
||||
|
||||
it { is_expected.to match('release') }
|
||||
it { is_expected.to match('my-repo') }
|
||||
it { is_expected.to match('my-repo42') }
|
||||
|
||||
# Do not allow empty
|
||||
it { is_expected.not_to match('') }
|
||||
|
||||
# Do not allow Unicode
|
||||
it { is_expected.not_to match('hé') }
|
||||
end
|
||||
|
||||
describe '.helm_package_regex' do
|
||||
subject { described_class.helm_package_regex }
|
||||
|
||||
it { is_expected.to match('release') }
|
||||
it { is_expected.to match('my-repo') }
|
||||
it { is_expected.to match('my-repo42') }
|
||||
|
||||
# Do not allow empty
|
||||
it { is_expected.not_to match('') }
|
||||
|
||||
# Do not allow Unicode
|
||||
it { is_expected.not_to match('hé') }
|
||||
|
||||
it { is_expected.not_to match('my/../repo') }
|
||||
it { is_expected.not_to match('me%2f%2e%2e%2f') }
|
||||
end
|
||||
|
||||
describe '.helm_version_regex' do
|
||||
subject { described_class.helm_version_regex }
|
||||
|
||||
it { is_expected.to match('v1.2.3') }
|
||||
it { is_expected.to match('v1.2.3-beta') }
|
||||
it { is_expected.to match('v1.2.3-alpha.3') }
|
||||
it { is_expected.not_to match('v1') }
|
||||
it { is_expected.not_to match('v1.2') }
|
||||
it { is_expected.not_to match('v1./2.3') }
|
||||
it { is_expected.not_to match('v../../../../../1.2.3') }
|
||||
it { is_expected.not_to match('v%2e%2e%2f1.2.3') }
|
||||
end
|
||||
|
||||
describe '.semver_regex' do
|
||||
subject { described_class.semver_regex }
|
||||
|
||||
|
|
|
@ -30,24 +30,6 @@ RSpec.describe BulkImports::Exports::GroupConfig do
|
|||
end
|
||||
end
|
||||
|
||||
describe '#validate_user_permissions' do
|
||||
let_it_be(:user) { create(:user) }
|
||||
|
||||
context 'when user cannot admin project' do
|
||||
it 'returns false' do
|
||||
expect { subject.validate_user_permissions!(user) }.to raise_error(Gitlab::ImportExport::Error)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when user can admin project' do
|
||||
it 'returns true' do
|
||||
exportable.add_owner(user)
|
||||
|
||||
expect(subject.validate_user_permissions!(user)).to eq(true)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#exportable_relations' do
|
||||
it 'returns a list of top level exportable relations' do
|
||||
expect(subject.exportable_relations).to include('milestones', 'badges', 'boards', 'labels')
|
||||
|
|
|
@ -30,24 +30,6 @@ RSpec.describe BulkImports::Exports::ProjectConfig do
|
|||
end
|
||||
end
|
||||
|
||||
describe '#validate_user_permissions' do
|
||||
let_it_be(:user) { create(:user) }
|
||||
|
||||
context 'when user cannot admin project' do
|
||||
it 'returns false' do
|
||||
expect { subject.validate_user_permissions!(user) }.to raise_error(Gitlab::ImportExport::Error)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when user can admin project' do
|
||||
it 'returns true' do
|
||||
exportable.add_maintainer(user)
|
||||
|
||||
expect(subject.validate_user_permissions!(user)).to eq(true)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#exportable_relations' do
|
||||
it 'returns a list of top level exportable relations' do
|
||||
expect(subject.exportable_relations).to include('issues', 'labels', 'milestones', 'merge_requests')
|
||||
|
|
|
@ -2390,4 +2390,12 @@ RSpec.describe Group do
|
|||
|
||||
it { is_expected.to eq(Set.new([child_1.id])) }
|
||||
end
|
||||
|
||||
describe '#to_ability_name' do
|
||||
it 'returns group' do
|
||||
group = build(:group)
|
||||
|
||||
expect(group.to_ability_name).to eq('group')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,60 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe Packages::Helm::FileMetadatum, type: :model do
|
||||
describe 'relationships' do
|
||||
it { is_expected.to belong_to(:package_file) }
|
||||
end
|
||||
|
||||
describe 'validations' do
|
||||
describe '#package_file' do
|
||||
it { is_expected.to validate_presence_of(:package_file) }
|
||||
end
|
||||
|
||||
describe '#valid_helm_package_type' do
|
||||
let_it_be_with_reload(:helm_package_file) { create(:helm_package_file) }
|
||||
|
||||
let(:helm_file_metadatum) { helm_package_file.helm_file_metadatum }
|
||||
|
||||
before do
|
||||
helm_package_file.package.package_type = :pypi
|
||||
end
|
||||
|
||||
it 'validates package of type helm' do
|
||||
expect(helm_file_metadatum).not_to be_valid
|
||||
expect(helm_file_metadatum.errors.to_a).to contain_exactly('Package file Package type must be Helm')
|
||||
end
|
||||
end
|
||||
|
||||
describe '#channel' do
|
||||
it 'validates #channel', :aggregate_failures do
|
||||
is_expected.to validate_presence_of(:channel)
|
||||
|
||||
is_expected.to allow_value('a' * 63).for(:channel)
|
||||
is_expected.not_to allow_value('a' * 64).for(:channel)
|
||||
|
||||
is_expected.to allow_value('release').for(:channel)
|
||||
is_expected.to allow_value('my-repo').for(:channel)
|
||||
is_expected.to allow_value('my-repo42').for(:channel)
|
||||
|
||||
# Do not allow empty
|
||||
is_expected.not_to allow_value('').for(:channel)
|
||||
|
||||
# Do not allow Unicode
|
||||
is_expected.not_to allow_value('hé').for(:channel)
|
||||
end
|
||||
end
|
||||
|
||||
describe '#metadata' do
|
||||
it 'validates #metadata', :aggregate_failures do
|
||||
is_expected.not_to validate_presence_of(:metadata)
|
||||
is_expected.to allow_value({ 'name': 'foo', 'version': 'v1.0', 'apiVersion': 'v2' }).for(:metadata)
|
||||
is_expected.not_to allow_value({}).for(:metadata)
|
||||
is_expected.not_to allow_value({ 'version': 'v1.0', 'apiVersion': 'v2' }).for(:metadata)
|
||||
is_expected.not_to allow_value({ 'name': 'foo', 'apiVersion': 'v2' }).for(:metadata)
|
||||
is_expected.not_to allow_value({ 'name': 'foo', 'version': 'v1.0' }).for(:metadata)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -8,6 +8,7 @@ RSpec.describe Packages::PackageFile, type: :model do
|
|||
it { is_expected.to have_many(:package_file_build_infos).inverse_of(:package_file) }
|
||||
it { is_expected.to have_many(:pipelines).through(:package_file_build_infos) }
|
||||
it { is_expected.to have_one(:debian_file_metadatum).inverse_of(:package_file).class_name('Packages::Debian::FileMetadatum') }
|
||||
it { is_expected.to have_one(:helm_file_metadatum).inverse_of(:package_file).class_name('Packages::Helm::FileMetadatum') }
|
||||
end
|
||||
|
||||
describe 'validations' do
|
||||
|
|
|
@ -173,6 +173,15 @@ RSpec.describe Packages::Package, type: :model do
|
|||
it { is_expected.not_to allow_value('!!().for(:name)().for(:name)').for(:name) }
|
||||
end
|
||||
|
||||
context 'helm package' do
|
||||
subject { build(:helm_package) }
|
||||
|
||||
it { is_expected.to allow_value('prometheus').for(:name) }
|
||||
it { is_expected.to allow_value('rook-ceph').for(:name) }
|
||||
it { is_expected.not_to allow_value('a+b').for(:name) }
|
||||
it { is_expected.not_to allow_value('Hé').for(:name) }
|
||||
end
|
||||
|
||||
context 'nuget package' do
|
||||
subject { build_stubbed(:nuget_package) }
|
||||
|
||||
|
@ -376,6 +385,15 @@ RSpec.describe Packages::Package, type: :model do
|
|||
it { is_expected.not_to allow_value(nil).for(:version) }
|
||||
end
|
||||
|
||||
context 'helm package' do
|
||||
subject { build_stubbed(:helm_package) }
|
||||
|
||||
it { is_expected.not_to allow_value(nil).for(:version) }
|
||||
it { is_expected.not_to allow_value('').for(:version) }
|
||||
it { is_expected.to allow_value('v1.2.3').for(:version) }
|
||||
it { is_expected.not_to allow_value('1.2.3').for(:version) }
|
||||
end
|
||||
|
||||
it_behaves_like 'validating version to be SemVer compliant for', :npm_package
|
||||
|
||||
context 'nuget package' do
|
||||
|
|
|
@ -0,0 +1,94 @@
|
|||
# frozen_string_literal: true
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe 'maven package details' do
|
||||
include GraphqlHelpers
|
||||
|
||||
let_it_be(:project) { create(:project) }
|
||||
let_it_be(:maven_package) { create(:maven_package, project: project) }
|
||||
|
||||
let(:package_global_id) { global_id_of(maven_package) }
|
||||
let(:metadata) { query_graphql_fragment('MavenMetadata') }
|
||||
let(:first_file) { maven_package.package_files.find { |f| global_id_of(f) == first_file_response['id'] } }
|
||||
|
||||
let(:depth) { 3 }
|
||||
let(:excluded) { %w[metadata apiFuzzingCiConfiguration pipeline packageFiles] }
|
||||
let(:package_files) { all_graphql_fields_for('PackageFile') }
|
||||
|
||||
let(:user) { project.owner }
|
||||
let(:package_details) { graphql_data_at(:package) }
|
||||
let(:metadata_response) { graphql_data_at(:package, :metadata) }
|
||||
let(:package_files_response) { graphql_data_at(:package, :package_files, :nodes) }
|
||||
let(:first_file_response) { graphql_data_at(:package, :package_files, :nodes, 0)}
|
||||
|
||||
let(:query) do
|
||||
graphql_query_for(:package, { id: package_global_id }, <<~FIELDS)
|
||||
#{all_graphql_fields_for('PackageDetailsType', max_depth: depth, excluded: excluded)}
|
||||
metadata {
|
||||
#{metadata}
|
||||
}
|
||||
packageFiles {
|
||||
nodes {
|
||||
#{package_files}
|
||||
}
|
||||
}
|
||||
FIELDS
|
||||
end
|
||||
|
||||
subject { post_graphql(query, current_user: user) }
|
||||
|
||||
shared_examples 'a working maven package' do
|
||||
before do
|
||||
subject
|
||||
end
|
||||
|
||||
it_behaves_like 'a working graphql query' do
|
||||
it 'matches the JSON schema' do
|
||||
expect(package_details).to match_schema('graphql/packages/package_details')
|
||||
end
|
||||
end
|
||||
|
||||
it 'has the correct metadata' do
|
||||
expect(metadata_response).to include(
|
||||
'id' => global_id_of(maven_package.maven_metadatum),
|
||||
'path' => maven_package.maven_metadatum.path,
|
||||
'appGroup' => maven_package.maven_metadatum.app_group,
|
||||
'appVersion' => maven_package.maven_metadatum.app_version,
|
||||
'appName' => maven_package.maven_metadatum.app_name
|
||||
)
|
||||
end
|
||||
|
||||
it 'has the right amount of files' do
|
||||
expect(package_files_response.length).to be(maven_package.package_files.length)
|
||||
end
|
||||
|
||||
it 'has the basic package files data' do
|
||||
expect(first_file_response).to include(
|
||||
'id' => global_id_of(first_file),
|
||||
'fileName' => first_file.file_name,
|
||||
'size' => first_file.size.to_s,
|
||||
'downloadPath' => first_file.download_path,
|
||||
'fileSha1' => first_file.file_sha1,
|
||||
'fileMd5' => first_file.file_md5,
|
||||
'fileSha256' => first_file.file_sha256
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
context 'a maven package with version' do
|
||||
it_behaves_like "a working maven package"
|
||||
end
|
||||
|
||||
context 'a versionless maven package' do
|
||||
let_it_be(:maven_metadatum) { create(:maven_metadatum, app_version: nil) }
|
||||
let_it_be(:maven_package) { create(:maven_package, project: project, version: nil, maven_metadatum: maven_metadatum) }
|
||||
|
||||
it_behaves_like "a working maven package"
|
||||
|
||||
it "has an empty version" do
|
||||
subject
|
||||
|
||||
expect(metadata_response['appVersion']).to eq(nil)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -178,4 +178,74 @@ RSpec.describe API::GroupExport do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'relations export' do
|
||||
let(:path) { "/groups/#{group.id}/export_relations" }
|
||||
let(:download_path) { "/groups/#{group.id}/export_relations/download?relation=labels" }
|
||||
let(:status_path) { "/groups/#{group.id}/export_relations/status" }
|
||||
|
||||
before do
|
||||
stub_feature_flags(group_import_export: true)
|
||||
group.add_owner(user)
|
||||
end
|
||||
|
||||
describe 'POST /groups/:id/export_relations' do
|
||||
it 'accepts the request' do
|
||||
post api(path, user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(:accepted)
|
||||
end
|
||||
|
||||
context 'when response is not success' do
|
||||
it 'returns api error' do
|
||||
allow_next_instance_of(BulkImports::ExportService) do |service|
|
||||
allow(service).to receive(:execute).and_return(ServiceResponse.error(message: 'error', http_status: :error))
|
||||
end
|
||||
|
||||
post api(path, user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(:error)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'GET /groups/:id/export_relations/download' do
|
||||
let(:export) { create(:bulk_import_export, group: group, relation: 'labels') }
|
||||
let(:upload) { create(:bulk_import_export_upload, export: export) }
|
||||
|
||||
context 'when export file exists' do
|
||||
it 'downloads exported group archive' do
|
||||
upload.update!(export_file: fixture_file_upload('spec/fixtures/bulk_imports/labels.ndjson.gz'))
|
||||
|
||||
get api(download_path, user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when export_file.file does not exist' do
|
||||
it 'returns 404' do
|
||||
allow(upload).to receive(:export_file).and_return(nil)
|
||||
|
||||
get api(download_path, user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'GET /groups/:id/export_relations/status' do
|
||||
it 'returns a list of relation export statuses' do
|
||||
create(:bulk_import_export, :started, group: group, relation: 'labels')
|
||||
create(:bulk_import_export, :finished, group: group, relation: 'milestones')
|
||||
create(:bulk_import_export, :failed, group: group, relation: 'badges')
|
||||
|
||||
get api(status_path, user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response.pluck('relation')).to contain_exactly('labels', 'milestones', 'badges')
|
||||
expect(json_response.pluck('status')).to contain_exactly(-1, 0, 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe BulkImports::ExportService do
|
||||
let_it_be(:group) { create(:group) }
|
||||
let_it_be(:user) { create(:user) }
|
||||
|
||||
before do
|
||||
group.add_owner(user)
|
||||
end
|
||||
|
||||
subject { described_class.new(exportable: group, user: user) }
|
||||
|
||||
describe '#execute' do
|
||||
it 'schedules RelationExportWorker for each top level relation' do
|
||||
expect(subject).to receive(:execute).and_return(ServiceResponse.success).and_call_original
|
||||
top_level_relations = BulkImports::Export.config(group).exportable_relations
|
||||
|
||||
top_level_relations.each do |relation|
|
||||
expect(BulkImports::RelationExportWorker)
|
||||
.to receive(:perform_async)
|
||||
.with(user.id, group.id, group.class.name, relation)
|
||||
end
|
||||
|
||||
subject.execute
|
||||
end
|
||||
|
||||
context 'when exception occurs' do
|
||||
it 'does not schedule RelationExportWorker' do
|
||||
service = described_class.new(exportable: nil, user: user)
|
||||
|
||||
expect(service)
|
||||
.to receive(:execute)
|
||||
.and_return(ServiceResponse.error(message: 'Gitlab::ImportExport::Error', http_status: :unprocessible_entity))
|
||||
.and_call_original
|
||||
expect(BulkImports::RelationExportWorker).not_to receive(:perform_async)
|
||||
|
||||
service.execute
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,116 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe BulkImports::RelationExportService do
|
||||
let_it_be(:jid) { 'jid' }
|
||||
let_it_be(:relation) { 'labels' }
|
||||
let_it_be(:user) { create(:user) }
|
||||
let_it_be(:group) { create(:group) }
|
||||
let_it_be(:label) { create(:group_label, group: group) }
|
||||
let_it_be(:export_path) { "#{Dir.tmpdir}/relation_export_service_spec/tree" }
|
||||
let_it_be_with_reload(:export) { create(:bulk_import_export, group: group, relation: relation) }
|
||||
|
||||
before do
|
||||
group.add_owner(user)
|
||||
|
||||
allow(export).to receive(:export_path).and_return(export_path)
|
||||
end
|
||||
|
||||
after :all do
|
||||
FileUtils.rm_rf(export_path)
|
||||
end
|
||||
|
||||
subject { described_class.new(user, group, relation, jid) }
|
||||
|
||||
describe '#execute' do
|
||||
it 'exports specified relation and marks export as finished' do
|
||||
subject.execute
|
||||
|
||||
expect(export.reload.upload.export_file).to be_present
|
||||
expect(export.finished?).to eq(true)
|
||||
end
|
||||
|
||||
it 'removes temp export files' do
|
||||
subject.execute
|
||||
|
||||
expect(Dir.exist?(export_path)).to eq(false)
|
||||
end
|
||||
|
||||
it 'exports specified relation and marks export as finished' do
|
||||
subject.execute
|
||||
|
||||
expect(export.upload.export_file).to be_present
|
||||
end
|
||||
|
||||
context 'when export record does not exist' do
|
||||
let(:another_group) { create(:group) }
|
||||
|
||||
subject { described_class.new(user, another_group, relation, jid) }
|
||||
|
||||
it 'creates export record' do
|
||||
another_group.add_owner(user)
|
||||
|
||||
expect { subject.execute }
|
||||
.to change { another_group.bulk_import_exports.count }
|
||||
.from(0)
|
||||
.to(1)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when there is existing export present' do
|
||||
let(:upload) { create(:bulk_import_export_upload, export: export) }
|
||||
|
||||
it 'removes existing export before exporting' do
|
||||
upload.update!(export_file: fixture_file_upload('spec/fixtures/bulk_imports/labels.ndjson.gz'))
|
||||
|
||||
expect_any_instance_of(BulkImports::ExportUpload) do |upload|
|
||||
expect(upload).to receive(:remove_export_file!)
|
||||
end
|
||||
|
||||
subject.execute
|
||||
end
|
||||
end
|
||||
|
||||
context 'when exception occurs during export' do
|
||||
shared_examples 'tracks exception' do |exception_class|
|
||||
it 'tracks exception' do
|
||||
expect(Gitlab::ErrorTracking)
|
||||
.to receive(:track_exception)
|
||||
.with(exception_class, exportable_id: group.id, exportable_type: group.class.name)
|
||||
.and_call_original
|
||||
|
||||
subject.execute
|
||||
end
|
||||
end
|
||||
|
||||
before do
|
||||
allow_next_instance_of(BulkImports::ExportUpload) do |upload|
|
||||
allow(upload).to receive(:save!).and_raise(StandardError)
|
||||
end
|
||||
end
|
||||
|
||||
it 'marks export as failed' do
|
||||
subject.execute
|
||||
|
||||
expect(export.reload.failed?).to eq(true)
|
||||
end
|
||||
|
||||
include_examples 'tracks exception', StandardError
|
||||
|
||||
context 'when passed relation is not supported' do
|
||||
let(:relation) { 'unsupported' }
|
||||
|
||||
include_examples 'tracks exception', ActiveRecord::RecordInvalid
|
||||
end
|
||||
|
||||
context 'when user is not allowed to perform export' do
|
||||
let(:another_user) { create(:user) }
|
||||
|
||||
subject { described_class.new(another_user, group, relation, jid) }
|
||||
|
||||
include_examples 'tracks exception', Gitlab::ImportExport::Error
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -203,7 +203,8 @@ RSpec.shared_examples 'filters on each package_type' do |is_project: false|
|
|||
let_it_be(:package7) { create(:generic_package, project: project) }
|
||||
let_it_be(:package8) { create(:golang_package, project: project) }
|
||||
let_it_be(:package9) { create(:debian_package, project: project) }
|
||||
let_it_be(:package9) { create(:rubygems_package, project: project) }
|
||||
let_it_be(:package10) { create(:rubygems_package, project: project) }
|
||||
let_it_be(:package11) { create(:helm_package, project: project) }
|
||||
|
||||
Packages::Package.package_types.keys.each do |package_type|
|
||||
context "for package type #{package_type}" do
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe BulkImports::RelationExportWorker do
|
||||
let_it_be(:jid) { 'jid' }
|
||||
let_it_be(:relation) { 'labels' }
|
||||
let_it_be(:user) { create(:user) }
|
||||
let_it_be(:group) { create(:group) }
|
||||
|
||||
let(:job_args) { [user.id, group.id, group.class.name, relation] }
|
||||
|
||||
describe '#perform' do
|
||||
include_examples 'an idempotent worker' do
|
||||
context 'when export record does not exist' do
|
||||
let(:another_group) { create(:group) }
|
||||
let(:job_args) { [user.id, another_group.id, another_group.class.name, relation] }
|
||||
|
||||
it 'creates export record' do
|
||||
another_group.add_owner(user)
|
||||
|
||||
expect { perform_multiple(job_args) }
|
||||
.to change { another_group.bulk_import_exports.count }
|
||||
.from(0)
|
||||
.to(1)
|
||||
end
|
||||
end
|
||||
|
||||
it 'executes RelationExportService' do
|
||||
group.add_owner(user)
|
||||
|
||||
service = instance_double(BulkImports::RelationExportService)
|
||||
|
||||
expect(BulkImports::RelationExportService)
|
||||
.to receive(:new)
|
||||
.with(user, group, relation, anything)
|
||||
.twice
|
||||
.and_return(service)
|
||||
expect(service)
|
||||
.to receive(:execute)
|
||||
.twice
|
||||
|
||||
perform_multiple(job_args)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -13,32 +13,30 @@ require (
|
|||
github.com/disintegration/imaging v1.6.2
|
||||
github.com/getsentry/raven-go v0.2.0
|
||||
github.com/golang/gddo v0.0.0-20190419222130-af0f2af80721
|
||||
github.com/golang/protobuf v1.4.3
|
||||
github.com/golang/protobuf v1.5.2
|
||||
github.com/gomodule/redigo v2.0.0+incompatible
|
||||
github.com/gorilla/websocket v1.4.1
|
||||
github.com/grpc-ecosystem/go-grpc-middleware v1.2.2
|
||||
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0
|
||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0
|
||||
github.com/johannesboyne/gofakes3 v0.0.0-20200510090907-02d71f533bec
|
||||
github.com/jpillora/backoff v1.0.0
|
||||
github.com/mitchellh/copystructure v1.0.0
|
||||
github.com/prometheus/client_golang v1.8.0
|
||||
github.com/prometheus/client_golang v1.10.0
|
||||
github.com/rafaeljusto/redigomock v0.0.0-20190202135759-257e089e14a1
|
||||
github.com/sebest/xff v0.0.0-20160910043805-6c115e0ffa35
|
||||
github.com/sebest/xff v0.0.0-20210106013422-671bd2870b3a
|
||||
github.com/shabbyrobe/gocovmerge v0.0.0-20190829150210-3e036491d500 // indirect
|
||||
github.com/sirupsen/logrus v1.7.0
|
||||
github.com/sirupsen/logrus v1.8.1
|
||||
github.com/smartystreets/goconvey v1.6.4
|
||||
github.com/stretchr/testify v1.6.1
|
||||
github.com/stretchr/testify v1.7.0
|
||||
gitlab.com/gitlab-org/gitaly v1.74.0
|
||||
gitlab.com/gitlab-org/labkit v1.0.0
|
||||
gitlab.com/gitlab-org/labkit v1.4.0
|
||||
gocloud.dev v0.21.1-0.20201223184910-5094f54ed8bb
|
||||
golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5 // indirect
|
||||
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8
|
||||
golang.org/x/lint v0.0.0-20200302205851-738671d3881b
|
||||
golang.org/x/net v0.0.0-20201224014010-6772e930b67b
|
||||
golang.org/x/text v0.3.5 // indirect
|
||||
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5
|
||||
golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4
|
||||
golang.org/x/tools v0.1.0
|
||||
google.golang.org/genproto v0.0.0-20210111234610-22ae2b108f89 // indirect
|
||||
google.golang.org/grpc v1.34.1
|
||||
google.golang.org/grpc/examples v0.0.0-20201226181154-53788aa5dcb4 // indirect
|
||||
google.golang.org/grpc v1.37.0
|
||||
honnef.co/go/tools v0.1.3
|
||||
)
|
||||
|
||||
|
|
210
workhorse/go.sum
|
@ -17,8 +17,12 @@ cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZ
|
|||
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
|
||||
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
|
||||
cloud.google.com/go v0.66.0/go.mod h1:dgqGAjKCDxyhGTtC9dAREQGUJpkceNm1yt590Qno0Ko=
|
||||
cloud.google.com/go v0.72.0 h1:eWRCuwubtDrCJG0oSUMgnsbD4CmPFQF2ei4OFbXvwww=
|
||||
cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
|
||||
cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
|
||||
cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg=
|
||||
cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8=
|
||||
cloud.google.com/go v0.81.0 h1:at8Tk2zUz63cLPR0JPWm5vp77pEZmzxEQBEfRKn1VV8=
|
||||
cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0=
|
||||
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
|
||||
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
|
||||
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
|
||||
|
@ -88,19 +92,31 @@ github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ
|
|||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
||||
github.com/CloudyKit/fastprinter v0.0.0-20170127035650-74b38d55f37a/go.mod h1:EFZQ978U7x8IRnstaskI3IysnWY5Ao3QgZUKOXlsAdw=
|
||||
github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno=
|
||||
github.com/CloudyKit/jet v2.1.3-0.20180809161101-62edd43e4f88+incompatible/go.mod h1:HPYO+50pSWkPoj9Q/eq0aRGByCL6ScRlUmiEX5Zgm+w=
|
||||
github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo=
|
||||
github.com/DataDog/datadog-go v4.4.0+incompatible h1:R7WqXWP4fIOAqWJtUKmSfuc7eDsBT58k9AY5WSHVosk=
|
||||
github.com/DataDog/datadog-go v4.4.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
|
||||
github.com/DataDog/gostackparse v0.5.0/go.mod h1:lTfqcJKqS9KnXQGnyQMCugq3u1FP6UZMfWR0aitKFMM=
|
||||
github.com/FZambia/sentinel v1.0.0 h1:KJ0ryjKTZk5WMp0dXvSdNqp3lFaW1fNFuEYfrkLOYIc=
|
||||
github.com/FZambia/sentinel v1.0.0/go.mod h1:ytL1Am/RLlAoAXG6Kj5LNuw/TRRQrv2rt2FT26vP5gI=
|
||||
github.com/GoogleCloudPlatform/cloudsql-proxy v1.19.1/go.mod h1:+yYmuKqcBVkgRePGpUhTA9OEg0XsnFE96eZ6nJ2yCQM=
|
||||
github.com/HdrHistogram/hdrhistogram-go v1.1.0 h1:6dpdDPTRoo78HxAJ6T1HfMiKSnqhgRRqzCuPshRkQ7I=
|
||||
github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
|
||||
github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY=
|
||||
github.com/Joker/jade v1.0.1-0.20190614124447-d475f43051e7/go.mod h1:6E6s8o2AE4KhCrqr6GRJjdC/gNfTdxkIXvuGZZda2VM=
|
||||
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
|
||||
github.com/Microsoft/go-winio v0.4.19 h1:ZMZG0O5M8bhD0lgCURV8yu3hQ7TGvQ4L1ZW8+J0j9iE=
|
||||
github.com/Microsoft/go-winio v0.4.19/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
|
||||
github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0=
|
||||
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
|
||||
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
|
||||
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk=
|
||||
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
|
||||
github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
|
||||
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=
|
||||
github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY=
|
||||
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
|
||||
github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38 h1:smF2tmSOzy2Mm+0dGI2AIUHY+w0BUc+4tn40djz7+6U=
|
||||
github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38/go.mod h1:r7bzyVFMNntcxPZXK3/+KdruV1H5KSlyVY0gc+NgInI=
|
||||
github.com/alecthomas/chroma v0.7.3 h1:NfdAERMy+esYQs8OXk0I868/qDxxCEo7FMz1WIqMAeI=
|
||||
|
@ -156,8 +172,8 @@ github.com/client9/reopen v1.0.0/go.mod h1:caXVCEr+lUtoN1FlsRiOWdfQtdRHIYfcb0ai8
|
|||
github.com/cloudflare/tableflip v1.2.1-0.20200514155827-4baec9811f2b/go.mod h1:vhhSlJqV8uUnxGkRSgyvGthfGlkAwJ4UuSV51fSrCQY=
|
||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
|
||||
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
|
||||
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
|
||||
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w=
|
||||
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
|
||||
github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM=
|
||||
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
||||
|
@ -168,6 +184,7 @@ github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfc
|
|||
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
|
||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964 h1:y5HC9v93H5EPKqaS1UYVg1uYah5Xf51mBfIoWehClUQ=
|
||||
github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964/go.mod h1:Xd9hchkHSWYkEqJwUGisez3G1QY8Ryz0sdWrLPMGjLk=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
|
@ -199,12 +216,15 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
|
|||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||
github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
|
||||
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
|
||||
github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw=
|
||||
github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8=
|
||||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
|
||||
github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4/go.mod h1:T9YF2M40nIgbVgp3rreNmTged+9HrbNTIQf1PsaIiTA=
|
||||
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
|
||||
github.com/form3tech-oss/jwt-go v3.2.2+incompatible h1:TcekIExNqud5crz4xD2pavyTgWiPvpYe4Xau31I0PRk=
|
||||
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
|
||||
github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
|
||||
|
@ -218,8 +238,8 @@ github.com/getsentry/raven-go v0.1.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49P
|
|||
github.com/getsentry/raven-go v0.2.0 h1:no+xWJRb5ZI7eE8TWgIq1jLulQiIoLG0IfYxv5JYMGs=
|
||||
github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ=
|
||||
github.com/getsentry/sentry-go v0.5.1/go.mod h1:B8H7x8TYDPkeWPRzGpIiFO97LZP6rL8A3hEt8lUItMw=
|
||||
github.com/getsentry/sentry-go v0.7.0 h1:MR2yfR4vFfv/2+iBuSnkdQwVg7N9cJzihZ6KJu7srwQ=
|
||||
github.com/getsentry/sentry-go v0.7.0/go.mod h1:pLFpD2Y5RHIKF9Bw3KH6/68DeN2K/XBJd8awjdPnUwg=
|
||||
github.com/getsentry/sentry-go v0.10.0 h1:6gwY+66NHKqyZrdi6O2jGdo7wGdo9b3B69E01NFgT5g=
|
||||
github.com/getsentry/sentry-go v0.10.0/go.mod h1:kELm/9iCblqUYh+ZRML7PNdCvEuw24wBvJPYyi86cws=
|
||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||
github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s=
|
||||
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
|
||||
|
@ -239,6 +259,8 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9
|
|||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
|
||||
github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8=
|
||||
github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI=
|
||||
github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=
|
||||
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
|
||||
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
|
||||
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
|
||||
|
@ -258,9 +280,11 @@ github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/E
|
|||
github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
|
||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||
github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE=
|
||||
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
|
||||
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
||||
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
||||
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
||||
github.com/golang/gddo v0.0.0-20190419222130-af0f2af80721 h1:KRMr9A3qfbVM7iV/WcLY/rL5LICqwMHLhwRXKu99fXw=
|
||||
github.com/golang/gddo v0.0.0-20190419222130-af0f2af80721/go.mod h1:xEhNfoBDX1hzLm2Nf80qUvZ2sVwoMZ8d6IE2SrsQfh4=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||
|
@ -275,8 +299,9 @@ github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFU
|
|||
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
|
||||
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
|
||||
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
|
||||
github.com/golang/mock v1.4.4 h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc=
|
||||
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
|
||||
github.com/golang/mock v1.5.0 h1:jlYHihg//f7RRwuPfptm04yp4s7O6Kw8EZiVYIGcH0g=
|
||||
github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8=
|
||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
|
@ -290,8 +315,11 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W
|
|||
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
|
||||
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
|
||||
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||
github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM=
|
||||
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
||||
github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM=
|
||||
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
|
||||
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||
github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
|
||||
github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0=
|
||||
|
@ -306,8 +334,10 @@ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
|
|||
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M=
|
||||
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
|
||||
github.com/google/go-replayers/grpcreplay v1.0.0 h1:B5kVOzJ1hBgnevTgIWhSTatQ3608yu/2NnU0Ta1d0kY=
|
||||
github.com/google/go-replayers/grpcreplay v1.0.0/go.mod h1:8Ig2Idjpr6gifRd6pNVggX6TC1Zw6Jx74AKp7QNH2QE=
|
||||
|
@ -328,8 +358,12 @@ github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hf
|
|||
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||
github.com/google/pprof v0.0.0-20200905233945-acf8798be1f7/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c h1:Jx2lEv4nMccTJE+IIZOVIvk+DjNKlRsW0sm1uBr896U=
|
||||
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||
github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||
github.com/google/pprof v0.0.0-20210125172800-10e9aeb4a998/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||
github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5 h1:zIaiqGYDQwa4HVx5wGRTXbx38Pqxjemn4BP98wpzpXo=
|
||||
github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
||||
github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk=
|
||||
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
|
@ -354,8 +388,8 @@ github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvK
|
|||
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
||||
github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
||||
github.com/grpc-ecosystem/go-grpc-middleware v1.2.2 h1:FlFbCRLd5Jr4iYXZufAvgWN6Ao0JrI5chLINnUXDDr0=
|
||||
github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI=
|
||||
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw=
|
||||
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y=
|
||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho=
|
||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||
|
@ -391,6 +425,8 @@ github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod
|
|||
github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI=
|
||||
github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0=
|
||||
github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0/go.mod h1:pMCz62A0xJL6I+umB2YTlFRwWXaDFA0jy+5HzGiJjqI=
|
||||
github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk=
|
||||
github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g=
|
||||
github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw=
|
||||
github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
||||
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
||||
|
@ -419,17 +455,25 @@ github.com/juju/loggo v0.0.0-20180524022052-584905176618/go.mod h1:vgyd7OREkbtVE
|
|||
github.com/juju/testing v0.0.0-20180920084828-472a3e8b2073/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA=
|
||||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
||||
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
|
||||
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
|
||||
github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k=
|
||||
github.com/kataras/golog v0.0.9/go.mod h1:12HJgwBIZFNGL0EJnMRhmvGA0PQGx8VFwrZtM4CqbAk=
|
||||
github.com/kataras/golog v0.0.10/go.mod h1:yJ8YKCmyL+nWjERB90Qwn+bdyBZsaQwU3bTVFgkFIp8=
|
||||
github.com/kataras/iris/v12 v12.0.1/go.mod h1:udK4vLQKkdDqMGJJVd/msuMtN6hpYJhg/lSzuxjhO+U=
|
||||
github.com/kataras/iris/v12 v12.1.8/go.mod h1:LMYy4VlP67TQ3Zgriz8RE2h2kMZV2SgMYbq3UhfoFmE=
|
||||
github.com/kataras/neffos v0.0.10/go.mod h1:ZYmJC07hQPW67eKuzlfY7SO3bC0mw83A3j6im82hfqw=
|
||||
github.com/kataras/neffos v0.0.14/go.mod h1:8lqADm8PnbeFfL7CLXh1WHw53dG27MC3pgi2R1rmoTE=
|
||||
github.com/kataras/pio v0.0.0-20190103105442-ea782b38602d/go.mod h1:NV88laa9UiiDuX9AhMbDPkGYSPugBOV6yTZB1l2K9Z0=
|
||||
github.com/kataras/pio v0.0.2/go.mod h1:hAoW0t9UmXi4R5Oyq5Z4irTbaTsOemSrDGUtaTl7Dro=
|
||||
github.com/kataras/sitemap v0.0.5/go.mod h1:KY2eugMKiPwsJgx7+U103YZehfvNGOXURubcGyk0Bz8=
|
||||
github.com/kelseyhightower/envconfig v1.3.0 h1:IvRS4f2VcIQy6j4ORGIf9145T/AsUB+oY8LyvN8BXNM=
|
||||
github.com/kelseyhightower/envconfig v1.3.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg=
|
||||
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
|
||||
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||
github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
|
||||
github.com/klauspost/compress v1.9.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
|
||||
github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
|
||||
github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
|
||||
github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
|
||||
github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
||||
|
@ -439,19 +483,23 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxv
|
|||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g=
|
||||
github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k=
|
||||
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
|
||||
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||
github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||
github.com/libgit2/git2go/v30 v30.0.5/go.mod h1:YReiQ7xhMoyAL4ISYFLZt+OGqn6xtLqvTC1xJ9oAH7Y=
|
||||
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743 h1:143Bb8f8DuGWck/xpNUOckBVYfFbBTnLevfRZ1aVVqo=
|
||||
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
|
||||
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20200305213919-a88bf8de3718/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
|
||||
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20210210170715-a8dfcb80d3a7 h1:YjW+hUb8Fh2S58z4av4t/0cBMK/Q0aP48RocCFsC8yI=
|
||||
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20210210170715-a8dfcb80d3a7/go.mod h1:Spd59icnvRxSKuyijbbwe5AemzvcyXAUBgApa7VybMw=
|
||||
github.com/lightstep/lightstep-tracer-go v0.15.6/go.mod h1:6AMpwZpsyCFwSovxzM78e+AsYxE8sGwiM6C3TytaWeI=
|
||||
github.com/lightstep/lightstep-tracer-go v0.18.1 h1:vi1F1IQ8N7hNWytK9DpJsUfQhGuNSc19z330K6vl4zk=
|
||||
github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
|
||||
github.com/lightstep/lightstep-tracer-go v0.24.0 h1:qGUbkzHP64NA9r+uIbCvf303IzHPr0M4JlkaDMxXqqk=
|
||||
github.com/lightstep/lightstep-tracer-go v0.24.0/go.mod h1:RnONwHKg89zYPmF+Uig5PpHMUcYCFgml8+r4SS53y7A=
|
||||
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
|
||||
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
|
||||
|
@ -475,6 +523,7 @@ github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0j
|
|||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||
github.com/mediocregopher/mediocre-go-lib v0.0.0-20181029021733-cb65787f37ed/go.mod h1:dSsfyI2zABAdhcbvkXqgxOxrCsbYeHCPgrZkku60dSg=
|
||||
github.com/mediocregopher/radix/v3 v3.3.0/go.mod h1:EmfVyvspXz1uZEyPBMyGK+kjWiKQGvsUt6O3Pj+LDCQ=
|
||||
github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8=
|
||||
github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc=
|
||||
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
||||
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
|
||||
|
@ -565,8 +614,8 @@ github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod
|
|||
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
|
||||
github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
|
||||
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
|
||||
github.com/prometheus/client_golang v1.8.0 h1:zvJNkoCFAnYFNC24FV8nW4JdRJ3GIFcLbg65lL/JDcw=
|
||||
github.com/prometheus/client_golang v1.8.0/go.mod h1:O9VU6huf47PktckDQfMTX0Y8tY0/7TSWwj+ITvv0TnM=
|
||||
github.com/prometheus/client_golang v1.10.0 h1:/o0BDeWzLWXNZ+4q5gXltUvaMpJqckTa+jTNoB+z4cg=
|
||||
github.com/prometheus/client_golang v1.10.0/go.mod h1:WJM3cc3yu7XKBKa/I8WeZm+V3eltZnBwfENSU7mdogU=
|
||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
|
@ -578,16 +627,16 @@ github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8
|
|||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||
github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
|
||||
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
|
||||
github.com/prometheus/common v0.14.0 h1:RHRyE8UocrbjU+6UvRzwi6HjiDfxrrBU91TtbKzkGp4=
|
||||
github.com/prometheus/common v0.14.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
|
||||
github.com/prometheus/common v0.18.0 h1:WCVKW7aL6LEe1uryfI9dnEc2ZqNB1Fn0ok930v0iL1Y=
|
||||
github.com/prometheus/common v0.18.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
|
||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||
github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
|
||||
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
|
||||
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
|
||||
github.com/prometheus/procfs v0.2.0 h1:wH4vA7pcjKuZzjF7lM8awk4fnuJO6idemZXoKnULUx4=
|
||||
github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
|
||||
github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4=
|
||||
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
|
||||
github.com/rafaeljusto/redigomock v0.0.0-20190202135759-257e089e14a1 h1:+kGqA4dNN5hn7WwvKdzHl0rdN5AEkbNZd0VjRltAiZg=
|
||||
github.com/rafaeljusto/redigomock v0.0.0-20190202135759-257e089e14a1/go.mod h1:JaY6n2sDr+z2WTsXkOmNRUfDy6FN0L6Nk7x06ndm4tY=
|
||||
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
||||
|
@ -604,21 +653,26 @@ github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFo
|
|||
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 h1:GHRpF1pTW19a8tTFrMLUcfWwyC0pnifVo2ClaLq+hP8=
|
||||
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8=
|
||||
github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
|
||||
github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g=
|
||||
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
|
||||
github.com/sebest/xff v0.0.0-20160910043805-6c115e0ffa35 h1:eajwn6K3weW5cd1ZXLu2sJ4pvwlBiCWY4uDejOr73gM=
|
||||
github.com/sebest/xff v0.0.0-20160910043805-6c115e0ffa35/go.mod h1:wozgYq9WEBQBaIJe4YZ0qTSFAMxmcwBhQH0fO0R34Z0=
|
||||
github.com/sebest/xff v0.0.0-20210106013422-671bd2870b3a h1:iLcLb5Fwwz7g/DLK89F+uQBDeAhHhwdzB5fSlVdhGcM=
|
||||
github.com/sebest/xff v0.0.0-20210106013422-671bd2870b3a/go.mod h1:wozgYq9WEBQBaIJe4YZ0qTSFAMxmcwBhQH0fO0R34Z0=
|
||||
github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ=
|
||||
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
|
||||
github.com/shabbyrobe/gocovmerge v0.0.0-20180507124511-f6ea450bfb63/go.mod h1:n+VKSARF5y/tS9XFSP7vWDfS+GUC5vs/YT7M5XDTUEM=
|
||||
github.com/shabbyrobe/gocovmerge v0.0.0-20190829150210-3e036491d500 h1:WnNuhiq+FOY3jNj6JXFT+eLN3CQ/oPIsDPRanvwsmbI=
|
||||
github.com/shabbyrobe/gocovmerge v0.0.0-20190829150210-3e036491d500/go.mod h1:+njLrG5wSeoG4Ds61rFgEzKvenR2UHbjMoDHsczxly0=
|
||||
github.com/shirou/gopsutil v2.20.1+incompatible h1:oIq9Cq4i84Hk8uQAUOG3eNdI/29hBawGrD5YRl6JRDY=
|
||||
github.com/shirou/gopsutil v2.20.1+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||
github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
|
||||
github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM=
|
||||
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
|
||||
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
|
||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
||||
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
|
||||
|
@ -639,22 +693,26 @@ github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3
|
|||
github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
|
||||
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
|
||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
|
||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/tinylib/msgp v1.0.2 h1:DfdQrzQa7Yh2es9SuLkixqxuXS2SxsdYn0KbdrOGWD8=
|
||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
|
||||
github.com/tinylib/msgp v1.1.2 h1:gWmO7n0Ys2RBEb7GPYB9Ujq8Mk5p2U08lRnmMcGy6BQ=
|
||||
github.com/tinylib/msgp v1.1.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
|
||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
||||
github.com/uber-go/atomic v1.3.2 h1:Azu9lPBWRNKzYXSIwRfgRuDuS0YKsK4NFhiQv98gkxo=
|
||||
github.com/uber-go/atomic v1.3.2/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g=
|
||||
github.com/uber/jaeger-client-go v2.15.0+incompatible h1:NP3qsSqNxh8VYr956ur1N/1C1PjvOJnJykCzcD5QHbk=
|
||||
github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
|
||||
github.com/uber/jaeger-lib v1.5.0 h1:OHbgr8l656Ub3Fw5k9SWnBfIEwvoHQ+W2y+Aa9D1Uyo=
|
||||
github.com/uber/jaeger-client-go v2.27.0+incompatible h1:6WVONolFJiB8Vx9bq4z9ddyV/SXSpfvvtb7Yl/TGHiE=
|
||||
github.com/uber/jaeger-client-go v2.27.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
|
||||
github.com/uber/jaeger-lib v1.5.0/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
|
||||
github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg=
|
||||
github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
|
||||
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
|
||||
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
|
||||
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
|
||||
|
@ -685,8 +743,8 @@ gitlab.com/gitlab-org/gitaly v1.87.1-0.20201001041716-3f5e218def93/go.mod h1:NEp
|
|||
gitlab.com/gitlab-org/gitlab-shell v0.0.0-20200921044701-1a2bfecd2f0e/go.mod h1:RABblvnnhHpFU/lexlwGqpKgZsLV3RGA2D/Elp5/KEA=
|
||||
gitlab.com/gitlab-org/labkit v0.0.0-20200507062444-0149780c759d/go.mod h1:SNfxkfUwVNECgtmluVayv0GWFgEjjBs5AzgsowPQuo0=
|
||||
gitlab.com/gitlab-org/labkit v0.0.0-20200908084045-45895e129029/go.mod h1:SNfxkfUwVNECgtmluVayv0GWFgEjjBs5AzgsowPQuo0=
|
||||
gitlab.com/gitlab-org/labkit v1.0.0 h1:t2Wr8ygtvHfXAMlCkoEdk5pdb5Gy1IYdr41H7t4kAYw=
|
||||
gitlab.com/gitlab-org/labkit v1.0.0/go.mod h1:nohrYTSLDnZix0ebXZrbZJjymRar8HeV2roWL5/jw2U=
|
||||
gitlab.com/gitlab-org/labkit v1.4.0 h1:KZTEylusrFmqLXSzE5bHfBf7/xI2NLnsyoRgB7I7Oh8=
|
||||
gitlab.com/gitlab-org/labkit v1.4.0/go.mod h1:4YbseTLUD7g4pPSylV57Hpyf7N3hbbxdx8K81//U/XM=
|
||||
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
||||
go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
|
||||
go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0=
|
||||
|
@ -697,8 +755,9 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
|
|||
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||
go.opencensus.io v0.22.5 h1:dntmOdLpSpHlVqbW5Eay97DelsZHe+55D+xC6i0dDS0=
|
||||
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
|
||||
go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M=
|
||||
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
|
||||
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||
go.uber.org/atomic v1.5.0 h1:OI5t8sDa1Or+q8AeE+yKeB/SDYioSHAgcVljj9JIETY=
|
||||
|
@ -720,12 +779,16 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
|
|||
golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c h1:9HhBz5L/UjnK9XLtiZhYAdue5BVKep3PMmS2LuPDt8k=
|
||||
golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
|
||||
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
||||
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
|
||||
|
@ -735,7 +798,9 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0
|
|||
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
|
||||
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
|
||||
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
|
||||
golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5 h1:FR+oGxGfbQu1d+jglI3rCkjAjUnhRSZcUxr+DqlDLNo=
|
||||
golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw=
|
||||
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
|
||||
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
||||
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8 h1:hVwzHzIUGRjiF7EcUjqNxk3NCfkPxbDKRdnNE1Rpg0U=
|
||||
|
@ -749,8 +814,9 @@ golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHl
|
|||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
|
||||
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
||||
golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k=
|
||||
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
||||
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5 h1:2M3HP5CCK1Si9FQhwnzYhXdG6DXeebvUHFpre8QvbyI=
|
||||
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
||||
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
|
||||
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
|
||||
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
|
||||
|
@ -759,8 +825,9 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
|
|||
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.4.0 h1:8pl+sMODzuvGJkmj2W4kZihvVb5mKm8pB/X44PIQHv8=
|
||||
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.4.1 h1:Kvvh58BN8Y9/lBi7hTekvtMpm07eUZ0ck5pRHpsMWrY=
|
||||
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
|
@ -793,7 +860,6 @@ golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLL
|
|||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
|
@ -806,8 +872,11 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY
|
|||
golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20201224014010-6772e930b67b h1:iFwSg7t5GZmB/Q5TjiEAsdoLDrdJRC1RiF2WhuV29Qw=
|
||||
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4 h1:b0LrWgu8+q7z4J+0Y3Umo5q1dL7NXBkKBWkaVkAq17E=
|
||||
golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
|
@ -815,8 +884,13 @@ golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4Iltr
|
|||
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20201203001011-0b49973bad19 h1:ZD+2Sd/BnevwJp8PSli8WgGAGzb9IZtxBsv1iZMYeEA=
|
||||
golang.org/x/oauth2 v0.0.0-20201203001011-0b49973bad19/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78 h1:rPRtHfUb0UKZeZ6GH4K4Nt4YRbE9V1u+QZX5upZXqJQ=
|
||||
golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
|
@ -826,6 +900,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ
|
|||
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
|
@ -868,7 +944,6 @@ golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200413165638-669c56c373c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
|
@ -879,12 +954,19 @@ golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||
golang.org/x/sys v0.0.0-20200828194041-157a740278f4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k=
|
||||
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210412220455-f1c623a9e750 h1:ZBu6861dZq7xBnG1bn5SRU0vA8nx42at4+kP07FMTog=
|
||||
golang.org/x/sys v0.0.0-20210412220455-f1c623a9e750/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
|
@ -899,12 +981,15 @@ golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxb
|
|||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
|
||||
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||
golang.org/x/tools v0.0.0-20190308174544-00c44ba9c14f/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4=
|
||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||
|
@ -950,6 +1035,7 @@ golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roY
|
|||
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
|
||||
|
@ -961,6 +1047,9 @@ golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4f
|
|||
golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.0.0-20201202200335-bef1c476418a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.0.0-20201203202102-a1a1cbeaa516/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY=
|
||||
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
|
@ -968,6 +1057,12 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T
|
|||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
|
||||
gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM=
|
||||
gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0=
|
||||
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0 h1:OE9mWmgKkjJyEmDAAtGMPjXu+YNeGvK9VTSHY6+Qihc=
|
||||
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
|
||||
gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
|
||||
google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
|
||||
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
|
||||
google.golang.org/api v0.5.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
|
||||
|
@ -990,8 +1085,12 @@ google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz513
|
|||
google.golang.org/api v0.31.0/go.mod h1:CL+9IBCa2WWU6gRuBWaKqGWLFFwbEUXkfeMkHLQWYWo=
|
||||
google.golang.org/api v0.32.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=
|
||||
google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=
|
||||
google.golang.org/api v0.36.0 h1:l2Nfbl2GPXdWorv+dT2XfinX2jOOw4zv1VhLstx+6rE=
|
||||
google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE=
|
||||
google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8=
|
||||
google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU=
|
||||
google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94=
|
||||
google.golang.org/api v0.45.0 h1:pqMffJFLBVUDIoYsHcqtxgQVTsmxMDpYLOc5MT4Jrww=
|
||||
google.golang.org/api v0.45.0/go.mod h1:ISLIJCedJolbZvDfAk+Ctuq5hf+aJ33WgtUsfyFoLXA=
|
||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||
google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
|
@ -1033,7 +1132,6 @@ google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEY
|
|||
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
|
||||
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20200831141814-d751682dd103/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
|
@ -1042,8 +1140,15 @@ google.golang.org/genproto v0.0.0-20200921151605-7abf4a1a14d5/go.mod h1:FWY/as6D
|
|||
google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20201203001206-6486ece9c497/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20210111234610-22ae2b108f89 h1:R2owLnwrU3BdTJ5R9cnHDNsnEmBQ7n5lZjKShnbISe4=
|
||||
google.golang.org/genproto v0.0.0-20210111234610-22ae2b108f89/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=
|
||||
google.golang.org/genproto v0.0.0-20210413151531-c14fb6ef47c3 h1:K+7Ig5hjiLVA/i1UFUUbCGimWz5/Ey0lAQjT3QiLaPY=
|
||||
google.golang.org/genproto v0.0.0-20210413151531-c14fb6ef47c3/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A=
|
||||
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
|
||||
|
@ -1066,10 +1171,11 @@ google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM
|
|||
google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
||||
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
|
||||
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
|
||||
google.golang.org/grpc v1.34.1 h1:ugq+9++ZQPFzM2pKUMCIK8gj9M0pFyuUWO9Q8kwEDQw=
|
||||
google.golang.org/grpc v1.34.1/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
|
||||
google.golang.org/grpc/examples v0.0.0-20201226181154-53788aa5dcb4 h1:tfxAh8kBsG9GdCdaDiSCA1qqpd8lMOqgEebUyqTtnH8=
|
||||
google.golang.org/grpc/examples v0.0.0-20201226181154-53788aa5dcb4/go.mod h1:Ly7ZA/ARzg8fnPU9TyZIxoz33sEUuWX7txiqs8lPTgE=
|
||||
google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
|
||||
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
|
||||
google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
|
||||
google.golang.org/grpc v1.37.0 h1:uSZWeQJX5j11bIQ4AJoj+McDBo29cY1MCoC1wO3ts+c=
|
||||
google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
|
||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||
|
@ -1079,10 +1185,13 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
|
|||
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
|
||||
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
|
||||
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
||||
gopkg.in/DataDog/dd-trace-go.v1 v1.7.0 h1:7wbMayb6JXcbAS95RN7MI42W3o1BCxCcdIzZfVWBAiE=
|
||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||
google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
|
||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||
gopkg.in/DataDog/dd-trace-go.v1 v1.7.0/go.mod h1:DVp8HmDh8PuTu2Z0fVVlBsyWaC++fzwVCaGWylTe3tg=
|
||||
gopkg.in/DataDog/dd-trace-go.v1 v1.31.0 h1:ouY+DNlRTckk63TNh468tPWBC21qBZPniVQXQs0iq10=
|
||||
gopkg.in/DataDog/dd-trace-go.v1 v1.31.0/go.mod h1:SnKViq44dv/0gjl9RpkP0Y2G3BJSRkp6eYdCSu39iI8=
|
||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
|
@ -1097,6 +1206,7 @@ gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
|
|||
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
|
||||
gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y=
|
||||
gopkg.in/gorp.v1 v1.7.2/go.mod h1:Wo3h+DBQZIxATwftsglhdD/62zRFPhGhTiu5jUJmCaw=
|
||||
gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||
gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
|
||||
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
||||
|
@ -1110,6 +1220,7 @@ gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
|
||||
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
|
@ -1124,6 +1235,7 @@ honnef.co/go/tools v0.1.3 h1:qTakTkI6ni6LFD5sBwwsdSO+AQqbSIxOauHTTQKZ/7o=
|
|||
honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las=
|
||||
nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0=
|
||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
|
||||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
||||
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
|
||||
|
|
30
yarn.lock
|
@ -897,26 +897,26 @@
|
|||
stylelint-declaration-strict-value "1.7.7"
|
||||
stylelint-scss "3.18.0"
|
||||
|
||||
"@gitlab/svgs@1.191.0":
|
||||
version "1.191.0"
|
||||
resolved "https://registry.yarnpkg.com/@gitlab/svgs/-/svgs-1.191.0.tgz#87d4eed7adfa0004a13736eb1c667ef4d3fe2a5c"
|
||||
integrity sha512-xYMBPB687zQmKXTj0KRWYJNQeYwKAVv1aCyB2FwfycNKW6bPFizNnSE7xC3Cgj8TKk624I4aPEZBO+fuGPaAFw==
|
||||
"@gitlab/svgs@1.192.0":
|
||||
version "1.192.0"
|
||||
resolved "https://registry.yarnpkg.com/@gitlab/svgs/-/svgs-1.192.0.tgz#d08d86b39d5bb9724b1249f71193b7393f185c2e"
|
||||
integrity sha512-hGKtkeC5IplTOjLqLs2pwHh7/JIBnXkJKfl0txHhOFUiIP40YKKAZYiGNSrXVv5JTwQYn+zyK8a0EBuS884/xA==
|
||||
|
||||
"@gitlab/tributejs@1.0.0":
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@gitlab/tributejs/-/tributejs-1.0.0.tgz#672befa222aeffc83e7d799b0500a7a4418e59b8"
|
||||
integrity sha512-nmKw1+hB6MHvlmPz63yPwVs1qQkycHwsKgxpEbzmky16Y6mL4EJMk3w1b8QlOAF/AIAzjCERPhe/R4MJiohbZw==
|
||||
|
||||
"@gitlab/ui@29.11.0":
|
||||
version "29.11.0"
|
||||
resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-29.11.0.tgz#e0f82c7047ef6301694c5f76851c5812f5be4d8f"
|
||||
integrity sha512-+ukRbw6Kc937krnTS434dnkfBKeDedZ25hAqMikATWDAeEt4wfslr9Yio5NRucYiafH3v3cIGyeQ6wGLz9BlQw==
|
||||
"@gitlab/ui@29.13.0":
|
||||
version "29.13.0"
|
||||
resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-29.13.0.tgz#6e222106a0ae14f56c361b0cc86152d09170cc09"
|
||||
integrity sha512-JZAIuYT9gUhv/My/+IVwbBacTJAL+9g7wZWfSl9DS8PY/H2GCGgMcgvcSJMDuqcJZvKZdNkQ0XzXem+SFo5t1A==
|
||||
dependencies:
|
||||
"@babel/standalone" "^7.0.0"
|
||||
"@gitlab/vue-toasted" "^1.3.0"
|
||||
bootstrap-vue "2.15.0"
|
||||
bootstrap-vue "2.16.0"
|
||||
copy-to-clipboard "^3.0.8"
|
||||
dompurify "^2.2.7"
|
||||
dompurify "^2.2.8"
|
||||
echarts "^4.9.0"
|
||||
highlight.js "^10.6.0"
|
||||
js-beautify "^1.8.8"
|
||||
|
@ -2740,10 +2740,10 @@ bonjour@^3.5.0:
|
|||
multicast-dns "^6.0.1"
|
||||
multicast-dns-service-types "^1.1.0"
|
||||
|
||||
bootstrap-vue@2.15.0:
|
||||
version "2.15.0"
|
||||
resolved "https://registry.yarnpkg.com/bootstrap-vue/-/bootstrap-vue-2.15.0.tgz#0dfc12c054496c0f10efed510da1def41697cf3c"
|
||||
integrity sha512-ncxWkDG0mKFVot314wWKJELi+ESO7k6ngV//qvJFs9iVzlFI8Hx3rBVbpcPW2vrJ+0vitH8N2SOwn4fdQ3frMQ==
|
||||
bootstrap-vue@2.16.0:
|
||||
version "2.16.0"
|
||||
resolved "https://registry.yarnpkg.com/bootstrap-vue/-/bootstrap-vue-2.16.0.tgz#07e7032ec9ffdd576470dc437da54f398ec16ba5"
|
||||
integrity sha512-gLETwPmeRHCe5WHmhGxzb5PtTEuKqQPGl0TFvZ2Odbkg/7UuIHdqIexrJRerpnomP4ZzDQ+qYGL91Ls9lcQsJQ==
|
||||
dependencies:
|
||||
"@nuxt/opencollective" "^0.3.0"
|
||||
bootstrap ">=4.5.0 <5.0.0"
|
||||
|
@ -4461,7 +4461,7 @@ domhandler@^2.3.0:
|
|||
dependencies:
|
||||
domelementtype "1"
|
||||
|
||||
dompurify@^2.2.7, dompurify@^2.2.8:
|
||||
dompurify@^2.2.8:
|
||||
version "2.2.8"
|
||||
resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.2.8.tgz#ce88e395f6d00b6dc53f80d6b2a6fdf5446873c6"
|
||||
integrity sha512-9H0UL59EkDLgY3dUFjLV6IEUaHm5qp3mxSqWw7Yyx4Zhk2Jn2cmLe+CNPP3xy13zl8Bqg+0NehQzkdMoVhGRww==
|
||||
|
|