Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
136ec65df5
commit
04d4cf89db
|
@ -56,7 +56,7 @@ feature for all reviews. Reviewers will then `approve` the MR and remove themsel
|
||||||
- [ ] (Recommended) PMM
|
- [ ] (Recommended) PMM
|
||||||
- [ ] (Optional) Product Designer
|
- [ ] (Optional) Product Designer
|
||||||
- [ ] (Optional) Group Manager or Director
|
- [ ] (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
|
### Tech writer review
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
## Author's checklist
|
## 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:
|
- [ ] Follow the:
|
||||||
- [Documentation process](https://docs.gitlab.com/ee/development/documentation/workflow.html).
|
- [Documentation process](https://docs.gitlab.com/ee/development/documentation/workflow.html).
|
||||||
- [Documentation guidelines](https://docs.gitlab.com/ee/development/documentation/).
|
- [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'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:
|
- [ ] 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 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:
|
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.
|
- [ ] If the content requires it, ensure the information is reviewed by a subject matter expert.
|
||||||
- Technical writer review items:
|
- Technical writer review items:
|
||||||
- [ ] Ensure docs metadata is present and up-to-date.
|
- [ ] 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.
|
- [ ] 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:
|
- 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`.
|
- [ ] 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`.
|
||||||
|
|
|
@ -61,7 +61,7 @@ feature for all reviews. Reviewers will `approve` the MR and remove themselves f
|
||||||
- [ ] (Recommended) PMM
|
- [ ] (Recommended) PMM
|
||||||
- [ ] (Optional) Product Designer
|
- [ ] (Optional) Product Designer
|
||||||
- [ ] (Optional) Group Manager or Director
|
- [ ] (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
|
### Tech writer review
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ RSpec/FilePath:
|
||||||
- 'ee/spec/services/ci/create_pipeline_service/compliance_spec.rb'
|
- '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/cross_needs_artifacts_spec.rb'
|
||||||
- 'ee/spec/services/ci/create_pipeline_service/dast_configuration_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/needs_spec.rb'
|
||||||
- 'ee/spec/services/ci/create_pipeline_service/runnable_builds_spec.rb'
|
- 'ee/spec/services/ci/create_pipeline_service/runnable_builds_spec.rb'
|
||||||
- 'spec/benchmarks/banzai_benchmark.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/environment_spec.rb'
|
||||||
- 'spec/services/ci/create_pipeline_service/evaluate_runner_tags_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/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/logger_spec.rb'
|
||||||
- 'spec/services/ci/create_pipeline_service/merge_requests_spec.rb'
|
- 'spec/services/ci/create_pipeline_service/merge_requests_spec.rb'
|
||||||
- 'spec/services/ci/create_pipeline_service/needs_spec.rb'
|
- 'spec/services/ci/create_pipeline_service/needs_spec.rb'
|
||||||
|
|
|
@ -96,6 +96,7 @@ RSpec/ScatteredLet:
|
||||||
- 'ee/spec/services/incident_management/oncall_rotations/remove_participant_service_spec.rb'
|
- 'ee/spec/services/incident_management/oncall_rotations/remove_participant_service_spec.rb'
|
||||||
- 'ee/spec/services/members/activate_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/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/security/report_summary_service_spec.rb'
|
||||||
- 'ee/spec/services/vulnerabilities/create_from_security_finding_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'
|
- '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/sidekiq_middleware/size_limiter/validator_spec.rb'
|
||||||
- 'spec/lib/gitlab/template/finders/global_template_finder_spec.rb'
|
- 'spec/lib/gitlab/template/finders/global_template_finder_spec.rb'
|
||||||
- 'spec/lib/gitlab/tree_summary_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_metrics_spec.rb'
|
||||||
- 'spec/lib/gitlab/usage_data_spec.rb'
|
- 'spec/lib/gitlab/usage_data_spec.rb'
|
||||||
- 'spec/lib/gitlab/utils/measuring_spec.rb'
|
- 'spec/lib/gitlab/utils/measuring_spec.rb'
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<script>
|
<script>
|
||||||
import createFlash from '~/flash';
|
import createFlash from '~/flash';
|
||||||
|
import { __ } from '~/locale';
|
||||||
|
import { reportMessageToSentry } from '../utils';
|
||||||
import getAdminVariables from '../graphql/queries/variables.query.graphql';
|
import getAdminVariables from '../graphql/queries/variables.query.graphql';
|
||||||
import {
|
import {
|
||||||
ADD_MUTATION_ACTION,
|
ADD_MUTATION_ACTION,
|
||||||
|
@ -21,7 +23,11 @@ export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
adminVariables: [],
|
adminVariables: [],
|
||||||
|
hasNextPage: false,
|
||||||
isInitialLoading: true,
|
isInitialLoading: true,
|
||||||
|
isLoadingMoreItems: false,
|
||||||
|
loadingCounter: 0,
|
||||||
|
pageInfo: {},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
apollo: {
|
apollo: {
|
||||||
|
@ -30,7 +36,28 @@ export default {
|
||||||
update(data) {
|
update(data) {
|
||||||
return data?.ciVariables?.nodes || [];
|
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() {
|
error() {
|
||||||
|
this.isLoadingMoreItems = false;
|
||||||
|
this.hasNextPage = false;
|
||||||
createFlash({ message: variableFetchErrorText });
|
createFlash({ message: variableFetchErrorText });
|
||||||
},
|
},
|
||||||
watchLoading(flag) {
|
watchLoading(flag) {
|
||||||
|
@ -42,7 +69,10 @@ export default {
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
isLoading() {
|
isLoading() {
|
||||||
return this.$apollo.queries.adminVariables.loading && this.isInitialLoading;
|
return (
|
||||||
|
(this.$apollo.queries.adminVariables.loading && this.isInitialLoading) ||
|
||||||
|
this.isLoadingMoreItems
|
||||||
|
);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -52,6 +82,15 @@ export default {
|
||||||
deleteVariable(variable) {
|
deleteVariable(variable) {
|
||||||
this.variableMutation(DELETE_MUTATION_ACTION, variable);
|
this.variableMutation(DELETE_MUTATION_ACTION, variable);
|
||||||
},
|
},
|
||||||
|
fetchMoreVariables() {
|
||||||
|
this.isLoadingMoreItems = true;
|
||||||
|
|
||||||
|
this.$apollo.queries.adminVariables.fetchMore({
|
||||||
|
variables: {
|
||||||
|
after: this.pageInfo.endCursor,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
updateVariable(variable) {
|
updateVariable(variable) {
|
||||||
this.variableMutation(UPDATE_MUTATION_ACTION, variable);
|
this.variableMutation(UPDATE_MUTATION_ACTION, variable);
|
||||||
},
|
},
|
||||||
|
@ -66,9 +105,8 @@ export default {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const { errors } = data[currentMutation.name];
|
if (data[currentMutation.name]?.errors?.length) {
|
||||||
|
const { errors } = data[currentMutation.name];
|
||||||
if (errors.length > 0) {
|
|
||||||
createFlash({ message: errors[0] });
|
createFlash({ message: errors[0] });
|
||||||
} else {
|
} else {
|
||||||
// The writing to cache for admin variable is not working
|
// 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: {
|
mutationData: {
|
||||||
[ADD_MUTATION_ACTION]: { action: addAdminVariable, name: 'addAdminVariable' },
|
[ADD_MUTATION_ACTION]: { action: addAdminVariable, name: 'addAdminVariable' },
|
||||||
[UPDATE_MUTATION_ACTION]: { action: updateAdminVariable, name: 'updateAdminVariable' },
|
[UPDATE_MUTATION_ACTION]: { action: updateAdminVariable, name: 'updateAdminVariable' },
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
<script>
|
<script>
|
||||||
import createFlash from '~/flash';
|
import createFlash from '~/flash';
|
||||||
|
import { __ } from '~/locale';
|
||||||
import { convertToGraphQLId } from '~/graphql_shared/utils';
|
import { convertToGraphQLId } from '~/graphql_shared/utils';
|
||||||
import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
|
import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
|
||||||
|
import { reportMessageToSentry } from '../utils';
|
||||||
import getGroupVariables from '../graphql/queries/group_variables.query.graphql';
|
import getGroupVariables from '../graphql/queries/group_variables.query.graphql';
|
||||||
import {
|
import {
|
||||||
ADD_MUTATION_ACTION,
|
ADD_MUTATION_ACTION,
|
||||||
|
@ -25,6 +27,10 @@ export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
groupVariables: [],
|
groupVariables: [],
|
||||||
|
hasNextPage: false,
|
||||||
|
isLoadingMoreItems: false,
|
||||||
|
loadingCounter: 0,
|
||||||
|
pageInfo: {},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
apollo: {
|
apollo: {
|
||||||
|
@ -38,7 +44,27 @@ export default {
|
||||||
update(data) {
|
update(data) {
|
||||||
return data?.group?.ciVariables?.nodes || [];
|
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() {
|
error() {
|
||||||
|
this.isLoadingMoreItems = false;
|
||||||
|
this.hasNextPage = false;
|
||||||
createFlash({ message: variableFetchErrorText });
|
createFlash({ message: variableFetchErrorText });
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -48,7 +74,7 @@ export default {
|
||||||
return this.glFeatures.groupScopedCiVariables;
|
return this.glFeatures.groupScopedCiVariables;
|
||||||
},
|
},
|
||||||
isLoading() {
|
isLoading() {
|
||||||
return this.$apollo.queries.groupVariables.loading;
|
return this.$apollo.queries.groupVariables.loading || this.isLoadingMoreItems;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -58,6 +84,16 @@ export default {
|
||||||
deleteVariable(variable) {
|
deleteVariable(variable) {
|
||||||
this.variableMutation(DELETE_MUTATION_ACTION, 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) {
|
updateVariable(variable) {
|
||||||
this.variableMutation(UPDATE_MUTATION_ACTION, variable);
|
this.variableMutation(UPDATE_MUTATION_ACTION, variable);
|
||||||
},
|
},
|
||||||
|
@ -74,9 +110,8 @@ export default {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const { errors } = data[currentMutation.name];
|
if (data[currentMutation.name]?.errors?.length) {
|
||||||
|
const { errors } = data[currentMutation.name];
|
||||||
if (errors.length > 0) {
|
|
||||||
createFlash({ message: errors[0] });
|
createFlash({ message: errors[0] });
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
|
@ -84,6 +119,10 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
componentName: 'GroupVariables',
|
||||||
|
i18n: {
|
||||||
|
tooManyCallsError: __('Maximum number of variables loaded (2000)'),
|
||||||
|
},
|
||||||
mutationData: {
|
mutationData: {
|
||||||
[ADD_MUTATION_ACTION]: { action: addGroupVariable, name: 'addGroupVariable' },
|
[ADD_MUTATION_ACTION]: { action: addGroupVariable, name: 'addGroupVariable' },
|
||||||
[UPDATE_MUTATION_ACTION]: { action: updateGroupVariable, name: 'updateGroupVariable' },
|
[UPDATE_MUTATION_ACTION]: { action: updateGroupVariable, name: 'updateGroupVariable' },
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
<script>
|
<script>
|
||||||
import createFlash from '~/flash';
|
import createFlash from '~/flash';
|
||||||
|
import { __ } from '~/locale';
|
||||||
import { convertToGraphQLId } from '~/graphql_shared/utils';
|
import { convertToGraphQLId } from '~/graphql_shared/utils';
|
||||||
import getProjectEnvironments from '../graphql/queries/project_environments.query.graphql';
|
import getProjectEnvironments from '../graphql/queries/project_environments.query.graphql';
|
||||||
import getProjectVariables from '../graphql/queries/project_variables.query.graphql';
|
import getProjectVariables from '../graphql/queries/project_variables.query.graphql';
|
||||||
import { mapEnvironmentNames } from '../utils';
|
import { mapEnvironmentNames, reportMessageToSentry } from '../utils';
|
||||||
import {
|
import {
|
||||||
ADD_MUTATION_ACTION,
|
ADD_MUTATION_ACTION,
|
||||||
DELETE_MUTATION_ACTION,
|
DELETE_MUTATION_ACTION,
|
||||||
|
@ -25,6 +26,10 @@ export default {
|
||||||
inject: ['endpoint', 'projectFullPath', 'projectId'],
|
inject: ['endpoint', 'projectFullPath', 'projectId'],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
hasNextPage: false,
|
||||||
|
isLoadingMoreItems: false,
|
||||||
|
loadingCounter: 0,
|
||||||
|
pageInfo: {},
|
||||||
projectEnvironments: [],
|
projectEnvironments: [],
|
||||||
projectVariables: [],
|
projectVariables: [],
|
||||||
};
|
};
|
||||||
|
@ -48,13 +53,34 @@ export default {
|
||||||
query: getProjectVariables,
|
query: getProjectVariables,
|
||||||
variables() {
|
variables() {
|
||||||
return {
|
return {
|
||||||
|
after: null,
|
||||||
fullPath: this.projectFullPath,
|
fullPath: this.projectFullPath,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
update(data) {
|
update(data) {
|
||||||
return data?.project?.ciVariables?.nodes || [];
|
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() {
|
error() {
|
||||||
|
this.isLoadingMoreItems = false;
|
||||||
|
this.hasNextPage = false;
|
||||||
createFlash({ message: variableFetchErrorText });
|
createFlash({ message: variableFetchErrorText });
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -63,7 +89,8 @@ export default {
|
||||||
isLoading() {
|
isLoading() {
|
||||||
return (
|
return (
|
||||||
this.$apollo.queries.projectVariables.loading ||
|
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) {
|
deleteVariable(variable) {
|
||||||
this.variableMutation(DELETE_MUTATION_ACTION, 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) {
|
updateVariable(variable) {
|
||||||
this.variableMutation(UPDATE_MUTATION_ACTION, variable);
|
this.variableMutation(UPDATE_MUTATION_ACTION, variable);
|
||||||
},
|
},
|
||||||
|
@ -89,16 +126,19 @@ export default {
|
||||||
variable,
|
variable,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
if (data[currentMutation.name]?.errors?.length) {
|
||||||
const { errors } = data[currentMutation.name];
|
const { errors } = data[currentMutation.name];
|
||||||
if (errors.length > 0) {
|
|
||||||
createFlash({ message: errors[0] });
|
createFlash({ message: errors[0] });
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch {
|
||||||
createFlash({ message: genericMutationErrorText });
|
createFlash({ message: genericMutationErrorText });
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
componentName: 'ProjectVariables',
|
||||||
|
i18n: {
|
||||||
|
tooManyCallsError: __('Maximum number of variables loaded (2000)'),
|
||||||
|
},
|
||||||
mutationData: {
|
mutationData: {
|
||||||
[ADD_MUTATION_ACTION]: { action: addProjectVariable, name: 'addProjectVariable' },
|
[ADD_MUTATION_ACTION]: { action: addProjectVariable, name: 'addProjectVariable' },
|
||||||
[UPDATE_MUTATION_ACTION]: { action: updateProjectVariable, name: 'updateProjectVariable' },
|
[UPDATE_MUTATION_ACTION]: { action: updateProjectVariable, name: 'updateProjectVariable' },
|
||||||
|
|
|
@ -75,8 +75,7 @@ export default {
|
||||||
props: {
|
props: {
|
||||||
isLoading: {
|
isLoading: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
required: false,
|
required: true,
|
||||||
default: false,
|
|
||||||
},
|
},
|
||||||
variables: {
|
variables: {
|
||||||
type: Array,
|
type: Array,
|
||||||
|
|
|
@ -52,7 +52,7 @@ export const groupString = 'Group';
|
||||||
// eslint-disable-next-line @gitlab/require-i18n-strings
|
// eslint-disable-next-line @gitlab/require-i18n-strings
|
||||||
export const instanceString = 'Instance';
|
export const instanceString = 'Instance';
|
||||||
// eslint-disable-next-line @gitlab/require-i18n-strings
|
// 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_DISMISSED_COOKIE_NAME = 'ci_variable_list_constants_aws_tip_dismissed';
|
||||||
export const AWS_TIP_MESSAGE = __(
|
export const AWS_TIP_MESSAGE = __(
|
||||||
|
|
|
@ -1,9 +1,13 @@
|
||||||
#import "~/ci_variable_list/graphql/fragments/ci_variable.fragment.graphql"
|
#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) {
|
group(fullPath: $fullPath) {
|
||||||
id
|
id
|
||||||
ciVariables {
|
ciVariables(after: $after, first: $first) {
|
||||||
|
pageInfo {
|
||||||
|
...PageInfo
|
||||||
|
}
|
||||||
nodes {
|
nodes {
|
||||||
...BaseCiVariable
|
...BaseCiVariable
|
||||||
... on CiGroupVariable {
|
... on CiGroupVariable {
|
||||||
|
|
|
@ -1,9 +1,13 @@
|
||||||
#import "~/ci_variable_list/graphql/fragments/ci_variable.fragment.graphql"
|
#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) {
|
project(fullPath: $fullPath) {
|
||||||
id
|
id
|
||||||
ciVariables {
|
ciVariables(after: $after, first: $first) {
|
||||||
|
pageInfo {
|
||||||
|
...PageInfo
|
||||||
|
}
|
||||||
nodes {
|
nodes {
|
||||||
...BaseCiVariable
|
...BaseCiVariable
|
||||||
environmentScope
|
environmentScope
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
#import "~/ci_variable_list/graphql/fragments/ci_variable.fragment.graphql"
|
#import "~/ci_variable_list/graphql/fragments/ci_variable.fragment.graphql"
|
||||||
|
#import "~/graphql_shared/fragments/page_info.fragment.graphql"
|
||||||
|
|
||||||
query getVariables {
|
query getVariables($after: String, $first: Int = 100) {
|
||||||
ciVariables {
|
ciVariables(after: $after, first: $first) {
|
||||||
|
pageInfo {
|
||||||
|
...PageInfo
|
||||||
|
}
|
||||||
nodes {
|
nodes {
|
||||||
...BaseCiVariable
|
...BaseCiVariable
|
||||||
... on CiInstanceVariable {
|
... on CiInstanceVariable {
|
||||||
|
|
|
@ -3,7 +3,7 @@ import {
|
||||||
convertObjectPropsToCamelCase,
|
convertObjectPropsToCamelCase,
|
||||||
convertObjectPropsToSnakeCase,
|
convertObjectPropsToSnakeCase,
|
||||||
} from '../../lib/utils/common_utils';
|
} from '../../lib/utils/common_utils';
|
||||||
import { getIdFromGraphQLId } from '../../graphql_shared/utils';
|
import { convertToGraphQLId, getIdFromGraphQLId } from '../../graphql_shared/utils';
|
||||||
import {
|
import {
|
||||||
GRAPHQL_GROUP_TYPE,
|
GRAPHQL_GROUP_TYPE,
|
||||||
GRAPHQL_PROJECT_TYPE,
|
GRAPHQL_PROJECT_TYPE,
|
||||||
|
@ -30,6 +30,7 @@ const mapVariableTypes = (variables = [], kind) => {
|
||||||
return {
|
return {
|
||||||
__typename: `Ci${kind}Variable`,
|
__typename: `Ci${kind}Variable`,
|
||||||
...convertObjectPropsToCamelCase(ciVar),
|
...convertObjectPropsToCamelCase(ciVar),
|
||||||
|
id: convertToGraphQLId('Ci::Variable', ciVar.id),
|
||||||
variableType: ciVar.variable_type ? ciVar.variable_type.toUpperCase() : ciVar.variableType,
|
variableType: ciVar.variable_type ? ciVar.variable_type.toUpperCase() : ciVar.variableType,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
@ -40,9 +41,16 @@ const prepareProjectGraphQLResponse = ({ data, projectId, errors = [] }) => {
|
||||||
errors,
|
errors,
|
||||||
project: {
|
project: {
|
||||||
__typename: GRAPHQL_PROJECT_TYPE,
|
__typename: GRAPHQL_PROJECT_TYPE,
|
||||||
id: projectId,
|
id: convertToGraphQLId(GRAPHQL_PROJECT_TYPE, projectId),
|
||||||
ciVariables: {
|
ciVariables: {
|
||||||
__typename: 'CiVariableConnection',
|
__typename: `Ci${GRAPHQL_PROJECT_TYPE}VariableConnection`,
|
||||||
|
pageInfo: {
|
||||||
|
__typename: 'PageInfo',
|
||||||
|
hasNextPage: false,
|
||||||
|
hasPreviousPage: false,
|
||||||
|
startCursor: '',
|
||||||
|
endCursor: '',
|
||||||
|
},
|
||||||
nodes: mapVariableTypes(data.variables, projectString),
|
nodes: mapVariableTypes(data.variables, projectString),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -54,9 +62,16 @@ const prepareGroupGraphQLResponse = ({ data, groupId, errors = [] }) => {
|
||||||
errors,
|
errors,
|
||||||
group: {
|
group: {
|
||||||
__typename: GRAPHQL_GROUP_TYPE,
|
__typename: GRAPHQL_GROUP_TYPE,
|
||||||
id: groupId,
|
id: convertToGraphQLId(GRAPHQL_GROUP_TYPE, groupId),
|
||||||
ciVariables: {
|
ciVariables: {
|
||||||
__typename: 'CiVariableConnection',
|
__typename: `Ci${GRAPHQL_GROUP_TYPE}VariableConnection`,
|
||||||
|
pageInfo: {
|
||||||
|
__typename: 'PageInfo',
|
||||||
|
hasNextPage: false,
|
||||||
|
hasPreviousPage: false,
|
||||||
|
startCursor: '',
|
||||||
|
endCursor: '',
|
||||||
|
},
|
||||||
nodes: mapVariableTypes(data.variables, groupString),
|
nodes: mapVariableTypes(data.variables, groupString),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -68,24 +83,42 @@ const prepareAdminGraphQLResponse = ({ data, errors = [] }) => {
|
||||||
errors,
|
errors,
|
||||||
ciVariables: {
|
ciVariables: {
|
||||||
__typename: `Ci${instanceString}VariableConnection`,
|
__typename: `Ci${instanceString}VariableConnection`,
|
||||||
|
pageInfo: {
|
||||||
|
__typename: 'PageInfo',
|
||||||
|
hasNextPage: false,
|
||||||
|
hasPreviousPage: false,
|
||||||
|
startCursor: '',
|
||||||
|
endCursor: '',
|
||||||
|
},
|
||||||
nodes: mapVariableTypes(data.variables, instanceString),
|
nodes: mapVariableTypes(data.variables, instanceString),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const callProjectEndpoint = async ({
|
async function callProjectEndpoint({
|
||||||
endpoint,
|
endpoint,
|
||||||
fullPath,
|
fullPath,
|
||||||
variable,
|
variable,
|
||||||
projectId,
|
projectId,
|
||||||
cache,
|
cache,
|
||||||
destroy = false,
|
destroy = false,
|
||||||
}) => {
|
}) {
|
||||||
try {
|
try {
|
||||||
const { data } = await axios.patch(endpoint, {
|
const { data } = await axios.patch(endpoint, {
|
||||||
variables_attributes: [prepareVariableForApi({ variable, destroy })],
|
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) {
|
} catch (e) {
|
||||||
return prepareProjectGraphQLResponse({
|
return prepareProjectGraphQLResponse({
|
||||||
data: cache.readQuery({ query: getProjectVariables, variables: { fullPath } }),
|
data: cache.readQuery({ query: getProjectVariables, variables: { fullPath } }),
|
||||||
|
@ -93,7 +126,7 @@ const callProjectEndpoint = async ({
|
||||||
errors: [...e.response.data],
|
errors: [...e.response.data],
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
const callGroupEndpoint = async ({
|
const callGroupEndpoint = async ({
|
||||||
endpoint,
|
endpoint,
|
||||||
|
@ -107,7 +140,15 @@ const callGroupEndpoint = async ({
|
||||||
const { data } = await axios.patch(endpoint, {
|
const { data } = await axios.patch(endpoint, {
|
||||||
variables_attributes: [prepareVariableForApi({ variable, destroy })],
|
variables_attributes: [prepareVariableForApi({ variable, destroy })],
|
||||||
});
|
});
|
||||||
return prepareGroupGraphQLResponse({ data, groupId });
|
|
||||||
|
const graphqlData = prepareGroupGraphQLResponse({ data, groupId });
|
||||||
|
|
||||||
|
cache.writeQuery({
|
||||||
|
query: getGroupVariables,
|
||||||
|
data: graphqlData,
|
||||||
|
});
|
||||||
|
|
||||||
|
return graphqlData;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return prepareGroupGraphQLResponse({
|
return prepareGroupGraphQLResponse({
|
||||||
data: cache.readQuery({ query: getGroupVariables, variables: { fullPath } }),
|
data: cache.readQuery({ query: getGroupVariables, variables: { fullPath } }),
|
||||||
|
@ -123,7 +164,14 @@ const callAdminEndpoint = async ({ endpoint, variable, cache, destroy = false })
|
||||||
variables_attributes: [prepareVariableForApi({ variable, destroy })],
|
variables_attributes: [prepareVariableForApi({ variable, destroy })],
|
||||||
});
|
});
|
||||||
|
|
||||||
return prepareAdminGraphQLResponse({ data });
|
const graphqlData = prepareAdminGraphQLResponse({ data });
|
||||||
|
|
||||||
|
cache.writeQuery({
|
||||||
|
query: getAdminVariables,
|
||||||
|
data: graphqlData,
|
||||||
|
});
|
||||||
|
|
||||||
|
return graphqlData;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return prepareAdminGraphQLResponse({
|
return prepareAdminGraphQLResponse({
|
||||||
data: cache.readQuery({ query: getAdminVariables }),
|
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,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
|
@ -6,7 +6,7 @@ import CiAdminVariables from './components/ci_admin_variables.vue';
|
||||||
import CiGroupVariables from './components/ci_group_variables.vue';
|
import CiGroupVariables from './components/ci_group_variables.vue';
|
||||||
import CiProjectVariables from './components/ci_project_variables.vue';
|
import CiProjectVariables from './components/ci_project_variables.vue';
|
||||||
import LegacyCiVariableSettings from './components/legacy_ci_variable_settings.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';
|
import createStore from './store';
|
||||||
|
|
||||||
const mountCiVariableListApp = (containerEl) => {
|
const mountCiVariableListApp = (containerEl) => {
|
||||||
|
@ -45,7 +45,7 @@ const mountCiVariableListApp = (containerEl) => {
|
||||||
Vue.use(VueApollo);
|
Vue.use(VueApollo);
|
||||||
|
|
||||||
const apolloProvider = new VueApollo({
|
const apolloProvider = new VueApollo({
|
||||||
defaultClient: createDefaultClient(resolvers),
|
defaultClient: createDefaultClient(resolvers, cacheConfig),
|
||||||
});
|
});
|
||||||
|
|
||||||
return new Vue({
|
return new Vue({
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import * as Sentry from '@sentry/browser';
|
||||||
import { uniq } from 'lodash';
|
import { uniq } from 'lodash';
|
||||||
import { allEnvironments } from './constants';
|
import { allEnvironments } from './constants';
|
||||||
|
|
||||||
|
@ -48,3 +49,12 @@ export const convertEnvironmentScope = (environmentScope = '') => {
|
||||||
export const mapEnvironmentNames = (nodes = []) => {
|
export const mapEnvironmentNames = (nodes = []) => {
|
||||||
return nodes.map((env) => env.name);
|
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);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
|
@ -168,7 +168,7 @@ export default {
|
||||||
id="discussion-preferences-dropdown"
|
id="discussion-preferences-dropdown"
|
||||||
class="full-width-mobile"
|
class="full-width-mobile"
|
||||||
data-qa-selector="discussion_preferences_dropdown"
|
data-qa-selector="discussion_preferences_dropdown"
|
||||||
text="Sort or filter"
|
:text="__('Sort or filter')"
|
||||||
:disabled="isLoading"
|
:disabled="isLoading"
|
||||||
right
|
right
|
||||||
>
|
>
|
||||||
|
|
|
@ -162,7 +162,7 @@ export default {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<commit-section
|
<commit-section
|
||||||
v-if="showCommitForm"
|
v-show="showCommitForm"
|
||||||
:ref="$options.commitSectionRef"
|
:ref="$options.commitSectionRef"
|
||||||
:ci-file-content="ciFileContent"
|
:ci-file-content="ciFileContent"
|
||||||
:commit-sha="commitSha"
|
:commit-sha="commitSha"
|
||||||
|
|
|
@ -99,27 +99,26 @@ module Ci
|
||||||
}
|
}
|
||||||
|
|
||||||
scope :belonging_to_group, -> (group_id) {
|
scope :belonging_to_group, -> (group_id) {
|
||||||
joins(:runner_namespaces)
|
joins(:runner_namespaces).where(ci_runner_namespaces: { namespace_id: group_id })
|
||||||
.where(ci_runner_namespaces: { namespace_id: group_id })
|
|
||||||
}
|
}
|
||||||
|
|
||||||
scope :belonging_to_group_or_project_descendants, -> (group_id) {
|
scope :belonging_to_group_or_project_descendants, -> (group_id) {
|
||||||
group_ids = Ci::NamespaceMirror.by_group_and_descendants(group_id).select(:namespace_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)
|
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 })
|
group_runners = belonging_to_group(group_ids)
|
||||||
project_runners = joins(:runner_projects).where(ci_runner_projects: { project_id: project_ids })
|
project_runners = belonging_to_project(project_ids).distinct
|
||||||
|
|
||||||
union_sql = ::Gitlab::SQL::Union.new([group_runners, project_runners]).to_sql
|
from_union(
|
||||||
|
[group_runners, project_runners],
|
||||||
from("(#{union_sql}) #{table_name}")
|
remove_duplicates: false
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
scope :belonging_to_group_and_ancestors, -> (group_id) {
|
scope :belonging_to_group_and_ancestors, -> (group_id) {
|
||||||
group_self_and_ancestors_ids = ::Group.find_by(id: group_id)&.self_and_ancestor_ids
|
group_self_and_ancestors_ids = ::Group.find_by(id: group_id)&.self_and_ancestor_ids
|
||||||
|
|
||||||
joins(:runner_namespaces)
|
belonging_to_group(group_self_and_ancestors_ids)
|
||||||
.where(ci_runner_namespaces: { namespace_id: group_self_and_ancestors_ids })
|
|
||||||
}
|
}
|
||||||
|
|
||||||
scope :belonging_to_parent_group_of_project, -> (project_id) {
|
scope :belonging_to_parent_group_of_project, -> (project_id) {
|
||||||
|
|
|
@ -48,19 +48,22 @@ class Repository
|
||||||
# For example, for entry `:commit_count` there's a method called `commit_count` which
|
# For example, for entry `:commit_count` there's a method called `commit_count` which
|
||||||
# stores its data in the `commit_count` cache key.
|
# stores its data in the `commit_count` cache key.
|
||||||
CACHED_METHODS = %i(size commit_count readme_path contribution_guide
|
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
|
gitlab_ci_yml branch_names tag_names branch_count
|
||||||
tag_count avatar exists? root_ref merged_branch_names
|
tag_count avatar exists? root_ref merged_branch_names
|
||||||
has_visible_content? issue_template_names_hash merge_request_template_names_hash
|
has_visible_content? issue_template_names_hash merge_request_template_names_hash
|
||||||
user_defined_metrics_dashboard_paths xcode_project? has_ambiguous_refs?).freeze
|
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
|
# Certain method caches should be refreshed when certain types of files are
|
||||||
# changed. This Hash maps file types (as returned by Gitlab::FileDetector) to
|
# changed. This Hash maps file types (as returned by Gitlab::FileDetector) to
|
||||||
# the corresponding methods to call for refreshing caches.
|
# the corresponding methods to call for refreshing caches.
|
||||||
METHOD_CACHES_FOR_FILE_TYPES = {
|
METHOD_CACHES_FOR_FILE_TYPES = {
|
||||||
readme: %i(readme_path),
|
readme: %i(readme_path),
|
||||||
changelog: :changelog,
|
changelog: :changelog,
|
||||||
license: %i(license_blob license_licensee license_gitaly),
|
license: %i(license_blob license_key license),
|
||||||
contributing: :contribution_guide,
|
contributing: :contribution_guide,
|
||||||
gitignore: :gitignore,
|
gitignore: :gitignore,
|
||||||
gitlab_ci: :gitlab_ci_yml,
|
gitlab_ci: :gitlab_ci_yml,
|
||||||
|
@ -647,30 +650,25 @@ class Repository
|
||||||
cache_method :license_blob
|
cache_method :license_blob
|
||||||
|
|
||||||
def license_key
|
def license_key
|
||||||
license&.key
|
return unless exists?
|
||||||
|
|
||||||
|
raw_repository.license_short_name
|
||||||
end
|
end
|
||||||
|
cache_method :license_key
|
||||||
|
|
||||||
def license
|
def license
|
||||||
if Feature.enabled?(:license_from_gitaly)
|
return unless license_key
|
||||||
license_gitaly
|
|
||||||
else
|
licensee_object = Licensee::License.new(license_key)
|
||||||
license_licensee
|
|
||||||
end
|
return if licensee_object.name.blank?
|
||||||
|
|
||||||
|
licensee_object
|
||||||
|
rescue Licensee::InvalidLicense => e
|
||||||
|
Gitlab::ErrorTracking.track_exception(e)
|
||||||
|
nil
|
||||||
end
|
end
|
||||||
|
memoize_method :license
|
||||||
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
|
|
||||||
|
|
||||||
def gitignore
|
def gitignore
|
||||||
file_on_head(:gitignore)
|
file_on_head(:gitignore)
|
||||||
|
|
|
@ -115,7 +115,7 @@ class ResourceLabelEvent < ResourceEvent
|
||||||
end
|
end
|
||||||
|
|
||||||
def discussion_id_key
|
def discussion_id_key
|
||||||
[self.class.name, created_at, user_id]
|
[self.class.name, created_at.to_f, user_id]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,8 @@
|
||||||
.settings-content
|
.settings-content
|
||||||
= render 'account_and_limit'
|
= 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?) }
|
%section.settings.as-diff-limits.no-animate#js-merge-request-settings{ class: ('expanded' if expanded_by_default?) }
|
||||||
.settings-header
|
.settings-header
|
||||||
%h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only
|
%h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only
|
||||||
|
|
|
@ -20,16 +20,15 @@
|
||||||
= visibility_level_icon(snippet.visibility_level)
|
= visibility_level_icon(snippet.visibility_level)
|
||||||
|
|
||||||
.snippet-info
|
.snippet-info
|
||||||
#{snippet.to_reference} ·
|
.gl-display-inline{ data: { testid: 'snippet-created-at'} }
|
||||||
authored #{time_ago_with_tooltip(snippet.created_at, placement: 'bottom', html_class: 'snippet-created-ago')}
|
- created_at = time_ago_with_tooltip(snippet.created_at, placement: 'bottom')
|
||||||
by
|
- author = link_to(snippet.author_name, user_snippets_path(snippet.author), data: { user_id: snippet.author.id })
|
||||||
= link_to user_snippets_path(snippet.author), class: "js-user-link", data: { user_id: snippet.author.id } do
|
#{snippet.to_reference} ·
|
||||||
= snippet.author_name
|
- if link_project && snippet.project_id?
|
||||||
- if link_project && snippet.project_id?
|
- project_link = link_to(snippet.project.full_name, project_path(snippet.project))
|
||||||
%span.d-none.d-sm-inline-block
|
= _('created %{timeAgo} by %{author} in %{project_link}').html_safe % { timeAgo: created_at, author: author, project_link: project_link }
|
||||||
in
|
- else
|
||||||
= link_to project_path(snippet.project) do
|
= _('created %{timeAgo} by %{author}').html_safe % { timeAgo: created_at, author: author }
|
||||||
= snippet.project.full_name
|
|
||||||
|
|
||||||
.float-right.snippet-updated-at
|
.float-right
|
||||||
%span updated #{time_ago_with_tooltip(snippet.updated_at, placement: 'bottom')}
|
= _('updated %{timeAgo}').html_safe % { timeAgo: time_ago_with_tooltip(snippet.updated_at, placement: 'bottom') }
|
||||||
|
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -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');
|
|
|
@ -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
|
|
@ -0,0 +1 @@
|
||||||
|
3655ee5c3c963d0e413bce86eb9c74cc7bc71c3ab5acb54c76daacff8ff07354
|
|
@ -11507,6 +11507,11 @@ CREATE TABLE application_settings (
|
||||||
cube_api_base_url text,
|
cube_api_base_url text,
|
||||||
encrypted_cube_api_key bytea,
|
encrypted_cube_api_key bytea,
|
||||||
encrypted_cube_api_key_iv 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_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_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)),
|
CONSTRAINT app_settings_dep_proxy_ttl_policies_worker_capacity_positive CHECK ((dependency_proxy_ttl_group_policy_worker_capacity >= 0)),
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Data Stores
|
stage: Data Stores
|
||||||
group: Application Performance
|
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)**
|
# Application cache interval **(FREE SELF)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Govern
|
stage: Govern
|
||||||
group: Compliance
|
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)**
|
# Audit event streaming **(ULTIMATE)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Govern
|
stage: Govern
|
||||||
group: Compliance
|
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)**
|
# Audit Events **(PREMIUM)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Govern
|
stage: Govern
|
||||||
group: Compliance
|
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.'
|
description: 'Learn how to create evidence artifacts typically requested by a 3rd party auditor.'
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Manage
|
stage: Manage
|
||||||
group: Authentication and Authorization
|
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)**
|
# Auditor users **(PREMIUM SELF)**
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
type: reference
|
type: reference
|
||||||
stage: Manage
|
stage: Manage
|
||||||
group: Authentication and Authorization
|
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)**
|
# Atlassian OmniAuth Provider **(FREE SELF)**
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
type: reference
|
type: reference
|
||||||
stage: Manage
|
stage: Manage
|
||||||
group: Authentication and Authorization
|
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)**
|
# Authentiq OmniAuth Provider **(FREE SELF)**
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
type: concepts, howto
|
type: concepts, howto
|
||||||
stage: Manage
|
stage: Manage
|
||||||
group: Authentication and Authorization
|
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)**
|
# Amazon Web Services Cognito **(FREE SELF)**
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
type: reference
|
type: reference
|
||||||
stage: Manage
|
stage: Manage
|
||||||
group: Authentication and Authorization
|
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)**
|
# Atlassian Crowd OmniAuth provider (deprecated) **(FREE SELF)**
|
||||||
|
|
|
@ -3,7 +3,7 @@ comments: false
|
||||||
type: index
|
type: index
|
||||||
stage: Manage
|
stage: Manage
|
||||||
group: Authentication and Authorization
|
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)**
|
# GitLab authentication and authorization **(FREE SELF)**
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
type: reference
|
type: reference
|
||||||
stage: Manage
|
stage: Manage
|
||||||
group: Authentication and Authorization
|
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)**
|
# JWT OmniAuth provider **(FREE SELF)**
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
type: reference
|
type: reference
|
||||||
stage: Manage
|
stage: Manage
|
||||||
group: Authentication and Authorization
|
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)**
|
# Google Secure LDAP **(FREE SELF)**
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
type: reference
|
type: reference
|
||||||
stage: Manage
|
stage: Manage
|
||||||
group: Authentication and Authorization
|
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)**
|
# Integrate LDAP with GitLab **(FREE SELF)**
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
type: reference
|
type: reference
|
||||||
stage: Manage
|
stage: Manage
|
||||||
group: Authentication and Authorization
|
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)**
|
# Troubleshooting LDAP **(FREE SELF)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Manage
|
stage: Manage
|
||||||
group: Authentication and Authorization
|
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)**
|
# LDAP synchronization **(PREMIUM SELF)**
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
type: reference
|
type: reference
|
||||||
stage: Manage
|
stage: Manage
|
||||||
group: Authentication and Authorization
|
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)**
|
# OpenID Connect OmniAuth provider **(FREE SELF)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Manage
|
stage: Manage
|
||||||
group: Authentication and Authorization
|
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
|
type: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Verify
|
stage: Verify
|
||||||
group: Pipeline Execution
|
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
|
type: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Configure
|
stage: Configure
|
||||||
group: 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)**
|
# Install the GitLab agent server for Kubernetes (KAS) **(FREE SELF)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Govern
|
stage: Govern
|
||||||
group: Compliance
|
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)**
|
# Compliance features **(FREE)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Distribution
|
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
|
type: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Distribution
|
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
|
type: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Distribution
|
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)**
|
# Host the GitLab product documentation **(FREE SELF)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Distribution
|
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
|
type: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Verify
|
stage: Verify
|
||||||
group: Pipeline Execution
|
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
|
type: reference, howto
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Distribution
|
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"
|
description: "GitLab administrator: enable and disable GitLab features deployed behind feature flags"
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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)**
|
# Automatic background verification **(PREMIUM SELF)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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
|
type: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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)**
|
# Disaster Recovery (Geo) **(PREMIUM SELF)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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
|
type: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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
|
type: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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
|
type: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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
|
type: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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)**
|
# Geo **(PREMIUM SELF)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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
|
type: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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
|
type: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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
|
type: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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
|
type: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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)**
|
# Geo Frequently Asked Questions **(PREMIUM SELF)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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)**
|
# Geo validation tests **(PREMIUM SELF)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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
|
type: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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
|
type: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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
|
type: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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
|
type: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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
|
type: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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)**
|
# Troubleshooting Geo **(PREMIUM SELF)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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
|
type: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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
|
type: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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) -->
|
<!-- Please update EE::GitLab::GeoGitAccess::GEO_SERVER_DOCS_URL if this file is moved) -->
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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)**
|
# Version-specific upgrade instructions **(PREMIUM SELF)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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
|
type: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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
|
type: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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
|
type: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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)**
|
# Geo with external PostgreSQL instances **(PREMIUM SELF)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Geo
|
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
|
type: howto
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Create
|
stage: Create
|
||||||
group: Source Code
|
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"
|
description: "Set and configure Git protocol v2"
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Gitaly
|
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)**
|
# Configure Gitaly **(FREE SELF)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Gitaly
|
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)**
|
# Gitaly and Gitaly Cluster **(FREE SELF)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Gitaly
|
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
|
# Monitoring Gitaly and Gitaly Cluster
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Gitaly
|
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)**
|
# Configure Gitaly Cluster **(FREE SELF)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Gitaly
|
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
|
# Gitaly Cluster recovery options and tools
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Gitaly
|
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)**
|
# Gitaly reference **(FREE SELF)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Gitaly
|
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)**
|
# Troubleshooting Gitaly and Gitaly Cluster **(FREE SELF)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Distribution
|
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)**
|
# Housekeeping **(FREE SELF)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Govern
|
stage: Govern
|
||||||
group: Compliance
|
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)**
|
# Inactive project deletion **(FREE SELF)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Plan
|
stage: Plan
|
||||||
group: Project Management
|
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)**
|
# Incoming email **(FREE SELF)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Systems
|
stage: Systems
|
||||||
group: Distribution
|
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
|
type: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Growth
|
stage: Growth
|
||||||
group: Acquisition
|
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)**
|
# Instance review **(FREE SELF)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Plan
|
stage: Plan
|
||||||
group: Project Management
|
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)**
|
# Kroki diagrams **(FREE SELF)**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Plan
|
stage: Plan
|
||||||
group: Project Management
|
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
|
type: reference, howto
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
stage: Configure
|
stage: Configure
|
||||||
group: 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)**
|
# Web terminals (DEPRECATED) **(FREE)**
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue