Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
b4558e74da
commit
99bb3eedd0
|
|
@ -7,13 +7,13 @@ export const BRANCH_FILTER_REGEX = 'regex';
|
|||
export const WILDCARD_CODE_STABLE = '*-stable';
|
||||
export const WILDCARD_CODE_PRODUCTION = 'production/*';
|
||||
|
||||
export const REGEX_CODE = '(feature|hotfix)/*';
|
||||
export const REGEX_CODE = '^(feature|hotfix)/';
|
||||
|
||||
export const descriptionText = {
|
||||
[BRANCH_FILTER_WILDCARD]: s__(
|
||||
'Webhooks|Wildcards such as %{WILDCARD_CODE_STABLE} or %{WILDCARD_CODE_PRODUCTION} are supported.',
|
||||
),
|
||||
[BRANCH_FILTER_REGEX]: s__('Webhooks|Regex such as %{REGEX_CODE} is supported.'),
|
||||
[BRANCH_FILTER_REGEX]: s__('Webhooks|Regular expressions such as %{REGEX_CODE} are supported.'),
|
||||
};
|
||||
|
||||
export const MASK_ITEM_VALUE_HIDDEN = '************';
|
||||
|
|
|
|||
|
|
@ -48,9 +48,9 @@ class Environment < ApplicationRecord
|
|||
has_one :latest_opened_most_severe_alert, -> { order_severity_with_open_prometheus_alert }, class_name: 'AlertManagement::Alert', inverse_of: :environment
|
||||
|
||||
before_validation :generate_slug, if: ->(env) { env.slug.blank? }
|
||||
before_validation :ensure_environment_tier
|
||||
|
||||
before_save :set_environment_type
|
||||
before_save :ensure_environment_tier
|
||||
after_save :clear_reactive_cache!
|
||||
|
||||
validates :name,
|
||||
|
|
@ -71,6 +71,10 @@ class Environment < ApplicationRecord
|
|||
length: { maximum: 255 },
|
||||
allow_nil: true
|
||||
|
||||
# Currently, the tier presence is validaed for newly created environments.
|
||||
# After the `BackfillEnvironmentTiers` background migration has been completed, we should remove `on: :create`.
|
||||
# See https://gitlab.com/gitlab-org/gitlab/-/issues/385253.
|
||||
validates :tier, presence: true, on: :create
|
||||
validate :safe_external_url
|
||||
validate :merge_request_not_changed
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
---
|
||||
name: list_refs_for_find_all_tags_branches
|
||||
introduced_by_url: "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/102002"
|
||||
rollout_issue_url: "https://gitlab.com/gitlab-org/gitlab/-/issues/383617"
|
||||
milestone: '15.7'
|
||||
type: development
|
||||
group: group::gitaly
|
||||
default_enabled: false
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
announcement_milestone: "14.5" # The milestone when this feature was first announced as deprecated.
|
||||
announcement_date: "2021-11-22"
|
||||
removal_milestone: "16.0" # the milestone when this feature is planned to be removed
|
||||
removal_date: "2023-04-22" # the date of the milestone release when this feature is planned to be removed
|
||||
removal_date: "2023-05-22" # the date of the milestone release when this feature is planned to be removed
|
||||
breaking_change: true
|
||||
body: | # Do not modify this line, instead modify the lines below.
|
||||
The GitLab Runner GraphQL API endpoints will not return `paused` or `active` as a status in GitLab 16.0.
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
announcement_milestone: "14.8"
|
||||
announcement_date: "2022-02-22"
|
||||
removal_milestone: "16.0"
|
||||
removal_date: "2023-04-22"
|
||||
removal_date: "2023-05-22"
|
||||
breaking_change: true
|
||||
reporter: dhershkovitch
|
||||
body: |
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
announcement_milestone: "14.8"
|
||||
announcement_date: "2022-02-22"
|
||||
removal_milestone: "16.0"
|
||||
removal_date: "2023-04-22"
|
||||
removal_date: "2023-05-22"
|
||||
breaking_change: true
|
||||
reporter: pedropombeiro
|
||||
body: |
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
announcement_milestone: "14.8" # The milestone when this feature was first announced as deprecated.
|
||||
announcement_date: "2022-02-22"
|
||||
removal_milestone: "16.0"
|
||||
removal_date: "2023-04-22"
|
||||
removal_date: "2023-05-22"
|
||||
breaking_change: true
|
||||
body: | # Do not modify this line, instead modify the lines below.
|
||||
The GitLab Runner GraphQL endpoints will stop accepting `paused` or `active` as a status value in GitLab 16.0.
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
announcement_milestone: "15.7" # (required) The milestone when this feature was first announced as deprecated.
|
||||
announcement_date: "2022-12-22" # (required) The date of the milestone release when this feature was first announced as deprecated. This should almost always be the 22nd of a month (YYYY-MM-22), unless you did an out of band blog post.
|
||||
removal_milestone: "16.0" # (required) The milestone when this feature is planned to be removed
|
||||
removal_date: "2022-05-22" # (required) The date of the milestone release when this feature is planned to be removed. This should almost always be the 22nd of a month (YYYY-MM-22), unless you did an out of band blog post.
|
||||
removal_date: "2023-05-22" # (required) The date of the milestone release when this feature is planned to be removed. This should almost always be the 22nd of a month (YYYY-MM-22), unless you did an out of band blog post.
|
||||
breaking_change: true # (required) If this deprecation is a breaking change, set this value to true
|
||||
reporter: derekferguson # (required) GitLab username of the person reporting the deprecation
|
||||
stage: Secure # (required) String value of the stage that the feature was created in. e.g., Growth
|
||||
|
|
|
|||
|
|
@ -0,0 +1,21 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class ScheduleBackfillEnvironmentTier < Gitlab::Database::Migration[2.0]
|
||||
MIGRATION = 'BackfillEnvironmentTiers'
|
||||
DELAY_INTERVAL = 2.minutes
|
||||
|
||||
restrict_gitlab_migration gitlab_schema: :gitlab_main
|
||||
|
||||
def up
|
||||
queue_batched_background_migration(
|
||||
MIGRATION,
|
||||
:environments,
|
||||
:id,
|
||||
job_interval: DELAY_INTERVAL
|
||||
)
|
||||
end
|
||||
|
||||
def down
|
||||
delete_batched_background_migration(MIGRATION, :environments, :id, [])
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1 @@
|
|||
64c4d48759a28b2dbac035d290724ee82b8af4af2bef75e1d7e07eefe10e6d17
|
||||
|
|
@ -54,7 +54,7 @@ sole discretion of GitLab Inc.
|
|||
|
||||
### DAST API variables
|
||||
|
||||
Planned removal: GitLab <span class="removal-milestone">16.0</span> (2022-05-22)
|
||||
Planned removal: GitLab <span class="removal-milestone">16.0</span> (2023-05-22)
|
||||
|
||||
WARNING:
|
||||
This is a [breaking change](https://docs.gitlab.com/ee/development/deprecation_guidelines/).
|
||||
|
|
@ -1122,7 +1122,7 @@ To align with this change, API calls to list external status checks will also re
|
|||
|
||||
### GraphQL API Runner will not accept `status` filter values of `active` or `paused`
|
||||
|
||||
Planned removal: GitLab <span class="removal-milestone">16.0</span> (2023-04-22)
|
||||
Planned removal: GitLab <span class="removal-milestone">16.0</span> (2023-05-22)
|
||||
|
||||
WARNING:
|
||||
This is a [breaking change](https://docs.gitlab.com/ee/development/deprecation_guidelines/).
|
||||
|
|
@ -1302,7 +1302,7 @@ The `instanceStatisticsMeasurements` GraphQL node has been renamed to `usageTren
|
|||
|
||||
### REST and GraphQL API Runner usage of `active` replaced by `paused`
|
||||
|
||||
Planned removal: GitLab <span class="removal-milestone">16.0</span> (2023-04-22)
|
||||
Planned removal: GitLab <span class="removal-milestone">16.0</span> (2023-05-22)
|
||||
|
||||
WARNING:
|
||||
This is a [breaking change](https://docs.gitlab.com/ee/development/deprecation_guidelines/).
|
||||
|
|
@ -1627,7 +1627,7 @@ The new security approvals feature is similar to vulnerability check. For exampl
|
|||
|
||||
### `CI_BUILD_*` predefined variables
|
||||
|
||||
Planned removal: GitLab <span class="removal-milestone">16.0</span> (2023-04-22)
|
||||
Planned removal: GitLab <span class="removal-milestone">16.0</span> (2023-05-22)
|
||||
|
||||
WARNING:
|
||||
This is a [breaking change](https://docs.gitlab.com/ee/development/deprecation_guidelines/).
|
||||
|
|
@ -2091,7 +2091,7 @@ Administrators who need to add runners for multiple projects can register a runn
|
|||
|
||||
### GraphQL API Runner status will not return `paused`
|
||||
|
||||
Planned removal: GitLab <span class="removal-milestone">16.0</span> (2023-04-22)
|
||||
Planned removal: GitLab <span class="removal-milestone">16.0</span> (2023-05-22)
|
||||
|
||||
WARNING:
|
||||
This is a [breaking change](https://docs.gitlab.com/ee/development/deprecation_guidelines/).
|
||||
|
|
|
|||
|
|
@ -51,22 +51,22 @@ To run a DAST authenticated scan:
|
|||
|
||||
### Available CI/CD variables
|
||||
|
||||
| CI/CD variable | Type | Description |
|
||||
|:-----------------------------------------------|:--------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| `DAST_AUTH_COOKIES` | string | Set to a comma-separated list of cookie names to specify which cookies are used for authentication. |
|
||||
| `DAST_AUTH_REPORT` | boolean | Used in combination with exporting the `gl-dast-debug-auth-report.html` artifact to aid in debugging authentication issues. |
|
||||
| `DAST_AUTH_URL` <sup>1</sup> | URL | The URL of the page containing the sign-in HTML form on the target website. `DAST_USERNAME` and `DAST_PASSWORD` are submitted with the login form to create an authenticated scan. Example: `https://login.example.com`. |
|
||||
| `DAST_AUTH_VERIFICATION_LOGIN_FORM` | boolean | Verifies successful authentication by checking for the absence of a login form once the login form has been submitted. |
|
||||
| `DAST_AUTH_VERIFICATION_SELECTOR` | selector | Verifies successful authentication by checking for presence of a selector once the login form has been submitted. Example: `css:.user-photo`. |
|
||||
| `DAST_AUTH_VERIFICATION_URL` <sup>1</sup> | URL | Verifies successful authentication by checking the URL in the browser once the login form has been submitted. Example: `"https://example.com/loggedin_page"`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/207335) in GitLab 13.8. |
|
||||
| `DAST_BROWSER_PATH_TO_LOGIN_FORM` <sup>1</sup> | selector | Comma-separated list of selectors that are selected prior to attempting to enter `DAST_USERNAME` and `DAST_PASSWORD` into the login form. Example: `"css:.navigation-menu,css:.login-menu-item"`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/326633) in GitLab 14.1. |
|
||||
| `DAST_EXCLUDE_URLS` <sup>1</sup> | URLs | The URLs to skip during the authenticated scan; comma-separated. Regular expression syntax can be used to match multiple URLs. For example, `.*` matches an arbitrary character sequence. |
|
||||
| `DAST_FIRST_SUBMIT_FIELD` | string | The `id` or `name` of the element that when selected submits the username form of a multi-page login process. For example, `css:button[type='user-submit']`. [Introduced](https://gitlab.com/gitlab-org/gitlab-ee/issues/9894) in GitLab 12.4. |
|
||||
| `DAST_PASSWORD` <sup>1</sup> | string | The password to authenticate to in the website. Example: `P@55w0rd!` |
|
||||
| `DAST_PASSWORD_FIELD` | string | The selector of password field at the sign-in HTML form. Example: `id:password` |
|
||||
| `DAST_SUBMIT_FIELD` | string | The `id` or `name` of the element that when selected submits the login form or the password form of a multi-page login process. For example, `css:button[type='submit']`. [Introduced](https://gitlab.com/gitlab-org/gitlab-ee/issues/9894) in GitLab 12.4. |
|
||||
| `DAST_USERNAME` <sup>1</sup> | string | The username to authenticate to in the website. Example: `admin` |
|
||||
| `DAST_USERNAME_FIELD` <sup>1</sup> | string | The selector of username field at the sign-in HTML form. Example: `name:username` |
|
||||
| CI/CD variable | Type | Description |
|
||||
|:-----------------------------------------------|:------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| `DAST_AUTH_COOKIES` | string | Set to a comma-separated list of cookie names to specify which cookies are used for authentication. |
|
||||
| `DAST_AUTH_REPORT` | boolean | Used in combination with exporting the `gl-dast-debug-auth-report.html` artifact to aid in debugging authentication issues. |
|
||||
| `DAST_AUTH_URL` <sup>1</sup> | URL | The URL of the page containing the sign-in HTML form on the target website. `DAST_USERNAME` and `DAST_PASSWORD` are submitted with the login form to create an authenticated scan. Example: `https://login.example.com`. |
|
||||
| `DAST_AUTH_VERIFICATION_LOGIN_FORM` | boolean | Verifies successful authentication by checking for the absence of a login form once the login form has been submitted. |
|
||||
| `DAST_AUTH_VERIFICATION_SELECTOR` | [selector](#finding-an-elements-selector) | Verifies successful authentication by checking for presence of a selector once the login form has been submitted. Example: `css:.user-photo`. |
|
||||
| `DAST_AUTH_VERIFICATION_URL` <sup>1</sup> | URL | Verifies successful authentication by checking the URL in the browser once the login form has been submitted. Example: `"https://example.com/loggedin_page"`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/207335) in GitLab 13.8. |
|
||||
| `DAST_BROWSER_PATH_TO_LOGIN_FORM` <sup>1</sup> | [selector](#finding-an-elements-selector) | Comma-separated list of selectors that are selected prior to attempting to enter `DAST_USERNAME` and `DAST_PASSWORD` into the login form. Example: `"css:.navigation-menu,css:.login-menu-item"`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/326633) in GitLab 14.1. |
|
||||
| `DAST_EXCLUDE_URLS` <sup>1</sup> | URLs | The URLs to skip during the authenticated scan; comma-separated. Regular expression syntax can be used to match multiple URLs. For example, `.*` matches an arbitrary character sequence. |
|
||||
| `DAST_FIRST_SUBMIT_FIELD` | string | The `id` or `name` of the element that when selected submits the username form of a multi-page login process. For example, `css:button[type='user-submit']`. [Introduced](https://gitlab.com/gitlab-org/gitlab-ee/issues/9894) in GitLab 12.4. |
|
||||
| `DAST_PASSWORD` <sup>1</sup> | string | The password to authenticate to in the website. Example: `P@55w0rd!` |
|
||||
| `DAST_PASSWORD_FIELD` | string | The selector of password field at the sign-in HTML form. Example: `id:password` |
|
||||
| `DAST_SUBMIT_FIELD` | string | The `id` or `name` of the element that when selected submits the login form or the password form of a multi-page login process. For example, `css:button[type='submit']`. [Introduced](https://gitlab.com/gitlab-org/gitlab-ee/issues/9894) in GitLab 12.4. |
|
||||
| `DAST_USERNAME` <sup>1</sup> | string | The username to authenticate to in the website. Example: `admin` |
|
||||
| `DAST_USERNAME_FIELD` <sup>1</sup> | string | The selector of username field at the sign-in HTML form. Example: `name:username` |
|
||||
|
||||
1. Available to an on-demand proxy-based DAST scan.
|
||||
|
||||
|
|
@ -188,13 +188,13 @@ dast:
|
|||
Selectors are used by CI/CD variables to specify the location of an element displayed on a page in a browser.
|
||||
Selectors have the format `type`:`search string`. DAST searches for the selector using the search string based on the type.
|
||||
|
||||
| Selector type | Example | Description |
|
||||
| ------------- | ---------------------------------- | ----------- |
|
||||
| `css` | `css:.password-field` | Searches for a HTML element having the supplied CSS selector. Selectors should be as specific as possible for performance reasons. |
|
||||
| `id` | `id:element` | Searches for an HTML element with the provided element ID. |
|
||||
| `name` | `name:element` | Searches for an HTML element with the provided element name. |
|
||||
| `xpath` | `xpath://input[@id="my-button"]/a` | Searches for a HTML element with the provided XPath. Note that XPath searches are expected to be less performant than other searches. |
|
||||
| None provided | `a.click-me` | Defaults to searching using a CSS selector. |
|
||||
| Selector type | Example | Description |
|
||||
|---------------|------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| `css` | `css:.password-field` | Searches for a HTML element having the supplied CSS selector. Selectors should be as specific as possible for performance reasons. |
|
||||
| `id` | `id:element` | Searches for an HTML element with the provided element ID. |
|
||||
| `name` | `name:element` | Searches for an HTML element with the provided element name. |
|
||||
| `xpath` | `xpath://input[@id="my-button"]/a` | Searches for a HTML element with the provided XPath. Note that XPath searches are expected to be less performant than other searches. |
|
||||
| None provided | `a.click-me` | Defaults to searching using a CSS selector. **{warning}** **[Deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/383348)** in GitLab 15.8. Replaced by explicitly declaring the selector type. |
|
||||
|
||||
#### Find selectors with Google Chrome
|
||||
|
||||
|
|
|
|||
|
|
@ -208,8 +208,8 @@ is NDJSON.
|
|||
### 13.0+
|
||||
|
||||
Starting with GitLab 13.0, GitLab can import bundles that were exported from a different GitLab deployment.
|
||||
This ability is limited to two previous GitLab [minor](../../../policy/maintenance.md#versioning)
|
||||
releases, which is similar to our process for [Security Releases](../../../policy/maintenance.md#security-releases).
|
||||
**This ability is limited to two previous GitLab [minor](../../../policy/maintenance.md#versioning)
|
||||
releases**, which is similar to our process for [Security Releases](../../../policy/maintenance.md#security-releases).
|
||||
|
||||
For example:
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,40 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Gitlab
|
||||
module BackgroundMigration
|
||||
# This class backfills the `environments.tier` column by using `guess_tier` logic.
|
||||
# Environments created after 13.10 already have a value, however, environments created before 13.10 don't.
|
||||
# See https://gitlab.com/gitlab-org/gitlab/-/issues/300741 for more information.
|
||||
class BackfillEnvironmentTiers < BatchedMigrationJob
|
||||
operation_name :backfill_environment_tiers
|
||||
|
||||
# Equivalent to `Environment#guess_tier` pattern matching.
|
||||
PRODUCTION_TIER = 0
|
||||
STAGING_TIER = 1
|
||||
TESTING_TIER = 2
|
||||
DEVELOPMENT_TIER = 3
|
||||
OTHER_TIER = 4
|
||||
|
||||
TIER_REGEXP_PAIR = [
|
||||
{ tier: DEVELOPMENT_TIER, regexp: '(dev|review|trunk)' },
|
||||
{ tier: TESTING_TIER, regexp: '(test|tst|int|ac(ce|)pt|qa|qc|control|quality)' },
|
||||
{ tier: STAGING_TIER, regexp: '(st(a|)g|mod(e|)l|pre|demo|non)' },
|
||||
{ tier: PRODUCTION_TIER, regexp: '(pr(o|)d|live)' }
|
||||
].freeze
|
||||
|
||||
def perform
|
||||
TIER_REGEXP_PAIR.each do |pair|
|
||||
each_sub_batch(
|
||||
batching_scope: ->(relation) { relation.where(tier: nil).where("name ~* '#{pair[:regexp]}'") } # rubocop:disable GitlabSecurity/SqlInjection
|
||||
) do |sub_batch|
|
||||
sub_batch.update_all(tier: pair[:tier])
|
||||
end
|
||||
end
|
||||
|
||||
each_sub_batch(batching_scope: ->(relation) { relation.where(tier: nil) }) do |sub_batch|
|
||||
sub_batch.update_all(tier: OTHER_TIER)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -116,15 +116,9 @@ module Gitlab
|
|||
# Returns an Array of branch names
|
||||
# sorted by name ASC
|
||||
def branch_names
|
||||
if Feature.enabled?(:list_refs_for_find_all_tags_branches, self)
|
||||
refs = list_refs([Gitlab::Git::BRANCH_REF_PREFIX])
|
||||
refs = list_refs([Gitlab::Git::BRANCH_REF_PREFIX])
|
||||
|
||||
refs.map { |ref| Gitlab::Git.branch_name(ref.name) }
|
||||
else
|
||||
wrapped_gitaly_errors do
|
||||
gitaly_ref_client.branch_names
|
||||
end
|
||||
end
|
||||
refs.map { |ref| Gitlab::Git.branch_name(ref.name) }
|
||||
end
|
||||
|
||||
# Returns an Array of Branches
|
||||
|
|
@ -215,15 +209,9 @@ module Gitlab
|
|||
|
||||
# Returns an Array of tag names
|
||||
def tag_names
|
||||
if Feature.enabled?(:list_refs_for_find_all_tags_branches, self)
|
||||
refs = list_refs([Gitlab::Git::TAG_REF_PREFIX])
|
||||
refs = list_refs([Gitlab::Git::TAG_REF_PREFIX])
|
||||
|
||||
refs.map { |ref| Gitlab::Git.tag_name(ref.name) }
|
||||
else
|
||||
wrapped_gitaly_errors do
|
||||
gitaly_ref_client.tag_names
|
||||
end
|
||||
end
|
||||
refs.map { |ref| Gitlab::Git.tag_name(ref.name) }
|
||||
end
|
||||
|
||||
# Returns an Array of Tags
|
||||
|
|
|
|||
|
|
@ -56,18 +56,6 @@ module Gitlab
|
|||
Gitlab::Git.branch_name(response.name)
|
||||
end
|
||||
|
||||
def branch_names
|
||||
request = Gitaly::FindAllBranchNamesRequest.new(repository: @gitaly_repo)
|
||||
response = gitaly_client_call(@storage, :ref_service, :find_all_branch_names, request, timeout: GitalyClient.fast_timeout)
|
||||
consume_refs_response(response) { |name| Gitlab::Git.branch_name(name) }
|
||||
end
|
||||
|
||||
def tag_names
|
||||
request = Gitaly::FindAllTagNamesRequest.new(repository: @gitaly_repo)
|
||||
response = gitaly_client_call(@storage, :ref_service, :find_all_tag_names, request, timeout: GitalyClient.fast_timeout)
|
||||
consume_refs_response(response) { |name| Gitlab::Git.tag_name(name) }
|
||||
end
|
||||
|
||||
def local_branches(sort_by: nil, pagination_params: nil)
|
||||
request = Gitaly::FindLocalBranchesRequest.new(repository: @gitaly_repo, pagination_params: pagination_params)
|
||||
request.sort_by = sort_local_branches_by_param(sort_by) if sort_by
|
||||
|
|
|
|||
|
|
@ -32743,10 +32743,10 @@ msgstr ""
|
|||
msgid "ProjectSettings|Users can copy the repository to a new project."
|
||||
msgstr ""
|
||||
|
||||
msgid "ProjectSettings|Users can only push commits to this repository if the committer email is one of their own verified emails."
|
||||
msgid "ProjectSettings|Users can only push commits to this repository if the commit author name is consistent with their GitLab account name."
|
||||
msgstr ""
|
||||
|
||||
msgid "ProjectSettings|Users can only push commits to this repository if the committer name is consistent with their git config username."
|
||||
msgid "ProjectSettings|Users can only push commits to this repository if the committer email is one of their own verified emails."
|
||||
msgstr ""
|
||||
|
||||
msgid "ProjectSettings|Users can request access"
|
||||
|
|
@ -46326,10 +46326,10 @@ msgstr ""
|
|||
msgid "Webhooks|Pipeline events"
|
||||
msgstr ""
|
||||
|
||||
msgid "Webhooks|Regex such as %{REGEX_CODE} is supported."
|
||||
msgid "Webhooks|Regular expression"
|
||||
msgstr ""
|
||||
|
||||
msgid "Webhooks|Regular expression"
|
||||
msgid "Webhooks|Regular expressions such as %{REGEX_CODE} are supported."
|
||||
msgstr ""
|
||||
|
||||
msgid "Webhooks|Releases events"
|
||||
|
|
|
|||
|
|
@ -109,6 +109,14 @@ module QA
|
|||
element :file_to_commit_content
|
||||
end
|
||||
|
||||
# Used for stablility, due to feature_caching of vscode_web_ide
|
||||
def wait_until_ide_loads
|
||||
Support::Waiter.wait_until(sleep_interval: 2, max_duration: 60, reload_page: page,
|
||||
retry_on_exception: true) do
|
||||
has_element?(:commit_mode_tab)
|
||||
end
|
||||
end
|
||||
|
||||
def has_file?(file_name)
|
||||
within_element(:file_list_container) do
|
||||
has_element?(:file_name_content, file_name: file_name)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module QA
|
||||
RSpec.describe 'Create', product_group: :editor do
|
||||
RSpec.describe 'Create', feature_flag: { name: 'vscode_web_ide', scope: :project }, product_group: :editor do
|
||||
describe 'Web IDE file templates' do
|
||||
include Runtime::Fixtures
|
||||
|
||||
|
|
@ -11,6 +11,11 @@ module QA
|
|||
project.description = 'Add file templates via the Web IDE'
|
||||
project.initialize_with_readme = true
|
||||
end
|
||||
Runtime::Feature.disable(:vscode_web_ide, project: @project)
|
||||
end
|
||||
|
||||
after(:all) do
|
||||
Runtime::Feature.enable(:vscode_web_ide, project: @project)
|
||||
end
|
||||
|
||||
templates = [
|
||||
|
|
@ -54,6 +59,7 @@ module QA
|
|||
|
||||
Page::Project::Show.perform(&:open_web_ide!)
|
||||
Page::Project::WebIDE::Edit.perform do |ide|
|
||||
ide.wait_until_ide_loads
|
||||
ide.create_new_file_from_template template[:file_name], template[:name]
|
||||
|
||||
expect(ide.has_file?(template[:file_name])).to be_truthy
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module QA
|
||||
RSpec.describe 'Create', product_group: :editor do
|
||||
RSpec.describe 'Create', feature_flag: { name: 'vscode_web_ide', scope: :project }, product_group: :editor do
|
||||
describe 'Add a directory in Web IDE' do
|
||||
let(:project) do
|
||||
Resource::Project.fabricate_via_api! do |project|
|
||||
|
|
@ -11,11 +11,15 @@ module QA
|
|||
end
|
||||
|
||||
before do
|
||||
Runtime::Feature.disable(:vscode_web_ide, project: project)
|
||||
Flow::Login.sign_in
|
||||
|
||||
project.visit!
|
||||
end
|
||||
|
||||
after do
|
||||
Runtime::Feature.enable(:vscode_web_ide, project: project)
|
||||
end
|
||||
|
||||
context 'when a directory with the same name already exists' do
|
||||
let(:directory_name) { 'first_directory' }
|
||||
|
||||
|
|
@ -38,6 +42,11 @@ module QA
|
|||
|
||||
it 'throws an error', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347733' do
|
||||
Page::Project::WebIDE::Edit.perform do |ide|
|
||||
# Support::Waiter.wait_until(sleep_interval: 2, max_duration: 60, reload_page: page,
|
||||
# retry_on_exception: true) do
|
||||
# expect(ide).to have_element(:commit_mode_tab)
|
||||
# end
|
||||
ide.wait_until_ide_loads
|
||||
ide.add_directory(directory_name)
|
||||
end
|
||||
|
||||
|
|
@ -54,6 +63,7 @@ module QA
|
|||
|
||||
it 'shows in the tree view but cannot be committed', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347732' do
|
||||
Page::Project::WebIDE::Edit.perform do |ide|
|
||||
ide.wait_until_ide_loads
|
||||
ide.add_directory(directory_name)
|
||||
|
||||
expect(ide).to have_file(directory_name)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module QA
|
||||
RSpec.describe 'Create', product_group: :editor do
|
||||
RSpec.describe 'Create', feature_flag: { name: 'vscode_web_ide', scope: :project }, product_group: :editor do
|
||||
describe 'First file using Web IDE' do
|
||||
let(:project) do
|
||||
Resource::Project.fabricate_via_api! do |project|
|
||||
|
|
@ -13,14 +13,20 @@ module QA
|
|||
let(:file_name) { 'the very first file.txt' }
|
||||
|
||||
before do
|
||||
Runtime::Feature.disable(:vscode_web_ide, project: project)
|
||||
Flow::Login.sign_in
|
||||
end
|
||||
|
||||
after do
|
||||
Runtime::Feature.enable(:vscode_web_ide, project: project)
|
||||
end
|
||||
|
||||
it "creates the first file in an empty project via Web IDE", testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347803' do
|
||||
project.visit!
|
||||
Page::Project::Show.perform(&:create_first_new_file!)
|
||||
|
||||
Page::Project::WebIDE::Edit.perform do |ide|
|
||||
ide.wait_until_ide_loads
|
||||
ide.create_first_file(file_name)
|
||||
ide.commit_changes
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module QA
|
||||
RSpec.describe 'Create', product_group: :editor do
|
||||
RSpec.describe 'Create', feature_flag: { name: 'vscode_web_ide', scope: :project }, product_group: :editor do
|
||||
describe 'Link to line in Web IDE' do
|
||||
let(:user) { Resource::User.fabricate_or_use(Runtime::Env.gitlab_qa_username_1, Runtime::Env.gitlab_qa_password_1) }
|
||||
let(:project) do
|
||||
|
|
@ -11,10 +11,12 @@ module QA
|
|||
end
|
||||
|
||||
before do
|
||||
Runtime::Feature.disable(:vscode_web_ide, project: project)
|
||||
Flow::Login.sign_in
|
||||
end
|
||||
|
||||
after do
|
||||
Runtime::Feature.enable(:vscode_web_ide, project: project)
|
||||
project.remove_via_api!
|
||||
end
|
||||
|
||||
|
|
@ -25,6 +27,7 @@ module QA
|
|||
Page::Project::Show.perform(&:open_web_ide_via_shortcut)
|
||||
|
||||
Page::Project::WebIDE::Edit.perform do |ide|
|
||||
ide.wait_until_ide_loads
|
||||
ide.select_file('app.js')
|
||||
@link = ide.link_line('26')
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module QA
|
||||
RSpec.describe 'Create', product_group: :editor do
|
||||
RSpec.describe 'Create', feature_flag: { name: 'vscode_web_ide', scope: :project }, product_group: :editor do
|
||||
describe 'Open a fork in Web IDE',
|
||||
skip: {
|
||||
issue: "https://gitlab.com/gitlab-org/gitlab/-/issues/351696",
|
||||
|
|
@ -14,6 +14,14 @@ module QA
|
|||
end
|
||||
end
|
||||
|
||||
before do
|
||||
Runtime::Feature.disable(:vscode_web_ide, project: parent_project)
|
||||
end
|
||||
|
||||
after do
|
||||
Runtime::Feature.enable(:vscode_web_ide, project: parent_project)
|
||||
end
|
||||
|
||||
context 'when a user does not have permissions to commit to the project' do
|
||||
let(:user) { Resource::User.fabricate_or_use(Runtime::Env.gitlab_qa_username_2, Runtime::Env.gitlab_qa_password_2) }
|
||||
|
||||
|
|
@ -57,6 +65,7 @@ module QA
|
|||
|
||||
def submit_merge_request_upstream
|
||||
Page::Project::WebIDE::Edit.perform do |ide|
|
||||
ide.wait_until_ide_loads
|
||||
expect(ide).to have_project_path("#{user.username}/#{parent_project.name}")
|
||||
|
||||
ide.add_file('new file', 'some random text')
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module QA
|
||||
RSpec.describe 'Create', product_group: :editor do
|
||||
RSpec.describe 'Create', feature_flag: { name: 'vscode_web_ide', scope: :project }, product_group: :editor do
|
||||
describe 'Open Web IDE from Diff Tab' do
|
||||
files = [
|
||||
{
|
||||
|
|
@ -44,11 +44,15 @@ module QA
|
|||
end
|
||||
|
||||
before do
|
||||
Runtime::Feature.disable(:vscode_web_ide, project: project)
|
||||
Flow::Login.sign_in
|
||||
|
||||
merge_request.visit!
|
||||
end
|
||||
|
||||
after do
|
||||
Runtime::Feature.enable(:vscode_web_ide, project: project)
|
||||
end
|
||||
|
||||
it 'opens and edits a multi-file merge request in Web IDE from Diff Tab', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347724' do
|
||||
Page::MergeRequest::Show.perform do |show|
|
||||
show.click_diffs_tab
|
||||
|
|
@ -56,6 +60,7 @@ module QA
|
|||
end
|
||||
|
||||
Page::Project::WebIDE::Edit.perform do |ide|
|
||||
ide.wait_until_ide_loads
|
||||
files.each do |files|
|
||||
expect(ide).to have_file(files[:file_path])
|
||||
expect(ide).to have_file_content(files[:file_path], files[:content])
|
||||
|
|
|
|||
|
|
@ -1,31 +1,44 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module QA
|
||||
RSpec.describe 'Create', product_group: :editor do
|
||||
RSpec.describe 'Create', feature_flag: { name: 'vscode_web_ide', scope: :project }, product_group: :editor do
|
||||
describe 'Review a merge request in Web IDE' do
|
||||
let(:new_file) { 'awesome_new_file.txt' }
|
||||
let(:original_text) { 'Text' }
|
||||
let(:review_text) { 'Reviewed ' }
|
||||
|
||||
let(:project) do
|
||||
Resource::Project.fabricate_via_api! do |project|
|
||||
project.name = 'review-merge-request-spec-project'
|
||||
project.initialize_with_readme = true
|
||||
end
|
||||
end
|
||||
|
||||
let(:merge_request) do
|
||||
Resource::MergeRequest.fabricate_via_api! do |mr|
|
||||
mr.file_name = new_file
|
||||
mr.file_content = original_text
|
||||
mr.project = project
|
||||
end
|
||||
end
|
||||
|
||||
before do
|
||||
Runtime::Feature.disable(:vscode_web_ide, project: project)
|
||||
Flow::Login.sign_in
|
||||
|
||||
merge_request.visit!
|
||||
end
|
||||
|
||||
after do
|
||||
Runtime::Feature.enable(:vscode_web_ide, project: project)
|
||||
end
|
||||
|
||||
it 'opens and edits a merge request in Web IDE', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347786' do
|
||||
Page::MergeRequest::Show.perform do |show|
|
||||
show.click_open_in_web_ide
|
||||
end
|
||||
|
||||
Page::Project::WebIDE::Edit.perform do |ide|
|
||||
ide.wait_until_ide_loads
|
||||
ide.has_file?(new_file)
|
||||
ide.add_to_modified_content(review_text)
|
||||
ide.commit_changes
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module QA
|
||||
RSpec.describe 'Create', :skip_live_env, except: { job: 'review-qa-*' }, product_group: :editor do
|
||||
RSpec.describe 'Create', :skip_live_env, except: { job: 'review-qa-*' },
|
||||
feature_flag: { name: 'vscode_web_ide', scope: :project },
|
||||
product_group: :editor do
|
||||
describe 'Git Server Hooks' do
|
||||
let(:file_path) { File.absolute_path(File.join('qa', 'fixtures', 'web_ide', 'README.md')) }
|
||||
|
||||
|
|
@ -14,15 +16,21 @@ module QA
|
|||
end
|
||||
|
||||
before do
|
||||
Runtime::Feature.disable(:vscode_web_ide, project: project)
|
||||
Flow::Login.sign_in
|
||||
project.visit!
|
||||
end
|
||||
|
||||
after do
|
||||
Runtime::Feature.enable(:vscode_web_ide, project: project)
|
||||
end
|
||||
|
||||
context 'Custom error messages' do
|
||||
it 'renders preconfigured error message when user hook failed on commit in WebIDE',
|
||||
testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/364751' do
|
||||
Page::Project::Show.perform(&:open_web_ide_via_shortcut)
|
||||
Page::Project::WebIDE::Edit.perform do |ide|
|
||||
ide.wait_until_ide_loads
|
||||
ide.upload_file(file_path)
|
||||
ide.commit_changes(wait_for_success: false)
|
||||
expect(ide).to have_text('Custom error message rejecting prereceive hook for projects with GL_PROJECT_PATH')
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module QA
|
||||
RSpec.describe 'Create', product_group: :editor do
|
||||
RSpec.describe 'Create', feature_flag: { name: 'vscode_web_ide', scope: :project }, product_group: :editor do
|
||||
describe 'Upload a file in Web IDE' do
|
||||
let(:file_path) { File.absolute_path(File.join('qa', 'fixtures', 'web_ide', file_name)) }
|
||||
|
||||
|
|
@ -13,17 +13,23 @@ module QA
|
|||
end
|
||||
|
||||
before do
|
||||
Runtime::Feature.disable(:vscode_web_ide, project: project)
|
||||
Flow::Login.sign_in
|
||||
|
||||
project.visit!
|
||||
Page::Project::Show.perform(&:open_web_ide!)
|
||||
end
|
||||
|
||||
after do
|
||||
Runtime::Feature.enable(:vscode_web_ide, project: project)
|
||||
end
|
||||
|
||||
context 'when a file with the same name already exists' do
|
||||
let(:file_name) { 'README.md' }
|
||||
|
||||
it 'throws an error', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347850' do
|
||||
Page::Project::WebIDE::Edit.perform do |ide|
|
||||
ide.wait_until_ide_loads
|
||||
ide.upload_file(file_path)
|
||||
end
|
||||
|
||||
|
|
@ -36,6 +42,7 @@ module QA
|
|||
|
||||
it 'shows the Edit tab with the text', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347852' do
|
||||
Page::Project::WebIDE::Edit.perform do |ide|
|
||||
ide.wait_until_ide_loads
|
||||
ide.upload_file(file_path)
|
||||
|
||||
expect(ide).to have_file(file_name)
|
||||
|
|
|
|||
|
|
@ -10,10 +10,12 @@ module QA
|
|||
issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/338179',
|
||||
type: :bug
|
||||
},
|
||||
feature_flag: { name: 'vscode_web_ide', scope: :project },
|
||||
product_group: :editor
|
||||
) do
|
||||
describe 'Web IDE web terminal' do
|
||||
before do
|
||||
Runtime::Feature.disable(:vscode_web_ide, project: project)
|
||||
project = Resource::Project.fabricate_via_api! do |project|
|
||||
project.name = 'web-terminal-project'
|
||||
end
|
||||
|
|
@ -56,6 +58,7 @@ module QA
|
|||
end
|
||||
|
||||
after do
|
||||
Runtime::Feature.enable(:vscode_web_ide, project: project)
|
||||
@runner.remove_via_api! if @runner
|
||||
end
|
||||
|
||||
|
|
@ -76,6 +79,7 @@ module QA
|
|||
# There are also FE specs
|
||||
# * spec/frontend/ide/components/terminal/terminal_controls_spec.js
|
||||
Page::Project::WebIDE::Edit.perform do |edit|
|
||||
edit.wait_until_ide_loads
|
||||
edit.start_web_terminal
|
||||
|
||||
expect(edit).to have_no_alert
|
||||
|
|
|
|||
|
|
@ -141,7 +141,7 @@ exports[`Webhook push events form editor component Different push events rules w
|
|||
class="form-text text-muted custom-control"
|
||||
>
|
||||
<gl-sprintf-stub
|
||||
message="Regex such as %{REGEX_CODE} is supported."
|
||||
message="Regular expressions such as %{REGEX_CODE} are supported."
|
||||
/>
|
||||
</p>
|
||||
</gl-form-radio-group-stub>
|
||||
|
|
@ -367,7 +367,7 @@ exports[`Webhook push events form editor component Different push events rules w
|
|||
class="form-text text-muted custom-control"
|
||||
>
|
||||
<gl-sprintf-stub
|
||||
message="Regex such as %{REGEX_CODE} is supported."
|
||||
message="Regular expressions such as %{REGEX_CODE} are supported."
|
||||
/>
|
||||
</p>
|
||||
</gl-form-radio-group-stub>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,119 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe Gitlab::BackgroundMigration::BackfillEnvironmentTiers,
|
||||
:migration, schema: 20221205151917, feature_category: :continuous_delivery do
|
||||
let!(:namespace) { table(:namespaces).create!(name: 'user', path: 'user') }
|
||||
let!(:project) { table(:projects).create!(namespace_id: namespace.id, project_namespace_id: namespace.id) }
|
||||
|
||||
let(:migration) do
|
||||
described_class.new(start_id: 1, end_id: 1000,
|
||||
batch_table: :environments, batch_column: :id,
|
||||
sub_batch_size: 10, pause_ms: 0,
|
||||
connection: ApplicationRecord.connection)
|
||||
end
|
||||
|
||||
describe '#perform' do
|
||||
let!(:production) { table(:environments).create!(name: 'production', slug: 'production', project_id: project.id) }
|
||||
let!(:staging) { table(:environments).create!(name: 'staging', slug: 'staging', project_id: project.id) }
|
||||
let!(:testing) { table(:environments).create!(name: 'testing', slug: 'testing', project_id: project.id) }
|
||||
|
||||
let!(:development) do
|
||||
table(:environments).create!(name: 'development', slug: 'development', project_id: project.id)
|
||||
end
|
||||
|
||||
let!(:other) { table(:environments).create!(name: 'other', slug: 'other', project_id: project.id) }
|
||||
|
||||
it 'backfill tiers for all environments in range' do
|
||||
expect(production.tier).to be_nil
|
||||
expect(staging.tier).to be_nil
|
||||
expect(testing.tier).to be_nil
|
||||
expect(development.tier).to be_nil
|
||||
expect(other.tier).to be_nil
|
||||
|
||||
migration.perform
|
||||
|
||||
expect(production.reload.tier).to eq(described_class::PRODUCTION_TIER)
|
||||
expect(staging.reload.tier).to eq(described_class::STAGING_TIER)
|
||||
expect(testing.reload.tier).to eq(described_class::TESTING_TIER)
|
||||
expect(development.reload.tier).to eq(described_class::DEVELOPMENT_TIER)
|
||||
expect(other.reload.tier).to eq(described_class::OTHER_TIER)
|
||||
end
|
||||
end
|
||||
|
||||
# Equivalent to spec/models/environment_spec.rb#guess_tier
|
||||
describe 'same behavior with guess tier' do
|
||||
using RSpec::Parameterized::TableSyntax
|
||||
|
||||
let(:environment) { table(:environments).create!(name: name, slug: name, project_id: project.id) }
|
||||
|
||||
where(:name, :tier) do
|
||||
'review/feature' | described_class::DEVELOPMENT_TIER
|
||||
'review/product' | described_class::DEVELOPMENT_TIER
|
||||
'DEV' | described_class::DEVELOPMENT_TIER
|
||||
'development' | described_class::DEVELOPMENT_TIER
|
||||
'trunk' | described_class::DEVELOPMENT_TIER
|
||||
'dev' | described_class::DEVELOPMENT_TIER
|
||||
'review/app' | described_class::DEVELOPMENT_TIER
|
||||
'PRODUCTION' | described_class::PRODUCTION_TIER
|
||||
'prod' | described_class::PRODUCTION_TIER
|
||||
'prod-east-2' | described_class::PRODUCTION_TIER
|
||||
'us-prod-east' | described_class::PRODUCTION_TIER
|
||||
'fe-production' | described_class::PRODUCTION_TIER
|
||||
'test' | described_class::TESTING_TIER
|
||||
'TEST' | described_class::TESTING_TIER
|
||||
'testing' | described_class::TESTING_TIER
|
||||
'testing-prd' | described_class::TESTING_TIER
|
||||
'acceptance-testing' | described_class::TESTING_TIER
|
||||
'production-test' | described_class::TESTING_TIER
|
||||
'test-production' | described_class::TESTING_TIER
|
||||
'QC' | described_class::TESTING_TIER
|
||||
'qa-env-2' | described_class::TESTING_TIER
|
||||
'gstg' | described_class::STAGING_TIER
|
||||
'staging' | described_class::STAGING_TIER
|
||||
'stage' | described_class::STAGING_TIER
|
||||
'Model' | described_class::STAGING_TIER
|
||||
'MODL' | described_class::STAGING_TIER
|
||||
'Pre-production' | described_class::STAGING_TIER
|
||||
'pre' | described_class::STAGING_TIER
|
||||
'Demo' | described_class::STAGING_TIER
|
||||
'staging' | described_class::STAGING_TIER
|
||||
'pre-prod' | described_class::STAGING_TIER
|
||||
'blue-kit-stage' | described_class::STAGING_TIER
|
||||
'nonprod' | described_class::STAGING_TIER
|
||||
'nonlive' | described_class::STAGING_TIER
|
||||
'non-prod' | described_class::STAGING_TIER
|
||||
'non-live' | described_class::STAGING_TIER
|
||||
'gprd' | described_class::PRODUCTION_TIER
|
||||
'gprd-cny' | described_class::PRODUCTION_TIER
|
||||
'production' | described_class::PRODUCTION_TIER
|
||||
'Production' | described_class::PRODUCTION_TIER
|
||||
'PRODUCTION' | described_class::PRODUCTION_TIER
|
||||
'Production/eu' | described_class::PRODUCTION_TIER
|
||||
'production/eu' | described_class::PRODUCTION_TIER
|
||||
'PRODUCTION/EU' | described_class::PRODUCTION_TIER
|
||||
'productioneu' | described_class::PRODUCTION_TIER
|
||||
'store-produce' | described_class::PRODUCTION_TIER
|
||||
'unproductive' | described_class::PRODUCTION_TIER
|
||||
'production/www.gitlab.com' | described_class::PRODUCTION_TIER
|
||||
'prod' | described_class::PRODUCTION_TIER
|
||||
'PROD' | described_class::PRODUCTION_TIER
|
||||
'Live' | described_class::PRODUCTION_TIER
|
||||
'canary' | described_class::OTHER_TIER
|
||||
'other' | described_class::OTHER_TIER
|
||||
'EXP' | described_class::OTHER_TIER
|
||||
'something-else' | described_class::OTHER_TIER
|
||||
end
|
||||
|
||||
with_them do
|
||||
it 'backfill tiers for all environments in range' do
|
||||
expect(environment.tier).to be_nil
|
||||
|
||||
migration.perform
|
||||
|
||||
expect(environment.reload.tier).to eq(tier)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -71,25 +71,6 @@ RSpec.describe Gitlab::Git::Repository do
|
|||
it { is_expected.not_to include("branch-from-space") }
|
||||
|
||||
it_behaves_like 'wrapping gRPC errors', Gitlab::GitalyClient::RefService, :list_refs
|
||||
|
||||
context 'feature list_refs_for_find_all_tags_branches disabled' do
|
||||
before do
|
||||
stub_feature_flags(list_refs_for_find_all_tags_branches: false)
|
||||
end
|
||||
|
||||
it 'has TestRepo::BRANCH_SHA.size elements' do
|
||||
expect(subject.size).to eq(TestEnv::BRANCH_SHA.size)
|
||||
end
|
||||
|
||||
it 'returns UTF-8' do
|
||||
expect(subject.first).to be_utf8
|
||||
end
|
||||
|
||||
it { is_expected.to include("master") }
|
||||
it { is_expected.not_to include("branch-from-space") }
|
||||
|
||||
it_behaves_like 'wrapping gRPC errors', Gitlab::GitalyClient::RefService, :branch_names
|
||||
end
|
||||
end
|
||||
|
||||
describe '#tag_names' do
|
||||
|
|
@ -115,33 +96,6 @@ RSpec.describe Gitlab::Git::Repository do
|
|||
it { is_expected.not_to include("v5.0.0") }
|
||||
|
||||
it_behaves_like 'wrapping gRPC errors', Gitlab::GitalyClient::RefService, :list_refs
|
||||
|
||||
context 'feature list_refs_for_find_all_tags_branches disabled' do
|
||||
before do
|
||||
stub_feature_flags(list_refs_for_find_all_tags_branches: false)
|
||||
end
|
||||
|
||||
it { is_expected.to be_kind_of Array }
|
||||
|
||||
it 'has some elements' do
|
||||
expect(subject.size).to be >= 1
|
||||
end
|
||||
|
||||
it 'returns UTF-8' do
|
||||
expect(subject.first).to be_utf8
|
||||
end
|
||||
|
||||
describe '#last' do
|
||||
subject { super().last }
|
||||
|
||||
it { is_expected.to eq("v1.1.1") }
|
||||
end
|
||||
|
||||
it { is_expected.to include("v1.0.0") }
|
||||
it { is_expected.not_to include("v5.0.0") }
|
||||
|
||||
it_behaves_like 'wrapping gRPC errors', Gitlab::GitalyClient::RefService, :tag_names
|
||||
end
|
||||
end
|
||||
|
||||
describe '#tags' do
|
||||
|
|
@ -1476,29 +1430,6 @@ RSpec.describe Gitlab::Git::Repository do
|
|||
expect(repository.branch_count).to eq(repository.local_branches.count)
|
||||
end
|
||||
end
|
||||
|
||||
context 'feature list_refs_for_find_all_tags_branches disabled' do
|
||||
before do
|
||||
stub_feature_flags(list_refs_for_find_all_tags_branches: false)
|
||||
end
|
||||
|
||||
it 'returns the number of branches' do
|
||||
expect(repository.branch_count).to eq(TestEnv::BRANCH_SHA.size)
|
||||
end
|
||||
|
||||
context 'with local and remote branches' do
|
||||
let(:repository) { mutable_repository }
|
||||
|
||||
before do
|
||||
create_remote_branch('joe', 'remote_branch', 'master')
|
||||
repository.create_branch('local_branch')
|
||||
end
|
||||
|
||||
it 'returns the count of local branches' do
|
||||
expect(repository.branch_count).to eq(repository.local_branches.count)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#merged_branch_names' do
|
||||
|
|
|
|||
|
|
@ -71,28 +71,6 @@ RSpec.describe Gitlab::GitalyClient::RefService do
|
|||
end
|
||||
end
|
||||
|
||||
describe '#branch_names' do
|
||||
it 'sends a find_all_branch_names message' do
|
||||
expect_any_instance_of(Gitaly::RefService::Stub)
|
||||
.to receive(:find_all_branch_names)
|
||||
.with(gitaly_request_with_path(storage_name, relative_path), kind_of(Hash))
|
||||
.and_return([])
|
||||
|
||||
client.branch_names
|
||||
end
|
||||
end
|
||||
|
||||
describe '#tag_names' do
|
||||
it 'sends a find_all_tag_names message' do
|
||||
expect_any_instance_of(Gitaly::RefService::Stub)
|
||||
.to receive(:find_all_tag_names)
|
||||
.with(gitaly_request_with_path(storage_name, relative_path), kind_of(Hash))
|
||||
.and_return([])
|
||||
|
||||
client.tag_names
|
||||
end
|
||||
end
|
||||
|
||||
describe '#find_branch' do
|
||||
it 'sends a find_branch message' do
|
||||
expect_any_instance_of(Gitaly::RefService::Stub)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,24 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
require_migration!
|
||||
|
||||
RSpec.describe ScheduleBackfillEnvironmentTier, category: :continuous_delivery do
|
||||
let!(:batched_migration) { described_class::MIGRATION }
|
||||
|
||||
it 'schedules a new batched migration' do
|
||||
reversible_migration do |migration|
|
||||
migration.before -> {
|
||||
expect(batched_migration).not_to have_scheduled_batched_migration
|
||||
}
|
||||
|
||||
migration.after -> {
|
||||
expect(batched_migration).to have_scheduled_batched_migration(
|
||||
table_name: :environments,
|
||||
column_name: :id,
|
||||
interval: described_class::DELAY_INTERVAL
|
||||
)
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -115,7 +115,7 @@ RSpec.describe Deployments::UpdateEnvironmentService do
|
|||
let(:external_url) { 'javascript:alert("hello")' }
|
||||
|
||||
it 'fails to update the tier due to validation error' do
|
||||
expect { subject.execute }.not_to change { environment.tier }
|
||||
expect { subject.execute }.not_to change { environment.reload.tier }
|
||||
end
|
||||
|
||||
it 'tracks an exception' do
|
||||
|
|
|
|||
Loading…
Reference in New Issue