Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
742fcdb708
commit
1e62780b8c
|
|
@ -8772,6 +8772,10 @@ No changes.
|
|||
|
||||
- [Move export buttons next to each other](gitlab-org/gitlab@106bea7a6246cd153cf66d133936a09d46369ae3) ([merge request](gitlab-org/gitlab!137461))
|
||||
|
||||
## 16.6.10 (2024-09-20)
|
||||
|
||||
No changes.
|
||||
|
||||
## 16.6.9 (2024-07-23)
|
||||
|
||||
### Added (1 change)
|
||||
|
|
@ -9421,6 +9425,10 @@ No changes.
|
|||
- [Remove pubsub migration helper for actioncable](gitlab-org/gitlab@763ca1305db6f1c9cf6700b8497494a81926d742) ([merge request](gitlab-org/gitlab!133066))
|
||||
- [Use partitioned table for CommitStatus](gitlab-org/gitlab@063826e042778995fae13928a2fb5de2c8855b45) ([merge request](gitlab-org/gitlab!134489))
|
||||
|
||||
## 16.5.10 (2024-09-20)
|
||||
|
||||
No changes.
|
||||
|
||||
## 16.5.9 (2024-07-23)
|
||||
|
||||
### Added (1 change)
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
9bfa8f596beb1e4bc81fa1e0f17e75eb1fc655c5
|
||||
51d4445997817e7a637db4e5acbce16f991ccf8a
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
73ca3ba951fb8125308d5dcf467a67e2d6047ceb
|
||||
ec645429780cc7695efd55bf28f14e4d317bbb6c
|
||||
|
|
|
|||
|
|
@ -617,7 +617,7 @@
|
|||
{"name":"rubocop-rspec","version":"2.27.1","platform":"ruby","checksum":"2f27ce04700be75db65afe83d7993a36e0fafd07ec062222f4b3cc10137a7a9e"},
|
||||
{"name":"ruby-fogbugz","version":"0.3.0","platform":"ruby","checksum":"5e04cde474648f498a71cf1e1a7ab42c66b953862fbe224f793ec0a7a1d5f657"},
|
||||
{"name":"ruby-lsp","version":"0.17.15","platform":"ruby","checksum":"c7c6f1dc793713bfefe2ed818ac3a5e4aae4a44c03978f7cc526b8c5002b7e57"},
|
||||
{"name":"ruby-lsp-rails","version":"0.3.14","platform":"ruby","checksum":"71891e91acc3f00b86a4040b9cfa581777be4460090ffe64c06fef6ed28f3a92"},
|
||||
{"name":"ruby-lsp-rails","version":"0.3.15","platform":"ruby","checksum":"415cbaa4c4c98b78aec4753b1d4ac332a1874a7727ff4c69cb28ebeb60f34e64"},
|
||||
{"name":"ruby-lsp-rspec","version":"0.1.12","platform":"ruby","checksum":"34fe775e27dc4c2f31df901f3d44ee885ed0806b05ba9be0ea564682dd4811e5"},
|
||||
{"name":"ruby-magic","version":"0.6.0","platform":"ruby","checksum":"7b2138877b7d23aff812c95564eba6473b74b815ef85beb0eb792e729a2b6101"},
|
||||
{"name":"ruby-openai","version":"3.7.0","platform":"ruby","checksum":"fb735d4c055e282ade264cab9864944c05a8a10e0cddd45a0551e8a9851b1850"},
|
||||
|
|
|
|||
|
|
@ -1652,7 +1652,7 @@ GEM
|
|||
prism (>= 0.29.0, < 0.31)
|
||||
rbs (>= 3, < 4)
|
||||
sorbet-runtime (>= 0.5.10782)
|
||||
ruby-lsp-rails (0.3.14)
|
||||
ruby-lsp-rails (0.3.15)
|
||||
ruby-lsp (>= 0.17.12, < 0.18.0)
|
||||
ruby-lsp-rspec (0.1.12)
|
||||
ruby-lsp (~> 0.17.0)
|
||||
|
|
|
|||
|
|
@ -630,7 +630,7 @@
|
|||
{"name":"rubocop-rspec","version":"2.27.1","platform":"ruby","checksum":"2f27ce04700be75db65afe83d7993a36e0fafd07ec062222f4b3cc10137a7a9e"},
|
||||
{"name":"ruby-fogbugz","version":"0.3.0","platform":"ruby","checksum":"5e04cde474648f498a71cf1e1a7ab42c66b953862fbe224f793ec0a7a1d5f657"},
|
||||
{"name":"ruby-lsp","version":"0.17.15","platform":"ruby","checksum":"c7c6f1dc793713bfefe2ed818ac3a5e4aae4a44c03978f7cc526b8c5002b7e57"},
|
||||
{"name":"ruby-lsp-rails","version":"0.3.14","platform":"ruby","checksum":"71891e91acc3f00b86a4040b9cfa581777be4460090ffe64c06fef6ed28f3a92"},
|
||||
{"name":"ruby-lsp-rails","version":"0.3.15","platform":"ruby","checksum":"415cbaa4c4c98b78aec4753b1d4ac332a1874a7727ff4c69cb28ebeb60f34e64"},
|
||||
{"name":"ruby-lsp-rspec","version":"0.1.12","platform":"ruby","checksum":"34fe775e27dc4c2f31df901f3d44ee885ed0806b05ba9be0ea564682dd4811e5"},
|
||||
{"name":"ruby-magic","version":"0.6.0","platform":"ruby","checksum":"7b2138877b7d23aff812c95564eba6473b74b815ef85beb0eb792e729a2b6101"},
|
||||
{"name":"ruby-openai","version":"3.7.0","platform":"ruby","checksum":"fb735d4c055e282ade264cab9864944c05a8a10e0cddd45a0551e8a9851b1850"},
|
||||
|
|
|
|||
|
|
@ -1678,7 +1678,7 @@ GEM
|
|||
prism (>= 0.29.0, < 0.31)
|
||||
rbs (>= 3, < 4)
|
||||
sorbet-runtime (>= 0.5.10782)
|
||||
ruby-lsp-rails (0.3.14)
|
||||
ruby-lsp-rails (0.3.15)
|
||||
ruby-lsp (>= 0.17.12, < 0.18.0)
|
||||
ruby-lsp-rspec (0.1.12)
|
||||
ruby-lsp (~> 0.17.0)
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ export default class VisualTokenValue {
|
|||
tokenValueContainer.dataset.originalValue = tokenValue;
|
||||
// eslint-disable-next-line no-unsanitized/property
|
||||
tokenValueElement.innerHTML = `
|
||||
<img class="avatar s20" src="${user.avatar_url}" alt="">
|
||||
<img class="avatar s16 !gl-mr-2" src="${user.avatar_url}" alt="">
|
||||
${escape(user.name)}
|
||||
`;
|
||||
/* eslint-enable no-param-reassign */
|
||||
|
|
|
|||
|
|
@ -1,13 +1,15 @@
|
|||
<script>
|
||||
import { GlButton, GlSprintf, GlDisclosureDropdown } from '@gitlab/ui';
|
||||
import { GlButton, GlLink, GlSprintf, GlDisclosureDropdown } from '@gitlab/ui';
|
||||
import GITLAB_LOGO_SVG_URL from '@gitlab/svgs/dist/illustrations/gitlab_logo.svg?url';
|
||||
import { s__ } from '~/locale';
|
||||
import { joinPaths, stripRelativeUrlRootFromPath } from '~/lib/utils/url_utility';
|
||||
import { helpPagePath } from '~/helpers/help_page_helper';
|
||||
|
||||
export default {
|
||||
name: 'OAuthDomainMismatchError',
|
||||
components: {
|
||||
GlButton,
|
||||
GlLink,
|
||||
GlSprintf,
|
||||
GlDisclosureDropdown,
|
||||
},
|
||||
|
|
@ -34,6 +36,11 @@ export default {
|
|||
};
|
||||
});
|
||||
},
|
||||
helpPageUrl() {
|
||||
return helpPagePath('user/project/web_ide/index', {
|
||||
anchor: 'update-the-oauth-callback-url',
|
||||
});
|
||||
},
|
||||
},
|
||||
gitlabLogo: GITLAB_LOGO_SVG_URL,
|
||||
i18n: {
|
||||
|
|
@ -49,7 +56,7 @@ export default {
|
|||
),
|
||||
expected: s__('IDE|Could not find a callback URL entry for %{expectedCallbackUrl}.'),
|
||||
contact: s__(
|
||||
'IDE|Contact your administrator or try to open the Web IDE again with another domain.',
|
||||
'IDE|Contact your administrator or try to open the Web IDE again with another domain. %{linkStart}How can an administrator resolve the issue%{linkEnd}?',
|
||||
),
|
||||
},
|
||||
};
|
||||
|
|
@ -62,13 +69,19 @@ export default {
|
|||
<p>
|
||||
{{ $options.i18n.description }}
|
||||
</p>
|
||||
<gl-sprintf :message="$options.i18n.expected">
|
||||
<template #expectedCallbackUrl>
|
||||
<code>{{ expectedCallbackUrl }}</code>
|
||||
</template>
|
||||
</gl-sprintf>
|
||||
<p>
|
||||
{{ $options.i18n.contact }}
|
||||
<gl-sprintf :message="$options.i18n.expected">
|
||||
<template #expectedCallbackUrl>
|
||||
<code>{{ expectedCallbackUrl }}</code>
|
||||
</template>
|
||||
</gl-sprintf>
|
||||
</p>
|
||||
<p>
|
||||
<gl-sprintf :message="$options.i18n.contact">
|
||||
<template #link="{ content }">
|
||||
<gl-link :href="helpPageUrl">{{ content }}</gl-link>
|
||||
</template>
|
||||
</gl-sprintf>
|
||||
</p>
|
||||
<div class="gl-mt-6">
|
||||
<gl-disclosure-dropdown
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ export const callRoleUpdateApi = async (member, role) => {
|
|||
|
||||
return axios.put(member.memberPath, {
|
||||
[accessLevelProp]: role.accessLevel,
|
||||
member_role_id: role.memberRoleId,
|
||||
member_role_id: role.memberRoleId || null,
|
||||
});
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -67,6 +67,7 @@ import {
|
|||
} from '~/issues/list/constants';
|
||||
import CiIcon from '~/vue_shared/components/ci_icon/ci_icon.vue';
|
||||
import setSortPreferenceMutation from '~/issues/list/queries/set_sort_preference.mutation.graphql';
|
||||
import issuableEventHub from '~/issues/list/eventhub';
|
||||
import { i18n } from '../constants';
|
||||
import getMergeRequestsQuery from '../queries/get_merge_requests.query.graphql';
|
||||
import getMergeRequestsCountsQuery from '../queries/get_merge_requests_counts.query.graphql';
|
||||
|
|
@ -115,6 +116,7 @@ export default {
|
|||
'isSignedIn',
|
||||
'newMergeRequestPath',
|
||||
'releasesEndpoint',
|
||||
'canBulkUpdate',
|
||||
],
|
||||
data() {
|
||||
return {
|
||||
|
|
@ -127,6 +129,7 @@ export default {
|
|||
sortKey: CREATED_DESC,
|
||||
state: STATUS_OPEN,
|
||||
pageSize: DEFAULT_PAGE_SIZE,
|
||||
showBulkEditSidebar: false,
|
||||
};
|
||||
},
|
||||
apollo: {
|
||||
|
|
@ -422,11 +425,20 @@ export default {
|
|||
isOpenTab() {
|
||||
return this.state === STATUS_OPEN;
|
||||
},
|
||||
isBulkEditButtonDisabled() {
|
||||
return this.showBulkEditSidebar || !this.mergeRequests.length;
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.updateData(this.initialSort);
|
||||
this.autocompleteCache = new AutocompleteCache();
|
||||
},
|
||||
mounted() {
|
||||
issuableEventHub.$on('issuables:toggleBulkEdit', this.toggleBulkEditSidebar);
|
||||
},
|
||||
beforeDestroy() {
|
||||
issuableEventHub.$off('issuables:toggleBulkEdit', this.toggleBulkEditSidebar);
|
||||
},
|
||||
methods: {
|
||||
fetchBranches(search) {
|
||||
return Api.branches(this.fullPath, search)
|
||||
|
|
@ -560,6 +572,26 @@ export default {
|
|||
mergeRequest.conflicts
|
||||
);
|
||||
},
|
||||
toggleBulkEditSidebar(showBulkEditSidebar) {
|
||||
this.showBulkEditSidebar = showBulkEditSidebar;
|
||||
},
|
||||
async handleBulkUpdateClick() {
|
||||
if (!this.hasInitBulkEdit) {
|
||||
const bulkUpdateSidebar = await import('~/issuable');
|
||||
bulkUpdateSidebar.initBulkUpdateSidebar('issuable_');
|
||||
|
||||
this.hasInitBulkEdit = true;
|
||||
}
|
||||
|
||||
issuableEventHub.$emit('issuables:enableBulkEdit');
|
||||
},
|
||||
handleUpdateLegacyBulkEdit() {
|
||||
// If "select all" checkbox was checked, wait for all checkboxes
|
||||
// to be checked before updating IssuableBulkUpdateSidebar class
|
||||
this.$nextTick(() => {
|
||||
issuableEventHub.$emit('issuables:updateBulkEdit');
|
||||
});
|
||||
},
|
||||
},
|
||||
STATUS_OPEN,
|
||||
};
|
||||
|
|
@ -587,14 +619,27 @@ export default {
|
|||
use-keyset-pagination
|
||||
:has-next-page="pageInfo.hasNextPage"
|
||||
:has-previous-page="pageInfo.hasPreviousPage"
|
||||
issuable-item-class="merge-request"
|
||||
:show-bulk-edit-sidebar="showBulkEditSidebar"
|
||||
@click-tab="handleClickTab"
|
||||
@next-page="handleNextPage"
|
||||
@previous-page="handlePreviousPage"
|
||||
@sort="handleSort"
|
||||
@filter="handleFilter"
|
||||
@update-legacy-bulk-edit="handleUpdateLegacyBulkEdit"
|
||||
>
|
||||
<template #nav-actions>
|
||||
<div class="gl-flex gl-gap-3">
|
||||
<gl-button
|
||||
v-if="canBulkUpdate"
|
||||
class="gl-grow"
|
||||
:disabled="isBulkEditButtonDisabled"
|
||||
data-testid="bulk-edit"
|
||||
@click="handleBulkUpdateClick"
|
||||
>
|
||||
{{ __('Bulk edit') }}
|
||||
</gl-button>
|
||||
|
||||
<gl-button
|
||||
v-if="newMergeRequestPath"
|
||||
variant="confirm"
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ export async function mountMergeRequestListsApp() {
|
|||
exportCsvPath,
|
||||
rssUrl,
|
||||
releasesEndpoint,
|
||||
canBulkUpdate,
|
||||
} = el.dataset;
|
||||
|
||||
return new Vue({
|
||||
|
|
@ -61,6 +62,7 @@ export async function mountMergeRequestListsApp() {
|
|||
exportCsvPath,
|
||||
rssUrl,
|
||||
releasesEndpoint,
|
||||
canBulkUpdate: parseBoolean(canBulkUpdate),
|
||||
},
|
||||
render: (createComponent) => createComponent(MergeRequestsListApp),
|
||||
});
|
||||
|
|
|
|||
|
|
@ -48,5 +48,9 @@ fragment MergeRequestFragment on MergeRequest {
|
|||
commitCount
|
||||
sourceBranchExists
|
||||
targetBranchExists
|
||||
taskCompletionStatus {
|
||||
completedCount
|
||||
count
|
||||
}
|
||||
...MergeRequestApprovalFragment
|
||||
}
|
||||
|
|
|
|||
|
|
@ -245,10 +245,14 @@ export default {
|
|||
return '';
|
||||
},
|
||||
handleIssuableItemClick(e) {
|
||||
if (e.metaKey || e.ctrlKey || !this.preventRedirect || this.showCheckbox) {
|
||||
if (e.metaKey || e.ctrlKey || this.showCheckbox) {
|
||||
return;
|
||||
}
|
||||
e.preventDefault();
|
||||
if (!this.preventRedirect) {
|
||||
this.navigateToIssuable();
|
||||
return;
|
||||
}
|
||||
this.$emit('select-issuable', {
|
||||
iid: this.issuableIid,
|
||||
webUrl: this.issuable.webUrl,
|
||||
|
|
@ -276,6 +280,11 @@ export default {
|
|||
visitUrl(this.issuableLinkHref);
|
||||
}
|
||||
},
|
||||
handleRowClick(e) {
|
||||
if (this.preventRedirect) {
|
||||
this.handleIssuableItemClick(e);
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
|
@ -287,13 +296,13 @@ export default {
|
|||
:class="{
|
||||
closed: issuable.closedAt,
|
||||
'gl-bg-blue-50': isActive,
|
||||
'gl-cursor-pointer': preventRedirect,
|
||||
'hover:gl-bg-subtle': preventRedirect && !isActive,
|
||||
'gl-cursor-pointer': preventRedirect && !showCheckbox,
|
||||
'hover:gl-bg-subtle': preventRedirect && !isActive && !showCheckbox,
|
||||
}"
|
||||
:data-labels="labelIdsString"
|
||||
:data-qa-issue-id="issuableId"
|
||||
data-testid="issuable-item-wrapper"
|
||||
@click="handleIssuableItemClick"
|
||||
@click="handleRowClick"
|
||||
>
|
||||
<gl-form-checkbox
|
||||
v-if="showCheckbox"
|
||||
|
|
|
|||
|
|
@ -185,20 +185,6 @@ $comparison-empty-state-height: 62px;
|
|||
}
|
||||
}
|
||||
|
||||
.limit-container-width {
|
||||
.merge-request-tabs-container {
|
||||
max-width: $limited-layout-width;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
|
||||
.inner-page-scroll-tabs {
|
||||
background-color: var(--white, $white);
|
||||
margin-left: -$gl-padding;
|
||||
padding-left: $gl-padding;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.merge-request-tabs-container {
|
||||
@include media-breakpoint-down(xs) {
|
||||
.discussion-filter-container {
|
||||
|
|
@ -248,12 +234,6 @@ $comparison-empty-state-height: 62px;
|
|||
}
|
||||
}
|
||||
|
||||
.limit-container-width:not(.container-limited) {
|
||||
.merge-request-tabs-holder .merge-request-tabs-container {
|
||||
max-width: $limited-layout-width - ($gl-padding * 2);
|
||||
}
|
||||
}
|
||||
|
||||
.fork-sprite {
|
||||
margin-right: -5px;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -247,7 +247,8 @@ module MergeRequestsHelper
|
|||
email: current_user.present? ? current_user.notification_email_or_default : nil,
|
||||
export_csv_path: export_csv_project_merge_requests_path(project, request.query_parameters),
|
||||
rss_url: url_for(safe_params.merge(rss_url_options)),
|
||||
releases_endpoint: project_releases_path(project, format: :json)
|
||||
releases_endpoint: project_releases_path(project, format: :json),
|
||||
can_bulk_update: can?(current_user, :admin_merge_request, project).to_s
|
||||
}
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,8 @@ module Ci
|
|||
belongs_to :published_by, class_name: 'User'
|
||||
has_many :components, class_name: 'Ci::Catalog::Resources::Component', inverse_of: :version
|
||||
|
||||
validates :release, :catalog_resource, :project, presence: true
|
||||
validates :release, presence: true, uniqueness: { message: N_('has already been published') }
|
||||
validates :catalog_resource, :project, presence: true
|
||||
validates :published_by, presence: true, on: :create
|
||||
validate :validate_published_by_is_release_author, on: :create
|
||||
|
||||
|
|
|
|||
|
|
@ -537,6 +537,7 @@ class ProjectPolicy < BasePolicy
|
|||
enable :create_release
|
||||
enable :update_release
|
||||
enable :destroy_release
|
||||
enable :publish_catalog_version
|
||||
enable :read_alert_management_alert
|
||||
enable :update_alert_management_alert
|
||||
enable :read_terraform_state
|
||||
|
|
|
|||
|
|
@ -13,5 +13,6 @@ class ReleasePolicy < BasePolicy
|
|||
prevent :create_release
|
||||
prevent :update_release
|
||||
prevent :destroy_release
|
||||
prevent :publish_catalog_version
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -4,22 +4,23 @@ module Ci
|
|||
module Catalog
|
||||
module Resources
|
||||
class ReleaseService
|
||||
def initialize(release, user, components_data)
|
||||
def initialize(release, user, metadata)
|
||||
@release = release
|
||||
@user = user
|
||||
@components_data = components_data
|
||||
@metadata = metadata
|
||||
@project = release.project
|
||||
@errors = []
|
||||
end
|
||||
|
||||
def execute
|
||||
track_release_duration do
|
||||
resource_version = track_release_duration do
|
||||
check_access
|
||||
validate_catalog_resource
|
||||
create_version
|
||||
end
|
||||
|
||||
if errors.empty?
|
||||
ServiceResponse.success
|
||||
ServiceResponse.success(payload: { version: resource_version })
|
||||
else
|
||||
ServiceResponse.error(message: errors.join(', '))
|
||||
end
|
||||
|
|
@ -27,7 +28,7 @@ module Ci
|
|||
|
||||
private
|
||||
|
||||
attr_reader :project, :errors, :release, :user, :components_data
|
||||
attr_reader :project, :errors, :release, :user, :metadata
|
||||
|
||||
def track_release_duration
|
||||
name = :gitlab_ci_catalog_release_duration_seconds
|
||||
|
|
@ -37,13 +38,23 @@ module Ci
|
|||
histogram = ::Gitlab::Metrics.histogram(name, comment, {}, buckets)
|
||||
start_time = ::Gitlab::Metrics::System.monotonic_time
|
||||
|
||||
yield
|
||||
result = yield
|
||||
|
||||
duration = ::Gitlab::Metrics::System.monotonic_time - start_time
|
||||
histogram.observe({}, duration.seconds)
|
||||
|
||||
result
|
||||
end
|
||||
|
||||
def check_access
|
||||
return if Ability.allowed?(user, :publish_catalog_version, release)
|
||||
|
||||
errors << 'You are not authorized to publish a version to the CI/CD catalog'
|
||||
end
|
||||
|
||||
def validate_catalog_resource
|
||||
return if errors.present?
|
||||
|
||||
response = Ci::Catalog::Resources::ValidateService.new(project, release.sha).execute
|
||||
return if response.success?
|
||||
|
||||
|
|
@ -53,10 +64,12 @@ module Ci
|
|||
def create_version
|
||||
return if errors.present?
|
||||
|
||||
response = Ci::Catalog::Resources::Versions::CreateService.new(release, user, components_data).execute
|
||||
return if response.success?
|
||||
response = Ci::Catalog::Resources::Versions::CreateService.new(release, user, metadata).execute
|
||||
return response.payload[:version] if response.success?
|
||||
|
||||
errors << response.message
|
||||
|
||||
nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -71,7 +71,8 @@ module Ci
|
|||
|
||||
{
|
||||
name: component_name,
|
||||
spec: components_project.extract_spec(blob.data)
|
||||
spec: components_project.extract_spec(blob.data),
|
||||
component_type: 'template'
|
||||
}
|
||||
end
|
||||
|
||||
|
|
@ -88,6 +89,7 @@ module Ci
|
|||
name: metadata[:name],
|
||||
project: version.project,
|
||||
spec: metadata[:spec],
|
||||
resource_type: metadata[:component_type], # https://gitlab.com/gitlab-org/gitlab/-/issues/490377
|
||||
version: version,
|
||||
catalog_resource: version.catalog_resource,
|
||||
created_at: Time.current
|
||||
|
|
@ -96,6 +98,10 @@ module Ci
|
|||
return component if component.valid?
|
||||
|
||||
error("Build component error: #{component.errors.full_messages.join(', ')}")
|
||||
rescue ArgumentError => e
|
||||
# In Rails 7.1, we'll have a better way to handle this error; https://github.com/rails/rails/pull/49100
|
||||
# Ci::Catalog::Resources::Component: `enum resource_type: { template: 1 }, validate: true`
|
||||
error(e.message)
|
||||
end
|
||||
|
||||
def error(message)
|
||||
|
|
|
|||
|
|
@ -5,11 +5,11 @@ module Ci
|
|||
module Resources
|
||||
module Versions
|
||||
class CreateService
|
||||
def initialize(release, user, components_data)
|
||||
def initialize(release, user, metadata)
|
||||
@release = release
|
||||
@user = user
|
||||
@project = release.project
|
||||
@components_data = components_data
|
||||
@metadata = metadata
|
||||
@errors = []
|
||||
end
|
||||
|
||||
|
|
@ -19,7 +19,7 @@ module Ci
|
|||
publish(version)
|
||||
|
||||
if errors.empty?
|
||||
ServiceResponse.success
|
||||
ServiceResponse.success(payload: { version: version })
|
||||
else
|
||||
ServiceResponse.error(message: errors.flatten.first(10).join(', '))
|
||||
end
|
||||
|
|
@ -27,7 +27,7 @@ module Ci
|
|||
|
||||
private
|
||||
|
||||
attr_reader :project, :errors, :release, :user, :components_data
|
||||
attr_reader :project, :errors, :release, :user, :metadata
|
||||
|
||||
def build_catalog_resource_version
|
||||
return error('Project is not a catalog resource') unless project.catalog_resource
|
||||
|
|
@ -48,7 +48,8 @@ module Ci
|
|||
def build_components(version)
|
||||
return if errors.present?
|
||||
|
||||
response = BuildComponentsService.new(release, version, components_data).execute
|
||||
# metadata is passed as `nil` from the `Releases::CreateService`.
|
||||
response = BuildComponentsService.new(release, version, metadata.try(:[], :components)).execute
|
||||
|
||||
if response.success?
|
||||
version.components = response.payload
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
count: @applications.size,
|
||||
options: { class: 'gl-mt-5', data: { testid: 'oauth-applications' } }) do |c|
|
||||
- c.with_description do
|
||||
- docs_link_path = help_page_path('integration/oauth_provider')
|
||||
- docs_link_path = help_page_path('integration/oauth_provider.md')
|
||||
- docs_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer nofollow">'.html_safe % { url: docs_link_path }
|
||||
= s_('AdminArea|Manage applications for your instance that can use GitLab as an %{docs_link_start}OAuth provider%{docs_link_end}.').html_safe % { docs_link_start: docs_link_start, docs_link_end: '</a>'.html_safe }
|
||||
- c.with_actions do
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
- page_title s_('BackgroundMigrations|Background migrations')
|
||||
- @breadcrumb_link = admin_background_migrations_path(database: params[:database])
|
||||
- learnmore_link = help_page_path('update/background_migrations')
|
||||
- learnmore_link = help_page_path('update/background_migrations.md')
|
||||
- learnmore_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: learnmore_link }
|
||||
- page_description = html_escape(s_('BackgroundMigrations|Background migrations are used to perform data migrations when a migration exceeds the time limits set by GitLab. %{linkStart}Learn more%{linkEnd}')) % { linkStart: learnmore_link_start, linkEnd: '</a>'.html_safe }
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
- breadcrumb_title _("Dashboard")
|
||||
- page_title _("Dashboard")
|
||||
- billable_users_url = help_page_path('subscriptions/self_managed/index', anchor: 'billable-users')
|
||||
- billable_users_url = help_page_path('subscriptions/self_managed/index.md', anchor: 'billable-users')
|
||||
- billable_users_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer nofollow">'.html_safe % { url: billable_users_url }
|
||||
|
||||
= render_if_exists 'shared/manual_quarterly_reconciliation_banner'
|
||||
|
|
@ -87,7 +87,7 @@
|
|||
|
||||
= feature_entry(_('LDAP'),
|
||||
enabled: Gitlab.config.ldap.enabled,
|
||||
doc_href: help_page_path('administration/auth/ldap/index'))
|
||||
doc_href: help_page_path('administration/auth/ldap/index.md'))
|
||||
|
||||
= feature_entry(_('Gravatar'),
|
||||
href: general_admin_application_settings_path(anchor: 'js-account-settings'),
|
||||
|
|
@ -96,18 +96,18 @@
|
|||
= feature_entry(_('OmniAuth'),
|
||||
href: general_admin_application_settings_path(anchor: 'js-signin-settings'),
|
||||
enabled: Gitlab::Auth.omniauth_enabled?,
|
||||
doc_href: help_page_path('integration/omniauth'))
|
||||
doc_href: help_page_path('integration/omniauth.md'))
|
||||
|
||||
= feature_entry(_('Reply by email'),
|
||||
enabled: Gitlab::Email::IncomingEmail.enabled?,
|
||||
doc_href: help_page_path('administration/reply_by_email'))
|
||||
doc_href: help_page_path('administration/reply_by_email.md'))
|
||||
|
||||
= render_if_exists 'admin/dashboard/elastic_and_geo'
|
||||
|
||||
= feature_entry(_('Container Registry'),
|
||||
href: ci_cd_admin_application_settings_path(anchor: 'js-registry-settings'),
|
||||
enabled: Gitlab.config.registry.enabled,
|
||||
doc_href: help_page_path('user/packages/container_registry/index'))
|
||||
doc_href: help_page_path('user/packages/container_registry/index.md'))
|
||||
|
||||
= feature_entry(_('GitLab Pages'),
|
||||
enabled: Gitlab.config.pages.enabled,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
- service_ping_enabled = Gitlab::CurrentSettings.usage_ping_enabled
|
||||
|
||||
- if !service_ping_enabled
|
||||
#js-devops-service-ping-disabled{ data: { is_admin: current_user&.admin.to_s, empty_state_svg_path: image_path('illustrations/empty-state/empty-devops-md.svg'), enable_service_ping_path: metrics_and_profiling_admin_application_settings_path(anchor: 'js-usage-settings'), docs_link: help_page_path('development/internal_analytics/service_ping/index') } }
|
||||
#js-devops-service-ping-disabled{ data: { is_admin: current_user&.admin.to_s, empty_state_svg_path: image_path('illustrations/empty-state/empty-devops-md.svg'), enable_service_ping_path: metrics_and_profiling_admin_application_settings_path(anchor: 'js-usage-settings'), docs_link: help_page_path('development/internal_analytics/service_ping/index.md') } }
|
||||
- else
|
||||
#js-devops-score{ data: { devops_score_metrics: devops_score_metrics(@metric).to_json, no_data_image_path: image_path('illustrations/empty-state/empty-devops-md.svg'), devops_score_intro_image_path: image_path('illustrations/chart-bar-sm.svg') } }
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
- c.with_title { _('Naming, visibility') }
|
||||
- c.with_description do
|
||||
= _('Update your group name, description, avatar, and visibility.')
|
||||
= link_to _('Learn more about groups.'), help_page_path('user/group/index')
|
||||
= link_to _('Learn more about groups.'), help_page_path('user/group/index.md')
|
||||
- c.with_body do
|
||||
= render 'shared/groups/group_name_and_path_fields', f: f
|
||||
= render 'shared/group_form_description', f: f
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@
|
|||
.gl-col-span-2
|
||||
%strong
|
||||
= group_lfs_status(@group)
|
||||
= link_to sprite_icon('question-o', css_class: 'gl-text-blue-600'), help_page_path('topics/git/lfs/index')
|
||||
= link_to sprite_icon('question-o', css_class: 'gl-text-blue-600'), help_page_path('topics/git/lfs/index.md')
|
||||
= render_if_exists 'namespaces/shared_runner_status', namespace: @group
|
||||
= render_if_exists 'namespaces/additional_minutes_status', namespace: @group
|
||||
|
||||
|
|
@ -98,7 +98,7 @@
|
|||
icon: 'user',
|
||||
count: @group.users_count) do |c|
|
||||
- c.with_description do
|
||||
- direct_members_link = link_to('', help_page_path('user/project/members/index', anchor: 'membership-types'))
|
||||
- direct_members_link = link_to('', help_page_path('user/project/members/index.md', anchor: 'membership-types'))
|
||||
- direct_members_message = s_('The number of direct members in the current group. Members in subgroups are not included. %{link_start}What is a direct member%{link_end}?')
|
||||
- if @group.root?
|
||||
= safe_format(direct_members_message, tag_pair(direct_members_link, :link_start, :link_end))
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
= _("Reset token")
|
||||
|
||||
|
||||
- help_url = help_page_path('administration/monitoring/health_check')
|
||||
- help_url = help_page_path('administration/monitoring/health_check.md')
|
||||
- help_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_url }
|
||||
%p.gl-mb-1= html_escape(s_('HealthCheck|Health information can be retrieved from the following endpoints. More information is available in the %{linkStart}health check documentation%{linkEnd}.')) % { linkStart: help_start, linkEnd: '</a>'.html_safe }
|
||||
%ul.gl-mb-6
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@
|
|||
= _('Git LFS status:')
|
||||
%strong
|
||||
= project_lfs_status(@project)
|
||||
= link_to sprite_icon('question-o'), help_page_path('topics/git/lfs/index')
|
||||
= link_to sprite_icon('question-o'), help_page_path('topics/git/lfs/index.md')
|
||||
- else
|
||||
%li{ class: '!gl-px-5' }
|
||||
%span.light
|
||||
|
|
@ -160,7 +160,7 @@
|
|||
- else
|
||||
= _("This repository was last checked %{last_check_timestamp}. The check passed.") % { last_check_timestamp: @project.last_repository_check_at.to_fs(:medium) }
|
||||
|
||||
= link_to sprite_icon('question-o'), help_page_path('administration/repository_checks')
|
||||
= link_to sprite_icon('question-o'), help_page_path('administration/repository_checks.md')
|
||||
|
||||
.form-group
|
||||
= f.submit _('Trigger repository check'), pajamas_button: true
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
.form-group
|
||||
= f.label :description, _("Description")
|
||||
.js-markdown-editor{ data: { render_markdown_path: preview_markdown_admin_topics_path,
|
||||
markdown_docs_path: help_page_path('user/markdown'),
|
||||
markdown_docs_path: help_page_path('user/markdown.md'),
|
||||
testid: 'topic-form-description',
|
||||
form_field_placeholder: _('Write a description…'),
|
||||
supports_quick_actions: 'false',
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
primary_button_text: s_("KubernetesDashboard|View projects"),
|
||||
primary_button_link: dashboard_projects_path,
|
||||
secondary_button_text: s_("KubernetesDashboard|Learn more"),
|
||||
secondary_button_link: help_page_path('ci/environments/kubernetes_dashboard')) do |c|
|
||||
secondary_button_link: help_page_path('ci/environments/kubernetes_dashboard.md')) do |c|
|
||||
|
||||
- c.with_description do
|
||||
= s_("KubernetesDashboard|You can select an agent from a project's environment page.")
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
selected: @cluster.management_project_id } }
|
||||
%p.text-muted.-gl-mt-5
|
||||
= html_escape(s_('ClusterIntegration|A cluster management project can be used to run deployment jobs with Kubernetes %{code_open}cluster-admin%{code_close} privileges.')) % { code_open: '<code>'.html_safe, code_close: '</code>'.html_safe }
|
||||
= link_to _('More information'), help_page_path('user/clusters/management_project'), target: '_blank', rel: 'noopener noreferrer'
|
||||
= link_to _('More information'), help_page_path('user/clusters/management_project.md'), target: '_blank', rel: 'noopener noreferrer'
|
||||
= field.submit _('Save changes'), pajamas_button: true
|
||||
|
||||
.sub-section.form-group
|
||||
|
|
|
|||
|
|
@ -2,6 +2,6 @@
|
|||
- c.with_body do
|
||||
- link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe
|
||||
- issue_link_start = link_start % { url: 'https://gitlab.com/gitlab-org/configure/general/-/issues/199' }
|
||||
- docs_link_start = link_start % { url: help_page_path('user/clusters/agent/index') }
|
||||
- docs_link_start = link_start % { url: help_page_path('user/clusters/agent/index.md') }
|
||||
- link_end = '</a>'.html_safe
|
||||
= s_('ClusterIntegration|This process is %{issue_link_start}deprecated%{issue_link_end}. Use the %{docs_link_start}the GitLab agent for Kubernetes%{docs_link_end} instead.').html_safe % { docs_link_start: docs_link_start, docs_link_end: link_end, issue_link_start: issue_link_start, issue_link_end: link_end }
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
- autodevops_help_url = help_page_path('topics/autodevops/multiple_clusters_auto_devops')
|
||||
- autodevops_help_url = help_page_path('topics/autodevops/multiple_clusters_auto_devops.md')
|
||||
- help_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe
|
||||
- help_link_end = '</a>'.html_safe
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
- managed_namespace_help_text = s_('ClusterIntegration|Set a prefix for your namespaces. If not set, defaults to your project path. If modified, existing environments will use their current namespaces until the cluster cache is cleared.')
|
||||
- non_managed_namespace_help_text = s_('ClusterIntegration|The namespace associated with your project. This will be used for deploy boards, and Web terminals.')
|
||||
- managed_namespace_help_link = link_to _('More information'), help_page_path('user/project/clusters/gitlab_managed_clusters'), target: '_blank', rel: 'noopener noreferrer'
|
||||
- managed_namespace_help_link = link_to _('More information'), help_page_path('user/project/clusters/gitlab_managed_clusters.md'), target: '_blank', rel: 'noopener noreferrer'
|
||||
|
||||
.js-namespace-prefixed
|
||||
.form-group
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@
|
|||
= field.label :managed, s_('ClusterIntegration|GitLab-managed cluster'), class: 'form-check-label label-bold'
|
||||
.form-text.text-muted
|
||||
= s_('ClusterIntegration|Allow GitLab to manage namespaces and service accounts for this cluster.')
|
||||
= link_to _('More information'), help_page_path('user/project/clusters/gitlab_managed_clusters'), target: '_blank', rel: 'noopener noreferrer'
|
||||
= link_to _('More information'), help_page_path('user/project/clusters/gitlab_managed_clusters.md'), target: '_blank', rel: 'noopener noreferrer'
|
||||
|
||||
.form-group
|
||||
.form-check
|
||||
|
|
@ -59,7 +59,7 @@
|
|||
= field.label :namespace_per_environment, s_('ClusterIntegration|Namespace per environment'), class: 'form-check-label label-bold'
|
||||
.form-text.text-muted
|
||||
= s_('ClusterIntegration|Deploy each environment to its own namespace. Otherwise, environments within a project share a project-wide namespace. Note that anyone who can trigger a deployment of a namespace can read its secrets. If modified, existing environments will use their current namespaces until the cluster cache is cleared.')
|
||||
= link_to _('More information'), help_page_path('user/project/clusters/deploy_to_cluster', anchor: 'custom-namespace'), target: '_blank', rel: 'noopener noreferrer'
|
||||
= link_to _('More information'), help_page_path('user/project/clusters/deploy_to_cluster.md', anchor: 'custom-namespace'), target: '_blank', rel: 'noopener noreferrer'
|
||||
|
||||
- if cluster.allow_user_defined_namespace?
|
||||
= render('clusters/clusters/namespace', platform_field: platform_field, field: field)
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@
|
|||
- eks_label = s_('ClusterIntegration|Amazon EKS')
|
||||
- civo_label = s_('ClusterIntegration|Civo Kubernetes')
|
||||
- create_cluster_label = s_('ClusterIntegration|Where do you want to create a cluster?')
|
||||
- eks_help_path = help_page_path('user/infrastructure/clusters/connect/new_eks_cluster')
|
||||
- gke_help_path = help_page_path('user/infrastructure/clusters/connect/new_gke_cluster')
|
||||
- civo_help_path = help_page_path('user/infrastructure/clusters/connect/new_civo_cluster')
|
||||
- eks_help_path = help_page_path('user/infrastructure/clusters/connect/new_eks_cluster.md')
|
||||
- gke_help_path = help_page_path('user/infrastructure/clusters/connect/new_gke_cluster.md')
|
||||
- civo_help_path = help_page_path('user/infrastructure/clusters/connect/new_civo_cluster.md')
|
||||
|
||||
.gl-py-5.md:gl-pl-5.md:gl-pr-5
|
||||
%h4.gl-mb-5
|
||||
|
|
|
|||
|
|
@ -12,10 +12,10 @@
|
|||
cluster_status: @cluster.status_name,
|
||||
cluster_status_reason: @cluster.status_reason,
|
||||
provider_type: @cluster.provider_type,
|
||||
help_path: help_page_path('user/infrastructure/clusters/index'),
|
||||
environments_help_path: help_page_path('ci/environments/index', anchor: 'create-a-static-environment'),
|
||||
clusters_help_path: help_page_path('user/project/clusters/deploy_to_cluster'),
|
||||
deploy_boards_help_path: help_page_path('user/project/deploy_boards', anchor: 'enabling-deploy-boards'),
|
||||
help_path: help_page_path('user/infrastructure/clusters/index.md'),
|
||||
environments_help_path: help_page_path('ci/environments/index.md', anchor: 'create-a-static-environment'),
|
||||
clusters_help_path: help_page_path('user/project/clusters/deploy_to_cluster.md'),
|
||||
deploy_boards_help_path: help_page_path('user/project/deploy_boards.md', anchor: 'enabling-deploy-boards'),
|
||||
cluster_id: @cluster.id } }
|
||||
|
||||
.js-cluster-application-notice
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
- more_info_link = link_to _('Learn more.'), help_page_path('user/project/clusters/add_existing_cluster'), target: '_blank', rel: 'noopener noreferrer'
|
||||
- rbac_help_link = link_to _('Learn more.'), help_page_path('user/project/clusters/cluster_access'), target: '_blank', rel: 'noopener noreferrer'
|
||||
- more_info_link = link_to _('Learn more.'), help_page_path('user/project/clusters/add_existing_cluster.md'), target: '_blank', rel: 'noopener noreferrer'
|
||||
- rbac_help_link = link_to _('Learn more.'), help_page_path('user/project/clusters/cluster_access.md'), target: '_blank', rel: 'noopener noreferrer'
|
||||
|
||||
- api_url_help_text = s_('ClusterIntegration|The URL used to access the Kubernetes API.')
|
||||
- ca_cert_help_text = s_('ClusterIntegration|The Kubernetes certificate used to authenticate to the cluster.')
|
||||
|
|
@ -58,7 +58,7 @@
|
|||
= field.label :managed, s_('ClusterIntegration|GitLab-managed cluster'), class: 'form-check-label label-bold'
|
||||
.form-text.text-muted
|
||||
= s_('ClusterIntegration|Allow GitLab to manage namespaces and service accounts for this cluster.')
|
||||
= link_to _('Learn more.'), help_page_path('user/project/clusters/gitlab_managed_clusters'), target: '_blank', rel: 'noopener noreferrer'
|
||||
= link_to _('Learn more.'), help_page_path('user/project/clusters/gitlab_managed_clusters.md'), target: '_blank', rel: 'noopener noreferrer'
|
||||
|
||||
.form-group
|
||||
.form-check
|
||||
|
|
@ -66,7 +66,7 @@
|
|||
= field.label :namespace_per_environment, s_('ClusterIntegration|Namespace per environment'), class: 'form-check-label label-bold'
|
||||
.form-text.text-muted
|
||||
= s_('ClusterIntegration|Deploy each environment to its own namespace. Otherwise, environments within a project share a project-wide namespace. Note that anyone who can trigger a deployment of a namespace can read its secrets. If modified, existing environments will use their current namespaces until the cluster cache is cleared.')
|
||||
= link_to _('Learn more.'), help_page_path('user/project/clusters/deploy_to_cluster', anchor: 'custom-namespace'), target: '_blank', rel: 'noopener noreferrer'
|
||||
= link_to _('Learn more.'), help_page_path('user/project/clusters/deploy_to_cluster.md', anchor: 'custom-namespace'), target: '_blank', rel: 'noopener noreferrer'
|
||||
|
||||
= field.fields_for :platform_kubernetes, @user_cluster.platform_kubernetes do |platform_kubernetes_field|
|
||||
- if @user_cluster.allow_user_defined_namespace?
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@
|
|||
%p
|
||||
= (s_("Todos|Not sure where to go next? Take a look at your %{strongStart}%{assignedIssuesLinkStart}assigned issues%{assignedIssuesLinkEnd}%{strongEnd} or %{strongStart}%{mergeRequestLinkStart}merge requests%{mergeRequestLinkEnd}%{mergeRequestLinkEnd}%{strongEnd}.") % { strongStart: '<strong>', strongEnd: '</strong>', assignedIssuesLinkStart: "<a href=\"#{issues_dashboard_path(assignee_username: current_user.username)}\">", assignedIssuesLinkEnd: '</a>', mergeRequestLinkStart: "<a href=\"#{merge_requests_dashboard_path(assignee_username: current_user.username)}\">", mergeRequestLinkEnd: '</a>' }).html_safe
|
||||
%p
|
||||
= link_to s_("Todos| What actions create to-do items?"), help_page_path('user/todos', anchor: 'actions-that-create-to-do-items'), target: '_blank', rel: 'noopener noreferrer'
|
||||
= link_to s_("Todos| What actions create to-do items?"), help_page_path('user/todos.md', anchor: 'actions-that-create-to-do-items'), target: '_blank', rel: 'noopener noreferrer'
|
||||
|
||||
- elsif todos_has_filtered_results?
|
||||
%p
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
%h1.page-title.gl-text-size-h-display= page_title
|
||||
%p
|
||||
= _("Below you will find all the groups that are public or internal. Contribute by requesting to join a group.")
|
||||
#{link_to _('Learn more'), help_page_path('user/group/index', { anchor: 'view-groups' })}.
|
||||
#{link_to _('Learn more'), help_page_path('user/group/index.md', { anchor: 'view-groups' })}.
|
||||
.page-title-controls.gl-mt-4
|
||||
- if current_user&.can_create_group?
|
||||
= render Pajamas::ButtonComponent.new(href: new_group_path, variant: :confirm) do
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
= f.gitlab_ui_checkbox_component :lfs_enabled, checkbox_options: { checked: @group.lfs_enabled? } do |c|
|
||||
- c.with_label do
|
||||
= _('Projects in this group can use Git LFS')
|
||||
= link_to sprite_icon('question-o'), help_page_path('topics/git/lfs/index'), class: 'gl-ml-2'
|
||||
= link_to sprite_icon('question-o'), help_page_path('topics/git/lfs/index.md'), class: 'gl-ml-2'
|
||||
- c.with_help_text do
|
||||
= _('This setting can be overridden in each project.')
|
||||
.form-group.gl-form-group{ role: 'group' }
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
%legend.col-form-label.col-form-label
|
||||
= _('Two-factor authentication')
|
||||
- label = _("All users in this group must set up two-factor authentication")
|
||||
- help_link = link_to sprite_icon('question-o'), help_page_path('security/two_factor_authentication', anchor: 'enforce-2fa-for-all-users-in-a-group'), class: 'gl-ml-2'
|
||||
- help_link = link_to sprite_icon('question-o'), help_page_path('security/two_factor_authentication.md', anchor: 'enforce-2fa-for-all-users-in-a-group'), class: 'gl-ml-2'
|
||||
= f.gitlab_ui_checkbox_component :require_two_factor_authentication, '%{label}%{help_link}'.html_safe % { label: label, help_link: help_link }
|
||||
|
||||
.form-group.gl-form-group{ role: 'group' }
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
- if current_user.admin?
|
||||
= render Pajamas::ButtonComponent.new(href: [:admin, @group], icon: 'admin', button_options: { title: _('View group in admin area'), data: { toggle: 'tooltip', placement: 'bottom', container: 'body' } })
|
||||
- if @notification_setting
|
||||
.js-vue-notification-dropdown{ data: { disabled: emails_disabled.to_s, dropdown_items: notification_dropdown_items(@notification_setting).to_json, notification_level: @notification_setting.level, help_page_path: help_page_path('user/profile/notifications'), group_id: @group.id, container_class: 'gl-align-top' } }
|
||||
.js-vue-notification-dropdown{ data: { disabled: emails_disabled.to_s, dropdown_items: notification_dropdown_items(@notification_setting).to_json, notification_level: @notification_setting.level, help_page_path: help_page_path('user/profile/notifications.md'), group_id: @group.id, container_class: 'gl-align-top' } }
|
||||
- if can_create_subgroups
|
||||
.sm:gl-w-auto.gl-w-full
|
||||
= render Pajamas::ButtonComponent.new(href: new_group_path(parent_id: @group.id, anchor: 'create-group-pane'), button_options: { data: { testid: 'new-subgroup-button' }, class: 'sm:gl-w-auto gl-w-full'}) do
|
||||
|
|
|
|||
|
|
@ -25,11 +25,11 @@
|
|||
= render Pajamas::AlertComponent.new(dismissible: false,
|
||||
variant: :warning) do |c|
|
||||
- c.with_body do
|
||||
- docs_link = link_to('', help_page_path('user/group/import/migrated_items', anchor: 'migrated-group-items'), target: '_blank', rel: 'noopener noreferrer')
|
||||
- docs_link = link_to('', help_page_path('user/group/import/migrated_items.md', anchor: 'migrated-group-items'), target: '_blank', rel: 'noopener noreferrer')
|
||||
= safe_format(s_('GroupsNew|Not all group items are migrated. %{docs_link_start}What items are migrated%{docs_link_end}?'), tag_pair(docs_link, :docs_link_start, :docs_link_end))
|
||||
|
||||
%p.gl-mt-5.gl-mb-3
|
||||
- url_link = link_to('', help_page_path('user/group/import/direct_transfer_migrations', anchor: 'connect-the-source-gitlab-instance'), target: '_blank', rel: 'noopener noreferrer')
|
||||
- url_link = link_to('', help_page_path('user/group/import/direct_transfer_migrations.md', anchor: 'connect-the-source-gitlab-instance'), target: '_blank', rel: 'noopener noreferrer')
|
||||
= safe_format(s_('GroupsNew|Provide credentials for the %{url_link_start}source instance%{url_link_end} to import from. You can provide this instance as a source to move groups within this instance.'), tag_pair(url_link, :url_link_start, :url_link_end))
|
||||
.form-group.gl-form-group.gl-flex.gl-flex-col
|
||||
= f.label :bulk_import_gitlab_url, s_('GroupsNew|GitLab source instance base URL'), for: 'import_gitlab_url'
|
||||
|
|
@ -43,8 +43,8 @@
|
|||
.form-group.gl-form-group.gl-flex.gl-flex-col
|
||||
= f.label :bulk_import_gitlab_access_token, s_('GroupsNew|Personal access token'), for: 'import_gitlab_token', class: 'col-form-label'
|
||||
.gl-font-normal
|
||||
- pat_link = link_to('', help_page_path('user/profile/personal_access_tokens'), target: '_blank')
|
||||
- short_living_link = link_to('', help_page_path('security/tokens/index', anchor: 'security-considerations'), target: '_blank')
|
||||
- pat_link = link_to('', help_page_path('user/profile/personal_access_tokens.md'), target: '_blank')
|
||||
- short_living_link = link_to('', help_page_path('security/tokens/index.md', anchor: 'security-considerations'), target: '_blank')
|
||||
= safe_format(s_('GroupsNew|Create a token with %{code_start}api%{code_end} and %{code_start}read_repository%{code_end} scopes in the %{pat_link_start}user settings%{pat_link_end} of the source GitLab instance. For %{short_living_link_start}security reasons%{short_living_link_end}, set a short expiration date for the token. Keep in mind that large migrations take more time.'), tag_pair('<code></code>'.html_safe, :code_start , :code_end), tag_pair(pat_link, :pat_link_start, :pat_link_end), tag_pair(short_living_link, :short_living_link_start, :short_living_link_end))
|
||||
= f.password_field :bulk_import_gitlab_access_token, placeholder: s_('GroupsNew|e.g. h8d3f016698e...'), class: 'gl-form-input gl-mt-3 col-xs-12 col-sm-8',
|
||||
required: true,
|
||||
|
|
|
|||
|
|
@ -10,14 +10,14 @@
|
|||
alert_options: { class: 'gl-mb-5' },
|
||||
dismissible: false) do |c|
|
||||
- c.with_body do
|
||||
- docs_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path('user/group/import/index') }
|
||||
- docs_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path('user/group/import/index.md') }
|
||||
- link_end = '</a>'.html_safe
|
||||
= s_('GroupsNew|This feature is deprecated and replaced by group migration by direct transfer. %{docs_link_start}Learn more%{docs_link_end}.').html_safe % { docs_link_start: docs_link_start, docs_link_end: link_end }
|
||||
= render 'shared/groups/group_name_and_path_fields', f: f
|
||||
.form-group
|
||||
= f.label :file, s_('GroupsNew|Upload file')
|
||||
.gl-font-normal
|
||||
- import_export_link_start = '<a href="%{url}" target="_blank">'.html_safe % { url: help_page_path('user/project/settings/import_export', anchor: 'migrate-groups-by-uploading-an-export-file-deprecated') }
|
||||
- import_export_link_start = '<a href="%{url}" target="_blank">'.html_safe % { url: help_page_path('user/project/settings/import_export.md', anchor: 'migrate-groups-by-uploading-an-export-file-deprecated') }
|
||||
= s_('GroupsNew|To import a group, navigate to the group settings for the GitLab source instance, %{link_start}generate an export file%{link_end}, and upload it here.').html_safe % { link_start: import_export_link_start, link_end: '</a>'.html_safe }
|
||||
.gl-mt-3
|
||||
= render 'shared/file_picker_button', f: f, field: :file, help_text: nil
|
||||
|
|
|
|||
|
|
@ -3,4 +3,4 @@
|
|||
.js-invite-members-modal{ data: { is_project: 'false',
|
||||
access_levels: access_level_roles_user_can_assign(group, group.access_level_roles).to_json,
|
||||
reload_page_on_submit: current_path?('group_members#index').to_s,
|
||||
help_link: help_page_url('user/permissions') }.merge(common_invite_modal_dataset(group)).merge(users_filter_data(group)) }
|
||||
help_link: help_page_url('user/permissions.md') }.merge(common_invite_modal_dataset(group)).merge(users_filter_data(group)) }
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
= _('Visibility level')
|
||||
%p
|
||||
= _('Who will be able to see this group?')
|
||||
= link_to _('View the documentation'), help_page_path("user/public_access"), target: '_blank', rel: 'noopener noreferrer'
|
||||
= link_to _('View the documentation'), help_page_path("user/public_access.md"), target: '_blank', rel: 'noopener noreferrer'
|
||||
= render 'shared/visibility_level', f: f, visibility_level: default_group_visibility, can_change_visibility_level: true, form_model: @group, with_label: false
|
||||
|
||||
- unless parent
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
expanded: true) do |c|
|
||||
- c.with_description do
|
||||
= _('Update your group name, description, avatar, and visibility.')
|
||||
= link_to _('Learn more about groups.'), help_page_path('user/group/index')
|
||||
= link_to _('Learn more about groups.'), help_page_path('user/group/index.md')
|
||||
- c.with_body do
|
||||
= render 'groups/settings/general'
|
||||
|
||||
|
|
@ -39,7 +39,7 @@
|
|||
expanded: expanded) do |c|
|
||||
- c.with_description do
|
||||
= s_('GroupSettings|Customize this group\'s badges.')
|
||||
= link_to s_('GroupSettings|What are badges?'), help_page_path('user/project/badges')
|
||||
= link_to s_('GroupSettings|What are badges?'), help_page_path('user/project/badges.md')
|
||||
- c.with_body do
|
||||
= render 'shared/badges/badge_settings'
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
= f.label :description, _("Description")
|
||||
- @gfm_form = true
|
||||
.js-markdown-editor{ data: { render_markdown_path: group_preview_markdown_path,
|
||||
markdown_docs_path: help_page_path('user/markdown'),
|
||||
markdown_docs_path: help_page_path('user/markdown.md'),
|
||||
testid: 'milestone-description-field',
|
||||
form_field_placeholder: _('Write milestone description...'),
|
||||
supports_quick_actions: 'false',
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
= render Pajamas::ButtonComponent.new(href: new_group_milestone_path(@group), variant: :confirm, button_options: { data: { testid: "new-group-milestone-link" }, class: "gl-ml-3" }) do
|
||||
= _('New milestone')
|
||||
- if @milestones.blank?
|
||||
= render 'shared/empty_states/milestones_tab', learn_more_path: help_page_path('user/project/milestones/index') do
|
||||
= render 'shared/empty_states/milestones_tab', learn_more_path: help_page_path('user/project/milestones/index.md') do
|
||||
- if can?(current_user, :admin_milestone, @group)
|
||||
= render Pajamas::ButtonComponent.new(href: new_group_milestone_path(@group), variant: :confirm, button_options: { data: { testid: "new-group-milestone-link" }}) do
|
||||
= _('New milestone')
|
||||
|
|
@ -27,7 +27,7 @@
|
|||
= render 'milestone', milestone: milestone
|
||||
= paginate @milestones, theme: "gitlab"
|
||||
- else
|
||||
= render 'shared/empty_states/milestones', learn_more_path: help_page_path('user/project/milestones/index') do
|
||||
= render 'shared/empty_states/milestones', learn_more_path: help_page_path('user/project/milestones/index.md') do
|
||||
- if can?(current_user, :admin_milestone, @group)
|
||||
= render Pajamas::ButtonComponent.new(href: new_group_milestone_path(@group), variant: :confirm, button_options: { data: { testid: "new-group-milestone-link" }}) do
|
||||
= _('New milestone')
|
||||
|
|
|
|||
|
|
@ -3,14 +3,14 @@
|
|||
|
||||
%section
|
||||
#js-container-registry{ data: { endpoint: group_container_registries_path(@group),
|
||||
"help_page_path" => help_page_path('user/packages/container_registry/index'),
|
||||
"two_factor_auth_help_link" => help_page_path('user/profile/account/two_factor_authentication'),
|
||||
"personal_access_tokens_help_link" => help_page_path('user/profile/personal_access_tokens'),
|
||||
"help_page_path" => help_page_path('user/packages/container_registry/index.md'),
|
||||
"two_factor_auth_help_link" => help_page_path('user/profile/account/two_factor_authentication.md'),
|
||||
"personal_access_tokens_help_link" => help_page_path('user/profile/personal_access_tokens.md'),
|
||||
"no_containers_image" => image_path('illustrations/docker-empty-state.svg'),
|
||||
"containers_error_image" => image_path('illustrations/docker-error-state.svg'),
|
||||
"registry_host_url_with_port" => escape_once(registry_config.host_port),
|
||||
"garbage_collection_help_page_path" => help_page_path('administration/packages/container_registry', anchor: 'container-registry-garbage-collection'),
|
||||
"run_cleanup_policies_help_page_path" => help_page_path('administration/packages/container_registry', anchor: 'run-the-cleanup-policy-now'),
|
||||
"garbage_collection_help_page_path" => help_page_path('administration/packages/container_registry.md', anchor: 'container-registry-garbage-collection'),
|
||||
"run_cleanup_policies_help_page_path" => help_page_path('administration/packages/container_registry.md', anchor: 'run-the-cleanup-policy-now'),
|
||||
"is_admin": current_user&.admin.to_s,
|
||||
is_group_page: "true",
|
||||
"group_path": @group.full_path,
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
%h4.gl-text-base.gl-leading-24.gl-m-0= s_('GroupSettings|Change group URL')
|
||||
%p.gl-text-subtle.gl-text-sm.gl-m-0
|
||||
= s_("GroupSettings|Changing a group's URL can have unintended side effects.")
|
||||
#{link_to _('Learn more'), help_page_path('user/group/manage', anchor: 'change-a-groups-path'), target: '_blank', rel: 'noopener noreferrer'}.
|
||||
#{link_to _('Learn more'), help_page_path('user/group/manage.md', anchor: 'change-a-groups-path'), target: '_blank', rel: 'noopener noreferrer'}.
|
||||
|
||||
- c.with_body do
|
||||
= gitlab_ui_form_for @group, html: { multipart: true, class: 'gl-show-field-errors' }, authenticity_token: true do |f|
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
- c.with_body do
|
||||
= render Pajamas::AlertComponent.new(variant: :warning, dismissible: false, alert_options: { class: 'gl-mb-4' }) do |c|
|
||||
- c.with_body do
|
||||
- docs_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path('user/group/import/index') }
|
||||
- docs_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path('user/group/import/index.md') }
|
||||
- docs_link_end = '</a>'.html_safe
|
||||
= s_('GroupsNew|This feature is deprecated and replaced by group migration by direct transfer. %{docs_link_start}Learn more%{docs_link_end}.').html_safe % { docs_link_start: docs_link_start, docs_link_end: docs_link_end }
|
||||
%p
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
- docs_link_url = help_page_path('topics/git/lfs/index')
|
||||
- docs_link_url = help_page_path('topics/git/lfs/index.md')
|
||||
- docs_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: docs_link_url }
|
||||
|
||||
%h5= _('Large File Storage')
|
||||
|
|
|
|||
|
|
@ -3,6 +3,6 @@
|
|||
- if group.linked_to_subscription?
|
||||
= render Pajamas::AlertComponent.new(variant: :tip, dismissible: false, alert_options: { class: 'gl-mb-5', data: { testid: 'group-has-linked-subscription-alert' }}) do |c|
|
||||
- c.with_body do
|
||||
= html_escape(_("This group can't be removed because it is linked to a subscription. To remove this group, %{linkStart}link the subscription%{linkEnd} with a different group.")) % { linkStart: "<a href=\"#{help_page_path('subscriptions/gitlab_com/index', anchor: 'change-the-linked-group')}\">".html_safe, linkEnd: '</a>'.html_safe }
|
||||
= html_escape(_("This group can't be removed because it is linked to a subscription. To remove this group, %{linkStart}link the subscription%{linkEnd} with a different group.")) % { linkStart: "<a href=\"#{help_page_path('subscriptions/gitlab_com/index.md', anchor: 'change-the-linked-group')}\">".html_safe, linkEnd: '</a>'.html_safe }
|
||||
|
||||
.js-confirm-danger{ data: group_confirm_modal_data(group: group, remove_form_id: remove_form_id) }
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
- c.with_body do
|
||||
= form_for group, url: transfer_group_path(group), method: :put, html: { id: form_id, class: 'js-group-transfer-form' } do |f|
|
||||
%ul
|
||||
- learn_more_link = help_page_url('user/project/repository/index', anchor: 'repository-path-changes')
|
||||
- learn_more_link = help_page_url('user/project/repository/index.md', anchor: 'repository-path-changes')
|
||||
- learn_more_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: learn_more_link }
|
||||
- warning_text = s_("GroupSettings|Be careful. Changing a group's parent can have unintended side effects. %{learn_more_link_start}Learn more.%{learn_more_link_end}") % { learn_more_link_start: learn_more_link_start, learn_more_link_end: '</a>'.html_safe }
|
||||
%li= warning_text.html_safe
|
||||
|
|
@ -21,5 +21,5 @@
|
|||
- if group.paid?
|
||||
= render Pajamas::AlertComponent.new(variant: :tip, dismissible: false, alert_options: { class: 'gl-mb-5' }) do |c|
|
||||
- c.with_body do
|
||||
= html_escape(_("This group can't be transferred because it is linked to a subscription. To transfer this group, %{linkStart}link the subscription%{linkEnd} with a different group.")) % { linkStart: "<a href=\"#{help_page_path('subscriptions/gitlab_com/index', anchor: 'change-the-linked-group')}\">".html_safe, linkEnd: '</a>'.html_safe }
|
||||
= html_escape(_("This group can't be transferred because it is linked to a subscription. To transfer this group, %{linkStart}link the subscription%{linkEnd} with a different group.")) % { linkStart: "<a href=\"#{help_page_path('subscriptions/gitlab_com/index.md', anchor: 'change-the-linked-group')}\">".html_safe, linkEnd: '</a>'.html_safe }
|
||||
.js-transfer-group-form{ data: initial_data }
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
.form-group
|
||||
= render Pajamas::CardComponent.new(card_options: { class: 'gl-mb-3' }) do |c|
|
||||
- c.with_body do
|
||||
- learn_more_link = link_to _('Learn more.'), help_page_path('topics/autodevops/index'), target: '_blank', rel: 'noopener noreferrer'
|
||||
- learn_more_link = link_to _('Learn more.'), help_page_path('topics/autodevops/index.md'), target: '_blank', rel: 'noopener noreferrer'
|
||||
- help_text = s_('GroupSettings|The Auto DevOps pipeline runs if no alternative CI configuration file is found.')
|
||||
- badge = gl_badge_tag badge_for_auto_devops_scope(group), variant: :info
|
||||
- label = s_('GroupSettings|Default to Auto DevOps pipeline for all projects within this group')
|
||||
|
|
|
|||
|
|
@ -7,5 +7,5 @@
|
|||
= f.number_field :max_artifacts_size, class: 'form-control'
|
||||
%p.form-text.text-muted
|
||||
= _("The maximum file size in megabytes for individual job artifacts.")
|
||||
= link_to _('Learn more.'), help_page_path('administration/settings/continuous_integration', anchor: 'maximum-artifacts-size'), target: '_blank', rel: 'noopener noreferrer'
|
||||
= link_to _('Learn more.'), help_page_path('administration/settings/continuous_integration.md', anchor: 'maximum-artifacts-size'), target: '_blank', rel: 'noopener noreferrer'
|
||||
= f.submit _('Save changes'), pajamas_button: true
|
||||
|
|
|
|||
|
|
@ -42,8 +42,8 @@
|
|||
id: 'auto-devops-settings',
|
||||
expanded: expanded) do |c|
|
||||
- c.with_description do
|
||||
- auto_devops_url = help_page_path('topics/autodevops/index')
|
||||
- quickstart_url = help_page_path('topics/autodevops/cloud_deployments/auto_devops_with_gke')
|
||||
- auto_devops_url = help_page_path('topics/autodevops/index.md')
|
||||
- quickstart_url = help_page_path('topics/autodevops/cloud_deployments/auto_devops_with_gke.md')
|
||||
- auto_devops_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: auto_devops_url }
|
||||
- quickstart_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: quickstart_url }
|
||||
= html_escape(s_('AutoDevOps|%{auto_devops_start}Automate building, testing, and deploying%{auto_devops_end} your applications based on your continuous integration and delivery configuration. %{quickstart_start}How do I get started?%{quickstart_end}')) % { auto_devops_start: auto_devops_start, auto_devops_end: '</a>'.html_safe, quickstart_start: quickstart_start, quickstart_end: '</a>'.html_safe }
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
- c.with_body do
|
||||
= pending_reassignment_presenter.body
|
||||
- c.with_actions do
|
||||
= render Pajamas::ButtonComponent.new(variant: :default, href: help_page_path('user/project/import/index', anchor: 'placeholder-users'), button_options: { class: 'deferred-link gl-alert-action', rel: 'noreferrer noopener' }, target: '_blank') do
|
||||
= render Pajamas::ButtonComponent.new(variant: :default, href: help_page_path('user/project/import/index.md', anchor: 'placeholder-users'), button_options: { class: 'deferred-link gl-alert-action', rel: 'noreferrer noopener' }, target: '_blank') do
|
||||
= _('Learn more')
|
||||
|
||||
#import-history-mount-element{ data: { id: @bulk_import&.id, details_path: failures_import_bulk_import_path(':id', ':entity_id'), realtime_changes_path: realtime_changes_import_bulk_imports_path(format: :json) } }
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@
|
|||
- else
|
||||
%li= safe_format(s_('GithubImporter|%{code_start}repo%{code_end}: Used to display a list of your public and private repositories that are available to import from.'), code_pair)
|
||||
%li= safe_format(s_('GithubImporter|%{code_start}read:org%{code_end} (optional): Used to import collaborators from GitHub repositories, or if your project has Git LFS files.'), code_pair)
|
||||
- docs_link = link_to('', help_page_path('user/project/import/github', anchor: 'use-a-github-personal-access-token'), target: '_blank', rel: 'noopener noreferrer')
|
||||
- docs_link = link_to('', help_page_path('user/project/import/github.md', anchor: 'use-a-github-personal-access-token'), target: '_blank', rel: 'noopener noreferrer')
|
||||
- docs_link_tag_pair = tag_pair(docs_link, :link_start, :link_end)
|
||||
= safe_format(s_('GithubImport|%{link_start}Learn more%{link_end}.'), docs_link_tag_pair)
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
= file_field_tag :manifest, class: 'form-control-file w-auto', required: true
|
||||
.form-text.text-muted
|
||||
= _('Import multiple repositories by uploading a manifest file.')
|
||||
= link_to sprite_icon('question-o'), help_page_path('user/project/import/manifest')
|
||||
= link_to sprite_icon('question-o'), help_page_path('user/project/import/manifest.md')
|
||||
|
||||
.gl-mb-3
|
||||
= render Pajamas::ButtonComponent.new(type: :submit, variant: :confirm) do
|
||||
|
|
|
|||
|
|
@ -8,6 +8,6 @@
|
|||
destination_group: link_to(source_user.namespace.name, group_path(source_user.namespace)))
|
||||
- c.with_actions do
|
||||
= render Pajamas::ButtonComponent.new(variant: :default,
|
||||
href: help_page_path('user/project/import/index', anchor: 'accept-contribution-reassignment'),
|
||||
href: help_page_path('user/project/import/index.md', anchor: 'accept-contribution-reassignment'),
|
||||
button_options: { class: 'deferred-link gl-alert-action', rel: 'noreferrer noopener' }, target: '_blank') do
|
||||
= _('Learn more')
|
||||
|
|
|
|||
|
|
@ -3,6 +3,6 @@
|
|||
= s_('UserMapping|You might have already accepted or rejected the reassignment, or it might have been canceled by the group owner.')
|
||||
- c.with_actions do
|
||||
= render Pajamas::ButtonComponent.new(variant: :default,
|
||||
href: help_page_path('user/project/import/index', anchor: 'accept-contribution-reassignment'),
|
||||
href: help_page_path('user/project/import/index.md', anchor: 'accept-contribution-reassignment'),
|
||||
button_options: { class: 'deferred-link gl-alert-action', rel: 'noreferrer noopener' }, target: '_blank') do
|
||||
= _('Learn more')
|
||||
|
|
|
|||
|
|
@ -8,6 +8,6 @@
|
|||
destination_group: source_user.namespace.name)
|
||||
- c.with_actions do
|
||||
= render Pajamas::ButtonComponent.new(variant: :default,
|
||||
href: help_page_path('user/project/import/index', anchor: 'accept-contribution-reassignment'),
|
||||
href: help_page_path('user/project/import/index.md', anchor: 'accept-contribution-reassignment'),
|
||||
button_options: { class: 'deferred-link gl-alert-action', rel: 'noreferrer noopener' }, target: '_blank') do
|
||||
= _('Learn more')
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
source_hostname: source_hostname,
|
||||
destination_group: destination_group)
|
||||
= succeed '.' do
|
||||
= link_to s_('UserMapping|Learn more about reassignments'), help_page_path('user/project/import/index', anchor: 'accept-contribution-reassignment')
|
||||
= link_to s_('UserMapping|Learn more about reassignments'), help_page_path('user/project/import/index.md', anchor: 'accept-contribution-reassignment')
|
||||
%h5
|
||||
= s_('UserMapping|Import details:')
|
||||
%p.gl-mb-5
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
alert_options: { class: 'gl-my-5' },
|
||||
close_button_options: { class: 'js-close-2fa-enabled-success-alert' }) do |c|
|
||||
- c.with_body do
|
||||
= html_escape(_('You have set up 2FA for your account! If you lose access to your 2FA device, you can use your recovery codes to access your account. Alternatively, if you upload an SSH key, you can %{anchorOpen}use that key to generate additional recovery codes%{anchorClose}.')) % { anchorOpen: '<a href="%{href}">'.html_safe % { href: help_page_path('user/profile/account/two_factor_authentication_troubleshooting', anchor: 'generate-new-recovery-codes-using-ssh') }, anchorClose: '</a>'.html_safe }
|
||||
= html_escape(_('You have set up 2FA for your account! If you lose access to your 2FA device, you can use your recovery codes to access your account. Alternatively, if you upload an SSH key, you can %{anchorOpen}use that key to generate additional recovery codes%{anchorClose}.')) % { anchorOpen: '<a href="%{href}">'.html_safe % { href: help_page_path('user/profile/account/two_factor_authentication_troubleshooting.md', anchor: 'generate-new-recovery-codes-using-ssh') }, anchorClose: '</a>'.html_safe }
|
||||
|
||||
.settings-section.js-search-settings-section
|
||||
.settings-sticky-header
|
||||
|
|
@ -53,7 +53,7 @@
|
|||
%p.gl-text-secondary
|
||||
= s_('Profiles|Changing your username can have unintended side effects.')
|
||||
= succeed '.' do
|
||||
= link_to _('Learn more'), help_page_path('user/profile/index', anchor: 'change-your-username'), target: '_blank', rel: 'noopener noreferrer'
|
||||
= link_to _('Learn more'), help_page_path('user/profile/index.md', anchor: 'change-your-username'), target: '_blank', rel: 'noopener noreferrer'
|
||||
- data = { initial_username: current_user.username, root_url: root_url, action_url: update_username_profile_path(format: :json) }
|
||||
#update-username{ data: data }
|
||||
|
||||
|
|
|
|||
|
|
@ -11,6 +11,6 @@
|
|||
|
||||
.gl-flex.gl-gap-3.gl-flex-wrap
|
||||
- if setting
|
||||
.js-vue-notification-dropdown{ data: { disabled: emails_disabled.to_s, dropdown_items: notification_dropdown_items(setting).to_json, notification_level: setting.level, help_page_path: help_page_path('user/profile/notifications'), group_id: group.id, show_label: "true" } }
|
||||
.js-vue-notification-dropdown{ data: { disabled: emails_disabled.to_s, dropdown_items: notification_dropdown_items(setting).to_json, notification_level: setting.level, help_page_path: help_page_path('user/profile/notifications.md'), group_id: group.id, show_label: "true" } }
|
||||
= form_for setting, url: profile_group_notifications_path(group), method: :put, html: { class: 'update-notifications gl-flex' } do |f|
|
||||
.js-notification-email-listbox-input{ data: { name: 'notification_setting[notification_email]', emails: @user.public_verified_emails.to_json, empty_value_text: _('Global notification email') , value: setting.notification_email, placement: 'bottom-end' } }
|
||||
|
|
|
|||
|
|
@ -11,4 +11,4 @@
|
|||
|
||||
.gl-flex.gl-gap-3.gl-flex-wrap
|
||||
- if setting
|
||||
.js-vue-notification-dropdown{ data: { disabled: emails_disabled.to_s, dropdown_items: notification_dropdown_items(setting).to_json, notification_level: setting.level, help_page_path: help_page_path('user/profile/notifications'), project_id: project.id, container_class: 'gl-mr-3', show_label: "true" } }
|
||||
.js-vue-notification-dropdown{ data: { disabled: emails_disabled.to_s, dropdown_items: notification_dropdown_items(setting).to_json, notification_level: setting.level, help_page_path: help_page_path('user/profile/notifications.md'), project_id: project.id, container_class: 'gl-mr-3', show_label: "true" } }
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
|
||||
.form-group.global-notification-setting.gl-mb-3
|
||||
- if @global_notification_setting
|
||||
.js-vue-notification-dropdown{ data: { dropdown_items: notification_dropdown_items(@global_notification_setting).to_json, notification_level: @global_notification_setting.level, help_page_path: help_page_path('user/profile/notifications'), show_label: 'true' } }
|
||||
.js-vue-notification-dropdown{ data: { dropdown_items: notification_dropdown_items(@global_notification_setting).to_json, notification_level: @global_notification_setting.level, help_page_path: help_page_path('user/profile/notifications.md'), show_label: 'true' } }
|
||||
|
||||
= gitlab_ui_form_for @user, url: profile_notifications_path, method: :put do |f|
|
||||
.form-group
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@
|
|||
%p.gl-text-secondary
|
||||
= s_('Preferences|Customize the appearance of the syntax.')
|
||||
= succeed '.' do
|
||||
= link_to _('Learn more'), help_page_path('user/profile/preferences', anchor: 'change-the-syntax-highlighting-theme'), target: '_blank', rel: 'noopener noreferrer'
|
||||
= link_to _('Learn more'), help_page_path('user/profile/preferences.md', anchor: 'change-the-syntax-highlighting-theme'), target: '_blank', rel: 'noopener noreferrer'
|
||||
.syntax-theme.row
|
||||
- Gitlab::ColorSchemes.each do |scheme|
|
||||
%label.col-6.col-sm-4.col-md-3.col-lg-auto.gl-mb-5
|
||||
|
|
@ -76,11 +76,11 @@
|
|||
%p.gl-text-secondary
|
||||
= s_('Preferences|Customize the behavior of the system layout and default views.')
|
||||
= succeed '.' do
|
||||
= link_to _('Learn more'), help_page_path('user/profile/preferences', anchor: 'behavior'), target: '_blank', rel: 'noopener noreferrer'
|
||||
= link_to _('Learn more'), help_page_path('user/profile/preferences.md', anchor: 'behavior'), target: '_blank', rel: 'noopener noreferrer'
|
||||
.form-group
|
||||
= f.label :layout, class: 'label-bold' do
|
||||
= s_('Preferences|Keyboard shortcuts')
|
||||
- shortcuts_help_link = link_to('', help_page_path('user/shortcuts'), target: '_blank', rel: 'noopener noreferrer')
|
||||
- shortcuts_help_link = link_to('', help_page_path('user/shortcuts.md'), target: '_blank', rel: 'noopener noreferrer')
|
||||
= f.gitlab_ui_checkbox_component :keyboard_shortcuts_enabled,
|
||||
s_('Preferences|Enable keyboard shortcuts'),
|
||||
help_text: safe_format(s_('Preferences|%{link_start}List of keyboard shortcuts%{link_end}'), tag_pair(shortcuts_help_link, :link_start, :link_end))
|
||||
|
|
@ -141,11 +141,11 @@
|
|||
%p.gl-text-secondary
|
||||
= _('Customize language and region related settings.')
|
||||
= succeed '.' do
|
||||
= link_to _('Learn more'), help_page_path('user/profile/preferences', anchor: 'localization'), target: '_blank', rel: 'noopener noreferrer'
|
||||
= link_to _('Learn more'), help_page_path('user/profile/preferences.md', anchor: 'localization'), target: '_blank', rel: 'noopener noreferrer'
|
||||
|
||||
.js-listbox-input{ data: { label: _('Language'), description: s_('Preferences|This feature is experimental and translations are not yet complete.'), name: 'user[preferred_language]', items: language_choices.to_json, value: current_user.preferred_language, block: true.to_s, toggle_class: 'gl-form-input-xl' } }
|
||||
%p.-gl-mt-5
|
||||
= link_to help_page_url('development/i18n/translation'), class: 'text-nowrap', target: '_blank', rel: 'noopener noreferrer' do
|
||||
= link_to help_page_url('development/i18n/translation.md'), class: 'text-nowrap', target: '_blank', rel: 'noopener noreferrer' do
|
||||
= _("Help translate GitLab into your language")
|
||||
%span{ aria: { label: _('Open new window') } }
|
||||
= sprite_icon('external-link')
|
||||
|
|
@ -162,7 +162,7 @@
|
|||
%p.gl-text-secondary
|
||||
= s_('Preferences|Configure how dates and times display for you.')
|
||||
= succeed '.' do
|
||||
= link_to _('Learn more'), help_page_path('user/profile/preferences', anchor: 'show-exact-times-instead-of-relative-times'), target: '_blank', rel: 'noopener noreferrer'
|
||||
= link_to _('Learn more'), help_page_path('user/profile/preferences.md', anchor: 'show-exact-times-instead-of-relative-times'), target: '_blank', rel: 'noopener noreferrer'
|
||||
.form-group
|
||||
= f.gitlab_ui_checkbox_component :time_display_relative,
|
||||
s_('Preferences|Use relative times'),
|
||||
|
|
@ -181,7 +181,7 @@
|
|||
%p.gl-text-secondary
|
||||
= s_('Preferences|Turns on or off the ability to follow or be followed by other users.')
|
||||
= succeed '.' do
|
||||
= link_to _('Learn more'), help_page_path('user/profile/index', anchor: 'follow-users'), target: '_blank', rel: 'noopener noreferrer'
|
||||
= link_to _('Learn more'), help_page_path('user/profile/index.md', anchor: 'follow-users'), target: '_blank', rel: 'noopener noreferrer'
|
||||
.form-group
|
||||
= f.gitlab_ui_checkbox_component :enabled_following,
|
||||
s_('Preferences|Enable follow users')
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
- git_push_target = ''
|
||||
- if protocol == 'ssh'
|
||||
- ssh_doc = link_to('', help_page_path('user/ssh'), target: '_blank', rel: 'noopener noreferrer')
|
||||
- ssh_doc = link_to('', help_page_path('user/ssh.md'), target: '_blank', rel: 'noopener noreferrer')
|
||||
%p.gl-mt-2= safe_format(_('%{link}How to use SSH keys%{link_end}?'), tag_pair(ssh_doc, :link, :link_end))
|
||||
- git_push_target = content_tag(:span, ssh_clone_url_to_repo(@project), class: 'js-clone')
|
||||
- if protocol == 'https'
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
- c.with_body do
|
||||
%p
|
||||
- link = link_to('', help_page_path('user/project/settings/import_export'), target: '_blank', rel: 'noopener noreferrer')
|
||||
- link = link_to('', help_page_path('user/project/settings/import_export.md'), target: '_blank', rel: 'noopener noreferrer')
|
||||
= safe_format(_('Export this project with all its related data in order to move it to a new GitLab instance. When the exported file is ready, you can download it from this page or from the download link in the email notification you will receive. You can then import it when creating a new project. %{link_start}Learn more.%{link_end}'), tag_pair(link, :link_start, :link_end))
|
||||
.gl-mb-0
|
||||
%p.gl-font-bold= _('The following items will be exported:')
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
alert_options: { class: 'gl-my-3' },
|
||||
dismissible: false) do |c|
|
||||
- c.with_body do
|
||||
- docs_link_url = help_page_path('user/group/import/index') + '#migrate-groups-by-direct-transfer-recommended'
|
||||
- docs_link_url = help_page_path('user/group/import/index.md') + '#migrate-groups-by-direct-transfer-recommended'
|
||||
- docs_link = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: docs_link_url }
|
||||
= html_escape(_("Importing GitLab projects? Migrating GitLab projects when migrating groups by direct transfer is in Beta. %{link_start}Learn more.%{link_end}")) % { link_start: docs_link, link_end: '</a>'.html_safe }
|
||||
.import-buttons
|
||||
|
|
|
|||
|
|
@ -3,4 +3,4 @@
|
|||
.js-invite-members-modal{ data: { is_project: 'true',
|
||||
access_levels: ProjectMember.permissible_access_level_roles(current_user, project).to_json,
|
||||
reload_page_on_submit: current_path?('project_members#index').to_s,
|
||||
help_link: help_page_url('user/permissions') }.merge(common_invite_modal_dataset(project)).merge(users_filter_data(project.group)) }
|
||||
help_link: help_page_url('user/permissions.md') }.merge(common_invite_modal_dataset(project)).merge(users_filter_data(project.group)) }
|
||||
|
|
|
|||
|
|
@ -2,4 +2,4 @@
|
|||
= render Pajamas::AlertComponent.new(variant: :warning, dismissible: false, alert_options: { class: 'gl-hidden sm:gl-block' }) do |c|
|
||||
- c.with_body do
|
||||
= _('Possible LFS configuration issue. This project contains LFS objects but there is no .gitattributes file. You can ignore this message if you recently added a `.gitattributes` file.')
|
||||
= link_to('Learn more.', help_page_path('topics/git/lfs/index'), target: '_blank', rel: 'noopener noreferrer')
|
||||
= link_to('Learn more.', help_page_path('topics/git/lfs/index.md'), target: '_blank', rel: 'noopener noreferrer')
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@
|
|||
= render Pajamas::AlertComponent.new(dismissible: false,
|
||||
variant: :success) do |c|
|
||||
- c.with_body do
|
||||
- help_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path('user/profile/index', anchor: 'add-details-to-your-profile-with-a-readme') }
|
||||
- help_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path('user/profile/index.md', anchor: 'add-details-to-your-profile-with-a-readme') }
|
||||
= html_escape(_('%{project_path} is a project that you can use to add a README to your GitLab profile. Create a public project and initialize the repository with a README to get started. %{help_link_start}Learn more%{help_link_end}.')) % { project_path: "<strong>#{current_user.username} / #{current_user.username}</strong>".html_safe, help_link_start: help_link_start, help_link_end: '</a>'.html_safe }
|
||||
|
||||
- if include_description
|
||||
|
|
@ -67,7 +67,7 @@
|
|||
.form-group.gl-form-group
|
||||
= f.label :visibility_level, class: 'label-bold' do
|
||||
= s_('ProjectsNew|Visibility Level')
|
||||
= link_to sprite_icon('question-o'), help_page_path('user/public_access'), aria: { label: 'Documentation for Visibility Level' }, target: '_blank', rel: 'noopener noreferrer'
|
||||
= link_to sprite_icon('question-o'), help_page_path('user/public_access.md'), aria: { label: 'Documentation for Visibility Level' }, target: '_blank', rel: 'noopener noreferrer'
|
||||
= render 'shared/visibility_level', f: f, visibility_level: visibility_level.to_i, can_change_visibility_level: true, form_model: @project, with_label: false, data: { testid: 'visibility-radios'}
|
||||
|
||||
- if !hide_init_with_readme
|
||||
|
|
@ -90,7 +90,7 @@
|
|||
= s_('ProjectsNew|Enable Static Application Security Testing (SAST)')
|
||||
- c.with_help_text do
|
||||
= s_('ProjectsNew|Analyze your source code for known security vulnerabilities.')
|
||||
= link_to _('Learn more.'), help_page_path('user/application_security/sast/index'), target: '_blank', rel: 'noopener noreferrer', data: { track_action: 'followed' }
|
||||
= link_to _('Learn more.'), help_page_path('user/application_security/sast/index.md'), target: '_blank', rel: 'noopener noreferrer', data: { track_action: 'followed' }
|
||||
|
||||
- if display_sha256_repository
|
||||
#js-experimental-setting-accordion.form-group.gl-mb-6
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
testid: 'service-desk-content',
|
||||
expanded: expanded_by_default?) do |c|
|
||||
- c.with_description do
|
||||
- link_start = "<a href='#{help_page_path('user/project/service_desk/index')}' target='_blank' rel='noopener noreferrer'>".html_safe
|
||||
- link_start = "<a href='#{help_page_path('user/project/service_desk/index.md')}' target='_blank' rel='noopener noreferrer'>".html_safe
|
||||
= _('Enable and disable Service Desk. Some additional configuration might be required. %{link_start}Learn more%{link_end}.').html_safe % { link_start: link_start, link_end: '</a>'.html_safe }
|
||||
- c.with_body do
|
||||
- if ::Gitlab::ServiceDesk.supported?
|
||||
|
|
|
|||
|
|
@ -8,14 +8,14 @@
|
|||
.gl-flex.gl-grow
|
||||
%h4.gl-text-base.gl-leading-24.gl-m-0= _('Transfer project')
|
||||
%p.gl-text-subtle.gl-text-sm.gl-m-0
|
||||
- link = link_to('', help_page_path('user/project/settings/migrate_projects', anchor: 'transfer-a-project-to-another-namespace'), target: '_blank', rel: 'noopener noreferrer')
|
||||
- link = link_to('', help_page_path('user/project/settings/migrate_projects.md', anchor: 'transfer-a-project-to-another-namespace'), target: '_blank', rel: 'noopener noreferrer')
|
||||
= safe_format(_("Transfer your project into another namespace. %{link_start}Learn more.%{link_end}"), tag_pair(link, :link_start, :link_end))
|
||||
|
||||
- c.with_body do
|
||||
= form_for @project, url: transfer_project_path(@project), method: :put, html: { class: 'js-project-transfer-form', id: form_id } do |f|
|
||||
.form-group.gl-mb-0
|
||||
%p
|
||||
- link = link_to('', help_page_path('user/project/working_with_projects', anchor: 'rename-a-repository'), target: '_blank', rel: 'noopener noreferrer')
|
||||
- link = link_to('', help_page_path('user/project/working_with_projects.md', anchor: 'rename-a-repository'), target: '_blank', rel: 'noopener noreferrer')
|
||||
= safe_format(_("A project’s repository name defines its URL (the one you use to access the project via a browser) and its place on the file disk where GitLab is installed. %{link_start}Learn more.%{link_end}"), tag_pair(link, :link_start, :link_end))
|
||||
%p= _('When you transfer your project to a group, you can easily manage multiple projects, view usage quotas for storage, compute minutes, and users, and start a trial or upgrade to a paid tier.')
|
||||
%p
|
||||
|
|
|
|||
|
|
@ -6,4 +6,4 @@
|
|||
= s_('Pipelines|This GitLab CI configuration is invalid:')
|
||||
= viewer.validation_message(project: @project, sha: @commit.sha, user: @current_user)
|
||||
|
||||
= link_to _('Learn more'), help_page_path('ci/yaml/index')
|
||||
= link_to _('Learn more'), help_page_path('ci/yaml/index.md')
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
= gl_loading_icon(inline: true, css_class: "!gl-mr-2")
|
||||
= s_('Pipelines|Validating GitLab CI configuration…')
|
||||
|
||||
= link_to _('Learn more'), help_page_path('ci/yaml/index')
|
||||
= link_to _('Learn more'), help_page_path('ci/yaml/index.md')
|
||||
|
|
|
|||
|
|
@ -6,4 +6,4 @@
|
|||
This Route Map is invalid:
|
||||
= viewer.validation_message
|
||||
|
||||
= link_to _('Learn more'), help_page_path('ci/environments/index', anchor: 'go-from-source-files-to-public-pages')
|
||||
= link_to _('Learn more'), help_page_path('ci/environments/index.md', anchor: 'go-from-source-files-to-public-pages')
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
= gl_loading_icon(inline: true, css_class: "gl-mr-1")
|
||||
Validating Route Map…
|
||||
|
||||
= link_to _('Learn more'), help_page_path('ci/environments/index', anchor: 'go-from-source-files-to-public-pages')
|
||||
= link_to _('Learn more'), help_page_path('ci/environments/index.md', anchor: 'go-from-source-files-to-public-pages')
|
||||
|
|
|
|||
|
|
@ -10,6 +10,6 @@
|
|||
%p.form-text.text-muted
|
||||
= s_('ProjectSettings|Leave empty to use default template.')
|
||||
= sprintf(s_('ProjectSettings|Maximum %{maxLength} characters.'), { maxLength: Issue::MAX_BRANCH_TEMPLATE })
|
||||
- branch_name_help_link = help_page_path('user/project/repository/branches/index', anchor: 'name-your-branch')
|
||||
- branch_name_help_link = help_page_path('user/project/repository/branches/index.md', anchor: 'name-your-branch')
|
||||
= link_to _('What variables can I use?'), branch_name_help_link, target: "_blank"
|
||||
= render_if_exists 'projects/branch_defaults/branch_names_help'
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
- if change_default_disabled
|
||||
- tag_pair_security_policies_page = tag_pair(link_to('', namespace_project_security_policies_path, target: '_blank', rel: 'noopener noreferrer'), :security_policies_link_start, :security_policies_link_end)
|
||||
- tag_pair_security_policies_docs = tag_pair(link_to('', help_page_path('user/application_security/policies/scan-result-policies'), target: '_blank', rel: 'noopener noreferrer'), :learn_more_link_start, :learn_more_link_end)
|
||||
- tag_pair_security_policies_docs = tag_pair(link_to('', help_page_path('user/application_security/policies/scan-result-policies.md'), target: '_blank', rel: 'noopener noreferrer'), :learn_more_link_start, :learn_more_link_end)
|
||||
- popover_content = safe_format(s_("SecurityOrchestration|You can't change the default branch because its protection is enforced by one or more %{security_policies_link_start}security policies%{security_policies_link_end}. %{learn_more_link_start}Learn more%{learn_more_link_end}."), tag_pair_security_policies_docs, tag_pair_security_policies_page)
|
||||
- popover_title = s_("SecurityOrchestration|Security policy overwrites this setting")
|
||||
- popover_data = { container: 'body', toggle: 'popover', html: 'true', triggers: 'hover', title: popover_title, content: popover_content }
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
.form-group
|
||||
- help_text = _("When merge requests and commits in the default branch close, any issues they reference also close.")
|
||||
- help_icon = link_to sprite_icon('question-o'), help_page_path('user/project/issues/managing_issues', anchor: 'closing-issues-automatically'), target: '_blank', rel: 'noopener noreferrer'
|
||||
- help_icon = link_to sprite_icon('question-o'), help_page_path('user/project/issues/managing_issues.md', anchor: 'closing-issues-automatically'), target: '_blank', rel: 'noopener noreferrer'
|
||||
= f.gitlab_ui_checkbox_component :autoclose_referenced_issues,
|
||||
s_('ProjectSettings|Auto-close referenced issues on default branch'),
|
||||
help_text: (help_text + " " + help_icon).html_safe
|
||||
|
|
|
|||
|
|
@ -3,4 +3,4 @@
|
|||
|
||||
%h4.pt-3.pb-3= _("Validate your GitLab CI configuration")
|
||||
|
||||
#js-ci-lint{ data: { endpoint: project_ci_lint_path(@project), pipeline_simulation_help_page_path: help_page_path('ci/yaml/lint', anchor: 'simulate-a-pipeline') , lint_help_page_path: help_page_path('ci/yaml/lint', anchor: 'check-cicd-syntax') } }
|
||||
#js-ci-lint{ data: { endpoint: project_ci_lint_path(@project), pipeline_simulation_help_page_path: help_page_path('ci/yaml/lint.md', anchor: 'simulate-a-pipeline') , lint_help_page_path: help_page_path('ci/yaml/lint.md', anchor: 'check-cicd-syntax') } }
|
||||
|
|
|
|||
|
|
@ -19,17 +19,17 @@
|
|||
- elsif signature.x509?
|
||||
= render partial: "projects/commit/x509/certificate_details", locals: { signature: signature }
|
||||
|
||||
= link_to(_('Learn more about X.509 signed commits'), help_page_path('user/project/repository/signed_commits/x509'), class: 'gl-link gl-block')
|
||||
= link_to(_('Learn more about X.509 signed commits'), help_page_path('user/project/repository/signed_commits/x509.md'), class: 'gl-link gl-block')
|
||||
- elsif signature.ssh?
|
||||
= _('SSH key fingerprint:')
|
||||
%span.gl-font-monospace= signature.key_fingerprint_sha256 || _('Unknown')
|
||||
|
||||
= link_to(_('Learn about signing commits with SSH keys.'), help_page_path('user/project/repository/signed_commits/ssh'), class: 'gl-link gl-block gl-mt-3')
|
||||
= link_to(_('Learn about signing commits with SSH keys.'), help_page_path('user/project/repository/signed_commits/ssh.md'), class: 'gl-link gl-block gl-mt-3')
|
||||
- else
|
||||
= _('GPG Key ID:')
|
||||
%span.gl-font-monospace= signature.gpg_key_primary_keyid
|
||||
|
||||
= link_to(_('Learn about signing commits'), help_page_path('user/project/repository/signed_commits/index'), class: 'gl-link gl-block gl-mt-3')
|
||||
= link_to(_('Learn about signing commits'), help_page_path('user/project/repository/signed_commits/index.md'), class: 'gl-link gl-block gl-mt-3')
|
||||
|
||||
%a.signature-badge.gl-inline-block.gl-ml-4{ role: 'button', tabindex: 0, data: { toggle: 'popover', html: 'true', placement: 'top', title: title, content: content } }
|
||||
= gl_badge_tag label, variant: variant
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
- add_page_specific_style 'page_bundles/projects_edit'
|
||||
- reduce_visibility_form_id = 'reduce-visibility-form'
|
||||
- @force_desktop_expanded_sidebar = true
|
||||
- project_docs_path = help_page_path('user/project/working_with_projects')
|
||||
- project_docs_path = help_page_path('user/project/working_with_projects.md')
|
||||
- project_docs_link_start = '<a href="%{url}" target="_blank">'.html_safe % { url: project_docs_path }
|
||||
|
||||
%h1.gl-sr-only= @breadcrumb_title
|
||||
|
|
@ -36,7 +36,7 @@
|
|||
expanded: expanded_by_default?) do |c|
|
||||
- c.with_description do
|
||||
= s_('ProjectSettings|Add badges to display information about this project.')
|
||||
= link_to s_('ProjectSettings|What are badges?'), help_page_path('user/project/badges')
|
||||
= link_to s_('ProjectSettings|What are badges?'), help_page_path('user/project/badges.md')
|
||||
- c.with_body do
|
||||
= render 'shared/badges/badge_settings'
|
||||
|
||||
|
|
@ -61,13 +61,13 @@
|
|||
%h4.gl-text-base.gl-leading-24.gl-m-0= _('Housekeeping')
|
||||
%p.gl-text-subtle.gl-text-sm.gl-m-0
|
||||
= _('Runs a number of housekeeping tasks within the current repository, such as compressing file revisions and removing unreachable objects.')
|
||||
= link_to _('Learn more.'), help_page_path('administration/housekeeping'), target: '_blank', rel: 'noopener noreferrer'
|
||||
= link_to _('Learn more.'), help_page_path('administration/housekeeping.md'), target: '_blank', rel: 'noopener noreferrer'
|
||||
|
||||
- c.with_body do
|
||||
.gl-flex.gl-flex-wrap.gl-gap-3
|
||||
= render Pajamas::ButtonComponent.new(method: :post, href: housekeeping_project_path(@project)) do
|
||||
= _('Run housekeeping')
|
||||
#js-project-prune-unreachable-objects-button{ data: { prune_objects_path: housekeeping_project_path(@project, prune: true), prune_objects_doc_path: help_page_path('administration/housekeeping', anchor: 'prune-unreachable-objects') } }
|
||||
#js-project-prune-unreachable-objects-button{ data: { prune_objects_path: housekeeping_project_path(@project, prune: true), prune_objects_doc_path: help_page_path('administration/housekeeping.md', anchor: 'prune-unreachable-objects') } }
|
||||
|
||||
= render 'export', project: @project
|
||||
|
||||
|
|
@ -78,7 +78,7 @@
|
|||
.gl-flex.gl-grow
|
||||
%h4.gl-text-base.gl-leading-24.gl-m-0= _('Change path')
|
||||
%p.gl-text-subtle.gl-text-sm.gl-m-0
|
||||
- link = link_to('', help_page_path('user/project/working_with_projects', anchor: 'rename-a-repository'), target: '_blank', rel: 'noopener noreferrer')
|
||||
- link = link_to('', help_page_path('user/project/working_with_projects.md', anchor: 'rename-a-repository'), target: '_blank', rel: 'noopener noreferrer')
|
||||
= safe_format(_("A project’s repository name defines its URL (the one you use to access the project via a browser) and its place on the file disk where GitLab is installed. %{link_start}Learn more.%{link_end}"), tag_pair(link, :link_start, :link_end))
|
||||
|
||||
- c.with_body do
|
||||
|
|
|
|||
|
|
@ -34,8 +34,8 @@
|
|||
= _('You can also upload existing files from your computer using the instructions below.')
|
||||
.git-empty.js-git-empty
|
||||
%h3.gl-text-lg= _('Configure your Git identity')
|
||||
- git_get_started_doc = link_to('', help_page_path('topics/git/get_started'), target: '_blank', rel: 'noopener noreferrer')
|
||||
- git_config_doc = link_to('', help_page_path('topics/git/how_to_install_git/index', anchor: 'configure-git'), target: '_blank', rel: 'noopener noreferrer')
|
||||
- git_get_started_doc = link_to('', help_page_path('topics/git/get_started.md'), target: '_blank', rel: 'noopener noreferrer')
|
||||
- git_config_doc = link_to('', help_page_path('topics/git/how_to_install_git/index.md', anchor: 'configure-git'), target: '_blank', rel: 'noopener noreferrer')
|
||||
%p= safe_format(_("%{get_started}Get started with Git%{get_started_end} and learn %{git_config}how to configure it%{git_config_end}."), tag_pair(git_get_started_doc, :get_started, :get_started_end), tag_pair(git_config_doc, :git_config, :git_config_end))
|
||||
.scrolling-tabs-container.inner-page-scroll-tabs
|
||||
= gl_tabs_nav({ class: 'js-configure-git-tabs' }) do
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
"can-read-environment" => can?(current_user, :read_environment, @project).to_s,
|
||||
"can-create-environment" => can?(current_user, :create_environment, @project).to_s,
|
||||
"new-environment-path" => new_project_environment_path(@project),
|
||||
"help-page-path" => help_page_path("ci/environments/index"),
|
||||
"help-page-path" => help_page_path("ci/environments/index.md"),
|
||||
"project-path" => @project.full_path,
|
||||
"project-id" => @project.id,
|
||||
"default-branch-name" => @project.default_branch_or_main } }
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@
|
|||
"project-id" => @project.id,
|
||||
"project-name" => @project.name,
|
||||
"error-state-svg-path" => image_path('illustrations/empty-state/empty-feature-flag-md.svg'),
|
||||
"feature-flags-help-page-path" => help_page_path("operations/feature_flags"),
|
||||
"feature-flags-client-libraries-help-page-path" => help_page_path("operations/feature_flags", anchor: "choose-a-client-library"),
|
||||
"feature-flags-client-example-help-page-path" => help_page_path("operations/feature_flags", anchor: "go-application-example"),
|
||||
"feature-flags-help-page-path" => help_page_path("operations/feature_flags.md"),
|
||||
"feature-flags-client-libraries-help-page-path" => help_page_path("operations/feature_flags.md", anchor: "choose-a-client-library"),
|
||||
"feature-flags-client-example-help-page-path" => help_page_path("operations/feature_flags.md", anchor: "go-application-example"),
|
||||
"feature-flags-limit-exceeded" => @project.actual_limits.exceeded?(:project_feature_flags, @project.operations_feature_flags.count),
|
||||
"feature-flags-limit" => @project.actual_limits.project_feature_flags,
|
||||
"unleash-api-url" => (unleash_api_url(@project) if can?(current_user, :admin_feature_flag, @project)),
|
||||
|
|
|
|||
|
|
@ -9,6 +9,6 @@
|
|||
user_callouts_path: callouts_path,
|
||||
user_callout_id: Users::CalloutsHelper::FEATURE_FLAGS_NEW_VERSION,
|
||||
show_user_callout: show_feature_flags_new_version?.to_s,
|
||||
strategy_type_docs_page_path: help_page_path('operations/feature_flags', anchor: 'feature-flag-strategies'),
|
||||
environments_scope_docs_path: help_page_path('ci/environments/index', anchor: 'limit-the-environment-scope-of-a-cicd-variable'),
|
||||
strategy_type_docs_page_path: help_page_path('operations/feature_flags.md', anchor: 'feature-flag-strategies'),
|
||||
environments_scope_docs_path: help_page_path('ci/environments/index.md', anchor: 'limit-the-environment-scope-of-a-cicd-variable'),
|
||||
project_id: @project.id } }
|
||||
|
|
|
|||
|
|
@ -3,6 +3,6 @@
|
|||
- breadcrumb_title s_('FeatureFlags|Edit User List')
|
||||
- page_title s_('FeatureFlags|Edit User List')
|
||||
|
||||
#js-edit-user-list{ data: { 'user-lists-docs-path' => help_page_path('operations/feature_flags', anchor: 'user-list'),
|
||||
#js-edit-user-list{ data: { 'user-lists-docs-path' => help_page_path('operations/feature_flags.md', anchor: 'user-list'),
|
||||
'user-list-iid' => @user_list.iid,
|
||||
'project-id' => @project.id } }
|
||||
|
|
|
|||
|
|
@ -3,6 +3,6 @@
|
|||
- page_title s_('FeatureFlags|Feature flag User Lists')
|
||||
|
||||
#js-user-lists{ data: { project_id: @project.id,
|
||||
feature_flags_help_page_path: help_page_path("operations/feature_flags"),
|
||||
feature_flags_help_page_path: help_page_path("operations/feature_flags.md"),
|
||||
new_user_list_path: can?(current_user, :create_feature_flag, @project) ? new_project_feature_flags_user_list_path(@project): nil,
|
||||
error_state_svg_path: image_path('illustrations/empty-state/empty-feature-flag-md.svg') } }
|
||||
|
|
|
|||
|
|
@ -4,6 +4,6 @@
|
|||
- breadcrumb_title s_('FeatureFlags|New User List')
|
||||
- page_title s_('FeatureFlags|New User List')
|
||||
|
||||
#js-new-user-list{ data: { 'user-lists-docs-path' => help_page_path('operations/feature_flags', anchor: 'user-list'),
|
||||
#js-new-user-list{ data: { 'user-lists-docs-path' => help_page_path('operations/feature_flags.md', anchor: 'user-list'),
|
||||
'feature-flags-path' => project_feature_flags_path(@project),
|
||||
'project-id' => @project.id } }
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
endpoint: new_project_fork_path(@project, format: :json),
|
||||
new_group_path: new_group_path,
|
||||
project_full_path: @project.full_path,
|
||||
visibility_help_path: help_page_path("user/public_access"),
|
||||
visibility_help_path: help_page_path("user/public_access.md"),
|
||||
cancel_path: project_path(@project),
|
||||
project_id: @project.id,
|
||||
project_name: @project.name,
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
- return unless show_moved_service_desk_issue_warning?(issue)
|
||||
- service_desk_link_url = help_page_path('user/project/service_desk/index')
|
||||
- service_desk_link_url = help_page_path('user/project/service_desk/index.md')
|
||||
- service_desk_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: service_desk_link_url }
|
||||
|
||||
= render Pajamas::AlertComponent.new(variant: :warning,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
- return if @issue.work_item_type&.incident?
|
||||
|
||||
- requirements_link_url = help_page_path('user/project/issues/design_management', anchor: 'prerequisites')
|
||||
- requirements_link_url = help_page_path('user/project/issues/design_management.md', anchor: 'prerequisites')
|
||||
- requirements_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: requirements_link_url }
|
||||
- link_end = '</a>'.html_safe
|
||||
- enable_lfs_message = s_("DesignManagement|To upload designs, you'll need to enable LFS and have an admin enable hashed storage. %{requirements_link_start}More information%{requirements_link_end}").html_safe % { requirements_link_start: requirements_link_start, requirements_link_end: link_end }
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@
|
|||
|
||||
%li.droplab-item-ignore.gl-ml-3.gl-mr-3.gl-mt-5
|
||||
- if can_create_confidential_merge_request?
|
||||
#js-forked-project{ data: { namespace_path: @project.namespace.full_path, project_path: @project.full_path, new_fork_path: new_project_fork_path(@project), help_page_path: help_page_path('user/project/merge_requests/index') } }
|
||||
#js-forked-project{ data: { namespace_path: @project.namespace.full_path, project_path: @project.full_path, new_fork_path: new_project_fork_path(@project), help_page_path: help_page_path('user/project/merge_requests/index.md') } }
|
||||
.form-group
|
||||
%label{ for: 'new-branch-name' }
|
||||
= _('Branch name')
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue