Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2022-09-21 21:13:33 +00:00
parent 136ec65df5
commit 04d4cf89db
1555 changed files with 2204 additions and 1853 deletions

View File

@ -56,7 +56,7 @@ feature for all reviews. Reviewers will then `approve` the MR and remove themsel
- [ ] (Recommended) PMM
- [ ] (Optional) Product Designer
- [ ] (Optional) Group Manager or Director
- [ ] Required review and approval: [Technical Writer designated to the corresponding DevOps stage/group](https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments).
- [ ] Required review and approval: [Technical Writer designated to the corresponding DevOps stage/group](https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments).
### Tech writer review

View File

@ -8,7 +8,7 @@
## Author's checklist
- [ ] Optional. Consider taking [the GitLab Technical Writing Fundamentals course](https://about.gitlab.com/handbook/engineering/ux/technical-writing/fundamentals/).
- [ ] Optional. Consider taking [the GitLab Technical Writing Fundamentals course](https://about.gitlab.com/handbook/product/ux/technical-writing/fundamentals/).
- [ ] Follow the:
- [Documentation process](https://docs.gitlab.com/ee/development/documentation/workflow.html).
- [Documentation guidelines](https://docs.gitlab.com/ee/development/documentation/).
@ -16,7 +16,7 @@
- [ ] If you're adding or changing the main heading of the page (H1), ensure that the [product tier badge](https://docs.gitlab.com/ee/development/documentation/styleguide/index.html#product-tier-badges) is added.
- [ ] If you are a GitLab team member, [request a review](https://docs.gitlab.com/ee/development/code_review.html#dogfooding-the-attention-request-feature) based on:
- The documentation page's [metadata](https://docs.gitlab.com/ee/development/documentation/#metadata).
- The [associated Technical Writer](https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments).
- The [associated Technical Writer](https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments).
If you are a GitLab team member and only adding documentation, do not add any of the following labels:
@ -34,7 +34,7 @@ Documentation-related MRs should be reviewed by a Technical Writer for a non-blo
- [ ] If the content requires it, ensure the information is reviewed by a subject matter expert.
- Technical writer review items:
- [ ] Ensure docs metadata is present and up-to-date.
- [ ] Ensure the appropriate [labels](https://about.gitlab.com/handbook/engineering/ux/technical-writing/workflow/#labels) are added to this MR.
- [ ] Ensure the appropriate [labels](https://about.gitlab.com/handbook/product/ux/technical-writing/workflow/#labels) are added to this MR.
- [ ] Ensure a release milestone is set.
- If relevant to this MR, ensure [content topic type](https://docs.gitlab.com/ee/development/documentation/structure.html) principles are in use, including:
- [ ] The headings should be something you'd do a Google search for. Instead of `Default behavior`, say something like `Default behavior when you close an issue`.

View File

@ -61,7 +61,7 @@ feature for all reviews. Reviewers will `approve` the MR and remove themselves f
- [ ] (Recommended) PMM
- [ ] (Optional) Product Designer
- [ ] (Optional) Group Manager or Director
- [ ] Required review and approval: [Technical Writer designated to the corresponding DevOps stage/group](https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments).
- [ ] Required review and approval: [Technical Writer designated to the corresponding DevOps stage/group](https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments).
### Tech writer review

View File

@ -19,6 +19,7 @@ RSpec/FilePath:
- 'ee/spec/services/ci/create_pipeline_service/compliance_spec.rb'
- 'ee/spec/services/ci/create_pipeline_service/cross_needs_artifacts_spec.rb'
- 'ee/spec/services/ci/create_pipeline_service/dast_configuration_spec.rb'
- 'ee/spec/services/ci/create_pipeline_service/limit_active_jobs_spec.rb'
- 'ee/spec/services/ci/create_pipeline_service/needs_spec.rb'
- 'ee/spec/services/ci/create_pipeline_service/runnable_builds_spec.rb'
- 'spec/benchmarks/banzai_benchmark.rb'
@ -52,6 +53,7 @@ RSpec/FilePath:
- 'spec/services/ci/create_pipeline_service/environment_spec.rb'
- 'spec/services/ci/create_pipeline_service/evaluate_runner_tags_spec.rb'
- 'spec/services/ci/create_pipeline_service/include_spec.rb'
- 'spec/services/ci/create_pipeline_service/limit_active_jobs_spec.rb'
- 'spec/services/ci/create_pipeline_service/logger_spec.rb'
- 'spec/services/ci/create_pipeline_service/merge_requests_spec.rb'
- 'spec/services/ci/create_pipeline_service/needs_spec.rb'

View File

@ -96,6 +96,7 @@ RSpec/ScatteredLet:
- 'ee/spec/services/incident_management/oncall_rotations/remove_participant_service_spec.rb'
- 'ee/spec/services/members/activate_service_spec.rb'
- 'ee/spec/services/personal_access_tokens/groups/update_lifetime_service_spec.rb'
- 'ee/spec/services/sbom/ingestion/occurrence_map_spec.rb'
- 'ee/spec/services/security/report_summary_service_spec.rb'
- 'ee/spec/services/vulnerabilities/create_from_security_finding_service_spec.rb'
- 'ee/spec/services/vulnerabilities/findings/create_from_security_finding_service_spec.rb'
@ -205,6 +206,7 @@ RSpec/ScatteredLet:
- 'spec/lib/gitlab/sidekiq_middleware/size_limiter/validator_spec.rb'
- 'spec/lib/gitlab/template/finders/global_template_finder_spec.rb'
- 'spec/lib/gitlab/tree_summary_spec.rb'
- 'spec/lib/gitlab/usage/metrics/instrumentations/gitlab_for_jira_app_proxy_installations_count_metric_spec.rb'
- 'spec/lib/gitlab/usage_data_metrics_spec.rb'
- 'spec/lib/gitlab/usage_data_spec.rb'
- 'spec/lib/gitlab/utils/measuring_spec.rb'

View File

@ -1,5 +1,7 @@
<script>
import createFlash from '~/flash';
import { __ } from '~/locale';
import { reportMessageToSentry } from '../utils';
import getAdminVariables from '../graphql/queries/variables.query.graphql';
import {
ADD_MUTATION_ACTION,
@ -21,7 +23,11 @@ export default {
data() {
return {
adminVariables: [],
hasNextPage: false,
isInitialLoading: true,
isLoadingMoreItems: false,
loadingCounter: 0,
pageInfo: {},
};
},
apollo: {
@ -30,7 +36,28 @@ export default {
update(data) {
return data?.ciVariables?.nodes || [];
},
result({ data }) {
this.pageInfo = data?.ciVariables?.pageInfo || this.pageInfo;
this.hasNextPage = this.pageInfo?.hasNextPage || false;
// Because graphQL has a limit of 100 items,
// we batch load all the variables by making successive queries
// to keep the same UX. As a safeguard, we make sure that we cannot go over
// 20 consecutive API calls, which means 2000 variables loaded maximum.
if (!this.hasNextPage) {
this.isLoadingMoreItems = false;
} else if (this.loadingCounter < 20) {
this.hasNextPage = false;
this.fetchMoreVariables();
this.loadingCounter += 1;
} else {
createFlash({ message: this.$options.tooManyCallsError });
reportMessageToSentry(this.$options.componentName, this.$options.tooManyCallsError, {});
}
},
error() {
this.isLoadingMoreItems = false;
this.hasNextPage = false;
createFlash({ message: variableFetchErrorText });
},
watchLoading(flag) {
@ -42,7 +69,10 @@ export default {
},
computed: {
isLoading() {
return this.$apollo.queries.adminVariables.loading && this.isInitialLoading;
return (
(this.$apollo.queries.adminVariables.loading && this.isInitialLoading) ||
this.isLoadingMoreItems
);
},
},
methods: {
@ -52,6 +82,15 @@ export default {
deleteVariable(variable) {
this.variableMutation(DELETE_MUTATION_ACTION, variable);
},
fetchMoreVariables() {
this.isLoadingMoreItems = true;
this.$apollo.queries.adminVariables.fetchMore({
variables: {
after: this.pageInfo.endCursor,
},
});
},
updateVariable(variable) {
this.variableMutation(UPDATE_MUTATION_ACTION, variable);
},
@ -66,9 +105,8 @@ export default {
},
});
const { errors } = data[currentMutation.name];
if (errors.length > 0) {
if (data[currentMutation.name]?.errors?.length) {
const { errors } = data[currentMutation.name];
createFlash({ message: errors[0] });
} else {
// The writing to cache for admin variable is not working
@ -81,6 +119,10 @@ export default {
}
},
},
componentName: 'InstanceVariables',
i18n: {
tooManyCallsError: __('Maximum number of variables loaded (2000)'),
},
mutationData: {
[ADD_MUTATION_ACTION]: { action: addAdminVariable, name: 'addAdminVariable' },
[UPDATE_MUTATION_ACTION]: { action: updateAdminVariable, name: 'updateAdminVariable' },

View File

@ -1,7 +1,9 @@
<script>
import createFlash from '~/flash';
import { __ } from '~/locale';
import { convertToGraphQLId } from '~/graphql_shared/utils';
import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
import { reportMessageToSentry } from '../utils';
import getGroupVariables from '../graphql/queries/group_variables.query.graphql';
import {
ADD_MUTATION_ACTION,
@ -25,6 +27,10 @@ export default {
data() {
return {
groupVariables: [],
hasNextPage: false,
isLoadingMoreItems: false,
loadingCounter: 0,
pageInfo: {},
};
},
apollo: {
@ -38,7 +44,27 @@ export default {
update(data) {
return data?.group?.ciVariables?.nodes || [];
},
result({ data }) {
this.pageInfo = data?.group?.ciVariables?.pageInfo || this.pageInfo;
this.hasNextPage = this.pageInfo?.hasNextPage || false;
// Because graphQL has a limit of 100 items,
// we batch load all the variables by making successive queries
// to keep the same UX. As a safeguard, we make sure that we cannot go over
// 20 consecutive API calls, which means 2000 variables loaded maximum.
if (!this.hasNextPage) {
this.isLoadingMoreItems = false;
} else if (this.loadingCounter < 20) {
this.hasNextPage = false;
this.fetchMoreVariables();
this.loadingCounter += 1;
} else {
createFlash({ message: this.$options.tooManyCallsError });
reportMessageToSentry(this.$options.componentName, this.$options.tooManyCallsError, {});
}
},
error() {
this.isLoadingMoreItems = false;
this.hasNextPage = false;
createFlash({ message: variableFetchErrorText });
},
},
@ -48,7 +74,7 @@ export default {
return this.glFeatures.groupScopedCiVariables;
},
isLoading() {
return this.$apollo.queries.groupVariables.loading;
return this.$apollo.queries.groupVariables.loading || this.isLoadingMoreItems;
},
},
methods: {
@ -58,6 +84,16 @@ export default {
deleteVariable(variable) {
this.variableMutation(DELETE_MUTATION_ACTION, variable);
},
fetchMoreVariables() {
this.isLoadingMoreItems = true;
this.$apollo.queries.groupVariables.fetchMore({
variables: {
fullPath: this.groupPath,
after: this.pageInfo.endCursor,
},
});
},
updateVariable(variable) {
this.variableMutation(UPDATE_MUTATION_ACTION, variable);
},
@ -74,9 +110,8 @@ export default {
},
});
const { errors } = data[currentMutation.name];
if (errors.length > 0) {
if (data[currentMutation.name]?.errors?.length) {
const { errors } = data[currentMutation.name];
createFlash({ message: errors[0] });
}
} catch {
@ -84,6 +119,10 @@ export default {
}
},
},
componentName: 'GroupVariables',
i18n: {
tooManyCallsError: __('Maximum number of variables loaded (2000)'),
},
mutationData: {
[ADD_MUTATION_ACTION]: { action: addGroupVariable, name: 'addGroupVariable' },
[UPDATE_MUTATION_ACTION]: { action: updateGroupVariable, name: 'updateGroupVariable' },

View File

@ -1,9 +1,10 @@
<script>
import createFlash from '~/flash';
import { __ } from '~/locale';
import { convertToGraphQLId } from '~/graphql_shared/utils';
import getProjectEnvironments from '../graphql/queries/project_environments.query.graphql';
import getProjectVariables from '../graphql/queries/project_variables.query.graphql';
import { mapEnvironmentNames } from '../utils';
import { mapEnvironmentNames, reportMessageToSentry } from '../utils';
import {
ADD_MUTATION_ACTION,
DELETE_MUTATION_ACTION,
@ -25,6 +26,10 @@ export default {
inject: ['endpoint', 'projectFullPath', 'projectId'],
data() {
return {
hasNextPage: false,
isLoadingMoreItems: false,
loadingCounter: 0,
pageInfo: {},
projectEnvironments: [],
projectVariables: [],
};
@ -48,13 +53,34 @@ export default {
query: getProjectVariables,
variables() {
return {
after: null,
fullPath: this.projectFullPath,
};
},
update(data) {
return data?.project?.ciVariables?.nodes || [];
},
result({ data }) {
this.pageInfo = data?.project?.ciVariables?.pageInfo || this.pageInfo;
this.hasNextPage = this.pageInfo?.hasNextPage || false;
// Because graphQL has a limit of 100 items,
// we batch load all the variables by making successive queries
// to keep the same UX. As a safeguard, we make sure that we cannot go over
// 20 consecutive API calls, which means 2000 variables loaded maximum.
if (!this.hasNextPage) {
this.isLoadingMoreItems = false;
} else if (this.loadingCounter < 20) {
this.hasNextPage = false;
this.fetchMoreVariables();
this.loadingCounter += 1;
} else {
createFlash({ message: this.$options.tooManyCallsError });
reportMessageToSentry(this.$options.componentName, this.$options.tooManyCallsError, {});
}
},
error() {
this.isLoadingMoreItems = false;
this.hasNextPage = false;
createFlash({ message: variableFetchErrorText });
},
},
@ -63,7 +89,8 @@ export default {
isLoading() {
return (
this.$apollo.queries.projectVariables.loading ||
this.$apollo.queries.projectEnvironments.loading
this.$apollo.queries.projectEnvironments.loading ||
this.isLoadingMoreItems
);
},
},
@ -74,6 +101,16 @@ export default {
deleteVariable(variable) {
this.variableMutation(DELETE_MUTATION_ACTION, variable);
},
fetchMoreVariables() {
this.isLoadingMoreItems = true;
this.$apollo.queries.projectVariables.fetchMore({
variables: {
fullPath: this.projectFullPath,
after: this.pageInfo.endCursor,
},
});
},
updateVariable(variable) {
this.variableMutation(UPDATE_MUTATION_ACTION, variable);
},
@ -89,16 +126,19 @@ export default {
variable,
},
});
const { errors } = data[currentMutation.name];
if (errors.length > 0) {
if (data[currentMutation.name]?.errors?.length) {
const { errors } = data[currentMutation.name];
createFlash({ message: errors[0] });
}
} catch (e) {
} catch {
createFlash({ message: genericMutationErrorText });
}
},
},
componentName: 'ProjectVariables',
i18n: {
tooManyCallsError: __('Maximum number of variables loaded (2000)'),
},
mutationData: {
[ADD_MUTATION_ACTION]: { action: addProjectVariable, name: 'addProjectVariable' },
[UPDATE_MUTATION_ACTION]: { action: updateProjectVariable, name: 'updateProjectVariable' },

View File

@ -75,8 +75,7 @@ export default {
props: {
isLoading: {
type: Boolean,
required: false,
default: false,
required: true,
},
variables: {
type: Array,

View File

@ -52,7 +52,7 @@ export const groupString = 'Group';
// eslint-disable-next-line @gitlab/require-i18n-strings
export const instanceString = 'Instance';
// eslint-disable-next-line @gitlab/require-i18n-strings
export const projectString = 'Instance';
export const projectString = 'Project';
export const AWS_TIP_DISMISSED_COOKIE_NAME = 'ci_variable_list_constants_aws_tip_dismissed';
export const AWS_TIP_MESSAGE = __(

View File

@ -1,9 +1,13 @@
#import "~/ci_variable_list/graphql/fragments/ci_variable.fragment.graphql"
#import "~/graphql_shared/fragments/page_info.fragment.graphql"
query getGroupVariables($fullPath: ID!) {
query getGroupVariables($after: String, $first: Int = 100, $fullPath: ID!) {
group(fullPath: $fullPath) {
id
ciVariables {
ciVariables(after: $after, first: $first) {
pageInfo {
...PageInfo
}
nodes {
...BaseCiVariable
... on CiGroupVariable {

View File

@ -1,9 +1,13 @@
#import "~/ci_variable_list/graphql/fragments/ci_variable.fragment.graphql"
#import "~/graphql_shared/fragments/page_info.fragment.graphql"
query getProjectVariables($fullPath: ID!) {
query getProjectVariables($after: String, $first: Int = 100, $fullPath: ID!) {
project(fullPath: $fullPath) {
id
ciVariables {
ciVariables(after: $after, first: $first) {
pageInfo {
...PageInfo
}
nodes {
...BaseCiVariable
environmentScope

View File

@ -1,7 +1,11 @@
#import "~/ci_variable_list/graphql/fragments/ci_variable.fragment.graphql"
#import "~/graphql_shared/fragments/page_info.fragment.graphql"
query getVariables {
ciVariables {
query getVariables($after: String, $first: Int = 100) {
ciVariables(after: $after, first: $first) {
pageInfo {
...PageInfo
}
nodes {
...BaseCiVariable
... on CiInstanceVariable {

View File

@ -3,7 +3,7 @@ import {
convertObjectPropsToCamelCase,
convertObjectPropsToSnakeCase,
} from '../../lib/utils/common_utils';
import { getIdFromGraphQLId } from '../../graphql_shared/utils';
import { convertToGraphQLId, getIdFromGraphQLId } from '../../graphql_shared/utils';
import {
GRAPHQL_GROUP_TYPE,
GRAPHQL_PROJECT_TYPE,
@ -30,6 +30,7 @@ const mapVariableTypes = (variables = [], kind) => {
return {
__typename: `Ci${kind}Variable`,
...convertObjectPropsToCamelCase(ciVar),
id: convertToGraphQLId('Ci::Variable', ciVar.id),
variableType: ciVar.variable_type ? ciVar.variable_type.toUpperCase() : ciVar.variableType,
};
});
@ -40,9 +41,16 @@ const prepareProjectGraphQLResponse = ({ data, projectId, errors = [] }) => {
errors,
project: {
__typename: GRAPHQL_PROJECT_TYPE,
id: projectId,
id: convertToGraphQLId(GRAPHQL_PROJECT_TYPE, projectId),
ciVariables: {
__typename: 'CiVariableConnection',
__typename: `Ci${GRAPHQL_PROJECT_TYPE}VariableConnection`,
pageInfo: {
__typename: 'PageInfo',
hasNextPage: false,
hasPreviousPage: false,
startCursor: '',
endCursor: '',
},
nodes: mapVariableTypes(data.variables, projectString),
},
},
@ -54,9 +62,16 @@ const prepareGroupGraphQLResponse = ({ data, groupId, errors = [] }) => {
errors,
group: {
__typename: GRAPHQL_GROUP_TYPE,
id: groupId,
id: convertToGraphQLId(GRAPHQL_GROUP_TYPE, groupId),
ciVariables: {
__typename: 'CiVariableConnection',
__typename: `Ci${GRAPHQL_GROUP_TYPE}VariableConnection`,
pageInfo: {
__typename: 'PageInfo',
hasNextPage: false,
hasPreviousPage: false,
startCursor: '',
endCursor: '',
},
nodes: mapVariableTypes(data.variables, groupString),
},
},
@ -68,24 +83,42 @@ const prepareAdminGraphQLResponse = ({ data, errors = [] }) => {
errors,
ciVariables: {
__typename: `Ci${instanceString}VariableConnection`,
pageInfo: {
__typename: 'PageInfo',
hasNextPage: false,
hasPreviousPage: false,
startCursor: '',
endCursor: '',
},
nodes: mapVariableTypes(data.variables, instanceString),
},
};
};
const callProjectEndpoint = async ({
async function callProjectEndpoint({
endpoint,
fullPath,
variable,
projectId,
cache,
destroy = false,
}) => {
}) {
try {
const { data } = await axios.patch(endpoint, {
variables_attributes: [prepareVariableForApi({ variable, destroy })],
});
return prepareProjectGraphQLResponse({ data, projectId });
const graphqlData = prepareProjectGraphQLResponse({ data, projectId });
cache.writeQuery({
query: getProjectVariables,
variables: {
fullPath,
after: null,
},
data: graphqlData,
});
return graphqlData;
} catch (e) {
return prepareProjectGraphQLResponse({
data: cache.readQuery({ query: getProjectVariables, variables: { fullPath } }),
@ -93,7 +126,7 @@ const callProjectEndpoint = async ({
errors: [...e.response.data],
});
}
};
}
const callGroupEndpoint = async ({
endpoint,
@ -107,7 +140,15 @@ const callGroupEndpoint = async ({
const { data } = await axios.patch(endpoint, {
variables_attributes: [prepareVariableForApi({ variable, destroy })],
});
return prepareGroupGraphQLResponse({ data, groupId });
const graphqlData = prepareGroupGraphQLResponse({ data, groupId });
cache.writeQuery({
query: getGroupVariables,
data: graphqlData,
});
return graphqlData;
} catch (e) {
return prepareGroupGraphQLResponse({
data: cache.readQuery({ query: getGroupVariables, variables: { fullPath } }),
@ -123,7 +164,14 @@ const callAdminEndpoint = async ({ endpoint, variable, cache, destroy = false })
variables_attributes: [prepareVariableForApi({ variable, destroy })],
});
return prepareAdminGraphQLResponse({ data });
const graphqlData = prepareAdminGraphQLResponse({ data });
cache.writeQuery({
query: getAdminVariables,
data: graphqlData,
});
return graphqlData;
} catch (e) {
return prepareAdminGraphQLResponse({
data: cache.readQuery({ query: getAdminVariables }),
@ -163,3 +211,46 @@ export const resolvers = {
},
},
};
export const mergeVariables = (existing, incoming, { args }) => {
if (!existing || !args?.after) {
return incoming;
}
const { nodes, ...rest } = incoming;
const result = rest;
result.nodes = [...existing.nodes, ...nodes];
return result;
};
export const cacheConfig = {
cacheConfig: {
typePolicies: {
Query: {
fields: {
ciVariables: {
keyArgs: false,
merge: mergeVariables,
},
},
},
Project: {
fields: {
ciVariables: {
keyArgs: ['fullPath', 'endpoint', 'projectId'],
merge: mergeVariables,
},
},
},
Group: {
fields: {
ciVariables: {
keyArgs: ['fullPath'],
merge: mergeVariables,
},
},
},
},
},
};

View File

@ -6,7 +6,7 @@ import CiAdminVariables from './components/ci_admin_variables.vue';
import CiGroupVariables from './components/ci_group_variables.vue';
import CiProjectVariables from './components/ci_project_variables.vue';
import LegacyCiVariableSettings from './components/legacy_ci_variable_settings.vue';
import { resolvers } from './graphql/resolvers';
import { cacheConfig, resolvers } from './graphql/settings';
import createStore from './store';
const mountCiVariableListApp = (containerEl) => {
@ -45,7 +45,7 @@ const mountCiVariableListApp = (containerEl) => {
Vue.use(VueApollo);
const apolloProvider = new VueApollo({
defaultClient: createDefaultClient(resolvers),
defaultClient: createDefaultClient(resolvers, cacheConfig),
});
return new Vue({

View File

@ -1,3 +1,4 @@
import * as Sentry from '@sentry/browser';
import { uniq } from 'lodash';
import { allEnvironments } from './constants';
@ -48,3 +49,12 @@ export const convertEnvironmentScope = (environmentScope = '') => {
export const mapEnvironmentNames = (nodes = []) => {
return nodes.map((env) => env.name);
};
export const reportMessageToSentry = (component, message, context) => {
Sentry.withScope((scope) => {
// eslint-disable-next-line @gitlab/require-i18n-strings
scope.setContext('Vue data', context);
scope.setTag('component', component);
Sentry.captureMessage(message);
});
};

View File

@ -168,7 +168,7 @@ export default {
id="discussion-preferences-dropdown"
class="full-width-mobile"
data-qa-selector="discussion_preferences_dropdown"
text="Sort or filter"
:text="__('Sort or filter')"
:disabled="isLoading"
right
>

View File

@ -162,7 +162,7 @@ export default {
</div>
</div>
<commit-section
v-if="showCommitForm"
v-show="showCommitForm"
:ref="$options.commitSectionRef"
:ci-file-content="ciFileContent"
:commit-sha="commitSha"

View File

@ -99,27 +99,26 @@ module Ci
}
scope :belonging_to_group, -> (group_id) {
joins(:runner_namespaces)
.where(ci_runner_namespaces: { namespace_id: group_id })
joins(:runner_namespaces).where(ci_runner_namespaces: { namespace_id: group_id })
}
scope :belonging_to_group_or_project_descendants, -> (group_id) {
group_ids = Ci::NamespaceMirror.by_group_and_descendants(group_id).select(:namespace_id)
project_ids = Ci::ProjectMirror.by_namespace_id(group_ids).select(:project_id)
group_runners = joins(:runner_namespaces).where(ci_runner_namespaces: { namespace_id: group_ids })
project_runners = joins(:runner_projects).where(ci_runner_projects: { project_id: project_ids })
group_runners = belonging_to_group(group_ids)
project_runners = belonging_to_project(project_ids).distinct
union_sql = ::Gitlab::SQL::Union.new([group_runners, project_runners]).to_sql
from("(#{union_sql}) #{table_name}")
from_union(
[group_runners, project_runners],
remove_duplicates: false
)
}
scope :belonging_to_group_and_ancestors, -> (group_id) {
group_self_and_ancestors_ids = ::Group.find_by(id: group_id)&.self_and_ancestor_ids
joins(:runner_namespaces)
.where(ci_runner_namespaces: { namespace_id: group_self_and_ancestors_ids })
belonging_to_group(group_self_and_ancestors_ids)
}
scope :belonging_to_parent_group_of_project, -> (project_id) {

View File

@ -48,19 +48,22 @@ class Repository
# For example, for entry `:commit_count` there's a method called `commit_count` which
# stores its data in the `commit_count` cache key.
CACHED_METHODS = %i(size commit_count readme_path contribution_guide
changelog license_blob license_licensee license_gitaly gitignore
changelog license_blob license_key gitignore
gitlab_ci_yml branch_names tag_names branch_count
tag_count avatar exists? root_ref merged_branch_names
has_visible_content? issue_template_names_hash merge_request_template_names_hash
user_defined_metrics_dashboard_paths xcode_project? has_ambiguous_refs?).freeze
# Methods that use cache_method but only memoize the value
MEMOIZED_CACHED_METHODS = %i(license).freeze
# Certain method caches should be refreshed when certain types of files are
# changed. This Hash maps file types (as returned by Gitlab::FileDetector) to
# the corresponding methods to call for refreshing caches.
METHOD_CACHES_FOR_FILE_TYPES = {
readme: %i(readme_path),
changelog: :changelog,
license: %i(license_blob license_licensee license_gitaly),
license: %i(license_blob license_key license),
contributing: :contribution_guide,
gitignore: :gitignore,
gitlab_ci: :gitlab_ci_yml,
@ -647,30 +650,25 @@ class Repository
cache_method :license_blob
def license_key
license&.key
return unless exists?
raw_repository.license_short_name
end
cache_method :license_key
def license
if Feature.enabled?(:license_from_gitaly)
license_gitaly
else
license_licensee
end
return unless license_key
licensee_object = Licensee::License.new(license_key)
return if licensee_object.name.blank?
licensee_object
rescue Licensee::InvalidLicense => e
Gitlab::ErrorTracking.track_exception(e)
nil
end
def license_licensee
return unless exists?
raw_repository.license(false)
end
cache_method :license_licensee
def license_gitaly
return unless exists?
raw_repository.license(true)
end
cache_method :license_gitaly
memoize_method :license
def gitignore
file_on_head(:gitignore)

View File

@ -115,7 +115,7 @@ class ResourceLabelEvent < ResourceEvent
end
def discussion_id_key
[self.class.name, created_at, user_id]
[self.class.name, created_at.to_f, user_id]
end
end

View File

@ -24,6 +24,8 @@
.settings-content
= render 'account_and_limit'
= render_if_exists 'admin/application_settings/free_user_cap'
%section.settings.as-diff-limits.no-animate#js-merge-request-settings{ class: ('expanded' if expanded_by_default?) }
.settings-header
%h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only

View File

@ -20,16 +20,15 @@
= visibility_level_icon(snippet.visibility_level)
.snippet-info
#{snippet.to_reference} &middot;
authored #{time_ago_with_tooltip(snippet.created_at, placement: 'bottom', html_class: 'snippet-created-ago')}
by
= link_to user_snippets_path(snippet.author), class: "js-user-link", data: { user_id: snippet.author.id } do
= snippet.author_name
- if link_project && snippet.project_id?
%span.d-none.d-sm-inline-block
in
= link_to project_path(snippet.project) do
= snippet.project.full_name
.gl-display-inline{ data: { testid: 'snippet-created-at'} }
- created_at = time_ago_with_tooltip(snippet.created_at, placement: 'bottom')
- author = link_to(snippet.author_name, user_snippets_path(snippet.author), data: { user_id: snippet.author.id })
#{snippet.to_reference} &middot;
- if link_project && snippet.project_id?
- project_link = link_to(snippet.project.full_name, project_path(snippet.project))
= _('created %{timeAgo} by %{author} in %{project_link}').html_safe % { timeAgo: created_at, author: author, project_link: project_link }
- else
= _('created %{timeAgo} by %{author}').html_safe % { timeAgo: created_at, author: author }
.float-right.snippet-updated-at
%span updated #{time_ago_with_tooltip(snippet.updated_at, placement: 'bottom')}
.float-right
= _('updated %{timeAgo}').html_safe % { timeAgo: time_ago_with_tooltip(snippet.updated_at, placement: 'bottom') }

View File

@ -1,8 +0,0 @@
---
name: cache_issue_sums
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/95048
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/365940
milestone: '15.4'
type: development
group: group::product planning
default_enabled: false

View File

@ -1,8 +0,0 @@
---
name: license_from_gitaly
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/77041
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/374300
milestone: '15.5'
type: development
group: group::gitaly
default_enabled: false

View File

@ -1,17 +0,0 @@
const { languagesArr } = require('monaco-editor-webpack-plugin/out/languages');
// monaco-yaml library doesn't play so well with monaco-editor-webpack-plugin
// so the only way to include its workers is by patching the list of languages
// in monaco-editor-webpack-plugin and adding support for yaml workers. This is
// a known issue in the library and this workaround was suggested here:
// https://github.com/pengx17/monaco-yaml/issues/20
const yamlLang = languagesArr.find((t) => t.label === 'yaml');
yamlLang.entry = [yamlLang.entry, '../../monaco-yaml/lib/esm/monaco.contribution'];
yamlLang.worker = {
id: 'vs/language/yaml/yamlWorker',
entry: '../../monaco-yaml/lib/esm/yaml.worker.js',
};
module.exports = require('monaco-editor-webpack-plugin');

View File

@ -0,0 +1,11 @@
# frozen_string_literal: true
class AddDashboardLimitToApplicationSettings < Gitlab::Database::Migration[2.0]
def change
add_column :application_settings, :dashboard_limit_enabled, :boolean, default: false, null: false
add_column :application_settings, :dashboard_limit, :integer, default: 0, null: false
add_column :application_settings, :dashboard_notification_limit, :integer, default: 0, null: false
add_column :application_settings, :dashboard_enforcement_limit, :integer, default: 0, null: false
add_column :application_settings, :dashboard_limit_new_namespace_creation_enforcement_date, :date
end
end

View File

@ -0,0 +1 @@
3655ee5c3c963d0e413bce86eb9c74cc7bc71c3ab5acb54c76daacff8ff07354

View File

@ -11507,6 +11507,11 @@ CREATE TABLE application_settings (
cube_api_base_url text,
encrypted_cube_api_key bytea,
encrypted_cube_api_key_iv bytea,
dashboard_limit_enabled boolean DEFAULT false NOT NULL,
dashboard_limit integer DEFAULT 0 NOT NULL,
dashboard_notification_limit integer DEFAULT 0 NOT NULL,
dashboard_enforcement_limit integer DEFAULT 0 NOT NULL,
dashboard_limit_new_namespace_creation_enforcement_date date,
CONSTRAINT app_settings_container_reg_cleanup_tags_max_list_size_positive CHECK ((container_registry_cleanup_tags_service_max_list_size >= 0)),
CONSTRAINT app_settings_container_registry_pre_import_tags_rate_positive CHECK ((container_registry_pre_import_tags_rate >= (0)::numeric)),
CONSTRAINT app_settings_dep_proxy_ttl_policies_worker_capacity_positive CHECK ((dependency_proxy_ttl_group_policy_worker_capacity >= 0)),

View File

@ -1,7 +1,7 @@
---
stage: Data Stores
group: Application Performance
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Application cache interval **(FREE SELF)**

View File

@ -1,7 +1,7 @@
---
stage: Govern
group: Compliance
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Audit event streaming **(ULTIMATE)**

View File

@ -1,7 +1,7 @@
---
stage: Govern
group: Compliance
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Audit Events **(PREMIUM)**

View File

@ -1,7 +1,7 @@
---
stage: Govern
group: Compliance
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
description: 'Learn how to create evidence artifacts typically requested by a 3rd party auditor.'
---

View File

@ -1,7 +1,7 @@
---
stage: Manage
group: Authentication and Authorization
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Auditor users **(PREMIUM SELF)**

View File

@ -2,7 +2,7 @@
type: reference
stage: Manage
group: Authentication and Authorization
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Atlassian OmniAuth Provider **(FREE SELF)**

View File

@ -2,7 +2,7 @@
type: reference
stage: Manage
group: Authentication and Authorization
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Authentiq OmniAuth Provider **(FREE SELF)**

View File

@ -2,7 +2,7 @@
type: concepts, howto
stage: Manage
group: Authentication and Authorization
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Amazon Web Services Cognito **(FREE SELF)**

View File

@ -2,7 +2,7 @@
type: reference
stage: Manage
group: Authentication and Authorization
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Atlassian Crowd OmniAuth provider (deprecated) **(FREE SELF)**

View File

@ -3,7 +3,7 @@ comments: false
type: index
stage: Manage
group: Authentication and Authorization
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# GitLab authentication and authorization **(FREE SELF)**

View File

@ -2,7 +2,7 @@
type: reference
stage: Manage
group: Authentication and Authorization
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# JWT OmniAuth provider **(FREE SELF)**

View File

@ -2,7 +2,7 @@
type: reference
stage: Manage
group: Authentication and Authorization
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Google Secure LDAP **(FREE SELF)**

View File

@ -2,7 +2,7 @@
type: reference
stage: Manage
group: Authentication and Authorization
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Integrate LDAP with GitLab **(FREE SELF)**

View File

@ -2,7 +2,7 @@
type: reference
stage: Manage
group: Authentication and Authorization
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Troubleshooting LDAP **(FREE SELF)**

View File

@ -1,7 +1,7 @@
---
stage: Manage
group: Authentication and Authorization
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# LDAP synchronization **(PREMIUM SELF)**

View File

@ -2,7 +2,7 @@
type: reference
stage: Manage
group: Authentication and Authorization
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# OpenID Connect OmniAuth provider **(FREE SELF)**

View File

@ -1,7 +1,7 @@
---
stage: Manage
group: Authentication and Authorization
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: reference
---

View File

@ -1,7 +1,7 @@
---
stage: Verify
group: Pipeline Execution
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: howto
---

View File

@ -1,7 +1,7 @@
---
stage: Configure
group: Configure
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Install the GitLab agent server for Kubernetes (KAS) **(FREE SELF)**

View File

@ -1,7 +1,7 @@
---
stage: Govern
group: Compliance
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Compliance features **(FREE)**

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Distribution
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: reference
---

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Distribution
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: reference
---

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Distribution
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Host the GitLab product documentation **(FREE SELF)**

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Distribution
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: reference
---

View File

@ -1,7 +1,7 @@
---
stage: Verify
group: Pipeline Execution
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: reference, howto
---

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Distribution
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
description: "GitLab administrator: enable and disable GitLab features deployed behind feature flags"
---

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Automatic background verification **(PREMIUM SELF)**

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: howto
---

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Disaster Recovery (Geo) **(PREMIUM SELF)**

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: howto
---

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: howto
---

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: howto
---

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: howto
---

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Geo **(PREMIUM SELF)**

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: howto
---

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: howto
---

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: howto
---

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: howto
---

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Geo Frequently Asked Questions **(PREMIUM SELF)**

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Geo validation tests **(PREMIUM SELF)**

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: howto
---

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: howto
---

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: howto
---

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: howto
---

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: howto
---

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Troubleshooting Geo **(PREMIUM SELF)**

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: howto
---

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: howto
---

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
<!-- Please update EE::GitLab::GeoGitAccess::GEO_SERVER_DOCS_URL if this file is moved) -->

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Version-specific upgrade instructions **(PREMIUM SELF)**

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: howto
---

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: howto
---

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: howto
---

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Geo with external PostgreSQL instances **(PREMIUM SELF)**

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Geo
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: howto
---

View File

@ -1,7 +1,7 @@
---
stage: Create
group: Source Code
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
description: "Set and configure Git protocol v2"
---

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Gitaly
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Configure Gitaly **(FREE SELF)**

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Gitaly
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Gitaly and Gitaly Cluster **(FREE SELF)**

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Gitaly
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Monitoring Gitaly and Gitaly Cluster

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Gitaly
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Configure Gitaly Cluster **(FREE SELF)**

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Gitaly
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Gitaly Cluster recovery options and tools

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Gitaly
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Gitaly reference **(FREE SELF)**

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Gitaly
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Troubleshooting Gitaly and Gitaly Cluster **(FREE SELF)**

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Distribution
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Housekeeping **(FREE SELF)**

View File

@ -1,7 +1,7 @@
---
stage: Govern
group: Compliance
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Inactive project deletion **(FREE SELF)**

View File

@ -1,7 +1,7 @@
---
stage: Plan
group: Project Management
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Incoming email **(FREE SELF)**

View File

@ -1,7 +1,7 @@
---
stage: Systems
group: Distribution
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: reference
---

View File

@ -1,7 +1,7 @@
---
stage: Growth
group: Acquisition
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Instance review **(FREE SELF)**

View File

@ -1,7 +1,7 @@
---
stage: Plan
group: Project Management
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Kroki diagrams **(FREE SELF)**

View File

@ -1,7 +1,7 @@
---
stage: Plan
group: Project Management
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
type: reference, howto
---

View File

@ -1,7 +1,7 @@
---
stage: Configure
group: Configure
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
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
# Web terminals (DEPRECATED) **(FREE)**

Some files were not shown because too many files have changed in this diff Show More