diff --git a/CHANGELOG-EE.md b/CHANGELOG-EE.md index f2068d36ffc09d1a53d19dba7f1e5ac923de6a8c..2ae7cb4c249cecd0e6628206abbae1cb5e0bcd97 100644 --- a/CHANGELOG-EE.md +++ b/CHANGELOG-EE.md @@ -1,5 +1,9 @@ Please view this file on the master branch, on stable branches it's out of date. +## 12.8.3 + +- No changes. + ## 12.8.2 ### Security (5 changes) diff --git a/CHANGELOG.md b/CHANGELOG.md index e0493d54fc8329112356c1fc69d49430c8119234..3dfbbc730b09a1e72ba2604c52daf66783fbc3c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,29 @@ documentation](doc/development/changelog.md) for instructions on adding your own entry. +## 12.8.3 + +### Fixed (8 changes) + +- Fix Group Import API file upload when object storage is disabled. !25715 +- Fix Web IDE fork modal showing no text. !25842 +- Fixed regression when URL was encoded in a loop. !25849 +- Fixed repository browsing for folders with non-ascii characters. !25877 +- Fix search for Sentry error list. !26129 +- Send credentials with GraphQL fetch requests. !26386 +- Show CI status in project dashboards. !26403 +- Rescue invalid URLs during badge retrieval in asset proxy. !26524 + +### Performance (2 changes) + +- Disable Marginalia line backtrace in production. !26199 +- Remove unnecessary Redis deletes for broadcast messages. !26541 + +### Other (1 change, 1 of them is from the community) + +- Fix fixtures for Error Tracking Web UI. !26233 (Takuya Noguchi) + + ## 12.8.2 ### Security (17 changes) diff --git a/GITLAB_PAGES_VERSION b/GITLAB_PAGES_VERSION index 15b989e398fc758a6cb9c266029c22acc050c5cb..092afa15df4df63f74ea0e2fb98baa539fb8275c 100644 --- a/GITLAB_PAGES_VERSION +++ b/GITLAB_PAGES_VERSION @@ -1 +1 @@ -1.16.0 +1.17.0 diff --git a/app/assets/javascripts/editor/editor_lite.js b/app/assets/javascripts/editor/editor_lite.js index 8711f6e65af13fad03cb2e1f016ba6a540f3e34f..c2723b1d50640cd1b5949a3e3569af1cb97eb8c0 100644 --- a/app/assets/javascripts/editor/editor_lite.js +++ b/app/assets/javascripts/editor/editor_lite.js @@ -1,5 +1,5 @@ import { editor as monacoEditor, languages as monacoLanguages, Uri } from 'monaco-editor'; -import whiteTheme from '~/ide/lib/themes/white'; +import { DEFAULT_THEME, themes } from '~/ide/lib/themes'; import { defaultEditorOptions } from '~/ide/lib/editor_options'; import { clearDomElement } from './utils'; @@ -19,8 +19,10 @@ export default class Editor { } static setupMonacoTheme() { - monacoEditor.defineTheme('white', whiteTheme); - monacoEditor.setTheme('white'); + const themeName = window.gon?.user_color_scheme || DEFAULT_THEME; + const theme = themes.find(t => t.name === themeName); + if (theme) monacoEditor.defineTheme(themeName, theme.data); + monacoEditor.setTheme(theme ? themeName : DEFAULT_THEME); } createInstance({ el = undefined, blobPath = '', blobContent = '' } = {}) { diff --git a/changelogs/unreleased/202426-editor-lite-theme-preference.yml b/changelogs/unreleased/202426-editor-lite-theme-preference.yml new file mode 100644 index 0000000000000000000000000000000000000000..38e4004657fd254b09b001ee2036d333e2c22cab --- /dev/null +++ b/changelogs/unreleased/202426-editor-lite-theme-preference.yml @@ -0,0 +1,5 @@ +--- +title: In single-file editor set syntax highlighting theme according to user's preference +merge_request: 26606 +author: +type: changed diff --git a/changelogs/unreleased/207837-circular-encoding.yml b/changelogs/unreleased/207837-circular-encoding.yml deleted file mode 100644 index 30aa7bf88a543638bd9b4e657bb5f3ef3f593827..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/207837-circular-encoding.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed regression when URL was encoded in a loop -merge_request: 25849 -author: -type: fixed diff --git a/changelogs/unreleased/207857-fix-web-ide-modal-no-text.yml b/changelogs/unreleased/207857-fix-web-ide-modal-no-text.yml deleted file mode 100644 index 74bbb312f19f45155bbd44a6a55ac56e2853ae13..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/207857-fix-web-ide-modal-no-text.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix Web IDE fork modal showing no text -merge_request: 25842 -author: -type: fixed diff --git a/changelogs/unreleased/208548-better-spec-test-for-error-tracking-web-ui.yml b/changelogs/unreleased/208548-better-spec-test-for-error-tracking-web-ui.yml deleted file mode 100644 index 6b6d479e8157eca5e817b9f8d63d752740ee420a..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/208548-better-spec-test-for-error-tracking-web-ui.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix fixtures for Error Tracking Web UI -merge_request: 26233 -author: Takuya Noguchi -type: other diff --git a/changelogs/unreleased/28085-index-options-tuning.yml b/changelogs/unreleased/28085-index-options-tuning.yml new file mode 100644 index 0000000000000000000000000000000000000000..61f46fbadb1e2620237f13ef83db27d3567b6d84 --- /dev/null +++ b/changelogs/unreleased/28085-index-options-tuning.yml @@ -0,0 +1,5 @@ +--- +title: Optimize storage usage for newly created ES indices +merge_request: 25992 +author: +type: other diff --git a/changelogs/unreleased/georgekoltsov-fix-import-export-uploader.yml b/changelogs/unreleased/georgekoltsov-fix-import-export-uploader.yml deleted file mode 100644 index 0c43c93ce89f2e2c8d807715aace9f52fa7e2937..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/georgekoltsov-fix-import-export-uploader.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix Group Import API file upload when object storage is disabled -merge_request: 25715 -author: -type: fixed diff --git a/changelogs/unreleased/lm-fix-error-query.yml b/changelogs/unreleased/lm-fix-error-query.yml deleted file mode 100644 index 2baa316dd5a1f7eeec15f4cf0f6dd71fa93ac760..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/lm-fix-error-query.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix search for Sentry error list -merge_request: 26129 -author: -type: fixed diff --git a/changelogs/unreleased/mc-feature-trigger-pipelines-project-subscriptions.yml b/changelogs/unreleased/mc-feature-trigger-pipelines-project-subscriptions.yml new file mode 100644 index 0000000000000000000000000000000000000000..b028d619816de87e17e7dd81cd1c48ded9fc7a1e --- /dev/null +++ b/changelogs/unreleased/mc-feature-trigger-pipelines-project-subscriptions.yml @@ -0,0 +1,5 @@ +--- +title: Add ability to trigger pipelines when project is rebuilt. +merge_request: 20063 +author: +type: added diff --git a/changelogs/unreleased/pages-1-17.yml b/changelogs/unreleased/pages-1-17.yml new file mode 100644 index 0000000000000000000000000000000000000000..16290eef158d92d83457e939d2f064839ff71fe8 --- /dev/null +++ b/changelogs/unreleased/pages-1-17.yml @@ -0,0 +1,5 @@ +--- +title: Upgrade Pages to 1.17.0 +merge_request: 26478 +author: +type: added diff --git a/changelogs/unreleased/ph-p207499-fixNonAsciiChars.yml b/changelogs/unreleased/ph-p207499-fixNonAsciiChars.yml deleted file mode 100644 index 806f4372f891730de2c44e4de7a4cedbf1f0d84a..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/ph-p207499-fixNonAsciiChars.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed repository browsing for folders with non-ascii characters -merge_request: 25877 -author: -type: fixed diff --git a/changelogs/unreleased/revert-e0613e64.yml b/changelogs/unreleased/revert-e0613e64.yml deleted file mode 100644 index e94f1df2f4b13e5f6b39f90bdc0c37d22af2e50e..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/revert-e0613e64.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show CI status in project dashboards -merge_request: 26403 -author: -type: fixed diff --git a/changelogs/unreleased/sh-disable-line-in-marginalia.yml b/changelogs/unreleased/sh-disable-line-in-marginalia.yml deleted file mode 100644 index 51be4db1965c8340b9f858193fc5844ecb5ba760..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/sh-disable-line-in-marginalia.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Disable Marginalia line backtrace in production -merge_request: 26199 -author: -type: performance diff --git a/changelogs/unreleased/sh-optimize-broadcast-message-redis.yml b/changelogs/unreleased/sh-optimize-broadcast-message-redis.yml deleted file mode 100644 index c69f3ded73d3541b7a6585e1b932351794e80729..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/sh-optimize-broadcast-message-redis.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove unnecessary Redis deletes for broadcast messages -merge_request: 26541 -author: -type: performance diff --git a/changelogs/unreleased/use-addressable-for-asset-proxy-badge-render.yml b/changelogs/unreleased/use-addressable-for-asset-proxy-badge-render.yml deleted file mode 100644 index 6a021df8027b3b2bed5bbcf2904f64af311104dc..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/use-addressable-for-asset-proxy-badge-render.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Rescue invalid URLs during badge retrieval in asset proxy -merge_request: 26524 -author: -type: fixed diff --git a/changelogs/unreleased/vs-add-credentials-option-for-apollo-link.yml b/changelogs/unreleased/vs-add-credentials-option-for-apollo-link.yml deleted file mode 100644 index 1863f0de26f3abc1d9bacc088f43aa98c5960921..0000000000000000000000000000000000000000 --- a/changelogs/unreleased/vs-add-credentials-option-for-apollo-link.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Send credentials with GraphQL fetch requests -merge_request: 26386 -author: -type: fixed diff --git a/db/migrate/20200224185814_add_project_subscriptions_to_plan_limits.rb b/db/migrate/20200224185814_add_project_subscriptions_to_plan_limits.rb new file mode 100644 index 0000000000000000000000000000000000000000..789f23501fbc4cea4351443a3415692eed7cc1c1 --- /dev/null +++ b/db/migrate/20200224185814_add_project_subscriptions_to_plan_limits.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class AddProjectSubscriptionsToPlanLimits < ActiveRecord::Migration[6.0] + DOWNTIME = false + + def change + add_column(:plan_limits, :ci_project_subscriptions, :integer, default: 0, null: false) + end +end diff --git a/db/migrate/20200225123228_insert_project_subscriptions_plan_limits.rb b/db/migrate/20200225123228_insert_project_subscriptions_plan_limits.rb new file mode 100644 index 0000000000000000000000000000000000000000..4a05e2cd779e48f167be62e638796671295f605d --- /dev/null +++ b/db/migrate/20200225123228_insert_project_subscriptions_plan_limits.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +class InsertProjectSubscriptionsPlanLimits < ActiveRecord::Migration[6.0] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + def up + return if Rails.env.test? + + if Gitlab.com? + create_or_update_plan_limit('ci_project_subscriptions', 'free', 2) + create_or_update_plan_limit('ci_project_subscriptions', 'bronze', 2) + create_or_update_plan_limit('ci_project_subscriptions', 'silver', 2) + create_or_update_plan_limit('ci_project_subscriptions', 'gold', 2) + else + create_or_update_plan_limit('ci_project_subscriptions', 'default', 2) + end + end + + def down + return if Rails.env.test? + + if Gitlab.com? + create_or_update_plan_limit('ci_project_subscriptions', 'free', 0) + create_or_update_plan_limit('ci_project_subscriptions', 'bronze', 0) + create_or_update_plan_limit('ci_project_subscriptions', 'silver', 0) + create_or_update_plan_limit('ci_project_subscriptions', 'gold', 0) + else + create_or_update_plan_limit('ci_project_subscriptions', 'default', 0) + end + end +end diff --git a/db/migrate/20200228160542_create_ci_sources_projects.rb b/db/migrate/20200228160542_create_ci_sources_projects.rb new file mode 100644 index 0000000000000000000000000000000000000000..36f5167a78452e956d2c49c3ed7cb2461c494b0a --- /dev/null +++ b/db/migrate/20200228160542_create_ci_sources_projects.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class CreateCiSourcesProjects < ActiveRecord::Migration[6.0] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + def change + create_table :ci_sources_projects do |t| + t.bigint :pipeline_id, null: false + t.bigint :source_project_id, null: false + + t.index [:source_project_id, :pipeline_id], unique: true + t.index :pipeline_id + end + end +end diff --git a/db/migrate/20200304121828_add_ci_sources_project_pipeline_foreign_key.rb b/db/migrate/20200304121828_add_ci_sources_project_pipeline_foreign_key.rb new file mode 100644 index 0000000000000000000000000000000000000000..db78d9594b0554c44ee830d759fe2d53b45730c9 --- /dev/null +++ b/db/migrate/20200304121828_add_ci_sources_project_pipeline_foreign_key.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class AddCiSourcesProjectPipelineForeignKey < ActiveRecord::Migration[6.0] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + def change + with_lock_retries do + add_foreign_key :ci_sources_projects, :ci_pipelines, column: :pipeline_id, on_delete: :cascade # rubocop:disable Migration/AddConcurrentForeignKey + end + end +end diff --git a/db/migrate/20200304121844_add_ci_sources_project_source_project_foreign_key.rb b/db/migrate/20200304121844_add_ci_sources_project_source_project_foreign_key.rb new file mode 100644 index 0000000000000000000000000000000000000000..88bf835b9f1d61496035e67d17c2e8f626fde7b0 --- /dev/null +++ b/db/migrate/20200304121844_add_ci_sources_project_source_project_foreign_key.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class AddCiSourcesProjectSourceProjectForeignKey < ActiveRecord::Migration[6.0] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + def change + with_lock_retries do + add_foreign_key :ci_sources_projects, :projects, column: :source_project_id, on_delete: :cascade # rubocop:disable Migration/AddConcurrentForeignKey + end + end +end diff --git a/db/schema.rb b/db/schema.rb index e77e8e44b629bb8fe3050b5e5266f7099e732504..a9cc6d89c6da5e82734d25a05efd1fc3e57995e8 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -966,6 +966,13 @@ ActiveRecord::Schema.define(version: 2020_03_04_160823) do t.index ["source_project_id"], name: "index_ci_sources_pipelines_on_source_project_id" end + create_table "ci_sources_projects", force: :cascade do |t| + t.bigint "pipeline_id", null: false + t.bigint "source_project_id", null: false + t.index ["pipeline_id"], name: "index_ci_sources_projects_on_pipeline_id" + t.index ["source_project_id", "pipeline_id"], name: "index_ci_sources_projects_on_source_project_id_and_pipeline_id", unique: true + end + create_table "ci_stages", id: :serial, force: :cascade do |t| t.integer "project_id" t.integer "pipeline_id" @@ -3131,6 +3138,7 @@ ActiveRecord::Schema.define(version: 2020_03_04_160823) do t.integer "ci_active_jobs", default: 0, null: false t.integer "project_hooks", default: 0, null: false t.integer "group_hooks", default: 0, null: false + t.integer "ci_project_subscriptions", default: 0, null: false t.index ["plan_id"], name: "index_plan_limits_on_plan_id", unique: true end @@ -4735,6 +4743,8 @@ ActiveRecord::Schema.define(version: 2020_03_04_160823) do add_foreign_key "ci_sources_pipelines", "ci_pipelines", column: "source_pipeline_id", name: "fk_d4e29af7d7", on_delete: :cascade add_foreign_key "ci_sources_pipelines", "projects", column: "source_project_id", name: "fk_acd9737679", on_delete: :cascade add_foreign_key "ci_sources_pipelines", "projects", name: "fk_1e53c97c0a", on_delete: :cascade + add_foreign_key "ci_sources_projects", "ci_pipelines", column: "pipeline_id", on_delete: :cascade + add_foreign_key "ci_sources_projects", "projects", column: "source_project_id", on_delete: :cascade add_foreign_key "ci_stages", "ci_pipelines", column: "pipeline_id", name: "fk_fb57e6cc56", on_delete: :cascade add_foreign_key "ci_stages", "projects", name: "fk_2360681d1d", on_delete: :cascade add_foreign_key "ci_subscriptions_projects", "projects", column: "downstream_project_id", on_delete: :cascade diff --git a/doc/administration/instance_limits.md b/doc/administration/instance_limits.md index 7beb1193459eb2ee41afa8809dfb561bb4d86ea5..c005af750bacbcb286ffc117cac985288b7b44e6 100644 --- a/doc/administration/instance_limits.md +++ b/doc/administration/instance_limits.md @@ -87,6 +87,28 @@ Plan.default.limits.update!(ci_active_jobs: 500) NOTE: **Note:** Set the limit to `0` to disable it. +### Number of CI/CD subscriptions to a project + +> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/9045) in GitLab 12.9. + +The total number of subscriptions can be limited per project. This limit is +checked each time a new subscription is created. + +If a new subscription would cause the total number of subscription to exceed the +limit, the subscription will be considered invalid. + +- On GitLab.com different [limits are defined per plan](../user/gitlab_com/index.md#gitlab-cicd) and they affect all projects under that plan. +- On [GitLab Starter](https://about.gitlab.com/pricing/#self-managed) tier or higher self-hosted installations, this limit is defined for the `default` plan that affects all projects. + +To set this limit on a self-hosted installation, run the following in the +[GitLab Rails console](https://docs.gitlab.com/omnibus/maintenance/#starting-a-rails-console-session): + +```ruby +Plan.default.limits.update!(ci_project_subscriptions: 500) +``` + +NOTE: **Note:** Set the limit to `0` to disable it. + ## Environment data on Deploy Boards [Deploy Boards](../user/project/deploy_boards.md) load information from Kubernetes about diff --git a/doc/ci/multi_project_pipelines.md b/doc/ci/multi_project_pipelines.md index bf59d06f582c8e180518637252202e7a6c024f7a..e41a6f0d9b12bbe36b5454c6c991024718612b6c 100644 --- a/doc/ci/multi_project_pipelines.md +++ b/doc/ci/multi_project_pipelines.md @@ -227,3 +227,19 @@ Some features are not implemented yet. For example, support for environments. - `only` and `except` - `when` (only with `on_success`, `on_failure`, and `always` values) - `extends` + +## Trigger a pipeline when an upstream project is rebuilt + +> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/9045) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.8. + +You can trigger a pipeline in your project whenever a pipeline finishes for a new +tag in a different project: + +1. Go to the project's **Settings > CI / CD** page, and expand the **Pipeline subscriptions** section. +1. Enter the path to the project you want to subscribe to. +1. Click subscribe. + +Any pipelines that complete successfully for new tags in the subscribed project +will now trigger a pipeline on the current project's default branch. The maximum +number of upstream pipeline subscriptions is 2, for both the upstream and +downstream projects. diff --git a/doc/development/application_limits.md b/doc/development/application_limits.md index f89b238cd792e099c598bdb926045309a07fba60..81ccebbd6904c96a95d48462d2245554e1f3cef5 100644 --- a/doc/development/application_limits.md +++ b/doc/development/application_limits.md @@ -39,6 +39,12 @@ limit values. It's recommended to create separate migration script files. create_or_update_plan_limit('project_hooks', 'gold', 100) ``` +NOTE: **Note:** Some plans exist only on GitLab.com. You can check if the +migration is running on GitLab.com with `Gitlab.com?`. + +NOTE: **Note:** The test environment doesn't have any plans. You can check if a +migration is running in a test environment with `Rails.env.test?` + ### Plan limits validation #### Get current limit @@ -93,3 +99,20 @@ it_behaves_like 'includes Limitable concern' do subject { build(:project_hook, project: create(:project)) } end ``` + +### Subscription Plans + +Self-hosted: + +- `default` - Everyone + +Hosted: + +- `free` - Everyone +- `bronze`- Namespaces with a Bronze subscription +- `silver` - Namespaces with a Silver subscription +- `gold` - Namespaces with a Gold subscription + +NOTE: **Note:** Hosted plans exist only on GitLab.com. + +NOTE: **Note:** The test environment doesn't have any plans. diff --git a/doc/development/dangerbot.md b/doc/development/dangerbot.md index eec81098144914fe9ec807aeb03085579785722f..b6362f043113b696037dc845c926f19d358b86f2 100644 --- a/doc/development/dangerbot.md +++ b/doc/development/dangerbot.md @@ -15,22 +15,19 @@ to the existing rules, then this is the document for you. ## Danger comments in merge requests -As of [2020-03-03](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/26275), -Danger is posting a new comment each time it runs in a pipeline and removes the -previous comments it posted. Before that, Danger would only post one comment and -update its content on subsequent `danger-review` runs. +Danger only posts one comment and updates its content on subsequent +`danger-review` runs. Given this, it's usually one of the first few comments +in a merge request if not the first. If you didn't see it, try to look +from the start of the merge request. ### Advantages -- You get email notifications of Danger failures before the pipeline fails. -- If someone introduces a change that creates a new Danger warning, it's very obvious now, both in email and in the UI. -- If there are no new Danger warnings - just the roulette message - then the email acts as confirmation of that. -- It's easier to see if a roulette recommendation changed, which is useful for people that think about roulette logic/behavior quite often. -- You don't have to scroll up to get to the first Danger comment (sometimes MR can have more than discussions). +- You don't get email notifications each time `danger-review` runs. ### Disadvantages -- You get new email notifications for each `danger-review` run, which can clutter threaded discussions in email clients. +- It's not obvious Danger will update the old comment, thus you need to + pay attention to it if it is updated or not. ## Run Danger locally diff --git a/doc/user/project/settings/import_export.md b/doc/user/project/settings/import_export.md index d32b4847230232459601aaf9de4e7290b483818a..c69a4740ab3914217dfbccb4721b11fdc671112c 100644 --- a/doc/user/project/settings/import_export.md +++ b/doc/user/project/settings/import_export.md @@ -77,6 +77,7 @@ The following items will be exported: - Design Management files and data **(PREMIUM)** - LFS objects - Issue boards +- Pipelines history The following items will NOT be exported: diff --git a/locale/gitlab.pot b/locale/gitlab.pot index cb9cff0b9884bc2212204b59e6e62cc37d7f8173..e93052df7e06a9ed0bb6324c42100ecfe10483bc 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -861,6 +861,9 @@ msgstr "" msgid "A secure token that identifies an external storage request." msgstr "" +msgid "A subscription will trigger a new pipeline on the default branch of this project when a pipeline successfully completes for a new tag on the %{default_branch_docs} of the subscribed project." +msgstr "" + msgid "A user with write access to the source branch selected this option" msgstr "" @@ -18897,9 +18900,6 @@ msgstr "" msgid "Subscriptions" msgstr "" -msgid "Subscriptions allow successfully completed pipelines on the %{default_branch_docs} of the subscribed project to trigger a new pipeline on the default branch of this project." -msgstr "" - msgid "Subtracted" msgstr "" @@ -19738,7 +19738,7 @@ msgstr "" msgid "There are no unstaged changes" msgstr "" -msgid "There is a limit of 100 subscriptions from or to a project." +msgid "There is a limit of %{ci_project_subscriptions_limit} subscriptions from or to a project." msgstr "" msgid "There is already a repository with that name on disk" @@ -20203,7 +20203,7 @@ msgstr "" msgid "This project is archived and cannot be commented on." msgstr "" -msgid "This project path either does not exist or is private." +msgid "This project path either does not exist or you do not have access." msgstr "" msgid "This project will be removed on %{date}" diff --git a/spec/javascripts/editor/editor_lite_spec.js b/spec/javascripts/editor/editor_lite_spec.js index 154daccf82d89edafbe93d0867a099efed22a8f4..106264aa13f5d974fc56617ceb18a3f348ff8f01 100644 --- a/spec/javascripts/editor/editor_lite_spec.js +++ b/spec/javascripts/editor/editor_lite_spec.js @@ -1,5 +1,6 @@ import { editor as monacoEditor, Uri } from 'monaco-editor'; import Editor from '~/editor/editor_lite'; +import { DEFAULT_THEME, themes } from '~/ide/lib/themes'; describe('Base editor', () => { let editorEl; @@ -108,4 +109,52 @@ describe('Base editor', () => { expect(editor.model.getLanguageIdentifier().language).toEqual('plaintext'); }); }); + + describe('syntax highlighting theme', () => { + let themeDefineSpy; + let themeSetSpy; + let defaultScheme; + + beforeEach(() => { + themeDefineSpy = spyOn(monacoEditor, 'defineTheme'); + themeSetSpy = spyOn(monacoEditor, 'setTheme'); + defaultScheme = window.gon.user_color_scheme; + }); + + afterEach(() => { + window.gon.user_color_scheme = defaultScheme; + }); + + it('sets default syntax highlighting theme', () => { + const expectedTheme = themes.find(t => t.name === DEFAULT_THEME); + + editor = new Editor(); + + expect(themeDefineSpy).toHaveBeenCalledWith(DEFAULT_THEME, expectedTheme.data); + expect(themeSetSpy).toHaveBeenCalledWith(DEFAULT_THEME); + }); + + it('sets correct theme if it is set in users preferences', () => { + const expectedTheme = themes.find(t => t.name !== DEFAULT_THEME); + + expect(expectedTheme.name).not.toBe(DEFAULT_THEME); + + window.gon.user_color_scheme = expectedTheme.name; + editor = new Editor(); + + expect(themeDefineSpy).toHaveBeenCalledWith(expectedTheme.name, expectedTheme.data); + expect(themeSetSpy).toHaveBeenCalledWith(expectedTheme.name); + }); + + it('falls back to default theme if a selected one is not supported yet', () => { + const name = 'non-existent-theme'; + const nonExistentTheme = { name }; + + window.gon.user_color_scheme = nonExistentTheme.name; + editor = new Editor(); + + expect(themeDefineSpy).not.toHaveBeenCalled(); + expect(themeSetSpy).toHaveBeenCalledWith(DEFAULT_THEME); + }); + }); }); diff --git a/spec/lib/gitlab/import_export/all_models.yml b/spec/lib/gitlab/import_export/all_models.yml index bbb61b4c3561ba345e7daa0aaefb6032425308fd..e579c8474b70d7918d450aaa5a240b515248377f 100644 --- a/spec/lib/gitlab/import_export/all_models.yml +++ b/spec/lib/gitlab/import_export/all_models.yml @@ -197,6 +197,7 @@ ci_pipelines: - source_bridge - source_job - sourced_pipelines +- source_project - triggered_by_pipeline - triggered_pipelines - child_pipelines