Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2025-03-25 03:10:01 +00:00
parent 6554c5ff4d
commit 556a02f52c
14 changed files with 233 additions and 71 deletions

View File

@ -1 +1 @@
93e52c3e17edd6629674f0f26b1a8312f65a6856
9222c46d0ca6133b8f80008401c7cf946cb7d175

View File

@ -1 +1 @@
b18d3540343f5e940021447b0744934cb3b03517
bfadfe3465e1124adeae8afa74e06c43c1201ea1

View File

@ -2,7 +2,7 @@
import { GlTooltipDirective, GlLink, GlButton, GlSearchBoxByClick, GlSprintf } from '@gitlab/ui';
import { scrollToElement, backOff } from '~/lib/utils/common_utils';
import { numberToHumanSize } from '~/lib/utils/number_utils';
import { s__, sprintf } from '~/locale';
import { s__, n__, sprintf } from '~/locale';
import { compactJobLog } from '~/ci/job_details/utils';
export default {
@ -169,10 +169,17 @@ export default {
if (logLine) {
setTimeout(() => scrollToElement(logLine));
const message = sprintf(s__('Job|%{searchLength} results found for %{searchTerm}'), {
searchLength: this.searchResults.length,
searchTerm: this.searchTerm,
});
const message = sprintf(
n__(
'Job|%{searchLength} result found for %{searchTerm}',
'Job|%{searchLength} results found for %{searchTerm}',
this.searchResults.length,
),
{
searchLength: this.searchResults.length,
searchTerm: this.searchTerm,
},
);
this.$toast.show(message);
} else {

View File

@ -8,7 +8,27 @@ import {
DATE_RANGE_LAST_30_DAYS,
DATE_RANGE_LAST_90_DAYS,
DATE_RANGE_LAST_180_DAYS,
SOURCE_PUSH,
SOURCE_SCHEDULE,
SOURCE_MERGE_REQUEST_EVENT,
SOURCE_WEB,
SOURCE_TRIGGER,
SOURCE_API,
SOURCE_EXTERNAL,
SOURCE_PIPELINE,
SOURCE_CHAT,
SOURCE_WEBIDE,
SOURCE_EXTERNAL_PULL_REQUEST_EVENT,
SOURCE_PARENT_PIPELINE,
SOURCE_ONDEMAND_DAST_SCAN,
SOURCE_ONDEMAND_DAST_VALIDATION,
SOURCE_SECURITY_ORCHESTRATION_POLICY,
SOURCE_CONTAINER_REGISTRY_PUSH,
SOURCE_DUO_WORKFLOW,
SOURCE_PIPELINE_EXECUTION_POLICY_SCHEDULE,
SOURCE_UNKNOWN,
} from '../constants';
import getPipelineAnalytics from '../graphql/queries/get_pipeline_analytics.query.graphql';
import DashboardHeader from './dashboard_header.vue';
@ -17,19 +37,7 @@ import StatisticsList from './statistics_list.vue';
import PipelineDurationChart from './pipeline_duration_chart.vue';
import PipelineStatusChart from './pipeline_status_chart.vue';
// CiPipelineSources values from GraphQL schema.
const SOURCE_ANY = 'ANY';
const SOURCE_PUSH = 'PUSH';
const SOURCE_WEB = 'WEB';
const SOURCE_TRIGGER = 'TRIGGER';
const SOURCE_SCHEDULE = 'SCHEDULE';
const SOURCE_API = 'API';
const SOURCE_EXTERNAL = 'EXTERNAL';
const SOURCE_PIPELINE = 'PIPELINE';
const SOURCE_CHAT = 'CHAT';
const SOURCE_MERGE_REQUEST_EVENT = 'MERGE_REQUEST_EVENT';
const SOURCE_EXTERNAL_PULL_REQUEST_EVENT = 'EXTERNAL_PULL_REQUEST_EVENT';
const SOURCE_UNKNOWN = 'UNKNOWN';
export default {
name: 'PipelinesDashboardClickhouse',
@ -122,37 +130,42 @@ export default {
pipelineSources: [
{ value: SOURCE_ANY, text: s__('PipelineSource|Any source') },
{ value: SOURCE_PUSH, text: s__('PipelineSource|Push') },
{ value: SOURCE_SCHEDULE, text: s__('PipelineSource|Schedule') },
{ value: SOURCE_MERGE_REQUEST_EVENT, text: s__('PipelineSource|Merge Request Event') },
{ value: SOURCE_WEB, text: s__('PipelineSource|Web') },
{ value: SOURCE_TRIGGER, text: s__('PipelineSource|Trigger') },
{ value: SOURCE_SCHEDULE, text: s__('PipelineSource|Schedule') },
{ value: SOURCE_API, text: s__('PipelineSource|API') },
{ value: SOURCE_EXTERNAL, text: s__('PipelineSource|External event') },
{ value: SOURCE_EXTERNAL, text: s__('PipelineSource|External') },
{ value: SOURCE_PIPELINE, text: s__('PipelineSource|Pipeline') },
{ value: SOURCE_CHAT, text: s__('PipelineSource|Chat') },
{ value: SOURCE_MERGE_REQUEST_EVENT, text: s__('PipelineSource|Merge request') },
{ value: SOURCE_WEBIDE, text: s__('PipelineSource|Web IDE') },
{
value: SOURCE_EXTERNAL_PULL_REQUEST_EVENT,
text: s__('PipelineSource|External Pull Request'),
text: s__('PipelineSource|External Pull Request Event'),
},
{ value: SOURCE_PARENT_PIPELINE, text: s__('PipelineSource|Parent Pipeline') },
{ value: SOURCE_ONDEMAND_DAST_SCAN, text: s__('PipelineSource|On-Demand DAST Scan') },
{
value: SOURCE_ONDEMAND_DAST_VALIDATION,
text: s__('PipelineSource|On-Demand DAST Validation'),
},
{
value: SOURCE_SECURITY_ORCHESTRATION_POLICY,
text: s__('PipelineSource|Security Orchestration Policy'),
},
{ value: SOURCE_CONTAINER_REGISTRY_PUSH, text: s__('PipelineSource|Container Registry Push') },
{ value: SOURCE_DUO_WORKFLOW, text: s__('PipelineSource|Duo Workflow') },
{
value: SOURCE_PIPELINE_EXECUTION_POLICY_SCHEDULE,
text: s__('PipelineSource|Pipeline Execution Policy Schedule'),
},
{ value: SOURCE_UNKNOWN, text: s__('PipelineSource|Unknown') },
],
dateRangeItems: [
{
value: DATE_RANGE_LAST_WEEK,
text: s__('PipelineCharts|Last week'),
},
{
value: DATE_RANGE_LAST_30_DAYS,
text: s__('PipelineCharts|Last 30 days'),
},
{
value: DATE_RANGE_LAST_90_DAYS,
text: s__('PipelineCharts|Last 90 days'),
},
{
value: DATE_RANGE_LAST_180_DAYS,
text: s__('PipelineCharts|Last 180 days'),
},
{ value: DATE_RANGE_LAST_WEEK, text: s__('PipelineCharts|Last week') },
{ value: DATE_RANGE_LAST_30_DAYS, text: s__('PipelineCharts|Last 30 days') },
{ value: DATE_RANGE_LAST_90_DAYS, text: s__('PipelineCharts|Last 90 days') },
{ value: DATE_RANGE_LAST_180_DAYS, text: s__('PipelineCharts|Last 180 days') },
],
};
</script>

View File

@ -24,3 +24,26 @@ export const UNSUPPORTED_DATA = 'unsupported_data';
export const SNOWPLOW_LABEL = 'redis_hll_counters.analytics.analytics_total_unique_counts_monthly';
export const SNOWPLOW_SCHEMA = 'iglu:com.gitlab/gitlab_service_ping/jsonschema/1-0-1';
export const SNOWPLOW_DATA_SOURCE = 'redis_hll';
// CiPipelineSources values from GraphQL schema.
export const SOURCE_PUSH = 'PUSH';
export const SOURCE_SCHEDULE = 'SCHEDULE';
export const SOURCE_MERGE_REQUEST_EVENT = 'MERGE_REQUEST_EVENT';
export const SOURCE_WEB = 'WEB';
export const SOURCE_TRIGGER = 'TRIGGER';
export const SOURCE_API = 'API';
export const SOURCE_EXTERNAL = 'EXTERNAL';
export const SOURCE_PIPELINE = 'PIPELINE';
export const SOURCE_CHAT = 'CHAT';
export const SOURCE_WEBIDE = 'WEBIDE';
export const SOURCE_EXTERNAL_PULL_REQUEST_EVENT = 'EXTERNAL_PULL_REQUEST_EVENT';
export const SOURCE_PARENT_PIPELINE = 'PARENT_PIPELINE';
export const SOURCE_ONDEMAND_DAST_SCAN = 'ONDEMAND_DAST_SCAN';
export const SOURCE_ONDEMAND_DAST_VALIDATION = 'ONDEMAND_DAST_VALIDATION';
export const SOURCE_SECURITY_ORCHESTRATION_POLICY = 'SECURITY_ORCHESTRATION_POLICY';
export const SOURCE_CONTAINER_REGISTRY_PUSH = 'CONTAINER_REGISTRY_PUSH';
export const SOURCE_DUO_WORKFLOW = 'DUO_WORKFLOW';
export const SOURCE_PIPELINE_EXECUTION_POLICY_SCHEDULE = 'PIPELINE_EXECUTION_POLICY_SCHEDULE';
export const SOURCE_UNKNOWN = 'UNKNOWN';

View File

@ -1,4 +1,4 @@
import { __, n__, sprintf } from '~/locale';
import { __, n__, s__, sprintf } from '~/locale';
import { TYPE_ISSUE, WORKSPACE_PROJECT } from '~/issues/constants';
const INTERVALS = {
@ -109,3 +109,19 @@ export const CLEAR_AUTOSAVE_ENTRY_EVENT = 'markdown_clear_autosave_entry';
export const CONTENT_EDITOR_READY_EVENT = 'content_editor_ready';
export const CONTENT_EDITOR_PASTE = 'content_editor_paste';
export const MARKDOWN_EDITOR_READY_EVENT = 'markdown_editor_ready';
export const SEVERITY_LEVEL_CRITICAL = 'critical';
export const SEVERITY_LEVEL_HIGH = 'high';
export const SEVERITY_LEVEL_UNKNOWN = 'unknown';
export const SEVERITY_LEVEL_MEDIUM = 'medium';
export const SEVERITY_LEVEL_LOW = 'low';
export const SEVERITY_LEVEL_INFO = 'info';
export const SEVERITY_LEVELS = {
[SEVERITY_LEVEL_CRITICAL]: s__('severity|Critical'),
[SEVERITY_LEVEL_HIGH]: s__('severity|High'),
[SEVERITY_LEVEL_MEDIUM]: s__('severity|Medium'),
[SEVERITY_LEVEL_LOW]: s__('severity|Low'),
[SEVERITY_LEVEL_INFO]: s__('severity|Info'),
[SEVERITY_LEVEL_UNKNOWN]: s__('severity|Unknown'),
};

View File

@ -17916,6 +17916,29 @@ The edge type for [`PipelineTrigger`](#pipelinetrigger).
| <a id="pipelinetriggeredgecursor"></a>`cursor` | [`String!`](#string) | A cursor for use in pagination. |
| <a id="pipelinetriggeredgenode"></a>`node` | [`PipelineTrigger`](#pipelinetrigger) | The item at the end of the edge. |
#### `ProjectComplianceControlStatusTypeConnection`
The connection type for [`ProjectComplianceControlStatusType`](#projectcompliancecontrolstatustype).
##### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="projectcompliancecontrolstatustypeconnectionedges"></a>`edges` | [`[ProjectComplianceControlStatusTypeEdge]`](#projectcompliancecontrolstatustypeedge) | A list of edges. |
| <a id="projectcompliancecontrolstatustypeconnectionnodes"></a>`nodes` | [`[ProjectComplianceControlStatusType]`](#projectcompliancecontrolstatustype) | A list of nodes. |
| <a id="projectcompliancecontrolstatustypeconnectionpageinfo"></a>`pageInfo` | [`PageInfo!`](#pageinfo) | Information to aid in pagination. |
#### `ProjectComplianceControlStatusTypeEdge`
The edge type for [`ProjectComplianceControlStatusType`](#projectcompliancecontrolstatustype).
##### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="projectcompliancecontrolstatustypeedgecursor"></a>`cursor` | [`String!`](#string) | A cursor for use in pagination. |
| <a id="projectcompliancecontrolstatustypeedgenode"></a>`node` | [`ProjectComplianceControlStatusType`](#projectcompliancecontrolstatustype) | The item at the end of the edge. |
#### `ProjectComplianceRequirementStatusConnection`
The connection type for [`ProjectComplianceRequirementStatus`](#projectcompliancerequirementstatus).
@ -34610,6 +34633,27 @@ Returns [`CommitReferences`](#commitreferences).
| ---- | ---- | ----------- |
| <a id="projectcommitreferencescommitsha"></a>`commitSha` | [`String!`](#string) | Project commit SHA identifier. For example, `287774414568010855642518513f085491644061`. |
##### `Project.complianceControlStatus`
Compliance control statuses for a project.
{{< details >}}
**Introduced** in GitLab 17.11.
**Status**: Experiment.
{{< /details >}}
Returns [`ProjectComplianceControlStatusTypeConnection`](#projectcompliancecontrolstatustypeconnection).
This field returns a [connection](#connections). It accepts the
four standard [pagination arguments](#pagination-arguments):
`before: String`, `after: String`, `first: Int`, and `last: Int`.
###### Arguments
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="projectcompliancecontrolstatusfilters"></a>`filters` | [`ProjectComplianceControlStatusInput`](#projectcompliancecontrolstatusinput) | Filters applied when retrieving compliance control statuses for the project. |
##### `Project.complianceStandardsAdherence`
Compliance standards adherence for the project.
@ -36405,6 +36449,19 @@ four standard [pagination arguments](#pagination-arguments):
| <a id="projectcicdsettingproject"></a>`project` | [`Project`](#project) | Project the CI/CD settings belong to. |
| <a id="projectcicdsettingpushrepositoryforjobtokenallowed"></a>`pushRepositoryForJobTokenAllowed` | [`Boolean`](#boolean) | Indicates the ability to push to the original project repository using a job token. |
### `ProjectComplianceControlStatusType`
Compliance control status for a project.
#### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="projectcompliancecontrolstatustypecompliancerequirementscontrol"></a>`complianceRequirementsControl` | [`ComplianceRequirementsControl!`](#compliancerequirementscontrol) | Control of the compliance status. |
| <a id="projectcompliancecontrolstatustypeid"></a>`id` | [`ID!`](#id) | Compliance control status ID. |
| <a id="projectcompliancecontrolstatustypestatus"></a>`status` | [`ProjectComplianceControlStatus!`](#projectcompliancecontrolstatus) | Compliance status of the project for the control. |
| <a id="projectcompliancecontrolstatustypeupdatedat"></a>`updatedAt` | [`Time!`](#time) | Timestamp when the control status was last updated. |
### `ProjectComplianceRequirementStatus`
Compliance requirement status for a project.
@ -43861,6 +43918,16 @@ Values for the archived argument.
| <a id="projectarchivedinclude"></a>`INCLUDE` | Include archvied projects. |
| <a id="projectarchivedonly"></a>`ONLY` | Only archived projects. |
### `ProjectComplianceControlStatus`
Compliance status of the project control.
| Value | Description |
| ----- | ----------- |
| <a id="projectcompliancecontrolstatusfail"></a>`FAIL` | Fail. |
| <a id="projectcompliancecontrolstatuspass"></a>`PASS` | Pass. |
| <a id="projectcompliancecontrolstatuspending"></a>`PENDING` | Pending. |
### `ProjectFeatureAccessLevel`
Access level of a project feature.
@ -48105,6 +48172,14 @@ Attributes for the pipeline schedule variable.
| <a id="pipelineschedulevariableinputvalue"></a>`value` | [`String!`](#string) | Value of the variable. |
| <a id="pipelineschedulevariableinputvariabletype"></a>`variableType` | [`CiVariableType!`](#civariabletype) | Type of the variable. |
### `ProjectComplianceControlStatusInput`
#### Arguments
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="projectcompliancecontrolstatusinputcompliancerequirementid"></a>`complianceRequirementId` | [`ComplianceManagementComplianceFrameworkComplianceRequirementID`](#compliancemanagementcomplianceframeworkcompliancerequirementid) | Compliance requirement id of the statuses. |
### `PushAccessLevelInput`
Defines which user roles, users, deploy keys, or groups can push to a protected branch.

View File

@ -164,7 +164,7 @@ for more information about database migrations.
#### The removed column is referenced by a database view
When a column is referenced by a database view, it behaves as if the column had a constraint attached to it
so the view needs to be updated first before dropping he column:
so the view needs to be updated first before dropping the column:
1. Recreate the view excluding the column
1. Drop the column from the original table
@ -812,8 +812,8 @@ migrations.
There are currently two situations where views are used:
- To expose Postgres internal metrics
-To expose limited read-only data for the Unified Backup CLI
- To [expose Postgres internal metrics](virtual_tables.md)
- To expose limited read-only data for the Unified Backup CLI
### Postgres internal metrics

View File

@ -99,32 +99,30 @@ module Gitlab
def sli_query
# TODO: temporary until CRs can be rolled out with https://gitlab.com/gitlab-org/gitlab/-/issues/501105
gitlab_sec_query = prometheus_alert_db_indicators_settings[sli_query_key][:sec] ||
prometheus_alert_db_indicators_settings[sli_query_key][:main]
return gitlab_sec_sli_query if connection.load_balancer.name.to_sym == :sec
{
gitlab_main: prometheus_alert_db_indicators_settings[sli_query_key][:main],
gitlab_main_cell: prometheus_alert_db_indicators_settings[sli_query_key][:main_cell],
gitlab_ci: prometheus_alert_db_indicators_settings[sli_query_key][:ci],
gitlab_sec: gitlab_sec_query
}.fetch(:"gitlab_#{connection.load_balancer.name}", nil)
prometheus_alert_db_indicators_settings[sli_query_key][connection.load_balancer.name.to_sym]
end
strong_memoize_attr :sli_query
def gitlab_sec_sli_query
prometheus_alert_db_indicators_settings[sli_query_key][:sec] ||
prometheus_alert_db_indicators_settings[sli_query_key][:main]
end
def slo
# TODO: temporary until CRs can be rolled out with https://gitlab.com/gitlab-org/gitlab/-/issues/501105
gitlab_sec_query = prometheus_alert_db_indicators_settings[slo_key][:sec] ||
prometheus_alert_db_indicators_settings[slo_key][:main]
return gitlab_sec_slo_query if connection.load_balancer.name.to_sym == :sec
{
gitlab_main: prometheus_alert_db_indicators_settings[slo_key][:main],
gitlab_main_cell: prometheus_alert_db_indicators_settings[slo_key][:main_cell],
gitlab_ci: prometheus_alert_db_indicators_settings[slo_key][:ci],
gitlab_sec: gitlab_sec_query
}.fetch(:"gitlab_#{connection.load_balancer.name}", nil)
prometheus_alert_db_indicators_settings[slo_key][connection.load_balancer.name.to_sym]
end
strong_memoize_attr :slo
def gitlab_sec_slo_query
prometheus_alert_db_indicators_settings[slo_key][:sec] ||
prometheus_alert_db_indicators_settings[slo_key][:main]
end
def fetch_sli(query)
response = client.query(query)
metric = response&.first || {}

View File

@ -33529,8 +33529,10 @@ msgstr ""
msgid "Job|%{rawLinkStart}View raw%{rawLinkEnd} or %{fullLinkStart}full log%{fullLinkEnd}."
msgstr ""
msgid "Job|%{searchLength} results found for %{searchTerm}"
msgstr ""
msgid "Job|%{searchLength} result found for %{searchTerm}"
msgid_plural "Job|%{searchLength} results found for %{searchTerm}"
msgstr[0] ""
msgstr[1] ""
msgid "Job|Are you sure you want to erase this job log and artifacts?"
msgstr ""
@ -35924,6 +35926,9 @@ msgstr ""
msgid "MemberRole|Could not update role."
msgstr ""
msgid "MemberRole|Create member role"
msgstr ""
msgid "MemberRole|Create role"
msgstr ""
@ -35966,6 +35971,9 @@ msgstr ""
msgid "MemberRole|Dismiss Planner role promotion"
msgstr ""
msgid "MemberRole|Edit member role"
msgstr ""
msgid "MemberRole|Edit role"
msgstr ""
@ -43211,19 +43219,25 @@ msgstr ""
msgid "PipelineSource|Chat"
msgstr ""
msgid "PipelineSource|Container Registry Push"
msgstr ""
msgid "PipelineSource|Duo Workflow"
msgstr ""
msgid "PipelineSource|External"
msgstr ""
msgid "PipelineSource|External Pull Request"
msgstr ""
msgid "PipelineSource|External event"
msgid "PipelineSource|External Pull Request Event"
msgstr ""
msgid "PipelineSource|Merge Request"
msgstr ""
msgid "PipelineSource|Merge request"
msgid "PipelineSource|Merge Request Event"
msgstr ""
msgid "PipelineSource|On-Demand DAST Scan"
@ -43238,12 +43252,18 @@ msgstr ""
msgid "PipelineSource|Pipeline"
msgstr ""
msgid "PipelineSource|Pipeline Execution Policy Schedule"
msgstr ""
msgid "PipelineSource|Push"
msgstr ""
msgid "PipelineSource|Schedule"
msgstr ""
msgid "PipelineSource|Security Orchestration Policy"
msgstr ""
msgid "PipelineSource|Trigger"
msgstr ""
@ -52911,6 +52931,9 @@ msgstr ""
msgid "SecurityInventory|View security coverage and vulnerabilities for all the projects in this group. Data is refreshed and may be upto 24 hours behind."
msgstr ""
msgid "SecurityInventory|View vulnerability report"
msgstr ""
msgid "SecurityInventory||An error occurred while fetching subgroups and projects. Please try again."
msgstr ""

View File

@ -57,7 +57,6 @@ ee/spec/frontend/related_items_tree/components/tree_root_spec.js
ee/spec/frontend/requirements/components/requirement_item_spec.js
ee/spec/frontend/requirements/components/requirements_root_spec.js
ee/spec/frontend/roadmap/components/roadmap_shell_spec.js
ee/spec/frontend/roles_and_permissions/components/create_member_role_spec.js
ee/spec/frontend/roles_and_permissions/components/role_selector_spec.js
ee/spec/frontend/security_configuration/components/app_spec.js
ee/spec/frontend/security_configuration/components/dynamic_fields_spec.js

View File

@ -76,15 +76,23 @@ describe('PipelinesDashboardClickhouse', () => {
expect(sources).toEqual([
'Any source',
'Push',
'Schedule',
'Merge Request Event',
'Web',
'Trigger',
'Schedule',
'API',
'External event',
'External',
'Pipeline',
'Chat',
'Merge request',
'External Pull Request',
'Web IDE',
'External Pull Request Event',
'Parent Pipeline',
'On-Demand DAST Scan',
'On-Demand DAST Validation',
'Security Orchestration Policy',
'Container Registry Push',
'Duo Workflow',
'Pipeline Execution Policy Schedule',
'Unknown',
]);
});

View File

@ -34,7 +34,7 @@ require (
gocloud.dev v0.40.1-0.20241107185025-56954848c3aa
golang.org/x/image v0.20.0
golang.org/x/net v0.35.0
golang.org/x/oauth2 v0.24.0
golang.org/x/oauth2 v0.28.0
google.golang.org/grpc v1.67.1
google.golang.org/protobuf v1.36.5
)

View File

@ -758,8 +758,8 @@ golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ
golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE=
golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
golang.org/x/oauth2 v0.28.0 h1:CrgCKl8PPAVtLnU3c+EDw6x11699EWlsDeWNWKdIOkc=
golang.org/x/oauth2 v0.28.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
golang.org/x/sync v0.0.0-20170517211232-f52d1811a629/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
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=