Commit b1ac5ff5 authored by Robert Speicher's avatar Robert Speicher

Merge branch 'lm-add-connection-type' into 'master'

Adds connection fields to template

See merge request gitlab-org/gitlab!46737
parents 002a104d d8658f3e
a77f28ee61f3238c10769ddbd6e428debadfc933 fa974a4ab21aa6acc4c3a00456265248a4d70703
...@@ -26,7 +26,7 @@ export default { ...@@ -26,7 +26,7 @@ export default {
required: false, required: false,
default: null, default: null,
}, },
openPath: { openedPath: {
type: String, type: String,
required: false, required: false,
default: '', default: '',
...@@ -43,7 +43,7 @@ export default { ...@@ -43,7 +43,7 @@ export default {
}, },
}, },
computed: { computed: {
open() { opened() {
return this.total - (this.closed + (this.merged || 0)); return this.total - (this.closed + (this.merged || 0));
}, },
showMerged() { showMerged() {
...@@ -63,8 +63,8 @@ export default { ...@@ -63,8 +63,8 @@ export default {
<span class="gl-white-space-pre-wrap" data-testid="open-stat"> <span class="gl-white-space-pre-wrap" data-testid="open-stat">
<gl-sprintf :message="__('Open: %{open}')"> <gl-sprintf :message="__('Open: %{open}')">
<template #open> <template #open>
<gl-link v-if="openPath" :href="openPath">{{ open }}</gl-link> <gl-link v-if="openedPath" :href="openedPath">{{ opened }}</gl-link>
<template v-else>{{ open }}</template> <template v-else>{{ opened }}</template>
</template> </template>
</gl-sprintf> </gl-sprintf>
</span> </span>
......
...@@ -87,9 +87,14 @@ export default { ...@@ -87,9 +87,14 @@ export default {
<release-block-header :release="release" /> <release-block-header :release="release" />
<div class="card-body"> <div class="card-body">
<div v-if="shouldRenderMilestoneInfo"> <div v-if="shouldRenderMilestoneInfo">
<!-- TODO: Switch open* links to opened* once fields have been updated in GraphQL -->
<release-block-milestone-info <release-block-milestone-info
:milestones="milestones" :milestones="milestones"
:open-issues-path="release._links.issuesUrl" :opened-issues-path="release._links.openedIssuesUrl"
:closed-issues-path="release._links.closedIssuesUrl"
:opened-merge-requests-path="release._links.openedMergeRequestsUrl"
:merged-merge-requests-path="release._links.mergedMergeRequestsUrl"
:closed-merge-requests-path="release._links.closedMergeRequestsUrl"
/> />
<hr class="mb-3 mt-0" /> <hr class="mb-3 mt-0" />
</div> </div>
......
...@@ -20,7 +20,7 @@ export default { ...@@ -20,7 +20,7 @@ export default {
type: Array, type: Array,
required: true, required: true,
}, },
openIssuesPath: { openedIssuesPath: {
type: String, type: String,
required: false, required: false,
default: '', default: '',
...@@ -30,7 +30,7 @@ export default { ...@@ -30,7 +30,7 @@ export default {
required: false, required: false,
default: '', default: '',
}, },
openMergeRequestsPath: { openedMergeRequestsPath: {
type: String, type: String,
required: false, required: false,
default: '', default: '',
...@@ -173,7 +173,7 @@ export default { ...@@ -173,7 +173,7 @@ export default {
:label="__('Issues')" :label="__('Issues')"
:total="issueCounts.total" :total="issueCounts.total"
:closed="issueCounts.closed" :closed="issueCounts.closed"
:open-path="openIssuesPath" :opened-path="openedIssuesPath"
:closed-path="closedIssuesPath" :closed-path="closedIssuesPath"
data-testid="issue-stats" data-testid="issue-stats"
/> />
...@@ -183,7 +183,7 @@ export default { ...@@ -183,7 +183,7 @@ export default {
:total="mergeRequestCounts.total" :total="mergeRequestCounts.total"
:merged="mergeRequestCounts.merged" :merged="mergeRequestCounts.merged"
:closed="mergeRequestCounts.closed" :closed="mergeRequestCounts.closed"
:open-path="openMergeRequestsPath" :opened-path="openedMergeRequestsPath"
:merged-path="mergedMergeRequestsPath" :merged-path="mergedMergeRequestsPath"
:closed-path="closedMergeRequestsPath" :closed-path="closedMergeRequestsPath"
data-testid="merge-request-stats" data-testid="merge-request-stats"
......
...@@ -33,9 +33,12 @@ fragment Release on Release { ...@@ -33,9 +33,12 @@ fragment Release on Release {
} }
links { links {
editUrl editUrl
issuesUrl
mergeRequestsUrl
selfUrl selfUrl
openedIssuesUrl
closedIssuesUrl
openedMergeRequestsUrl
mergedMergeRequestsUrl
closedMergeRequestsUrl
} }
commit { commit {
sha sha
......
...@@ -10,7 +10,9 @@ ...@@ -10,7 +10,9 @@
= notice[:message].html_safe = notice[:message].html_safe
- if @license.present? && show_license_breakdown? - if @license.present? && show_license_breakdown?
= render_if_exists 'admin/licenses/breakdown' .license-panel.gl-mt-5
= render_if_exists 'admin/licenses/summary'
= render_if_exists 'admin/licenses/breakdown'
.admin-dashboard.gl-mt-3 .admin-dashboard.gl-mt-3
.row .row
......
- milestone_url = @milestone.project_milestone? ? project_milestone_path(@project, @milestone) : group_milestone_path(@group, @milestone) - milestone_url = @milestone.project_milestone? ? project_milestone_path(@project, @milestone) : group_milestone_path(@group, @milestone)
%button.js-delete-milestone-button.btn.btn-grouped.btn-danger{ data: { milestone_id: @milestone.id, %button.js-delete-milestone-button.btn.gl-button.btn-grouped.btn-danger{ data: { milestone_id: @milestone.id,
milestone_title: markdown_field(@milestone, :title), milestone_title: markdown_field(@milestone, :title),
milestone_url: milestone_url, milestone_url: milestone_url,
milestone_issue_count: @milestone.issues.count, milestone_issue_count: @milestone.issues.count,
......
...@@ -11,10 +11,10 @@ ...@@ -11,10 +11,10 @@
.milestone-buttons .milestone-buttons
- if can?(current_user, :admin_milestone, @group || @project) - if can?(current_user, :admin_milestone, @group || @project)
= link_to _('Edit'), edit_milestone_path(milestone), class: 'btn btn-grouped' = link_to _('Edit'), edit_milestone_path(milestone), class: 'btn gl-button btn-grouped'
- if milestone.project_milestone? && milestone.project.group - if milestone.project_milestone? && milestone.project.group
%button.js-promote-project-milestone-button.btn.btn-grouped{ data: { toggle: 'modal', %button.js-promote-project-milestone-button.btn.gl-button.btn-grouped{ data: { toggle: 'modal',
target: '#promote-milestone-modal', target: '#promote-milestone-modal',
milestone_title: milestone.title, milestone_title: milestone.title,
group_name: milestone.project.group.name, group_name: milestone.project.group.name,
...@@ -26,11 +26,11 @@ ...@@ -26,11 +26,11 @@
#promote-milestone-modal #promote-milestone-modal
- if milestone.active? - if milestone.active?
= link_to _('Close milestone'), update_milestone_path(milestone, { state_event: :close }), method: :put, class: 'btn btn-grouped btn-close' = link_to _('Close milestone'), update_milestone_path(milestone, { state_event: :close }), method: :put, class: 'btn gl-button btn-grouped btn-close'
- else - else
= link_to _('Reopen milestone'), update_milestone_path(milestone, { state_event: :activate }), method: :put, class: 'btn btn-grouped btn-reopen' = link_to _('Reopen milestone'), update_milestone_path(milestone, { state_event: :activate }), method: :put, class: 'btn gl-button btn-grouped btn-reopen'
= render 'shared/milestones/delete_button' = render 'shared/milestones/delete_button'
%button.btn.btn-default.btn-grouped.float-right.d-block.d-sm-none.js-sidebar-toggle{ type: 'button' } %button.btn.gl-button.btn-default.btn-grouped.float-right.d-block.d-sm-none.js-sidebar-toggle{ type: 'button' }
= sprite_icon('chevron-double-lg-left') = sprite_icon('chevron-double-lg-left')
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
= markdown_field(label, :description) = markdown_field(label, :description)
.float-right.d-none.d-lg-block.d-xl-block .float-right.d-none.d-lg-block.d-xl-block
= link_to milestones_issues_path(options.merge(state: 'opened')), class: 'btn btn-transparent btn-action' do = link_to milestones_issues_path(options.merge(state: 'opened')), class: 'btn gl-button btn-default-tertiary btn-action' do
- pluralize milestone_issues_by_label_count(@milestone, label, state: :opened), _('open issue') - pluralize milestone_issues_by_label_count(@milestone, label, state: :opened), _('open issue')
= link_to milestones_issues_path(options.merge(state: 'closed')), class: 'btn btn-transparent btn-action' do = link_to milestones_issues_path(options.merge(state: 'closed')), class: 'btn gl-button btn-default-tertiary btn-action' do
- pluralize milestone_issues_by_label_count(@milestone, label, state: :closed), _('closed issue') - pluralize milestone_issues_by_label_count(@milestone, label, state: :closed), _('closed issue')
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
.milestone-actions.d-flex.justify-content-sm-start.justify-content-md-end .milestone-actions.d-flex.justify-content-sm-start.justify-content-md-end
- if @project # if in milestones list on project level - if @project # if in milestones list on project level
- if can_admin_group_milestones? - if can_admin_group_milestones?
%button.js-promote-project-milestone-button.btn.btn-blank.btn-sm.btn-grouped.has-tooltip{ title: s_('Milestones|Promote to Group Milestone'), %button.js-promote-project-milestone-button.btn.gl-button.btn-default-tertiary.btn-sm.btn-grouped.has-tooltip{ title: s_('Milestones|Promote to Group Milestone'),
disabled: true, disabled: true,
type: 'button', type: 'button',
data: { url: promote_project_milestone_path(milestone.project, milestone), data: { url: promote_project_milestone_path(milestone.project, milestone),
...@@ -59,6 +59,6 @@ ...@@ -59,6 +59,6 @@
- if can?(current_user, :admin_milestone, milestone) - if can?(current_user, :admin_milestone, milestone)
- if milestone.closed? - if milestone.closed?
= link_to s_('Milestones|Reopen Milestone'), milestone_path(milestone, milestone: { state_event: :activate }), method: :put, class: "btn btn-sm btn-grouped btn-reopen" = link_to s_('Milestones|Reopen Milestone'), milestone_path(milestone, milestone: { state_event: :activate }), method: :put, class: "btn gl-button btn-sm btn-grouped btn-reopen"
- else - else
= link_to s_('Milestones|Close Milestone'), milestone_path(milestone, milestone: { state_event: :close }), method: :put, class: "btn btn-sm btn-grouped btn-close" = link_to s_('Milestones|Close Milestone'), milestone_path(milestone, milestone: { state_event: :close }), method: :put, class: "btn gl-button btn-warning-secondary btn-sm btn-grouped btn-close"
...@@ -20,4 +20,15 @@ if Gitlab::Runtime.console? ...@@ -20,4 +20,15 @@ if Gitlab::Runtime.console?
end end
puts '-' * 80 puts '-' * 80
# Stop irb from writing a history file by default.
module IrbNoHistory
def init_config(*)
super
IRB.conf[:SAVE_HISTORY] = false
end
end
IRB.singleton_class.prepend(IrbNoHistory)
end end
...@@ -133,9 +133,10 @@ Note the following when promoting a secondary: ...@@ -133,9 +133,10 @@ Note the following when promoting a secondary:
``` ```
1. Promote the **secondary** node to the **primary** node. 1. Promote the **secondary** node to the **primary** node.
CAUTION: **Caution:**
DANGER: **Warning:** If the secondary node [has been paused](../../geo/index.md#pausing-and-resuming-replication), this performs
In GitLab 13.2 and later versions, promoting a secondary node to a primary while the secondary is paused fails. We are [investigating the issue](https://gitlab.com/gitlab-org/gitlab/-/issues/225173). Do not pause replication before promoting a secondary. If the node is paused, please resume before promoting. a point-in-time recovery to the last known state.
Data that was created on the primary while the secondary was paused will be lost.
To promote the secondary node to primary along with preflight checks: To promote the secondary node to primary along with preflight checks:
...@@ -166,14 +167,16 @@ conjunction with multiple servers, as it can only ...@@ -166,14 +167,16 @@ conjunction with multiple servers, as it can only
perform changes on a **secondary** with only a single machine. Instead, you must perform changes on a **secondary** with only a single machine. Instead, you must
do this manually. do this manually.
DANGER: **Warning:** CAUTION: **Caution:**
In GitLab 13.2 and later versions, promoting a secondary node to a primary while the secondary is paused fails. We are [investigating the issue](https://gitlab.com/gitlab-org/gitlab/-/issues/225173). Do not pause replication before promoting a secondary. If the node is paused, please resume before promoting. If the secondary node [has been paused](../../geo/index.md#pausing-and-resuming-replication), this performs
a point-in-time recovery to the last known state.
Data that was created on the primary while the secondary was paused will be lost.
1. SSH in to the database node in the **secondary** and trigger PostgreSQL to 1. SSH in to the database node in the **secondary** and trigger PostgreSQL to
promote to read-write: promote to read-write:
```shell ```shell
sudo gitlab-pg-ctl promote sudo gitlab-ctl promote-db
``` ```
In GitLab 12.8 and earlier, see [Message: `sudo: gitlab-pg-ctl: command not found`](../replication/troubleshooting.md#message-sudo-gitlab-pg-ctl-command-not-found). In GitLab 12.8 and earlier, see [Message: `sudo: gitlab-pg-ctl: command not found`](../replication/troubleshooting.md#message-sudo-gitlab-pg-ctl-command-not-found).
...@@ -211,9 +214,6 @@ an external PostgreSQL database, as it can only perform changes on a **secondary ...@@ -211,9 +214,6 @@ an external PostgreSQL database, as it can only perform changes on a **secondary
node with GitLab and the database on the same machine. As a result, a manual process is node with GitLab and the database on the same machine. As a result, a manual process is
required: required:
DANGER: **Warning:**
In GitLab 13.2 and later versions, promoting a secondary node to a primary while the secondary is paused fails. We are [investigating the issue](https://gitlab.com/gitlab-org/gitlab/-/issues/225173). Do not pause replication before promoting a secondary. If the node is paused, please resume before promoting.
1. Promote the replica database associated with the **secondary** site. This will 1. Promote the replica database associated with the **secondary** site. This will
set the database to read-write: set the database to read-write:
- Amazon RDS - [Promoting a Read Replica to Be a Standalone DB Instance](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html#USER_ReadRepl.Promote) - Amazon RDS - [Promoting a Read Replica to Be a Standalone DB Instance](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html#USER_ReadRepl.Promote)
......
...@@ -227,14 +227,15 @@ conjunction with multiple servers, as it can only ...@@ -227,14 +227,15 @@ conjunction with multiple servers, as it can only
perform changes on a **secondary** with only a single machine. Instead, you must perform changes on a **secondary** with only a single machine. Instead, you must
do this manually. do this manually.
DANGER: **Warning:** CAUTION: **Caution:**
In GitLab 13.2 and later versions, promoting a secondary node to a primary while the secondary is paused fails. We are [investigating the issue](https://gitlab.com/gitlab-org/gitlab/-/issues/225173). Do not pause replication before promoting a secondary. If the node is paused, please resume before promoting. If the secondary node [has been paused](../../../geo/index.md#pausing-and-resuming-replication), this performs
a point-in-time recovery to the last known state.
Data that was created on the primary while the secondary was paused will be lost.
1. SSH in to the PostgreSQL node in the **secondary** and trigger PostgreSQL to 1. SSH in to the PostgreSQL node in the **secondary** and promote PostgreSQL separately:
promote to read-write:
```shell ```shell
sudo gitlab-pg-ctl promote sudo gitlab-ctl promote-db
``` ```
In GitLab 12.8 and earlier, see [Message: `sudo: gitlab-pg-ctl: command not found`](../../replication/troubleshooting.md#message-sudo-gitlab-pg-ctl-command-not-found). In GitLab 12.8 and earlier, see [Message: `sudo: gitlab-pg-ctl: command not found`](../../replication/troubleshooting.md#message-sudo-gitlab-pg-ctl-command-not-found).
......
...@@ -196,8 +196,9 @@ For information on how to update your Geo nodes to the latest GitLab version, se ...@@ -196,8 +196,9 @@ For information on how to update your Geo nodes to the latest GitLab version, se
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/35913) in [GitLab Premium](https://about.gitlab.com/pricing/) 13.2. > [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/35913) in [GitLab Premium](https://about.gitlab.com/pricing/) 13.2.
DANGER: **Warning:** CAUTION: **Caution:**
In GitLab 13.2 and later versions, promoting a secondary node to a primary while the secondary is paused fails. We are [investigating the issue](https://gitlab.com/gitlab-org/gitlab/-/issues/225173). Do not pause replication before promoting a secondary. If the node is paused, please resume before promoting. Pausing and resuming of replication is currently only supported for Geo installations using an
Omnibus GitLab-managed database. External databases are currently not supported.
In some circumstances, like during [upgrades](replication/updating_the_geo_nodes.md) or a [planned failover](disaster_recovery/planned_failover.md), it is desirable to pause replication between the primary and secondary. In some circumstances, like during [upgrades](replication/updating_the_geo_nodes.md) or a [planned failover](disaster_recovery/planned_failover.md), it is desirable to pause replication between the primary and secondary.
......
...@@ -21,9 +21,6 @@ Updating Geo nodes involves performing: ...@@ -21,9 +21,6 @@ Updating Geo nodes involves performing:
NOTE: **Note:** NOTE: **Note:**
These general update steps are not intended for [high-availability deployments](https://docs.gitlab.com/omnibus/update/README.html#multi-node--ha-deployment), and will cause downtime. If you want to avoid downtime, consider using [zero downtime updates](https://docs.gitlab.com/omnibus/update/README.html#zero-downtime-updates). These general update steps are not intended for [high-availability deployments](https://docs.gitlab.com/omnibus/update/README.html#multi-node--ha-deployment), and will cause downtime. If you want to avoid downtime, consider using [zero downtime updates](https://docs.gitlab.com/omnibus/update/README.html#zero-downtime-updates).
DANGER: **Warning:**
In GitLab 13.2 and later versions, promoting a secondary node to a primary while the secondary is paused fails. We are [investigating the issue](https://gitlab.com/gitlab-org/gitlab/-/issues/225173). Do not pause replication before promoting a secondary. If the node is paused, please resume before promoting.
To update the Geo nodes when a new GitLab version is released, update **primary** To update the Geo nodes when a new GitLab version is released, update **primary**
and all **secondary** nodes: and all **secondary** nodes:
......
...@@ -174,7 +174,7 @@ to authenticate with the API: ...@@ -174,7 +174,7 @@ to authenticate with the API:
- [Container Registry](../user/packages/container_registry/index.md) (`$CI_REGISTRY_PASSWORD` is actually `$CI_JOB_TOKEN`, but this may change in the future) - [Container Registry](../user/packages/container_registry/index.md) (`$CI_REGISTRY_PASSWORD` is actually `$CI_JOB_TOKEN`, but this may change in the future)
- [Go Proxy](../user/packages/go_proxy/index.md) - [Go Proxy](../user/packages/go_proxy/index.md)
- [Maven Repository](../user/packages/maven_repository/index.md#authenticate-with-a-ci-job-token-in-maven) - [Maven Repository](../user/packages/maven_repository/index.md#authenticate-with-a-ci-job-token-in-maven)
- [NPM Repository](../user/packages/npm_registry/index.md#authenticating-with-a-ci-job-token) - [NPM Repository](../user/packages/npm_registry/index.md#authenticate-with-a-ci-job-token)
- [Nuget Repository](../user/packages/nuget_repository/index.md) - [Nuget Repository](../user/packages/nuget_repository/index.md)
- [PyPI Repository](../user/packages/pypi_repository/index.md#using-gitlab-ci-with-pypi-packages) - [PyPI Repository](../user/packages/pypi_repository/index.md#using-gitlab-ci-with-pypi-packages)
- [Generic packages](../user/packages/generic_packages/index.md#publish-a-generic-package-by-using-cicd) - [Generic packages](../user/packages/generic_packages/index.md#publish-a-generic-package-by-using-cicd)
......
...@@ -633,6 +633,8 @@ To enable this feature: ...@@ -633,6 +633,8 @@ To enable this feature:
1. Expand the **Permissions, LFS, 2FA** section, and enter IP address ranges into **Allow access to the following IP addresses** field. 1. Expand the **Permissions, LFS, 2FA** section, and enter IP address ranges into **Allow access to the following IP addresses** field.
1. Click **Save changes**. 1. Click **Save changes**.
![Domain restriction by IP address](img/restrict-by-ip.gif)
#### Allowed domain restriction **(PREMIUM)** #### Allowed domain restriction **(PREMIUM)**
>- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/7297) in [GitLab Premium and Silver](https://about.gitlab.com/pricing/) 12.2. >- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/7297) in [GitLab Premium and Silver](https://about.gitlab.com/pricing/) 12.2.
...@@ -661,6 +663,8 @@ To enable this feature: ...@@ -661,6 +663,8 @@ To enable this feature:
1. Expand the **Permissions, LFS, 2FA** section, and enter the domain names into **Restrict membership by email** field. 1. Expand the **Permissions, LFS, 2FA** section, and enter the domain names into **Restrict membership by email** field.
1. Click **Save changes**. 1. Click **Save changes**.
![Domain restriction by email](img/restrict-by-email.gif)
This will enable the domain-checking for all new users added to the group from this moment on. This will enable the domain-checking for all new users added to the group from this moment on.
#### Group file templates **(PREMIUM)** #### Group file templates **(PREMIUM)**
......
This diff is collapsed.
...@@ -31,7 +31,7 @@ authenticate with GitLab by using the `CI_JOB_TOKEN`. ...@@ -31,7 +31,7 @@ authenticate with GitLab by using the `CI_JOB_TOKEN`.
CI/CD templates, which you can use to get started, are in [this repo](https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/ci/templates). CI/CD templates, which you can use to get started, are in [this repo](https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/ci/templates).
Learn more about [using CI/CD to build Maven packages](../maven_repository/index.md#create-maven-packages-with-gitlab-cicd), [NPM packages](../npm_registry/index.md#publishing-a-package-with-cicd), [Composer packages](../composer_repository/index.md#publish-a-composer-package-by-using-cicd), [NuGet Packages](../nuget_repository/index.md#publishing-a-nuget-package-with-cicd), [Conan Packages](../conan_repository/index.md#publish-a-conan-package-by-using-cicd), [PyPI packages](../pypi_repository/index.md#using-gitlab-ci-with-pypi-packages), and [generic packages](../generic_packages/index.md#publish-a-generic-package-by-using-cicd). Learn more about [using CI/CD to build Maven packages](../maven_repository/index.md#create-maven-packages-with-gitlab-cicd), [NPM packages](../npm_registry/index.md#publish-an-npm-package-by-using-cicd), [Composer packages](../composer_repository/index.md#publish-a-composer-package-by-using-cicd), [NuGet Packages](../nuget_repository/index.md#publishing-a-nuget-package-with-cicd), [Conan Packages](../conan_repository/index.md#publish-a-conan-package-by-using-cicd), [PyPI packages](../pypi_repository/index.md#using-gitlab-ci-with-pypi-packages), and [generic packages](../generic_packages/index.md#publish-a-generic-package-by-using-cicd).
If you use CI/CD to build a package, extended activity If you use CI/CD to build a package, extended activity
information is displayed when you view the package details: information is displayed when you view the package details:
......
...@@ -67,9 +67,9 @@ If you are using NPM, this involves creating an `.npmrc` file and adding the app ...@@ -67,9 +67,9 @@ If you are using NPM, this involves creating an `.npmrc` file and adding the app
to your project using your project ID, then adding a section to your `package.json` file with a similar URL. to your project using your project ID, then adding a section to your `package.json` file with a similar URL.
Follow Follow
the instructions in the [GitLab NPM Registry documentation](../npm_registry/index.md#authenticating-to-the-gitlab-npm-registry). After the instructions in the [GitLab NPM Registry documentation](../npm_registry/index.md#authenticate-to-the-package-registry). After
you do this, you can push your NPM package to your project using `npm publish`, as described in the you do this, you can push your NPM package to your project using `npm publish`, as described in the
[uploading packages](../npm_registry/index.md#uploading-packages) section of the docs. [publishing packages](../npm_registry/index.md#publish-an-npm-package) section of the docs.
#### Maven #### Maven
......
This diff is collapsed.
...@@ -64,8 +64,8 @@ The Advanced Search Syntax also supports the use of filters. The available filte ...@@ -64,8 +64,8 @@ The Advanced Search Syntax also supports the use of filters. The available filte
- extension: Filters by extension in the filename. Please write the extension without a leading dot. Exact match only. - extension: Filters by extension in the filename. Please write the extension without a leading dot. Exact match only.
- blob: Filters by Git `object ID`. Exact match only. - blob: Filters by Git `object ID`. Exact match only.
To use them, simply add them to your query in the format `<filter_name>:<value>` without To use them, add them to your keyword in the format `<filter_name>:<value>` without
any spaces between the colon (`:`) and the value. any spaces between the colon (`:`) and the value. A keyword or an asterisk (`*`) is required for filter searches and has to be added in front of the filter separated by a space.
Examples: Examples:
......
...@@ -17,68 +17,49 @@ ...@@ -17,68 +17,49 @@
- billable_users_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer nofollow">'.html_safe % { url: billable_users_url } - billable_users_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer nofollow">'.html_safe % { url: billable_users_url }
- link_end = '</a>'.html_safe - link_end = '</a>'.html_safe
.license-panel.gl-mt-5 .d-flex.gl-mb-5
.gl-mb-5.info-well.dark-well .col-sm-6.d-flex.pl-0
.gl-display-flex.gl-justify-content-space-between.gl-align-items-center.gl-p-5 .info-well.dark-well.gl-mb-0
%div .well-segment.well-centered
%h4.gl-mt-0 %h3.center
= _('License overview') = _('Users in License:')
%p.gl-mb-0 = licensed_users
= sprite_icon('license', css_class: 'gl-fill-gray-700') %hr
%span.gl-ml-3 - if @license.will_expire?
= _('Plan:') = _('Your license is valid from')
%strong= @license.plan.capitalize %strong<>
%span.gl-ml-5 = _(' %{start} to %{end}') % { start: @license.starts_at, end: @license.expires_at }
= render 'admin/licenses/license_status' \.
%span.gl-ml-5 = _('The %{link_start}true-up model%{link_end} allows having more users, and additional users will incur a retroactive charge on renewal.').html_safe % { link_start: true_up_link_start, link_end: link_end }
= _('Licensed to:') = seats_calculation_message(@license)
%strong= @license.licensee['Name'] .col-sm-6.d-flex.pr-0
= "(#{@license.licensee['Email']})" .info-well.dark-well.gl-mb-0
%div .well-segment.well-centered
= link_to 'View details', admin_license_path, class: "gl-button btn btn-secondary" %h3.center
.d-flex.gl-mb-5 = _('Billable Users:')
.col-sm-6.d-flex.pl-0 = number_with_delimiter current_active_user_count
.info-well.dark-well.gl-mb-0 %hr
.well-segment.well-centered %p
%h3.center = _('This is the number of %{billable_users_link_start}billable users%{link_end} on your installation, and this is the minimum number you need to purchase when you renew your license.').html_safe % { billable_users_link_start: billable_users_link_start, link_end: link_end }
= _('Users in License:') .d-flex.gl-pb-5
= licensed_users .col-sm-6.d-flex.pl-0
%hr .info-well.dark-well.flex-fill.gl-mb-0
- if @license.will_expire? .well-segment.well-centered
= _('Your license is valid from') %h3.center
%strong<> = _('Maximum Users:')
= _(' %{start} to %{end}') % { start: @license.starts_at, end: @license.expires_at } = number_with_delimiter max_user_count
\. %hr
= _('The %{link_start}true-up model%{link_end} allows having more users, and additional users will incur a retroactive charge on renewal.').html_safe % { link_start: true_up_link_start, link_end: link_end } = _('This is the highest peak of users on your installation since the license started.')
= seats_calculation_message(@license) .col-sm-6.d-flex.pr-0
.col-sm-6.d-flex.pr-0 .info-well.dark-well.gl-mb-0
.info-well.dark-well.gl-mb-0 .well-segment.well-centered
.well-segment.well-centered %h3.center
%h3.center = _('Users over License:')
= _('Billable Users:') = number_with_delimiter users_over_license
= number_with_delimiter current_active_user_count %hr
%hr - if license_is_over_capacity?
%p .gl-alert.gl-alert-info.gl-mb-3{ role: 'alert' }
= _('This is the number of %{billable_users_link_start}billable users%{link_end} on your installation, and this is the minimum number you need to purchase when you renew your license.').html_safe % { billable_users_link_start: billable_users_link_start, link_end: link_end } = sprite_icon('information-o', css_class: 'gl-icon gl-alert-icon gl-alert-icon-no-title')
.d-flex.gl-pb-5 .gl-alert-body
.col-sm-6.d-flex.pl-0 = s_('Your instance has exceeded your subscription\'s licensed user count.')
.info-well.dark-well.flex-fill.gl-mb-0 = _('You\'ll be charged for %{true_up_link_start}users over license%{link_end} on a quartely or annual basis, depending on the terms of your agreement.').html_safe % { true_up_link_start: true_up_link_start, link_end: link_end }
.well-segment.well-centered
%h3.center
= _('Maximum Users:')
= number_with_delimiter max_user_count
%hr
= _('This is the highest peak of users on your installation since the license started.')
.col-sm-6.d-flex.pr-0
.info-well.dark-well.gl-mb-0
.well-segment.well-centered
%h3.center
= _('Users over License:')
= number_with_delimiter users_over_license
%hr
- if license_is_over_capacity?
.gl-alert.gl-alert-info.gl-mb-3{ role: 'alert' }
= sprite_icon('information-o', css_class: 'gl-icon gl-alert-icon gl-alert-icon-no-title')
.gl-alert-body
= s_('Your instance has exceeded your subscription\'s licensed user count.')
= _('You\'ll be charged for %{true_up_link_start}users over license%{link_end} on a quartely or annual basis, depending on the terms of your agreement.').html_safe % { true_up_link_start: true_up_link_start, link_end: link_end }
.gl-mb-5.info-well.dark-well
.gl-display-flex.gl-justify-content-space-between.gl-align-items-center.gl-p-5
%div
%h4.gl-mt-0
= _('License overview')
%p.gl-mb-0
= sprite_icon('license', css_class: 'gl-fill-gray-700')
%span.gl-ml-3
= _('Plan:')
%strong= @license.plan.capitalize
%span.gl-ml-5
= render 'admin/licenses/license_status'
%span.gl-ml-5
= _('Licensed to:')
%strong= @license.licensee['Name']
= "(#{@license.licensee['Email']})"
%div
= link_to 'View details', admin_license_path, class: "gl-button btn btn-secondary"
...@@ -18,7 +18,8 @@ ...@@ -18,7 +18,8 @@
- if @license.present? - if @license.present?
= render 'info' = render 'info'
= render 'breakdown' .license-panel.gl-mt-5
= render 'breakdown'
- if @licenses.present? - if @licenses.present?
= render 'license_history' = render 'license_history'
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
- if message.present? && subscribable.present? - if message.present? && subscribable.present?
.container-fluid.container-limited.pt-3 .container-fluid.container-limited.pt-3
.alert.alert-dismissible.gitlab-ee-license-banner.hidden.js-gitlab-ee-license-banner.pb-5.border-width-1px.border-style-solid.border-color-default.border-radius-default{ role: 'alert', data: { license_expiry: subscribable.expires_at } } .gl-alert.alert-dismissible.gitlab-ee-license-banner.hidden.js-gitlab-ee-license-banner.pb-5.border-width-1px.border-style-solid.border-color-default.border-radius-default{ role: 'alert', data: { license_expiry: subscribable.expires_at } }
%button.close.p-2{ type: 'button', 'aria-label' => 'Dismiss banner', data: { dismiss: 'alert', track_event: 'click_button', track_label: 'dismiss_subscribable_banner' } } %button.close.p-2{ type: 'button', 'aria-label' => 'Dismiss banner', data: { dismiss: 'alert', track_event: 'click_button', track_label: 'dismiss_subscribable_banner' } }
%span{ 'aria-hidden' => 'true' } %span{ 'aria-hidden' => 'true' }
= sprite_icon('merge-request-close-m', size: 24) = sprite_icon('merge-request-close-m', size: 24)
......
---
title: Remove admin/license page duplicate summary
merge_request: 46827
author:
type: changed
---
title: 'Doc: Introduce new gitlab-ctl promote-db command'
merge_request: 45941
author:
type: fixed
...@@ -15,6 +15,7 @@ RSpec.describe 'admin/licenses/show.html.haml' do ...@@ -15,6 +15,7 @@ RSpec.describe 'admin/licenses/show.html.haml' do
render render
expect(rendered).to have_content('Buy License') expect(rendered).to have_content('Buy License')
expect(rendered).not_to have_content('License overview')
end end
end end
......
...@@ -218,6 +218,11 @@ module QA ...@@ -218,6 +218,11 @@ module QA
raise "Merge did not appear to be successful" unless merged? raise "Merge did not appear to be successful" unless merged?
end end
def merge_immediately!
click_element(:merge_moment_dropdown)
click_element(:merge_immediately_option)
end
def merged? def merged?
has_element?(:merged_status_content, text: 'The changes were merged into', wait: 60) has_element?(:merged_status_content, text: 'The changes were merged into', wait: 60)
end end
......
# frozen_string_literal: true
require 'faker'
module QA
RSpec.describe 'Verify', :runner do
context 'When pipeline is blocked' do
let(:executor) { "qa-runner-#{Faker::Alphanumeric.alphanumeric(8)}" }
let(:project) do
Resource::Project.fabricate_via_api! do |project|
project.name = 'project-with-blocked-pipeline'
end
end
let!(:runner) do
Resource::Runner.fabricate! do |runner|
runner.project = project
runner.name = executor
runner.tags = [executor]
end
end
let!(:ci_file) do
Resource::Repository::Commit.fabricate_via_api! do |commit|
commit.project = project
commit.commit_message = 'Add .gitlab-ci.yml'
commit.add_files(
[
file_path: '.gitlab-ci.yml',
content: <<~YAML
test_blocked_pipeline:
stage: build
tags: [#{executor}]
script: echo 'OK!'
manual_job:
stage: test
needs: [test_blocked_pipeline]
script: echo do not click me
when: manual
dummy_job:
stage: deploy
needs: [manual_job]
script: echo nothing
YAML
]
)
end
end
let(:merge_request) do
Resource::MergeRequest.fabricate_via_api! do |merge_request|
merge_request.project = project
merge_request.description = Faker::Lorem.sentence
merge_request.target_new_branch = false
merge_request.file_name = 'custom_file.txt'
merge_request.file_content = Faker::Lorem.sentence
end
end
before do
Flow::Login.sign_in
merge_request.visit!
end
after do
runner.remove_via_api!
end
it 'can still merge MR successfully', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/971' do
Page::MergeRequest::Show.perform do |show|
show.wait_until(reload: false) { show.has_pipeline_status?('running') }
show.merge_immediately!
expect(show).to be_merged
end
end
end
end
end
...@@ -5,9 +5,12 @@ Object { ...@@ -5,9 +5,12 @@ Object {
"data": Array [ "data": Array [
Object { Object {
"_links": Object { "_links": Object {
"closedIssuesUrl": "http://localhost/releases-namespace/releases-project/-/issues?release_tag=v1.1&scope=all&state=closed",
"closedMergeRequestsUrl": "http://localhost/releases-namespace/releases-project/-/merge_requests?release_tag=v1.1&scope=all&state=closed",
"editUrl": "http://localhost/releases-namespace/releases-project/-/releases/v1.1/edit", "editUrl": "http://localhost/releases-namespace/releases-project/-/releases/v1.1/edit",
"issuesUrl": "http://localhost/releases-namespace/releases-project/-/issues?release_tag=v1.1&scope=all&state=opened", "mergedMergeRequestsUrl": "http://localhost/releases-namespace/releases-project/-/merge_requests?release_tag=v1.1&scope=all&state=merged",
"mergeRequestsUrl": "http://localhost/releases-namespace/releases-project/-/merge_requests?release_tag=v1.1&scope=all&state=opened", "openedIssuesUrl": "http://localhost/releases-namespace/releases-project/-/issues?release_tag=v1.1&scope=all&state=opened",
"openedMergeRequestsUrl": "http://localhost/releases-namespace/releases-project/-/merge_requests?release_tag=v1.1&scope=all&state=opened",
"self": "http://localhost/releases-namespace/releases-project/-/releases/v1.1", "self": "http://localhost/releases-namespace/releases-project/-/releases/v1.1",
"selfUrl": "http://localhost/releases-namespace/releases-project/-/releases/v1.1", "selfUrl": "http://localhost/releases-namespace/releases-project/-/releases/v1.1",
}, },
...@@ -130,9 +133,12 @@ exports[`releases/util.js convertOneReleaseGraphQLResponse matches snapshot 1`] ...@@ -130,9 +133,12 @@ exports[`releases/util.js convertOneReleaseGraphQLResponse matches snapshot 1`]
Object { Object {
"data": Object { "data": Object {
"_links": Object { "_links": Object {
"closedIssuesUrl": "http://localhost/releases-namespace/releases-project/-/issues?release_tag=v1.1&scope=all&state=closed",
"closedMergeRequestsUrl": "http://localhost/releases-namespace/releases-project/-/merge_requests?release_tag=v1.1&scope=all&state=closed",
"editUrl": "http://localhost/releases-namespace/releases-project/-/releases/v1.1/edit", "editUrl": "http://localhost/releases-namespace/releases-project/-/releases/v1.1/edit",
"issuesUrl": "http://localhost/releases-namespace/releases-project/-/issues?release_tag=v1.1&scope=all&state=opened", "mergedMergeRequestsUrl": "http://localhost/releases-namespace/releases-project/-/merge_requests?release_tag=v1.1&scope=all&state=merged",
"mergeRequestsUrl": "http://localhost/releases-namespace/releases-project/-/merge_requests?release_tag=v1.1&scope=all&state=opened", "openedIssuesUrl": "http://localhost/releases-namespace/releases-project/-/issues?release_tag=v1.1&scope=all&state=opened",
"openedMergeRequestsUrl": "http://localhost/releases-namespace/releases-project/-/merge_requests?release_tag=v1.1&scope=all&state=opened",
"self": "http://localhost/releases-namespace/releases-project/-/releases/v1.1", "self": "http://localhost/releases-namespace/releases-project/-/releases/v1.1",
"selfUrl": "http://localhost/releases-namespace/releases-project/-/releases/v1.1", "selfUrl": "http://localhost/releases-namespace/releases-project/-/releases/v1.1",
}, },
......
...@@ -4,6 +4,6 @@ exports[`~/releases/components/issuable_stats.vue matches snapshot 1`] = ` ...@@ -4,6 +4,6 @@ exports[`~/releases/components/issuable_stats.vue matches snapshot 1`] = `
"<div class=\\"gl-display-flex gl-flex-direction-column gl-flex-shrink-0 gl-mr-6 gl-mb-5\\"><span class=\\"gl-mb-2\\"> "<div class=\\"gl-display-flex gl-flex-direction-column gl-flex-shrink-0 gl-mr-6 gl-mb-5\\"><span class=\\"gl-mb-2\\">
Items Items
<span class=\\"badge badge-muted badge-pill gl-badge sm\\"><!----> 10</span></span> <span class=\\"badge badge-muted badge-pill gl-badge sm\\"><!----> 10</span></span>
<div class=\\"gl-display-flex\\"><span data-testid=\\"open-stat\\" class=\\"gl-white-space-pre-wrap\\">Open: <a href=\\"path/to/open/items\\" class=\\"gl-link\\">1</a></span> <span class=\\"gl-mx-2\\">•</span> <span data-testid=\\"merged-stat\\" class=\\"gl-white-space-pre-wrap\\">Merged: <a href=\\"path/to/merged/items\\" class=\\"gl-link\\">7</a></span> <span class=\\"gl-mx-2\\">•</span> <span data-testid=\\"closed-stat\\" class=\\"gl-white-space-pre-wrap\\">Closed: <a href=\\"path/to/closed/items\\" class=\\"gl-link\\">2</a></span></div> <div class=\\"gl-display-flex\\"><span data-testid=\\"open-stat\\" class=\\"gl-white-space-pre-wrap\\">Open: <a href=\\"path/to/opened/items\\" class=\\"gl-link\\">1</a></span> <span class=\\"gl-mx-2\\">•</span> <span data-testid=\\"merged-stat\\" class=\\"gl-white-space-pre-wrap\\">Merged: <a href=\\"path/to/merged/items\\" class=\\"gl-link\\">7</a></span> <span class=\\"gl-mx-2\\">•</span> <span data-testid=\\"closed-stat\\" class=\\"gl-white-space-pre-wrap\\">Closed: <a href=\\"path/to/closed/items\\" class=\\"gl-link\\">2</a></span></div>
</div>" </div>"
`; `;
...@@ -26,7 +26,7 @@ describe('~/releases/components/issuable_stats.vue', () => { ...@@ -26,7 +26,7 @@ describe('~/releases/components/issuable_stats.vue', () => {
total: 10, total: 10,
closed: 2, closed: 2,
merged: 7, merged: 7,
openPath: 'path/to/open/items', openedPath: 'path/to/opened/items',
closedPath: 'path/to/closed/items', closedPath: 'path/to/closed/items',
mergedPath: 'path/to/merged/items', mergedPath: 'path/to/merged/items',
}; };
...@@ -72,7 +72,7 @@ describe('~/releases/components/issuable_stats.vue', () => { ...@@ -72,7 +72,7 @@ describe('~/releases/components/issuable_stats.vue', () => {
const link = findOpenStatLink(); const link = findOpenStatLink();
expect(link.exists()).toBe(true); expect(link.exists()).toBe(true);
expect(link.attributes('href')).toBe(defaultProps.openPath); expect(link.attributes('href')).toBe(defaultProps.openedPath);
}); });
it('renders the "merged" stat as a link', () => { it('renders the "merged" stat as a link', () => {
...@@ -93,7 +93,7 @@ describe('~/releases/components/issuable_stats.vue', () => { ...@@ -93,7 +93,7 @@ describe('~/releases/components/issuable_stats.vue', () => {
describe('when path parameters are not provided', () => { describe('when path parameters are not provided', () => {
beforeEach(() => { beforeEach(() => {
createComponent({ createComponent({
openPath: undefined, openedPath: undefined,
closedPath: undefined, closedPath: undefined,
mergedPath: undefined, mergedPath: undefined,
}); });
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment