diff options
37 files changed, 236 insertions, 384 deletions
diff --git a/app/assets/javascripts/alert_management/components/alert_management_table.vue b/app/assets/javascripts/alert_management/components/alert_management_table.vue index fc87252f772..6000acb6aa3 100644 --- a/app/assets/javascripts/alert_management/components/alert_management_table.vue +++ b/app/assets/javascripts/alert_management/components/alert_management_table.vue @@ -94,7 +94,7 @@ export default { }, { key: 'issue', - label: s__('AlertManagement|Issue'), + label: s__('AlertManagement|Incident'), thClass: 'gl-w-12 gl-pointer-events-none', tdClass, }, diff --git a/app/assets/javascripts/repository/components/breadcrumbs.vue b/app/assets/javascripts/repository/components/breadcrumbs.vue index 74437f286b4..677cb265942 100644 --- a/app/assets/javascripts/repository/components/breadcrumbs.vue +++ b/app/assets/javascripts/repository/components/breadcrumbs.vue @@ -1,9 +1,9 @@ <script> import { - GlDeprecatedDropdown, - GlDeprecatedDropdownDivider, - GlDeprecatedDropdownHeader, - GlDeprecatedDropdownItem, + GlDropdown, + GlDropdownDivider, + GlDropdownSectionHeader, + GlDropdownItem, GlIcon, } from '@gitlab/ui'; import { joinPaths, escapeFileUrl } from '~/lib/utils/url_utility'; @@ -20,10 +20,10 @@ const ROW_TYPES = { export default { components: { - GlDeprecatedDropdown, - GlDeprecatedDropdownDivider, - GlDeprecatedDropdownHeader, - GlDeprecatedDropdownItem, + GlDropdown, + GlDropdownDivider, + GlDropdownSectionHeader, + GlDropdownItem, GlIcon, }, apollo: { @@ -226,11 +226,11 @@ export default { getComponent(type) { switch (type) { case ROW_TYPES.divider: - return 'gl-deprecated-dropdown-divider'; + return 'gl-dropdown-divider'; case ROW_TYPES.header: - return 'gl-deprecated-dropdown-header'; + return 'gl-dropdown-section-header'; default: - return 'gl-deprecated-dropdown-item'; + return 'gl-dropdown-item'; } }, }, @@ -246,7 +246,7 @@ export default { </router-link> </li> <li v-if="renderAddToTreeDropdown" class="breadcrumb-item"> - <gl-deprecated-dropdown toggle-class="add-to-tree qa-add-to-tree ml-1"> + <gl-dropdown toggle-class="add-to-tree qa-add-to-tree gl-ml-2"> <template #button-content> <span class="sr-only">{{ __('Add to tree') }}</span> <gl-icon name="plus" :size="16" class="float-left" /> @@ -257,7 +257,7 @@ export default { {{ item.text }} </component> </template> - </gl-deprecated-dropdown> + </gl-dropdown> </li> </ol> </nav> diff --git a/app/assets/stylesheets/page_bundles/boards.scss b/app/assets/stylesheets/page_bundles/boards.scss index ffa034a2495..e908e3622ed 100644 --- a/app/assets/stylesheets/page_bundles/boards.scss +++ b/app/assets/stylesheets/page_bundles/boards.scss @@ -27,7 +27,7 @@ margin: 0; padding: $gl-padding-4 $gl-padding $gl-padding; border-bottom: 0; - color: $gl-text-color-secondary; + color: var(--gray-500, $gray-500); } .issue-boards-page { @@ -102,7 +102,7 @@ } &:hover { - background-color: $gray-50; + background-color: var(--gray-50, $gray-50); transition: background-color 0.1s linear; } } @@ -167,8 +167,8 @@ .board-inner { font-size: $issue-boards-font-size; - background: $gray-light; - border: 1px solid $gray-100; + background: var(--gray-10, $gray-10); + border: 1px solid var(--gray-100, $gray-100); } .board-header { @@ -199,7 +199,7 @@ .board-title { align-items: center; font-size: 1em; - border-bottom: 1px solid $gray-100; + border-bottom: 1px solid var(--gray-100, $gray-100); padding: 0 $gl-spacing-scale-3; height: 3rem; @@ -217,14 +217,14 @@ outline: 0; &:hover { - color: $blue-600; + color: var(--blue-600, $blue-600); box-shadow: none; } } .board-blank-state, .board-promotion-state { - background-color: $white; + background-color: var(--white, $white); flex: 1; overflow-y: auto; overflow-x: hidden; @@ -258,9 +258,9 @@ } .board-card { - background: $white; - border: 1px solid $gray-100; - box-shadow: 0 1px 2px $issue-boards-card-shadow; + background: var(--white, $white); + border: 1px solid var(--gray-100, $gray-100); + box-shadow: 0 1px 2px rgba(var(--black, $black), 0.1); line-height: $gl-padding; list-style: none; position: relative; @@ -271,12 +271,12 @@ &.is-active, &.is-active .board-card-assignee:hover a { - background-color: $blue-50; + background-color: var(--blue-50, $blue-50); } &.multi-select { - border-color: $blue-200; - background-color: $blue-50; + border-color: var(--blue-200, $blue-200); + background-color: var(--blue-50, $blue-50); } .gl-label { @@ -285,12 +285,12 @@ } .confidential-icon { - color: $orange-500; + color: var(--orange-500, $orange-500); cursor: help; } .issue-blocked-icon { - color: $red-500; + color: var(--red-500, $red-500); } @include media-breakpoint-down(md) { @@ -303,7 +303,7 @@ font-size: 1em; a { - color: $gl-text-color; + color: var(--gray-900, $gray-900); } @include media-breakpoint-down(md) { @@ -325,7 +325,7 @@ min-width: $gl-padding-24; height: $gl-padding-24; border-radius: $gl-padding-24; - background-color: $gl-text-color-tertiary; + background-color: var(--gray-400, $gray-400); font-size: $gl-font-size-xs; cursor: help; font-weight: $gl-font-weight-bold; @@ -372,7 +372,7 @@ .board-card-number { font-size: $gl-font-size-xs; - color: $gl-text-color-secondary; + color: var(--gray-500, $gray-500); @include media-breakpoint-up(md) { font-size: $label-font-size; @@ -381,7 +381,7 @@ .board-list-count { padding: 10px 0; - color: $gl-text-color-secondary; + color: var(--gray-500, $gray-500); font-size: 13px; } @@ -437,8 +437,8 @@ max-width: 1100px; min-height: 500px; padding: 25px 15px 0; - background-color: $white; - box-shadow: 0 2px 12px rgba($black, 0.5); + background-color: var(--white, $white); + box-shadow: 0 2px 12px rgba(var(--black, $black), 0.5); .empty-state { &.add-issues-empty-state-filter { @@ -486,8 +486,8 @@ } .board-card { - border: 1px solid $border-white-normal; - box-shadow: 0 1px 2px rgba($issue-boards-card-shadow, 0.3); + border: 1px solid var(--gray-900, $gray-900); + box-shadow: 0 1px 2px rgba(var(--black, $black), 0.4); cursor: pointer; } } @@ -511,16 +511,16 @@ right: -3px; top: -3px; width: 17px; - background-color: $blue-500; + background-color: var(--blue-500, $blue-500); color: $white; - border: 1px solid $blue-600; + border: 1px solid var(--blue-600, $blue-600); font-size: 9px; line-height: 15px; border-radius: 50%; } .board-card-info { - color: $gl-text-color-secondary; + color: var(--gray-500, $gray-500); white-space: nowrap; margin-right: $gl-padding-8; @@ -529,7 +529,7 @@ } &.board-card-weight { - color: $gl-text-color-secondary; + color: var(--gray-500, $gray-500); cursor: pointer; &:hover { @@ -539,7 +539,7 @@ } .board-card-info-icon { - color: $gray-500; + color: var(--gray-500, $gray-500); margin-right: $gl-padding-4; vertical-align: text-top; } @@ -568,7 +568,7 @@ height: 100%; top: 0; left: 0; - background: $white; + background: var(--white, $white); z-index: 9000; @include media-breakpoint-down(sm) { @@ -591,7 +591,7 @@ } .board-header-collapsed-info-icon:hover { - color: $gray-900; + color: var(--gray-900, $gray-900); } $epic-icons-spacing: 40px; diff --git a/app/assets/stylesheets/page_bundles/milestone.scss b/app/assets/stylesheets/page_bundles/milestone.scss index c1d7d86e3f9..858e13fc558 100644 --- a/app/assets/stylesheets/page_bundles/milestone.scss +++ b/app/assets/stylesheets/page_bundles/milestone.scss @@ -10,13 +10,13 @@ $status-box-line-height: 26px; padding: $gl-padding-8; margin-top: $gl-padding-8; border-radius: $border-radius-default; - background-color: $gray-100; + background-color: var(--gray-100, $gray-100); .milestone { border: 0; padding: $gl-padding-top $gl-padding; border-radius: $border-radius-default; - background-color: $white; + background-color: var(--white, $white); &:not(:last-child) { margin-bottom: $gl-padding-4; @@ -35,7 +35,7 @@ $status-box-line-height: 26px; .milestone-progress, .milestone-release-links { a { - color: $blue-600; + color: var(--blue-600, $blue-600); } } @@ -63,7 +63,7 @@ $status-box-line-height: 26px; .issuable-row { span { a { - color: $gl-text-color; + color: var(--gray-900, $gray-900); word-wrap: break-word; } @@ -164,7 +164,7 @@ $status-box-line-height: 26px; } .issuable-number { - color: $gl-text-color-secondary; + color: var(--gray-500, $gray-500); margin-right: 5px; } @@ -179,7 +179,7 @@ $status-box-line-height: 26px; } .milestone-detail { - border-bottom: 1px solid $border-color; + border-bottom: 1px solid var(--border-color, $border-color); } @include media-breakpoint-down(xs) { @@ -235,7 +235,7 @@ $status-box-line-height: 26px; } .issuable-row { - background-color: $white; + background-color: var(--white, $white); } .milestone-popover-instructions-list { diff --git a/app/helpers/mirror_helper.rb b/app/helpers/mirror_helper.rb index 50fc5e521fc..9d23ab87b98 100644 --- a/app/helpers/mirror_helper.rb +++ b/app/helpers/mirror_helper.rb @@ -9,7 +9,11 @@ module MirrorHelper end def mirror_lfs_sync_message - html_escape(_('The Git LFS objects will %{strong_open}not%{strong_close} be synced.')) % { strong_open: '<strong>'.html_safe, strong_close: '</strong>'.html_safe } + docs_link_url = help_page_path('topics/git/lfs/index') + docs_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: docs_link_url } + + html_escape(_('Git LFS objects will be synced if LFS is %{docs_link_start}enabled for the project%{docs_link_end}. Push mirrors will %{strong_open}not%{strong_close} sync LFS objects over SSH.')) % + { docs_link_start: docs_link_start, docs_link_end: '</a>'.html_safe, strong_open: '<strong>'.html_safe, strong_close: '</strong>'.html_safe } end end diff --git a/app/services/projects/update_remote_mirror_service.rb b/app/services/projects/update_remote_mirror_service.rb index 40cf916e2f5..6115db54829 100644 --- a/app/services/projects/update_remote_mirror_service.rb +++ b/app/services/projects/update_remote_mirror_service.rb @@ -55,7 +55,6 @@ module Projects end def send_lfs_objects!(remote_mirror) - return unless Feature.enabled?(:push_mirror_syncs_lfs, project) return unless project.lfs_enabled? # TODO: Support LFS sync over SSH diff --git a/changelogs/unreleased/254281-remove-push-mirror-syncs-lfs-feature-flag.yml b/changelogs/unreleased/254281-remove-push-mirror-syncs-lfs-feature-flag.yml new file mode 100644 index 00000000000..6272ae1b995 --- /dev/null +++ b/changelogs/unreleased/254281-remove-push-mirror-syncs-lfs-feature-flag.yml @@ -0,0 +1,5 @@ +--- +title: Sync LFS objects when push mirroring over HTTPS +merge_request: 44457 +author: +type: added diff --git a/changelogs/unreleased/257762-boards-page-broken-on-dark-mode.yml b/changelogs/unreleased/257762-boards-page-broken-on-dark-mode.yml new file mode 100644 index 00000000000..44dda08d5b0 --- /dev/null +++ b/changelogs/unreleased/257762-boards-page-broken-on-dark-mode.yml @@ -0,0 +1,5 @@ +--- +title: Fix dark mode for boards and swimlanes +merge_request: 44951 +author: +type: fixed diff --git a/changelogs/unreleased/257764-milestones-page-broken-on-dark-mode.yml b/changelogs/unreleased/257764-milestones-page-broken-on-dark-mode.yml new file mode 100644 index 00000000000..40a552d2d25 --- /dev/null +++ b/changelogs/unreleased/257764-milestones-page-broken-on-dark-mode.yml @@ -0,0 +1,5 @@ +--- +title: Fix dark mode for milestones +merge_request: 44952 +author: +type: fixed diff --git a/changelogs/unreleased/Replace-GlDeprecatedDropdown-with-GlDropdown-in-app-assets-javascripts-re.yml b/changelogs/unreleased/Replace-GlDeprecatedDropdown-with-GlDropdown-in-app-assets-javascripts-re.yml new file mode 100644 index 00000000000..3c7fa2f2e5f --- /dev/null +++ b/changelogs/unreleased/Replace-GlDeprecatedDropdown-with-GlDropdown-in-app-assets-javascripts-re.yml @@ -0,0 +1,5 @@ +--- +title: Replace `GlDeprecatedDropdown` with `GlDropdown` in `app/assets/javascripts/repository/components/breadcrumbs.vue` +merge_request: 41427 +author: nuwe1 +type: other diff --git a/changelogs/unreleased/lm-enable-one-d-matrix-by-default.yml b/changelogs/unreleased/lm-enable-one-d-matrix-by-default.yml new file mode 100644 index 00000000000..0a3266d2747 --- /dev/null +++ b/changelogs/unreleased/lm-enable-one-d-matrix-by-default.yml @@ -0,0 +1,5 @@ +--- +title: Enable one_dimensional_matrix feature flag by default +merge_request: 45086 +author: +type: added diff --git a/changelogs/unreleased/revert-aa19ce96.yml b/changelogs/unreleased/revert-aa19ce96.yml new file mode 100644 index 00000000000..c814da0d016 --- /dev/null +++ b/changelogs/unreleased/revert-aa19ce96.yml @@ -0,0 +1,5 @@ +--- +title: Revert of Background migration for setting Jira tracker data deployment type +merge_request: 45205 +author: +type: fixed diff --git a/config/feature_flags/development/one_dimensional_matrix.yml b/config/feature_flags/development/one_dimensional_matrix.yml index a0eb4fe9e7d..1db16474d38 100644 --- a/config/feature_flags/development/one_dimensional_matrix.yml +++ b/config/feature_flags/development/one_dimensional_matrix.yml @@ -4,4 +4,4 @@ introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/42170 rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/256062 type: development group: group::pipeline authoring -default_enabled: false +default_enabled: true diff --git a/config/feature_flags/development/push_mirror_syncs_lfs.yml b/config/feature_flags/development/push_mirror_syncs_lfs.yml deleted file mode 100644 index d78fe679baa..00000000000 --- a/config/feature_flags/development/push_mirror_syncs_lfs.yml +++ /dev/null @@ -1,7 +0,0 @@ ---- -name: push_mirror_syncs_lfs -introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/40137 -rollout_issue_url: -group: group::source code -type: development -default_enabled: false diff --git a/db/post_migrate/20200910155617_backfill_jira_tracker_deployment_type.rb b/db/post_migrate/20200910155617_backfill_jira_tracker_deployment_type.rb index 06fcfb6a2cf..9c978a20d25 100644 --- a/db/post_migrate/20200910155617_backfill_jira_tracker_deployment_type.rb +++ b/db/post_migrate/20200910155617_backfill_jira_tracker_deployment_type.rb @@ -5,26 +5,11 @@ class BackfillJiraTrackerDeploymentType < ActiveRecord::Migration[6.0] DOWNTIME = false - disable_ddl_transaction! - - MIGRATION = 'BackfillJiraTrackerDeploymentType' - BATCH_SIZE = 100 - BATCH_INTERVAL = 20.seconds - - class JiraTrackerData < ActiveRecord::Base - self.table_name = 'jira_tracker_data' - - include ::EachBatch - end - - # 78_627 JiraTrackerData records, 76_313 with deployment_type == 0 def up - JiraTrackerData.where(deployment_type: 0).each_batch(of: BATCH_SIZE) do |relation, index| - jobs = relation.pluck(:id).map { |id| [MIGRATION, [id]] } - delay = index * BATCH_INTERVAL - - bulk_migrate_in(delay, jobs) - end + # no-op + # this migration was reverted + # in https://gitlab.com/gitlab-org/gitlab/-/merge_requests/45205 + # due to https://gitlab.com/gitlab-com/gl-infra/production/-/issues/2820 end def down diff --git a/doc/api/README.md b/doc/api/README.md index c501471ebc7..50f61fa010b 100644 --- a/doc/api/README.md +++ b/doc/api/README.md @@ -163,7 +163,7 @@ to authenticate with the API: - [Conan Repository](../user/packages/conan_repository/index.md) - [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) - - [Maven Repository](../user/packages/maven_repository/index.md#authenticating-with-a-ci-job-token) + - [Maven Repository](../user/packages/maven_repository/index.md#authenticate-with-a-ci-job-token) - [NPM Repository](../user/packages/npm_registry/index.md#authenticating-with-a-ci-job-token) - [Nuget Repository](../user/packages/nuget_repository/index.md) - [PyPI Repository](../user/packages/pypi_repository/index.md#using-gitlab-ci-with-pypi-packages) diff --git a/doc/ci/README.md b/doc/ci/README.md index 5220ec53c61..9bea4a707d7 100644 --- a/doc/ci/README.md +++ b/doc/ci/README.md @@ -73,6 +73,8 @@ to your needs: ![Use a `.gitlab-ci.yml` template](img/add_file_template_11_10.png) +While building your `.gitlab-ci.yml`, you can use the [CI/CD configuration visualization](yaml/visualization.md) to facilate your writing experience. + For a broader overview, see the [CI/CD getting started](quick_start/README.md) guide. Once you're familiar with how GitLab CI/CD works, see the diff --git a/doc/ci/quick_start/README.md b/doc/ci/quick_start/README.md index a8a70642d5b..246430a6458 100644 --- a/doc/ci/quick_start/README.md +++ b/doc/ci/quick_start/README.md @@ -112,6 +112,9 @@ What is important is that each job is run independently from each other. If you want to check whether the `.gitlab-ci.yml` of your project is valid, there is a [CI Lint tool](../lint.md) available in every project. +You can use the [CI/CD configuration visualization](../yaml/visualization.md) to +see a graphical representation of your `.gitlab-ci.yml`. + For more information and a complete `.gitlab-ci.yml` syntax, please read [the reference documentation on `.gitlab-ci.yml`](../yaml/README.md). diff --git a/doc/ci/yaml/README.md b/doc/ci/yaml/README.md index d2ec61b9b2b..1a005f6b858 100644 --- a/doc/ci/yaml/README.md +++ b/doc/ci/yaml/README.md @@ -3574,8 +3574,8 @@ There can be from 2 to 50 jobs. [In GitLab 13.5](https://gitlab.com/gitlab-org/gitlab/-/issues/26362) and later, you can have one-dimensional matrices with a single job. The ability to have one-dimensional matrices is [deployed behind a feature flag](../../user/feature_flags.md), -disabled by default. It's disabled on GitLab.com. To use it in a GitLab self-managed -instance, ask a GitLab administrator to [enable the `one_dimensional_matrix:` feature flag](../../administration/feature_flags.md). **(CORE ONLY)** +enabled by default. It's enabled on GitLab.com. For self-managed GitLab instances, +administrators can opt to disable it by [disabling the `one_dimensional_matrix:` feature flag](../../administration/feature_flags.md). **(CORE ONLY)** Every job gets the same `CI_NODE_TOTAL` [environment variable](../variables/README.md#predefined-environment-variables) value, and a unique `CI_NODE_INDEX` value. diff --git a/doc/ci/yaml/img/ci_config_visualization_hover_v13_5.png b/doc/ci/yaml/img/ci_config_visualization_hover_v13_5.png Binary files differnew file mode 100644 index 00000000000..e6c85bd39e4 --- /dev/null +++ b/doc/ci/yaml/img/ci_config_visualization_hover_v13_5.png diff --git a/doc/ci/yaml/img/ci_config_visualization_v13_5.png b/doc/ci/yaml/img/ci_config_visualization_v13_5.png Binary files differnew file mode 100644 index 00000000000..0aee5cff7be --- /dev/null +++ b/doc/ci/yaml/img/ci_config_visualization_v13_5.png diff --git a/doc/ci/yaml/visualization.md b/doc/ci/yaml/visualization.md new file mode 100644 index 00000000000..ac5f5c8fd14 --- /dev/null +++ b/doc/ci/yaml/visualization.md @@ -0,0 +1,46 @@ +# Visualize your CI/CD configuration + +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/241722) in GitLab 13.5. +> - It's [deployed behind a feature flag](../../user/feature_flags.md), disabled by default. +> - It's disabled on GitLab.com. +> - It's not recommended for production use. +> - To use it in GitLab self-managed instances, ask a GitLab administrator to [enable it](#enable-or-disable-cicd-configuration-visualization). **(CORE ONLY)** + +CAUTION: **Warning:** +This feature might not be available to you. Check the **version history** note above for details. + +To see a visualization of your `gitlab-ci.yml` configuration, navigate to any CI/CD +configuration file and click on the `Visualization` tab. The visualization shows +all stages and jobs. [`needs`](README.md#needs) relationships are displayed as lines +connecting jobs together, showing the hierarchy of execution: + +![CI Config Visualization](img/ci_config_visualization_v13_5.png) + +Hovering on a job highlights its `needs` relationships: + +![CI Config Visualization on hover](img/ci_config_visualization_hover_v13_5.png) + +If the configuration does not have any `needs` relationships, then no lines are drawn because +each job depends only on the previous stage being completed successfully. + +You can only preview one `gitlab-ci.yml` file at a time. Configuration imported with +[`includes`](README.md#include) is ignored and not included in the visualization. + +## Enable or disable CI/CD configuration visualization **(CORE ONLY)** + +CI/CD configuration visualization is under development and not ready for production use. It is +deployed behind a feature flag that is **disabled by default**. +[GitLab administrators with access to the GitLab Rails console](../../administration/feature_flags.md) +can enable it. + +To enable it: + +```ruby +Feature.enable(:gitlab_ci_yml_preview) +``` + +To disable it: + +```ruby +Feature.disable(:gitlab_ci_yml_preview) +``` diff --git a/doc/development/product_analytics/usage_ping.md b/doc/development/product_analytics/usage_ping.md index 2feeb129fe2..7c8a62e2528 100644 --- a/doc/development/product_analytics/usage_ping.md +++ b/doc/development/product_analytics/usage_ping.md @@ -607,7 +607,7 @@ When adding, changing, or updating metrics, please update the [Event Dictionary' ### 5. Add new metric to Versions Application -Check if new metrics need to be added to the Versions Application. See `usage_data` [schema](https://gitlab.com/gitlab-services/version-gitlab-com/-/blob/master/db/schema.rb#L147) and usage data [parameters accepted](https://gitlab.com/gitlab-services/version-gitlab-com/-/blob/master/app/services/usage_ping.rb). Any metrics added under the `counts` key are saved in the `counts` column. +Check if new metrics need to be added to the Versions Application. See `usage_data` [schema](https://gitlab.com/gitlab-services/version-gitlab-com/-/blob/master/db/schema.rb#L147) and usage data [parameters accepted](https://gitlab.com/gitlab-services/version-gitlab-com/-/blob/master/app/services/usage_ping.rb). Any metrics added under the `counts` key are saved in the `stats` column. ### 6. Add the feature label diff --git a/doc/operations/incident_management/integrations.md b/doc/operations/incident_management/integrations.md index 0da71503383..9d4f32ab2bf 100644 --- a/doc/operations/incident_management/integrations.md +++ b/doc/operations/incident_management/integrations.md @@ -6,7 +6,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w # Integrations -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/13203) in [GitLab Core](https://about.gitlab.com/pricing/) 12.5. +> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/245331) in [GitLab Core](https://about.gitlab.com/pricing/) 13.5. With Maintainer or higher [permissions](../../user/permissions.md), you can view the list of configured alerts integrations by navigating to diff --git a/doc/user/packages/maven_repository/img/maven_package_view_v12_6.png b/doc/user/packages/maven_repository/img/maven_package_view_v12_6.png Binary files differdeleted file mode 100644 index 92cefc26660..00000000000 --- a/doc/user/packages/maven_repository/img/maven_package_view_v12_6.png +++ /dev/null diff --git a/doc/user/packages/maven_repository/index.md b/doc/user/packages/maven_repository/index.md index 7329725a643..d4a8ff0cdb4 100644 --- a/doc/user/packages/maven_repository/index.md +++ b/doc/user/packages/maven_repository/index.md @@ -4,44 +4,24 @@ group: Package info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers --- -# GitLab Maven Repository +# Maven packages in the Package Repository > - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/5811) in [GitLab Premium](https://about.gitlab.com/pricing/) 11.3. > - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/221259) to GitLab Core in 13.3. -With the GitLab [Maven](https://maven.apache.org) Repository, every -project can have its own space to store its Maven artifacts. +Publish [Maven](https://maven.apache.org) artifacts in your project’s Package Registry. +Then, install the packages whenever you need to use them as a dependency. -![GitLab Maven Repository](img/maven_package_view_v12_6.png) +## Build a Maven package -## Enabling the Maven Repository +This section explains how to install Maven and build a package. -NOTE: **Note:** -This option is available only if your GitLab administrator has -[enabled support for the Maven repository](../../../administration/packages/index.md). - -After the Packages feature is enabled, the Maven Repository is available for -all new projects by default. To enable it for existing projects, or if you want -to disable it: - -1. Navigate to your project's **Settings > General > Visibility, project features, permissions**. -1. Find the Packages feature and enable or disable it. -1. Click on **Save changes** for the changes to take effect. - -You should then be able to see the **Packages & Registries** section on the left sidebar. -Next, you must configure your project to authorize with the GitLab Maven -repository. +If you already use Maven and know how to build your own packages, go to the +[next section](#add-the-package-registry-as-a-maven-remote). -## Getting Started with Maven +Maven repositories work well with Gradle, too. To set up a Gradle project, see [get started with Gradle](#use-gradle-to-create-a-java-project). -This section covers installing Maven and building a package. This is a -quickstart to help if you're new to building Maven packages. If you're already -using Maven and understand how to build your own packages, move onto the -[next section](#adding-the-gitlab-package-registry-as-a-maven-remote). - -Maven repositories work well with Gradle, too. Move onto [getting started with Gradle](#getting-started-with-gradle) if you want to setup a Gradle project. - -### Installing Maven +### Install Maven The required minimum versions are: @@ -66,7 +46,7 @@ Default locale: en_GB, platform encoding: UTF-8 OS name: "mac os x", version: "10.15.2", arch: "x86_64", family: "mac" ``` -### Creating a project +### Create a project Understanding how to create a full Java project is outside the scope of this guide but you can follow the steps below to create a new project that can be @@ -105,14 +85,14 @@ your project has been set up successfully: You should see a new directory where you ran this command matching your `DartifactId` parameter (in this case it should be `my-project`). -## Getting started with Gradle +## Use Gradle to create a Java project + +This section explains how to install Gradle and initialize a Java project. -This section covers installing Gradle and initializing a Java project. This is a -quickstart to help if you're new to Gradle. If you're already -using Gradle and understand how to build your own packages, move onto the -[next section](#adding-the-gitlab-package-registry-as-a-maven-remote). +If you already use Gradle and know how to build your own packages, go to the +[next section](#add-the-package-registry-as-a-maven-remote). -### Installing Gradle +### Install Gradle Installation is needed only if you want to create a new Gradle project. Follow instructions at [gradle.org](https://gradle.org/install/) to download and install @@ -145,7 +125,7 @@ JVM: 11.0.5 (Oracle Corporation 11.0.5+10) OS: Windows 10 10.0 amd64 ``` -### Creating a project in Gradle +### Create a Java project Understanding how to create a full Java project in Gradle is outside the scope of this guide, but you can follow the steps below to create a new project that can be @@ -209,23 +189,23 @@ Project name (default: test): Enter a project name or hit enter to use the directory name as project name. -## Adding the GitLab Package Registry as a Maven remote +## Add the Package Registry as a Maven remote The next step is to add the GitLab Package Registry as a Maven remote. If a project is private or you want to upload Maven artifacts to GitLab, credentials must be provided for authorization too. Support is available -for [personal access tokens](#authenticating-with-a-personal-access-token), -[CI job tokens](#authenticating-with-a-ci-job-token), and +for [personal access tokens](#authenticate-with-a-personal-access-token), +[CI job tokens](#authenticate-with-a-ci-job-token), and [deploy tokens](../../project/deploy_tokens/index.md) only. Regular username/password credentials do not work. -### Authenticating with a personal access token +### Authenticate with a personal access token To authenticate with a [personal access token](../../profile/personal_access_tokens.md), set the scope to `api` when creating one, and add it to your Maven or Gradle configuration files. -#### Authenticating with a personal access token in Maven +#### Authenticate with a personal access token in Maven Add a corresponding section to your [`settings.xml`](https://maven.apache.org/settings.html) file: @@ -248,7 +228,7 @@ Add a corresponding section to your </settings> ``` -#### Authenticating with a personal access token in Gradle +#### Authenticate with a personal access token in Gradle Create a file `~/.gradle/gradle.properties` with the following content: @@ -278,12 +258,12 @@ repositories { You should now be able to upload Maven artifacts to your project. -### Authenticating with a CI job token +### Authenticate with a CI job token If you're using GitLab CI/CD, a CI job token can be used instead of a personal access token. -#### Authenticating with a CI job token in Maven +#### Authenticate with a CI job token in Maven To authenticate with a CI job token, add a corresponding section to your [`settings.xml`](https://maven.apache.org/settings.html) file: @@ -309,7 +289,7 @@ To authenticate with a CI job token, add a corresponding section to your You can read more on [how to create Maven packages using GitLab CI/CD](#creating-maven-packages-with-gitlab-cicd). -#### Authenticating with a CI job token in Gradle +#### Authenticate with a CI job token in Gradle To authenticate with a CI job token, add a repositories section to your [`build.gradle`](https://docs.gradle.org/current/userguide/tutorial_using_tasks.html) @@ -331,7 +311,7 @@ repositories { } ``` -### Authenticating with a deploy token +### Authenticate with a deploy token > [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/213566) in [GitLab Premium](https://about.gitlab.com/pricing/) 13.0. @@ -339,7 +319,7 @@ To authenticate with a [deploy token](./../../project/deploy_tokens/index.md), set the scope to `api` when creating one, and add it to your Maven or Gradle configuration files. -#### Authenticating with a deploy token in Maven +#### Authenticate with a deploy token in Maven Add a corresponding section to your [`settings.xml`](https://maven.apache.org/settings.html) file: @@ -362,7 +342,7 @@ Add a corresponding section to your </settings> ``` -#### Authenticating with a deploy token in Gradle +#### Authenticate with a deploy token in Gradle To authenticate with a deploy token, add a repositories section to your [`build.gradle`](https://docs.gradle.org/current/userguide/tutorial_using_tasks.html) @@ -441,7 +421,7 @@ repositories { ``` The `id` must be the same with what you -[defined in `settings.xml`](#adding-the-gitlab-package-registry-as-a-maven-remote). +[defined in `settings.xml`](#add-the-package-registry-as-a-maven-remote). Replace `PROJECT_ID` with your project ID which can be found on the home page of your project. @@ -452,7 +432,7 @@ domain name. NOTE: **Note:** For retrieving artifacts, you can use either the [URL encoded](../../../api/README.md#namespaced-path-encoding) path of the project -(e.g., `group%2Fproject`) or the project's ID (e.g., `42`). However, only the +(such as `group%2Fproject`) or the project's ID (such as `42`). However, only the project's ID can be used for uploading. ### Group level Maven endpoint @@ -505,7 +485,7 @@ repositories { ``` The `id` must be the same with what you -[defined in `settings.xml`](#adding-the-gitlab-package-registry-as-a-maven-remote). +[defined in `settings.xml`](#add-the-package-registry-as-a-maven-remote). Replace `my-group` with your group name and `PROJECT_ID` with your project ID which can be found on the home page of your project. @@ -516,7 +496,7 @@ domain name. NOTE: **Note:** For retrieving artifacts, you can use either the [URL encoded](../../../api/README.md#namespaced-path-encoding) path of the group -(e.g., `group%2Fsubgroup`) or the group's ID (e.g., `12`). +(such as `group%2Fsubgroup`) or the group's ID (such as `12`). ### Instance level Maven endpoint @@ -571,7 +551,7 @@ repositories { ``` The `id` must be the same with what you -[defined in `settings.xml`](#adding-the-gitlab-package-registry-as-a-maven-remote). +[defined in `settings.xml`](#add-the-package-registry-as-a-maven-remote). Replace `PROJECT_ID` with your project ID which can be found on the home page of your project. @@ -582,12 +562,12 @@ domain name. NOTE: **Note:** For retrieving artifacts, you can use either the [URL encoded](../../../api/README.md#namespaced-path-encoding) path of the project -(e.g., `group%2Fproject`) or the project's ID (e.g., `42`). However, only the +(such as `group%2Fproject`) or the project's ID (such as `42`). However, only the project's ID can be used for uploading. ## Uploading packages -Once you have set up the [remote and authentication](#adding-the-gitlab-package-registry-as-a-maven-remote) +Once you have set up the [remote and authentication](#add-the-package-registry-as-a-maven-remote) and [configured your project](#configuring-your-project-to-use-the-gitlab-maven-repository-url), test to upload a Maven artifact from a project of yours. @@ -661,7 +641,7 @@ artifacts or even delete them. ## Installing a package Installing a package from the GitLab Package Registry requires that you set up -the [remote and authentication](#adding-the-gitlab-package-registry-as-a-maven-remote) +the [remote and authentication](#add-the-package-registry-as-a-maven-remote) as above. Once this is completed, there are two ways to install a package. ### Install using Maven with `mvn install` @@ -708,7 +688,7 @@ Package details page, allowing for quick and easy installation. ### Install using Gradle -Add a [dependency](https://docs.gradle.org/current/userguide/declaring_dependencies.html) to build.gradle in the dependencies section: +Add a [dependency](https://docs.gradle.org/current/userguide/declaring_dependencies.html) to `build.gradle` in the dependencies section: ```groovy dependencies { @@ -802,7 +782,7 @@ Docker container), and Maven uses the configured CI The example below shows how to create a new package each time the `master` branch is updated: -1. Make sure you use the Job-Token authentication as described in ["Authenticating with a CI job token in Gradle"](#authenticating-with-a-ci-job-token-in-gradle). +1. Make sure you use the Job-Token authentication as described in ["Authenticating with a CI job token in Gradle"](#authenticate-with-a-ci-job-token-in-gradle). 1. Add a `deploy` job to your `.gitlab-ci.yml` file: diff --git a/doc/user/packages/workflows/project_registry.md b/doc/user/packages/workflows/project_registry.md index be4793f72f3..24437e6dfac 100644 --- a/doc/user/packages/workflows/project_registry.md +++ b/doc/user/packages/workflows/project_registry.md @@ -26,8 +26,8 @@ point them at the same project on GitLab. There are a few reasons you might want to publish all your packages to one project on GitLab: 1. You want to publish your packages on GitLab, but to a project that is different from where your code is stored. -1. You would like to group packages together in ways that make sense for your usage (all NPM packages in one project, - all packages being used by a specific department in one project, all private packages in one project, etc.) +1. You would like to group packages together in ways that make sense for your usage (such as all NPM packages in one project, + all packages being used by a specific department in one project, or all private packages in one project) 1. You want to use one remote for all of your packages when installing them into other projects. 1. You would like to migrate your packages to a single place on GitLab from a third-party package registry and do not want to worry about setting up separate projects for each package. @@ -44,7 +44,7 @@ Let's take a look at how you might create a public place to hold all of your pub ### Create a project First, create a new project on GitLab. It does not have to have any code or content. Make note of the project ID -displayed on the project overview page, as you will need this later. +displayed on the project overview page for use later in this process. ### Create an access token @@ -67,15 +67,15 @@ 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. Follow -the instructions in the [GitLab NPM Registry documentation](../npm_registry/index.md#authenticating-to-the-gitlab-npm-registry). Once -you do this, you will be able to push your NPM package to your project using `npm publish`, as described in the +the instructions in the [GitLab NPM Registry documentation](../npm_registry/index.md#authenticating-to-the-gitlab-npm-registry). After +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. #### Maven If you are using Maven, this involves updating your `pom.xml` file with distribution sections, including the appropriate URL for your project, as described in the [GitLab Maven Repository documentation](../maven_repository/index.md#project-level-maven-endpoint). -Then, you need to add a `settings.xml` file and [include your access token](../maven_repository/index.md#authenticating-with-a-personal-access-token). +Then, you need to add a `settings.xml` file and [include your access token](../maven_repository/index.md#authenticate-with-a-personal-access-token). Now you can [deploy Maven packages](../maven_repository/index.md#uploading-packages) to your project. #### Conan @@ -83,7 +83,7 @@ Now you can [deploy Maven packages](../maven_repository/index.md#uploading-packa For Conan, first you need to add GitLab as a Conan registry remote. Follow the instructions in the [GitLab Conan Repository docs](../conan_repository/index.md#add-the-package-registry-as-a-conan-remote) to do so. Then, create your package using the plus-separated (`+`) project path as your Conan user. For example, if your project is located at `https://gitlab.com/foo/bar/my-proj`, then you can [create your Conan package](../conan_repository/index.md) -using `conan create . foo+bar+my-proj/channel`, where `channel` is your package channel (`stable`, `beta`, etc.). Once your package +using `conan create . foo+bar+my-proj/channel`, where `channel` is your package channel (such as `stable` or `beta`). After your package is created, you are ready to [upload your package](../conan_repository/index.md#publish-a-conan-package) depending on your final package recipe. For example: ```shell diff --git a/doc/user/project/repository/img/repository_mirroring_push_settings.png b/doc/user/project/repository/img/repository_mirroring_push_settings.png Binary files differindex d055cc580c4..9fc25dd3b25 100644 --- a/doc/user/project/repository/img/repository_mirroring_push_settings.png +++ b/doc/user/project/repository/img/repository_mirroring_push_settings.png diff --git a/doc/user/project/repository/repository_mirroring.md b/doc/user/project/repository/repository_mirroring.md index e1d2c20850b..5a4f0a0420f 100644 --- a/doc/user/project/repository/repository_mirroring.md +++ b/doc/user/project/repository/repository_mirroring.md @@ -56,6 +56,7 @@ The following are some possible use cases for repository mirroring: > - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/249) in GitLab Enterprise Edition 8.7. > - [Moved to GitLab Core](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/18715) in 10.8. +> - [LFS support over HTTPS added](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/40137) in 13.5 For an existing project, you can set up push mirroring as follows: diff --git a/lib/gitlab/background_migration/backfill_jira_tracker_deployment_type.rb b/lib/gitlab/background_migration/backfill_jira_tracker_deployment_type.rb deleted file mode 100644 index bcaff91ab1c..00000000000 --- a/lib/gitlab/background_migration/backfill_jira_tracker_deployment_type.rb +++ /dev/null @@ -1,65 +0,0 @@ -# frozen_string_literal: true - -# Based on https://community.developer.atlassian.com/t/get-rest-api-3-filter-search/29459/2, -# it's enough at the moment to simply notice if the url is from `atlassian.net` -module Gitlab - module BackgroundMigration - # Backfill the deployment_type in jira_tracker_data table - class BackfillJiraTrackerDeploymentType - # Migration only version of jira_tracker_data table - class JiraTrackerDataTemp < ApplicationRecord - self.table_name = 'jira_tracker_data' - - def self.encryption_options - { - key: Settings.attr_encrypted_db_key_base_32, - encode: true, - mode: :per_attribute_iv, - algorithm: 'aes-256-gcm' - } - end - - attr_encrypted :url, encryption_options - attr_encrypted :api_url, encryption_options - - enum deployment_type: { unknown: 0, server: 1, cloud: 2 }, _prefix: :deployment - end - - # Migration only version of services table - class JiraServiceTemp < ApplicationRecord - self.table_name = 'services' - self.inheritance_column = :_type_disabled - end - - def perform(tracker_id) - @jira_tracker_data = JiraTrackerDataTemp.find_by(id: tracker_id, deployment_type: 0) - - return unless jira_tracker_data - return unless client_url - - update_deployment_type - end - - private - - attr_reader :jira_tracker_data - - def client_url - jira_tracker_data.api_url.presence || jira_tracker_data.url.presence - end - - def server_type - client_url.downcase.include?('.atlassian.net') ? :cloud : :server - end - - def update_deployment_type - case server_type - when :server - jira_tracker_data.deployment_server! - when :cloud - jira_tracker_data.deployment_cloud! - end - end - end - end -end diff --git a/lib/gitlab/ci/features.rb b/lib/gitlab/ci/features.rb index 5bb6234bbb8..11edd4f8de7 100644 --- a/lib/gitlab/ci/features.rb +++ b/lib/gitlab/ci/features.rb @@ -68,7 +68,7 @@ module Gitlab end def self.one_dimensional_matrix_enabled? - ::Feature.enabled?(:one_dimensional_matrix, default_enabled: false) + ::Feature.enabled?(:one_dimensional_matrix, default_enabled: true) end def self.manual_bridges_enabled?(project) diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 8c1b474c2f7..d1c65f29e2d 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -2302,10 +2302,10 @@ msgstr "" msgid "AlertManagement|High" msgstr "" -msgid "AlertManagement|Info" +msgid "AlertManagement|Incident" msgstr "" -msgid "AlertManagement|Issue" +msgid "AlertManagement|Info" msgstr "" msgid "AlertManagement|Key" @@ -12121,7 +12121,7 @@ msgstr "" msgid "Git LFS is not enabled on this GitLab server, contact your admin." msgstr "" -msgid "Git LFS objects will be synced in pull mirrors if LFS is %{docs_link_start}enabled for the project%{docs_link_end}. They will %{strong_open}not%{strong_close} be synced in push mirrors." +msgid "Git LFS objects will be synced if LFS is %{docs_link_start}enabled for the project%{docs_link_end}. Push mirrors will %{strong_open}not%{strong_close} sync LFS objects over SSH." msgstr "" msgid "Git LFS status:" @@ -22022,6 +22022,9 @@ msgstr "" msgid "Repositories Analytics" msgstr "" +msgid "RepositoriesAnalytics|Coverage" +msgstr "" + msgid "RepositoriesAnalytics|Download Historic Test Coverage Data" msgstr "" @@ -22034,6 +22037,18 @@ msgstr "" msgid "RepositoriesAnalytics|Historic Test Coverage Data is available in raw format (.csv) for further analysis." msgstr "" +msgid "RepositoriesAnalytics|Last Update" +msgstr "" + +msgid "RepositoriesAnalytics|Number of Coverages" +msgstr "" + +msgid "RepositoriesAnalytics|Please select a project or multiple projects to display their most recent test coverage data." +msgstr "" + +msgid "RepositoriesAnalytics|Please select projects to display." +msgstr "" + msgid "RepositoriesAnalytics|Test Code Coverage" msgstr "" @@ -25771,9 +25786,6 @@ msgstr "" msgid "The CSV export will be created in the background. Once finished, it will be sent to %{strong_open}%{email}%{strong_close} in an attachment." msgstr "" -msgid "The Git LFS objects will %{strong_open}not%{strong_close} be synced." -msgstr "" - msgid "The GitLab user to which the Jira user %{jiraDisplayName} will be mapped" msgstr "" @@ -28207,7 +28219,7 @@ msgstr "" msgid "UsageQuota|Artifacts" msgstr "" -msgid "UsageQuota|Build Artifacts" +msgid "UsageQuota|Artifacts is a sum of build and pipeline artifacts." msgstr "" msgid "UsageQuota|Buy additional minutes" diff --git a/qa/qa/specs/features/browser_ui/3_create/repository/push_mirroring_lfs_over_http_spec.rb b/qa/qa/specs/features/browser_ui/3_create/repository/push_mirroring_lfs_over_http_spec.rb index 2d86cfdbaf8..45afa252305 100644 --- a/qa/qa/specs/features/browser_ui/3_create/repository/push_mirroring_lfs_over_http_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/repository/push_mirroring_lfs_over_http_spec.rb @@ -3,8 +3,7 @@ module QA RSpec.describe 'Create' do describe 'Push mirror a repository over HTTP' do - it 'configures and syncs LFS objects for a (push) mirrored repository', :requires_admin, testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/414' do - Runtime::Feature.enable(:push_mirror_syncs_lfs) + it 'configures and syncs LFS objects for a (push) mirrored repository', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/414' do Runtime::Browser.visit(:gitlab, Page::Main::Login) Page::Main::Login.perform(&:sign_in_using_credentials) diff --git a/spec/frontend/repository/components/breadcrumbs_spec.js b/spec/frontend/repository/components/breadcrumbs_spec.js index ca4120576f5..38e5c9aaca5 100644 --- a/spec/frontend/repository/components/breadcrumbs_spec.js +++ b/spec/frontend/repository/components/breadcrumbs_spec.js @@ -1,5 +1,5 @@ import { shallowMount, RouterLinkStub } from '@vue/test-utils'; -import { GlDeprecatedDropdown } from '@gitlab/ui'; +import { GlDropdown } from '@gitlab/ui'; import Breadcrumbs from '~/repository/components/breadcrumbs.vue'; let vm; @@ -61,7 +61,7 @@ describe('Repository breadcrumbs component', () => { vm.setData({ userPermissions: { forkProject: false, createMergeRequestIn: false } }); return vm.vm.$nextTick(() => { - expect(vm.find(GlDeprecatedDropdown).exists()).toBe(false); + expect(vm.find(GlDropdown).exists()).toBe(false); }); }); @@ -71,7 +71,7 @@ describe('Repository breadcrumbs component', () => { vm.setData({ userPermissions: { forkProject: true, createMergeRequestIn: true } }); return vm.vm.$nextTick(() => { - expect(vm.find(GlDeprecatedDropdown).exists()).toBe(true); + expect(vm.find(GlDropdown).exists()).toBe(true); }); }); }); diff --git a/spec/lib/gitlab/background_migration/backfill_jira_tracker_deployment_type_spec.rb b/spec/lib/gitlab/background_migration/backfill_jira_tracker_deployment_type_spec.rb deleted file mode 100644 index 6e216834ab0..00000000000 --- a/spec/lib/gitlab/background_migration/backfill_jira_tracker_deployment_type_spec.rb +++ /dev/null @@ -1,80 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe Gitlab::BackgroundMigration::BackfillJiraTrackerDeploymentType, :migration, schema: 20200910155617 do - let_it_be(:jira_service_temp) { described_class::JiraServiceTemp } - let_it_be(:jira_tracker_data_temp) { described_class::JiraTrackerDataTemp } - let_it_be(:api_host) { 'https://api.atlassian.net' } - let(:jira_service) { jira_service_temp.create!(type: 'JiraService', active: true, category: 'issue_tracker') } - - subject { described_class.new } - - describe '#perform' do - context 'when tracker is not valid' do - it 'returns if deployment already set' do - jira_tracker_data = jira_tracker_data_temp.create!(service_id: jira_service.id, - url: api_host, deployment_type: 1) - - expect(subject).not_to receive(:update_deployment_type) - - subject.perform(jira_tracker_data.id) - end - - it 'returns if no url is set' do - jira_tracker_data = jira_tracker_data_temp.create!(service_id: jira_service.id, - deployment_type: 0) - - expect(subject).not_to receive(:update_deployment_type) - - subject.perform(jira_tracker_data.id) - end - end - - context 'when tracker is valid' do - let(:jira_tracker_data) do - jira_tracker_data_temp.create!(service_id: jira_service.id, - url: api_host, deployment_type: 0) - end - - it 'sets the deployment_type to cloud' do - subject.perform(jira_tracker_data.id) - - expect(jira_tracker_data.reload.deployment_cloud?).to be_truthy - end - - describe 'with a mixed case url' do - let_it_be(:api_host) { 'https://api.AtlassiaN.nEt' } - - it 'sets the deployment_type to cloud' do - subject.perform(jira_tracker_data.id) - - expect(jira_tracker_data.reload.deployment_cloud?).to be_truthy - end - end - - describe 'with a Jira Server' do - let_it_be(:api_host) { 'https://my.server.net' } - - it 'sets the deployment_type to server' do - subject.perform(jira_tracker_data.id) - - expect(jira_tracker_data.reload.deployment_server?).to be_truthy - end - end - - describe 'with api_url specified' do - let(:jira_tracker_data) do - jira_tracker_data_temp.create!(service_id: jira_service.id, - api_url: api_host, deployment_type: 0) - end - - it 'sets the deployment_type to cloud' do - subject.perform(jira_tracker_data.id) - - expect(jira_tracker_data.reload.deployment_cloud?).to be_truthy - end - end - end - end -end diff --git a/spec/migrations/20200910155617_backfill_jira_tracker_deployment_type_spec.rb b/spec/migrations/20200910155617_backfill_jira_tracker_deployment_type_spec.rb deleted file mode 100644 index f5f013cabfd..00000000000 --- a/spec/migrations/20200910155617_backfill_jira_tracker_deployment_type_spec.rb +++ /dev/null @@ -1,39 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' -require Rails.root.join('db', 'post_migrate', '20200910155617_backfill_jira_tracker_deployment_type.rb') - -RSpec.describe BackfillJiraTrackerDeploymentType, :sidekiq, schema: 20200910155617 do - let(:services) { table(:services) } - let(:jira_tracker_data) { table(:jira_tracker_data) } - let(:migration) { described_class.new } - let(:batch_interval) { described_class::BATCH_INTERVAL } - - describe '#up' do - before do - stub_const("#{described_class}::BATCH_SIZE", 2) - - active_service = services.create!(type: 'JiraService', active: true) - inactive_service = services.create!(type: 'JiraService', active: false) - - jira_tracker_data.create!(id: 1, service_id: active_service.id, deployment_type: 0) - jira_tracker_data.create!(id: 2, service_id: active_service.id, deployment_type: 1) - jira_tracker_data.create!(id: 3, service_id: inactive_service.id, deployment_type: 2) - jira_tracker_data.create!(id: 4, service_id: inactive_service.id, deployment_type: 0) - jira_tracker_data.create!(id: 5, service_id: active_service.id, deployment_type: 0) - end - - it 'schedules BackfillJiraTrackerDeploymentType background jobs' do - Sidekiq::Testing.fake! do - freeze_time do - migration.up - - expect(BackgroundMigrationWorker.jobs.size).to eq(3) - expect(described_class::MIGRATION).to be_scheduled_delayed_migration(batch_interval, 1) - expect(described_class::MIGRATION).to be_scheduled_delayed_migration(batch_interval, 4) - expect(described_class::MIGRATION).to be_scheduled_delayed_migration(batch_interval * 2, 5) - end - end - end - end -end diff --git a/spec/services/projects/update_remote_mirror_service_spec.rb b/spec/services/projects/update_remote_mirror_service_spec.rb index f0e76bb81b3..30530da8013 100644 --- a/spec/services/projects/update_remote_mirror_service_spec.rb +++ b/spec/services/projects/update_remote_mirror_service_spec.rb @@ -123,54 +123,36 @@ RSpec.describe Projects::UpdateRemoteMirrorService do stub_lfs_setting(enabled: true) end - context 'feature flag enabled' do - before do - stub_feature_flags(push_mirror_syncs_lfs: true) + it 'pushes LFS objects to a HTTP repository' do + expect_next_instance_of(Lfs::PushService) do |service| + expect(service).to receive(:execute) end - it 'pushes LFS objects to a HTTP repository' do - expect_next_instance_of(Lfs::PushService) do |service| - expect(service).to receive(:execute) - end - - execute! - end - - it 'does nothing to an SSH repository' do - remote_mirror.update!(url: 'ssh://example.com') - - expect_any_instance_of(Lfs::PushService).not_to receive(:execute) - - execute! - end + execute! + end - it 'does nothing if LFS is disabled' do - expect(project).to receive(:lfs_enabled?) { false } + it 'does nothing to an SSH repository' do + remote_mirror.update!(url: 'ssh://example.com') - expect_any_instance_of(Lfs::PushService).not_to receive(:execute) + expect_any_instance_of(Lfs::PushService).not_to receive(:execute) - execute! - end + execute! + end - it 'does nothing if non-password auth is specified' do - remote_mirror.update!(auth_method: 'ssh_public_key') + it 'does nothing if LFS is disabled' do + expect(project).to receive(:lfs_enabled?) { false } - expect_any_instance_of(Lfs::PushService).not_to receive(:execute) + expect_any_instance_of(Lfs::PushService).not_to receive(:execute) - execute! - end + execute! end - context 'feature flag disabled' do - before do - stub_feature_flags(push_mirror_syncs_lfs: false) - end + it 'does nothing if non-password auth is specified' do + remote_mirror.update!(auth_method: 'ssh_public_key') - it 'does nothing' do - expect_any_instance_of(Lfs::PushService).not_to receive(:execute) + expect_any_instance_of(Lfs::PushService).not_to receive(:execute) - execute! - end + execute! end end end |