From e84a2fdfc862ac63fe4be9df2f940c22a0c9aba3 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 2 Jun 2021 18:10:01 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .gitlab/ci/frontend.gitlab-ci.yml | 27 - .gitlab/ci/rules.gitlab-ci.yml | 11 - .stylelintrc | 1 - .../javascripts/emoji/awards_app/index.js | 2 +- .../javascripts/emoji/components/picker.vue | 2 +- .../notes/components/note_actions.vue | 2 +- .../vue_shared/components/awards_list.vue | 6 +- app/assets/stylesheets/framework/awards.scss | 46 +- app/assets/stylesheets/framework/blocks.scss | 4 +- app/assets/stylesheets/pages/issuable.scss | 4 - app/assets/stylesheets/pages/issues.scss | 8 - app/assets/stylesheets/pages/login.scss | 4 - app/assets/stylesheets/pages/search.scss | 1 - .../stylesheets/startup/startup-dark.scss | 1597 ++++++------- .../stylesheets/startup/startup-general.scss | 1245 +++++----- .../stylesheets/startup/startup-signin.scss | 2015 ++++++++++++++--- app/graphql/mutations/ci/runner/delete.rb | 44 + app/graphql/types/mutation_type.rb | 1 + app/helpers/groups_helper.rb | 8 - .../ci/create_downstream_pipeline_service.rb | 12 +- .../groups/settings/ci_cd/_form.html.haml | 3 +- app/views/layouts/_head.html.haml | 2 +- app/views/layouts/_startup_css.haml | 3 +- app/views/layouts/devise.html.haml | 2 +- .../layouts/nav/sidebar/_group.html.haml | 2 +- .../merge_requests/_awards_block.html.haml | 4 +- .../shared/issue_type/_emoji_block.html.haml | 2 +- app/views/shared/nav/_sidebar_menu.html.haml | 11 +- .../nav/_sidebar_menu_collapsed.html.haml | 5 + app/workers/bulk_imports/pipeline_worker.rb | 2 +- .../cached_sidebar_merge_requests_count.yml | 8 - ..._id_into_vulnerability_statistics_table.rb | 7 + ...bility_statistics_on_latest_pipeline_id.rb | 17 + ..._for_latest_pipeline_id_to_ci_pipelines.rb | 17 + db/schema_migrations/20210525184900 | 1 + db/schema_migrations/20210526181820 | 1 + db/schema_migrations/20210526181821 | 1 + db/structure.sql | 8 +- doc/.vale/gitlab/spelling-exceptions.txt | 1 - .../geo/setup/external_database.md | 14 +- doc/api/graphql/reference/index.md | 138 +- doc/api/vulnerability_exports.md | 14 +- doc/policy/maintenance.md | 8 +- doc/subscriptions/bronze_starter.md | 4 +- doc/topics/autodevops/stages.md | 6 +- doc/user/analytics/value_stream_analytics.md | 8 +- .../container_scanning/index.md | 31 +- .../application_security/terminology/index.md | 4 +- doc/user/group/import/index.md | 2 + .../group/value_stream_analytics/index.md | 2 +- .../project/merge_requests/reviews/index.md | 27 +- .../groups/pipelines/boards_pipeline.rb | 15 + .../groups/pipelines/labels_pipeline.rb | 29 +- .../groups/pipelines/milestones_pipeline.rb | 21 +- lib/bulk_imports/ndjson_pipeline.rb | 36 + lib/bulk_imports/pipeline.rb | 12 + lib/bulk_imports/stage.rb | 6 +- lib/gitlab/auth.rb | 4 +- lib/gitlab/ci/parsers/test/junit.rb | 2 + package.json | 1 - scripts/frontend/startup_css/constants.js | 65 +- .../startup_css/startup_css_changed.sh | 36 - .../startup_css/write_startup_scss.js | 2 +- .../issues/user_interacts_with_awards_spec.rb | 10 +- .../merge_request/user_awards_emoji_spec.rb | 4 +- spec/fixtures/bulk_imports/boards.ndjson | 1 + .../fixtures/bulk_imports/gz/boards.ndjson.gz | Bin 0 -> 432 bytes .../bulk_imports/{ => gz}/labels.ndjson.gz | Bin .../bulk_imports/gz/milestones.ndjson.gz | Bin 0 -> 402 bytes spec/fixtures/bulk_imports/labels.ndjson | 1 + spec/fixtures/bulk_imports/milestones.ndjson | 5 + spec/frontend/fixtures/startup_css.rb | 14 +- .../__snapshots__/awards_list_spec.js.snap | 16 +- .../vue_shared/components/awards_list_spec.js | 9 +- .../mutations/ci/runner/delete_spec.rb | 92 + .../extractors/ndjson_extractor_spec.rb | 2 +- .../groups/pipelines/boards_pipeline_spec.rb | 49 + .../groups/pipelines/labels_pipeline_spec.rb | 15 +- .../pipelines/milestones_pipeline_spec.rb | 110 +- spec/lib/bulk_imports/ndjson_pipeline_spec.rb | 75 +- spec/lib/bulk_imports/stage_spec.rb | 3 +- spec/lib/gitlab/auth_spec.rb | 22 + spec/lib/gitlab/ci/parsers/test/junit_spec.rb | 24 + .../import_export/command_line_util_spec.rb | 2 +- .../models/bulk_imports/export_upload_spec.rb | 2 +- spec/requests/api/group_export_spec.rb | 2 +- .../file_decompression_service_spec.rb | 2 +- .../relation_export_service_spec.rb | 2 +- ...create_downstream_pipeline_service_spec.rb | 47 +- .../nav/sidebar/_project.html.haml_spec.rb | 18 + .../bulk_imports/pipeline_worker_spec.rb | 5 +- 91 files changed, 3820 insertions(+), 2336 deletions(-) create mode 100644 app/graphql/mutations/ci/runner/delete.rb create mode 100644 app/views/shared/nav/_sidebar_menu_collapsed.html.haml delete mode 100644 config/feature_flags/development/cached_sidebar_merge_requests_count.yml create mode 100644 db/migrate/20210525184900_add_latest_pipeline_id_into_vulnerability_statistics_table.rb create mode 100644 db/migrate/20210526181820_add_index_to_vulnerability_statistics_on_latest_pipeline_id.rb create mode 100644 db/migrate/20210526181821_add_foreign_key_for_latest_pipeline_id_to_ci_pipelines.rb create mode 100644 db/schema_migrations/20210525184900 create mode 100644 db/schema_migrations/20210526181820 create mode 100644 db/schema_migrations/20210526181821 create mode 100644 lib/bulk_imports/groups/pipelines/boards_pipeline.rb delete mode 100755 scripts/frontend/startup_css/startup_css_changed.sh create mode 100644 spec/fixtures/bulk_imports/boards.ndjson create mode 100644 spec/fixtures/bulk_imports/gz/boards.ndjson.gz rename spec/fixtures/bulk_imports/{ => gz}/labels.ndjson.gz (100%) create mode 100644 spec/fixtures/bulk_imports/gz/milestones.ndjson.gz create mode 100644 spec/fixtures/bulk_imports/labels.ndjson create mode 100644 spec/fixtures/bulk_imports/milestones.ndjson create mode 100644 spec/graphql/mutations/ci/runner/delete_spec.rb create mode 100644 spec/lib/bulk_imports/groups/pipelines/boards_pipeline_spec.rb diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml index a772c1b847f..33aab8554e7 100644 --- a/.gitlab/ci/frontend.gitlab-ci.yml +++ b/.gitlab/ci/frontend.gitlab-ci.yml @@ -317,30 +317,3 @@ bundle-size-review: expire_in: 31d paths: - bundle-size-review - -.startup-css-check-base: - extends: - - .frontend-test-base - script: - - *yarn-install - - run_timed_command "yarn generate:startup_css" - - yarn check:startup_css - -startup-css-check: - extends: - - .startup-css-check-base - - .frontend:rules:startup-css-check - needs: - - job: "compile-test-assets" - - job: "rspec frontend_fixture" - - job: "rspec-ee frontend_fixture" - optional: true - -startup-css-check as-if-foss: - extends: - - .startup-css-check-base - - .as-if-foss - - .frontend:rules:startup-css-check-as-if-foss - needs: - - job: "compile-test-assets as-if-foss" - - job: "rspec frontend_fixture as-if-foss" diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml index 0a937f132cd..fbc010f90b5 100644 --- a/.gitlab/ci/rules.gitlab-ci.yml +++ b/.gitlab/ci/rules.gitlab-ci.yml @@ -485,17 +485,6 @@ changes: *frontend-build-patterns allow_failure: true -.frontend:rules:startup-css-check: - rules: - - changes: *code-backstage-qa-patterns - -.frontend:rules:startup-css-check-as-if-foss: - rules: - - <<: *if-not-ee - when: never - - <<: *if-merge-request - changes: *code-backstage-qa-patterns - ################ # Memory rules # ################ diff --git a/.stylelintrc b/.stylelintrc index a4331811eb3..13ec6ea340b 100644 --- a/.stylelintrc +++ b/.stylelintrc @@ -3,7 +3,6 @@ "ignoreFiles": [ "app/assets/stylesheets/pages/emojis.scss", "app/assets/stylesheets/startup/startup-*.scss", - "ee/app/assets/stylesheets/startup/startup-*.scss", "app/assets/stylesheets/lazy_bundles/select2.scss", "app/assets/stylesheets/highlight/themes/*.scss", "app/assets/stylesheets/lazy_bundles/cropper.css" diff --git a/app/assets/javascripts/emoji/awards_app/index.js b/app/assets/javascripts/emoji/awards_app/index.js index 16268910f49..1a084d37762 100644 --- a/app/assets/javascripts/emoji/awards_app/index.js +++ b/app/assets/javascripts/emoji/awards_app/index.js @@ -32,7 +32,7 @@ export default (el) => { canAwardEmoji: this.canAwardEmoji, currentUserId: this.currentUserId, defaultAwards: ['thumbsup', 'thumbsdown'], - selectedClass: 'gl-bg-blue-50! is-active', + selectedClass: 'selected', }, on: { award: this.toggleAward, diff --git a/app/assets/javascripts/emoji/components/picker.vue b/app/assets/javascripts/emoji/components/picker.vue index 35f0a1a3818..78ba2aabcf8 100644 --- a/app/assets/javascripts/emoji/components/picker.vue +++ b/app/assets/javascripts/emoji/components/picker.vue @@ -85,7 +85,7 @@ export default { :boundary="getBoundaryElement()" :class="dropdownClass" menu-class="dropdown-extended-height" - category="tertiary" + category="secondary" no-flip right lazy diff --git a/app/assets/javascripts/notes/components/note_actions.vue b/app/assets/javascripts/notes/components/note_actions.vue index 0cc818c6d0e..0f72b4f2dba 100644 --- a/app/assets/javascripts/notes/components/note_actions.vue +++ b/app/assets/javascripts/notes/components/note_actions.vue @@ -304,7 +304,7 @@ export default { v-else v-gl-tooltip :class="{ 'js-user-authored': isAuthoredByCurrentUser }" - class="note-action-button note-emoji-button add-reaction-button btn-icon js-add-award js-note-emoji" + class="note-action-button note-emoji-button add-reaction-button js-add-award js-note-emoji" category="tertiary" variant="default" :title="$options.i18n.addReactionLabel" diff --git a/app/assets/javascripts/vue_shared/components/awards_list.vue b/app/assets/javascripts/vue_shared/components/awards_list.vue index 08d3e163257..e6d9a38d1fb 100644 --- a/app/assets/javascripts/vue_shared/components/awards_list.vue +++ b/app/assets/javascripts/vue_shared/components/awards_list.vue @@ -173,7 +173,7 @@ export default { v-for="awardList in groupedAwards" :key="awardList.name" v-gl-tooltip.viewport - class="gl-mr-3" + class="gl-mr-3 gl-my-2" :class="awardList.classes" :title="awardList.title" data-testid="award-button" @@ -184,10 +184,10 @@ export default { {{ awardList.list.length }} -
+
li { &:not(:only-child) { margin-right: $gl-padding-8; } - - @include media-breakpoint-down(md) { - margin-top: $gl-padding-8; - } } } @@ -154,10 +150,6 @@ ul.related-merge-requests > li { .btn-group:not(.hidden) { display: flex; - - @include media-breakpoint-down(md) { - margin-top: $gl-padding-8; - } } .js-create-merge-request { diff --git a/app/assets/stylesheets/pages/login.scss b/app/assets/stylesheets/pages/login.scss index b537a46a6f2..9d437531e6d 100644 --- a/app/assets/stylesheets/pages/login.scss +++ b/app/assets/stylesheets/pages/login.scss @@ -106,10 +106,6 @@ width: 100%; } } - - .omniauth-btn { - width: 100%; - } } .new-session-tabs { diff --git a/app/assets/stylesheets/pages/search.scss b/app/assets/stylesheets/pages/search.scss index 2ec2df4b817..f83ba89daae 100644 --- a/app/assets/stylesheets/pages/search.scss +++ b/app/assets/stylesheets/pages/search.scss @@ -45,7 +45,6 @@ input[type='checkbox']:hover { margin: 0 8px; form { - display: block; margin: 0; padding: 4px; width: $search-input-width; diff --git a/app/assets/stylesheets/startup/startup-dark.scss b/app/assets/stylesheets/startup/startup-dark.scss index 65284279019..9f7a8860e4d 100644 --- a/app/assets/stylesheets/startup/startup-dark.scss +++ b/app/assets/stylesheets/startup/startup-dark.scss @@ -1,23 +1,4 @@ -// DO NOT EDIT! This is auto-generated from "yarn run generate:startup_css" -// Please see the feedback issue for more details and help: -// https://gitlab.com/gitlab-org/gitlab/-/issues/331812 @charset "UTF-8"; -body.gl-dark { - --gray-50: #303030; - --gray-100: #404040; - --gray-200: #525252; - --gray-950: #fff; - --green-100: #0d532a; - --green-400: #108548; - --green-700: #91d4a8; - --blue-400: #1f75cb; - --orange-400: #ab6100; - --gl-text-color: #fafafa; - --border-color: #4f4f4f; -} -:root { - --white: #333; -} *, *::before, *::after { @@ -27,46 +8,68 @@ html { font-family: sans-serif; line-height: 1.15; } -aside, -header, -nav { + header, nav, section { display: block; } body { margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, - "Noto Sans", Ubuntu, Cantarell, "Helvetica Neue", sans-serif, - "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Noto Sans", Ubuntu, Cantarell, "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 1rem; font-weight: 400; line-height: 1.5; color: #fafafa; text-align: left; - background-color: #1f1f1f; + background-color: #2e2e2e; } -h1 { +h1, h2, h3 { margin-top: 0; margin-bottom: 0.25rem; } +p { + margin-top: 0; + margin-bottom: 1rem; +} + ul { margin-top: 0; margin-bottom: 1rem; } + ul ul { margin-bottom: 0; } + strong { font-weight: bolder; } +sub { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +sub { + bottom: -.25em; +} a { color: #007bff; text-decoration: none; background-color: transparent; } -a:not([href]):not([class]) { +a:not([href]) { color: inherit; text-decoration: none; } +pre, +code { + font-family: "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; + font-size: 1em; +} +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; +} img { vertical-align: middle; border-style: none; @@ -75,11 +78,18 @@ svg { overflow: hidden; vertical-align: middle; } +table { + border-collapse: collapse; +} +th { + text-align: inherit; +} button { border-radius: 0; } input, -button { +button, +textarea { margin: 0; font-family: inherit; font-size: inherit; @@ -92,20 +102,21 @@ input { button { text-transform: none; } -[role="button"] { - cursor: pointer; -} button:not(:disabled), [type="button"]:not(:disabled), -[type="submit"]:not(:disabled) { +[type="reset"]:not(:disabled) { cursor: pointer; } button::-moz-focus-inner, [type="button"]::-moz-focus-inner, -[type="submit"]::-moz-focus-inner { +[type="reset"]::-moz-focus-inner { padding: 0; border-style: none; } +textarea { + overflow: auto; + resize: vertical; +} [type="search"] { outline-offset: -2px; } @@ -113,24 +124,81 @@ summary { display: list-item; cursor: pointer; } +template { + display: none; +} [hidden] { display: none !important; } -h1, -.h1 { +h1, h2, h3, +.h1, .h2, .h3 { margin-bottom: 0.25rem; font-weight: 600; line-height: 1.2; color: #fafafa; } -h1, -.h1 { +h1, .h1 { font-size: 2.1875rem; } +h2, .h2 { + font-size: 1.75rem; +} +h3, .h3 { + font-size: 1.53125rem; +} .list-unstyled { padding-left: 0; list-style: none; } +code { + font-size: 90%; + color: #fff; + word-wrap: break-word; +} +a > code { + color: inherit; +} +pre { + display: block; + font-size: 90%; + color: #fafafa; +} +pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} +.container { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .container { + max-width: 540px; + } +} + +@media (min-width: 768px) { + .container { + max-width: 720px; + } +} + +@media (min-width: 992px) { + .container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .container { + max-width: 1140px; + } +} .container-fluid { width: 100%; padding-right: 15px; @@ -138,7 +206,48 @@ h1, margin-right: auto; margin-left: auto; } -.form-control { + +@media (min-width: 576px) { + .container { + max-width: 540px; + } +} + +@media (min-width: 768px) { + .container { + max-width: 720px; + } +} + +@media (min-width: 992px) { + .container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .container { + max-width: 1140px; + } +} +.row { + display: flex; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; +} +.table { + width: 100%; + margin-bottom: 0.5rem; + color: #fafafa; +} +.table th, +.table td { + padding: 0.75rem; + vertical-align: top; + border-top: 1px solid #4f4f4f; +} + .search form { display: block; width: 100%; height: 34px; @@ -147,27 +256,24 @@ h1, font-weight: 400; line-height: 1.5; color: #fafafa; - background-color: #333; + background-color: #4f4f4f; background-clip: padding-box; - border: 1px solid #404040; + border: 1px solid #4f4f4f; border-radius: 0.25rem; } + @media (prefers-reduced-motion: reduce) { } -.form-control:-moz-focusring { + .search form:-moz-focusring { color: transparent; text-shadow: 0 0 0 #fafafa; } -.form-control::-ms-input-placeholder { - color: #bfbfbf; + .search form::placeholder { + color: #ccc; opacity: 1; } -.form-control::placeholder { - color: #bfbfbf; - opacity: 1; -} -.form-control:disabled { - background-color: #303030; + .search form:disabled { + background-color: #2e2e2e; opacity: 1; } .form-inline { @@ -175,8 +281,9 @@ h1, flex-flow: row wrap; align-items: center; } + @media (min-width: 576px) { - .form-inline .form-control { + .form-inline .search form, .search .form-inline form { display: inline-block; width: auto; vertical-align: middle; @@ -188,7 +295,7 @@ h1, color: #fafafa; text-align: center; vertical-align: middle; - -moz-user-select: none; + cursor: pointer; user-select: none; background-color: transparent; border: 1px solid transparent; @@ -197,24 +304,26 @@ h1, line-height: 20px; border-radius: 0.25rem; } + @media (prefers-reduced-motion: reduce) { } -.btn:disabled { +.btn.disabled, .btn:disabled { opacity: 0.65; } -.btn:not(:disabled):not(.disabled) { - cursor: pointer; +a.btn.disabled { + pointer-events: none; } .collapse:not(.show) { display: none; } + .dropdown { position: relative; } -.dropdown-menu-toggle { + .dropdown-menu-toggle { white-space: nowrap; } -.dropdown-menu-toggle::after { + .dropdown-menu-toggle::after { display: inline-block; margin-left: 0.255em; vertical-align: 0.255em; @@ -224,7 +333,7 @@ h1, border-bottom: 0; border-left: 0.3em solid transparent; } -.dropdown-menu-toggle:empty::after { + .dropdown-menu-toggle:empty::after { margin-left: 0; } .dropdown-menu { @@ -246,6 +355,16 @@ h1, border: 1px solid rgba(255, 255, 255, 0.15); border-radius: 0.25rem; } +.dropdown-menu-right { + right: 0; + left: auto; +} + .divider { + height: 0; + margin: 4px 0; + overflow: hidden; + border-top: 1px solid #4f4f4f; +} .dropdown-menu.show { display: block; } @@ -264,6 +383,7 @@ h1, justify-content: space-between; padding: 0.25rem 0.5rem; } +.navbar .container, .navbar .container-fluid { display: flex; flex-wrap: wrap; @@ -294,12 +414,15 @@ h1, border: 1px solid transparent; border-radius: 0.25rem; } + @media (max-width: 575.98px) { + .navbar-expand-sm > .container, .navbar-expand-sm > .container-fluid { padding-right: 0; padding-left: 0; } } + @media (min-width: 576px) { .navbar-expand-sm { flex-flow: row nowrap; @@ -311,6 +434,7 @@ h1, .navbar-expand-sm .navbar-nav .dropdown-menu { position: absolute; } + .navbar-expand-sm > .container, .navbar-expand-sm > .container-fluid { flex-wrap: nowrap; } @@ -330,7 +454,7 @@ h1, word-wrap: break-word; background-color: #333; background-clip: border-box; - border: 1px solid #404040; + border: 1px solid #4f4f4f; border-radius: 0.25rem; } .badge { @@ -344,6 +468,7 @@ h1, vertical-align: baseline; border-radius: 0.25rem; } + @media (prefers-reduced-motion: reduce) { } .badge:empty { @@ -358,6 +483,10 @@ h1, padding-left: 0.6em; border-radius: 10rem; } +.media { + display: flex; + align-items: flex-start; +} .close { float: right; font-size: 1.5rem; @@ -365,15 +494,55 @@ h1, line-height: 1; color: #fff; text-shadow: 0 1px 0 #333; - opacity: 0.5; + opacity: .5; } button.close { padding: 0; background-color: transparent; border: 0; + appearance: none; } -.rounded-circle { - border-radius: 50% !important; +a.close.disabled { + pointer-events: none; +} +.modal-dialog { + position: relative; + width: auto; + margin: 0.5rem; + pointer-events: none; +} + +@media (min-width: 576px) { + .modal-dialog { + max-width: 500px; + margin: 1.75rem auto; + } +} +.bg-transparent { + background-color: transparent !important; +} +.border { + border: 1px solid #4f4f4f !important; +} +.border-top { + border-top: 1px solid #4f4f4f !important; +} +.border-right { + border-right: 1px solid #4f4f4f !important; +} +.border-bottom { + border-bottom: 1px solid #4f4f4f !important; +} +.border-left { + border-left: 1px solid #4f4f4f !important; +} +.rounded { + border-radius: 0.25rem !important; +} +.clearfix::after { + display: block; + clear: both; + content: ""; } .d-none { display: none !important; @@ -384,16 +553,19 @@ button.close { .d-block { display: block !important; } + @media (min-width: 576px) { .d-sm-none { display: none !important; } } + @media (min-width: 768px) { .d-md-block { display: block !important; } } + @media (min-width: 992px) { .d-lg-none { display: none !important; @@ -402,11 +574,18 @@ button.close { display: block !important; } } + @media (min-width: 1200px) { .d-xl-block { display: block !important; } } +.flex-wrap { + flex-wrap: wrap !important; +} +.float-right { + float: right !important; +} .sr-only { position: absolute; width: 1px; @@ -421,59 +600,72 @@ button.close { .m-auto { margin: auto !important; } -.gl-button { - display: inline-flex; +.text-nowrap { + white-space: nowrap !important; } -.gl-button:not(.btn-link):active { - text-decoration: none; +.visible { + visibility: visible !important; } -.gl-button.gl-button { - border-width: 0; - padding-top: 0.5rem; - padding-bottom: 0.5rem; - padding-left: 0.75rem; - padding-right: 0.75rem; - background-color: transparent; - line-height: 1rem; + .search form.focus { color: #fafafa; - fill: currentColor; - box-shadow: inset 0 0 0 1px #525252; - justify-content: center; + background-color: #4f4f4f; + border-color: #80bdff; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} +.gl-badge { + display: inline-flex; align-items: center; - font-size: 0.875rem; - border-radius: 0.25rem; -} -.gl-button.gl-button.btn-default { - background-color: #333; -} -.gl-button.gl-button.btn-default:active, -.gl-button.gl-button.btn-default.active { - box-shadow: inset 0 0 0 2px #bfbfbf, 0 0 0 1px rgba(51, 51, 51, 0.4), - 0 0 0 4px rgba(66, 143, 220, 0.48); + font-size: 0.75rem; + font-weight: 400; + line-height: 1rem; + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + padding-right: 0.5rem; outline: none; - background-color: #404040; } -body, -.form-control, +body, .search form, .search form { font-size: 0.875rem; } button, -html [type="button"], -[type="submit"], -[role="button"] { +html [type='button'], +[type='reset'], +[role='button'] { cursor: pointer; } h1, -.h1 { +.h1, +h2, +.h2, +h3, +.h3 { margin-top: 20px; margin-bottom: 10px; } +input[type='file'] { + line-height: 1; +} + strong { font-weight: bold; } a { - color: #63a6e9; + color: #418cd8; +} +code { + padding: 2px 4px; + color: #fff; + background-color: #2e2e2e; + border-radius: 4px; +} +.code > code { + background-color: inherit; + padding: unset; +} +table { + border-spacing: 0; } .hidden { display: none !important; @@ -482,7 +674,7 @@ a { .hide { display: none; } -.dropdown-menu-toggle::after { + .dropdown-menu-toggle::after { display: none; } .badge:not(.gl-badge) { @@ -492,16 +684,13 @@ a { font-weight: 400; display: inline-block; } -.divider { - height: 0; - margin: 4px 0; - overflow: hidden; - border-top: 1px solid #404040; +pre code { + white-space: pre-wrap; } .toggle-sidebar-button .collapse-text, .toggle-sidebar-button .icon-chevron-double-lg-left, .toggle-sidebar-button .icon-chevron-double-lg-right { - color: #999; + color: #bababa; } svg { vertical-align: baseline; @@ -512,23 +701,42 @@ html { body { text-decoration-skip: ink; } +.content-wrapper { + margin-top: 40px; + padding-bottom: 100px; +} +.container { + padding-top: 0; + z-index: 5; +} +.container .content { + margin: 0; +} + +@media (max-width: 575.98px) { + .container .content { + margin-top: 20px; + } +} + +@media (max-width: 575.98px) { + .container .container .title { + padding-left: 15px !important; + } +} .btn { border-radius: 4px; font-size: 0.875rem; font-weight: 400; padding: 6px 10px; background-color: #333; - border-color: #404040; + border-color: #4f4f4f; color: #fafafa; color: #fafafa; white-space: nowrap; } -.btn:active { - background-color: #303030; - box-shadow: none; -} -.btn:active, -.btn.active { +.btn:active, .btn.active { + box-shadow: rgba(0, 0, 0, 0.16); background-color: #444; border-color: #fafafa; color: #fafafa; @@ -537,19 +745,61 @@ body { height: 15px; width: 15px; } -.btn svg:not(:last-child) { +.btn svg:not(:last-child), +.btn .fa:not(:last-child) { margin-right: 5px; } .badge.badge-pill:not(.gl-badge) { font-weight: 400; - background-color: rgba(255, 255, 255, 0.07); - color: #dbdbdb; + background-color: rgba(0, 0, 0, 0.07); + color: #dfdfdf; vertical-align: baseline; } +.hint { + font-style: italic; + color: #707070; +} +.bold { + font-weight: 600; +} +pre.wrap { + word-break: break-word; + white-space: pre-wrap; +} +table a code { + position: relative; + top: -2px; + margin-right: 3px; +} +.loading { + margin: 20px auto; + height: 40px; + color: #dfdfdf; + font-size: 32px; + text-align: center; +} +.highlight { + text-shadow: none; +} .chart { overflow: hidden; height: 220px; } +.break-word { + word-wrap: break-word; +} +.center { + text-align: center; +} +.block { + display: block; +} +.flex { + display: flex; +} +.flex-grow { + flex-grow: 1; +} .dropdown { position: relative; } @@ -560,41 +810,47 @@ body { max-height: 312px; overflow-y: auto; } + @media (max-width: 575.98px) { .show.dropdown .dropdown-menu { width: 100%; } } -.show.dropdown .dropdown-menu-toggle, + .show.dropdown .dropdown-menu-toggle, .show.dropdown .dropdown-menu-toggle { border-color: #c4c4c4; } -.show.dropdown [data-toggle="dropdown"] { +.show.dropdown [data-toggle='dropdown'] { outline: 0; } .search-input-container .dropdown-menu { margin-top: 11px; } -.dropdown-menu-toggle { + .dropdown-menu-toggle { padding: 6px 8px 6px 10px; background-color: #333; color: #fafafa; font-size: 14px; text-align: left; - border: 1px solid #404040; + border: 1px solid #4f4f4f; border-radius: 0.25rem; white-space: nowrap; } -.no-outline.dropdown-menu-toggle { + .no-outline.dropdown-menu-toggle { outline: 0; } -.dropdown-menu-toggle.dropdown-menu-toggle { - justify-content: flex-start; - overflow: hidden; + .dropdown-menu-toggle .fa { + color: #c4c4c4; +} +.dropdown-menu-toggle { padding-right: 25px; position: relative; - text-overflow: ellipsis; width: 160px; + text-overflow: ellipsis; + overflow: hidden; +} +.dropdown-menu-toggle .fa { + position: absolute; } .dropdown-menu { display: none; @@ -610,7 +866,7 @@ body { font-weight: 400; padding: 8px 0; background-color: #333; - border: 1px solid #404040; + border: 1px solid #4f4f4f; border-radius: 0.25rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } @@ -641,56 +897,156 @@ body { text-align: left; width: 100%; } -.dropdown-menu li > a:active, -.dropdown-menu li button:active { - background-color: #4f4f4f; - color: #fafafa; - outline: 0; - text-decoration: none; -} .dropdown-menu .divider { height: 1px; margin: 0.25rem 0; padding: 0; - background-color: #404040; + background-color: #4f4f4f; } .dropdown-menu .badge.badge-pill + span:not(.badge):not(.badge-pill) { margin-right: 40px; } +.dropdown-select { + width: 300px; +} + +@media (max-width: 767.98px) { + .dropdown-select { + width: 100%; + } +} +.dropdown-content { + max-height: 252px; + overflow-y: auto; +} +.dropdown-loading { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: none; + z-index: 9; + background-color: rgba(51, 51, 51, 0.6); + font-size: 28px; +} +.dropdown-loading .fa { + position: absolute; + top: 50%; + left: 50%; + margin-top: -14px; + margin-left: -14px; +} + @media (max-width: 575.98px) { .navbar-gitlab li.dropdown { position: static; } - .navbar-gitlab li.dropdown.user-counter { - margin-left: 8px !important; - } - .navbar-gitlab li.dropdown.user-counter > a { - padding: 0 4px !important; - } header.navbar-gitlab .dropdown .dropdown-menu { width: 100%; min-width: 100%; } } + @media (max-width: 767.98px) { .dropdown-menu-toggle { width: 100%; } } +textarea { + resize: vertical; +} input { border-radius: 0.25rem; color: #fafafa; - background-color: #333; + background-color: #4f4f4f; } -.form-control { + .search form { border-radius: 4px; padding: 6px 10px; } -.form-control::-ms-input-placeholder { - color: #868686; + .search form::placeholder { + color: #a7a7a7; } -.form-control::placeholder { - color: #868686; +body.ui-indigo .navbar-gitlab { + background-color: #292961; +} +body.ui-indigo .navbar-gitlab .navbar-collapse { + color: #d1d1f0; +} +body.ui-indigo .navbar-gitlab .container-fluid .navbar-toggler { + border-left: 1px solid #6868b9; +} +body.ui-indigo .navbar-gitlab .container-fluid .navbar-toggler svg { + fill: #d1d1f0; +} +body.ui-indigo .navbar-gitlab .navbar-sub-nav > li.active > a, +body.ui-indigo .navbar-gitlab .navbar-sub-nav > li.active > button, body.ui-indigo .navbar-gitlab .navbar-sub-nav > li.dropdown.show > a, +body.ui-indigo .navbar-gitlab .navbar-sub-nav > li.dropdown.show > button, +body.ui-indigo .navbar-gitlab .navbar-nav > li.active > a, +body.ui-indigo .navbar-gitlab .navbar-nav > li.active > button, +body.ui-indigo .navbar-gitlab .navbar-nav > li.dropdown.show > a, +body.ui-indigo .navbar-gitlab .navbar-nav > li.dropdown.show > button { + color: #292961; + background-color: #333; +} +body.ui-indigo .navbar-gitlab .navbar-sub-nav { + color: #d1d1f0; +} +body.ui-indigo .navbar-gitlab .nav > li { + color: #d1d1f0; +} +body.ui-indigo .navbar-gitlab .nav > li > a.header-user-dropdown-toggle .header-user-avatar { + border-color: #d1d1f0; +} +body.ui-indigo .navbar-gitlab .nav > li.active > a, +body.ui-indigo .navbar-gitlab .nav > li.dropdown.show > a { + color: #292961; + background-color: #333; +} +body.ui-indigo .search form { + background-color: rgba(209, 209, 240, 0.2); +} +body.ui-indigo .search .search-input::placeholder { + color: rgba(209, 209, 240, 0.8); +} +body.ui-indigo .search .search-input-wrap .search-icon, +body.ui-indigo .search .search-input-wrap .clear-icon { + fill: rgba(209, 209, 240, 0.8); +} +body.ui-indigo .nav-sidebar li.active { + box-shadow: inset 4px 0 0 #4b4ba3; +} +body.ui-indigo .nav-sidebar li.active > a { + color: #393982; +} +body.ui-indigo .nav-sidebar li.active .nav-icon-container svg { + fill: #393982; +} +body.ui-indigo .sidebar-top-level-items > li.active .badge.badge-pill { + color: #393982; +} +body.gl-dark .logo-text svg { + fill: #fafafa; +} +body.gl-dark .navbar-gitlab { + background-color: #2e2e2e; + box-shadow: 0 1px 0 0 var(--gray-100); +} +body.gl-dark .navbar-gitlab .navbar-sub-nav li.active > a, +body.gl-dark .navbar-gitlab .navbar-sub-nav li.active > button, +body.gl-dark .navbar-gitlab .navbar-sub-nav li.dropdown.show > a, +body.gl-dark .navbar-gitlab .navbar-sub-nav li.dropdown.show > button, +body.gl-dark .navbar-gitlab .navbar-nav li.active > a, +body.gl-dark .navbar-gitlab .navbar-nav li.active > button, +body.gl-dark .navbar-gitlab .navbar-nav li.dropdown.show > a, +body.gl-dark .navbar-gitlab .navbar-nav li.dropdown.show > button { + color: #fafafa; + background-color: #707070; +} +body.gl-dark .navbar-gitlab .search form { + background-color: #4f4f4f; + box-shadow: inset 0 0 0 1px #4f4f4f; } .navbar-gitlab { padding: 0 16px; @@ -698,6 +1054,7 @@ input { margin-bottom: 0; min-height: 40px; border: 0; + border-bottom: 1px solid #4f4f4f; position: fixed; top: 0; left: 0; @@ -747,6 +1104,9 @@ input { .navbar-gitlab .header-content .title img + .logo-text { margin-left: 8px; } +.navbar-gitlab .header-content .title.wrap { + white-space: normal; +} .navbar-gitlab .header-content .title a { display: flex; align-items: center; @@ -754,6 +1114,9 @@ input { margin: 5px 2px 5px -8px; border-radius: 4px; } +.navbar-gitlab .header-content .dropdown.open > a { + border-bottom-color: #333; +} .navbar-gitlab .header-content .navbar-collapse > ul.nav > li:not(.d-none) { margin: 0 2px; } @@ -762,6 +1125,7 @@ input { border-top: 0; padding: 0; } + @media (max-width: 575.98px) { .navbar-gitlab .navbar-collapse { flex: 1 1 auto; @@ -770,6 +1134,7 @@ input { .navbar-gitlab .navbar-collapse .nav { flex-wrap: nowrap; } + @media (max-width: 575.98px) { .navbar-gitlab .navbar-collapse .nav > li:not(.d-none) a { margin-left: 0; @@ -792,10 +1157,7 @@ input { text-align: center; color: currentColor; } -.navbar-gitlab .container-fluid .navbar-toggler.active { - color: currentColor; - background-color: transparent; -} + @media (max-width: 575.98px) { .navbar-gitlab .container-fluid .navbar-nav { display: flex; @@ -803,14 +1165,11 @@ input { flex-direction: row; } } -.navbar-gitlab - .container-fluid - .navbar-nav - li - .badge.badge-pill:not(.merge-request-badge) { +.navbar-gitlab .container-fluid .navbar-nav li .badge.badge-pill { box-shadow: none; font-weight: 600; } + @media (max-width: 575.98px) { .navbar-gitlab .container-fluid .nav > li.header-user { padding-left: 10px; @@ -822,6 +1181,7 @@ input { padding: 6px 8px; height: 32px; } + @media (max-width: 575.98px) { .navbar-gitlab .container-fluid .nav > li > a { padding: 0; @@ -830,12 +1190,7 @@ input { .navbar-gitlab .container-fluid .nav > li > a.header-user-dropdown-toggle { margin-left: 2px; } -.navbar-gitlab - .container-fluid - .nav - > li - > a.header-user-dropdown-toggle - .header-user-avatar { +.navbar-gitlab .container-fluid .nav > li > a.header-user-dropdown-toggle .header-user-avatar { margin-right: 0; } .navbar-gitlab .container-fluid .nav > li .header-new-dropdown-toggle { @@ -856,9 +1211,7 @@ input { height: 32px; font-weight: 600; } -.navbar-sub-nav > li .top-nav-toggle, .navbar-sub-nav > li > button, -.navbar-nav > li .top-nav-toggle, .navbar-nav > li > button { background: transparent; border: 0; @@ -896,25 +1249,31 @@ input { font-weight: 400; margin-left: -6px; font-size: 11px; - color: var(--gray-950, #333); + color: #333; padding: 0 5px; line-height: 12px; border-radius: 7px; box-shadow: 0 1px 0 rgba(76, 78, 84, 0.2); } -.title-container .badge.badge-pill:not(.merge-request-badge).green-badge, -.navbar-nav .badge.badge-pill:not(.merge-request-badge).green-badge { - background-color: var(--green-400, #108548); +.title-container .badge.badge-pill.green-badge, +.navbar-nav .badge.badge-pill.green-badge { + background-color: #1aaa55; } -.title-container - .badge.badge-pill:not(.merge-request-badge).merge-requests-count, -.navbar-nav .badge.badge-pill:not(.merge-request-badge).merge-requests-count { - background-color: var(--orange-400, #ab6100); +.title-container .badge.badge-pill.merge-requests-count, +.navbar-nav .badge.badge-pill.merge-requests-count { + background-color: #fca429; } -.title-container .badge.badge-pill:not(.merge-request-badge).todos-count, -.navbar-nav .badge.badge-pill:not(.merge-request-badge).todos-count { - background-color: var(--blue-400, #1f75cb); +.title-container .badge.badge-pill.todos-count, +.navbar-nav .badge.badge-pill.todos-count { + background-color: #1f78d1; } +.title-container .canary-badge .badge, +.navbar-nav .canary-badge .badge { + font-size: 12px; + line-height: 16px; + padding: 0 0.5rem; +} + @media (max-width: 575.98px) { .navbar-gitlab .container-fluid { font-size: 18px; @@ -941,7 +1300,7 @@ input { } .header-user.show .dropdown-menu { margin-top: 4px; - color: var(--gl-text-color, #fafafa); + color: #fafafa; left: auto; max-height: 445px; } @@ -954,33 +1313,31 @@ input { border-radius: 50%; border: 1px solid #333; } -.notification-dot { - background-color: #9e5400; - height: 12px; - width: 12px; - margin-top: -15px; - pointer-events: none; - visibility: hidden; -} -.top-nav-toggle .dropdown-icon { - margin-right: 0.5rem; -} -.tanuki-logo .tanuki-left-ear, -.tanuki-logo .tanuki-right-ear, -.tanuki-logo .tanuki-nose { - fill: #e24329; -} -.tanuki-logo .tanuki-left-eye, -.tanuki-logo .tanuki-right-eye { - fill: #fc6d26; -} -.tanuki-logo .tanuki-left-cheek, -.tanuki-logo .tanuki-right-cheek { - fill: #fca326; +.media { + display: flex; + align-items: flex-start; } .card { margin-bottom: 16px; } +.content-wrapper { + width: 100%; +} +.content-wrapper .container-fluid { + padding: 0 16px; +} + +@media (min-width: 768px) { + .page-with-contextual-sidebar { + padding-left: 50px; + } +} + +@media (min-width: 1200px) { + .page-with-contextual-sidebar { + padding-left: 220px; + } +} .context-header { position: relative; margin-right: 2px; @@ -1006,20 +1363,9 @@ input { overflow: hidden; text-overflow: ellipsis; } -@media (min-width: 768px) { - .page-with-contextual-sidebar { - padding-left: 50px; - } -} -@media (min-width: 1200px) { - .page-with-contextual-sidebar { - padding-left: 220px; - } -} -@media (min-width: 768px) { - .page-with-icon-sidebar { - padding-left: 50px; - } +.context-header .sidebar-context-title.text-secondary { + font-weight: normal; + font-size: 0.8em; } .nav-sidebar { position: fixed; @@ -1028,13 +1374,14 @@ input { top: 40px; bottom: 0; left: 0; - background-color: #303030; - box-shadow: inset -1px 0 0 #404040; + background-color: #2e2e2e; + box-shadow: inset -1px 0 0 #4f4f4f; transform: translate3d(0, 0, 0); } + @media (min-width: 576px) and (max-width: 576px) { .nav-sidebar:not(.sidebar-collapsed-desktop) { - box-shadow: inset -1px 0 0 #404040, 2px 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: inset -1px 0 0 #4f4f4f, 2px 1px 3px rgba(0, 0, 0, 0.1); } } .nav-sidebar.sidebar-collapsed-desktop { @@ -1044,6 +1391,7 @@ input { overflow-x: hidden; } .nav-sidebar.sidebar-collapsed-desktop .badge.badge-pill:not(.fly-out-badge), +.nav-sidebar.sidebar-collapsed-desktop .sidebar-context-title, .nav-sidebar.sidebar-collapsed-desktop .nav-item-name { border: 0; clip: rect(0, 0, 0, 0); @@ -1064,6 +1412,9 @@ input { .nav-sidebar.sidebar-collapsed-desktop .avatar-container { margin: 0 auto; } +.nav-sidebar.sidebar-expanded-mobile { + left: 0; +} .nav-sidebar a { text-decoration: none; } @@ -1078,7 +1429,7 @@ input { display: flex; align-items: center; padding: 12px 16px; - color: #999; + color: #bababa; } .nav-sidebar li .nav-item-name { flex: 1; @@ -1086,6 +1437,7 @@ input { .nav-sidebar li.active > a { font-weight: 600; } + @media (max-width: 767.98px) { .nav-sidebar { left: -220px; @@ -1102,6 +1454,7 @@ input { height: 16px; width: 16px; } + @media (min-width: 768px) and (max-width: 1199px) { .nav-sidebar:not(.sidebar-expanded-mobile) { width: 50px; @@ -1109,8 +1462,8 @@ input { .nav-sidebar:not(.sidebar-expanded-mobile) .nav-sidebar-inner-scroll { overflow-x: hidden; } - .nav-sidebar:not(.sidebar-expanded-mobile) - .badge.badge-pill:not(.fly-out-badge), + .nav-sidebar:not(.sidebar-expanded-mobile) .badge.badge-pill:not(.fly-out-badge), + .nav-sidebar:not(.sidebar-expanded-mobile) .sidebar-context-title, .nav-sidebar:not(.sidebar-expanded-mobile) .nav-item-name { border: 0; clip: rect(0, 0, 0, 0); @@ -1138,21 +1491,7 @@ input { .nav-sidebar:not(.sidebar-expanded-mobile) .context-header a { padding: 10px 4px; } - .nav-sidebar:not(.sidebar-expanded-mobile) .sidebar-context-title { - border: 0; - clip: rect(0, 0, 0, 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - white-space: nowrap; - width: 1px; - } - .nav-sidebar:not(.sidebar-expanded-mobile) - .sidebar-top-level-items - > li - .sidebar-sub-level-items:not(.flyout-list) { + .nav-sidebar:not(.sidebar-expanded-mobile) .sidebar-top-level-items > li .sidebar-sub-level-items:not(.flyout-list) { display: none; } .nav-sidebar:not(.sidebar-expanded-mobile) .nav-icon-container { @@ -1162,17 +1501,11 @@ input { padding: 16px; width: 49px; } - .nav-sidebar:not(.sidebar-expanded-mobile) - .toggle-sidebar-button - .collapse-text, - .nav-sidebar:not(.sidebar-expanded-mobile) - .toggle-sidebar-button - .icon-chevron-double-lg-left { + .nav-sidebar:not(.sidebar-expanded-mobile) .toggle-sidebar-button .collapse-text, + .nav-sidebar:not(.sidebar-expanded-mobile) .toggle-sidebar-button .icon-chevron-double-lg-left { display: none; } - .nav-sidebar:not(.sidebar-expanded-mobile) - .toggle-sidebar-button - .icon-chevron-double-lg-right { + .nav-sidebar:not(.sidebar-expanded-mobile) .toggle-sidebar-button .icon-chevron-double-lg-right { display: block; margin: 0; } @@ -1189,12 +1522,10 @@ input { .sidebar-sub-level-items > li a { padding: 8px 16px 8px 40px; } -.sidebar-sub-level-items > li.active a { - background: rgba(255, 255, 255, 0.04); -} .sidebar-top-level-items { margin-bottom: 60px; } + @media (min-width: 576px) { .sidebar-top-level-items > li > a { margin-right: 1px; @@ -1202,7 +1533,7 @@ input { } .sidebar-top-level-items > li .badge.badge-pill { background-color: rgba(255, 255, 255, 0.08); - color: #999; + color: #bababa; } .sidebar-top-level-items > li.active { background: rgba(255, 255, 255, 0.04); @@ -1214,28 +1545,23 @@ input { .sidebar-top-level-items > li.active .badge.badge-pill { font-weight: 600; } -.sidebar-top-level-items - > li.active - .sidebar-sub-level-items:not(.is-fly-out-only) { +.sidebar-top-level-items > li.active .sidebar-sub-level-items:not(.is-fly-out-only) { display: block; } .toggle-sidebar-button, .close-nav-button { + width: 219px; + position: fixed; height: 48px; + bottom: 0; padding: 0 16px; - background-color: #303030; + background-color: #2e2e2e; border: 0; - color: #999; + border-top: 1px solid #4f4f4f; + color: #bababa; display: flex; align-items: center; } -.toggle-sidebar-button, -.close-nav-button { - position: fixed; - bottom: 0; - width: 219px; - border-top: 1px solid #404040; -} .toggle-sidebar-button svg, .close-nav-button svg { margin-right: 8px; @@ -1255,21 +1581,7 @@ input { .sidebar-collapsed-desktop .context-header a { padding: 10px 4px; } -.sidebar-collapsed-desktop .sidebar-context-title { - border: 0; - clip: rect(0, 0, 0, 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - white-space: nowrap; - width: 1px; -} -.sidebar-collapsed-desktop - .sidebar-top-level-items - > li - .sidebar-sub-level-items:not(.flyout-list) { +.sidebar-collapsed-desktop .sidebar-top-level-items > li .sidebar-sub-level-items:not(.flyout-list) { display: none; } .sidebar-collapsed-desktop .nav-icon-container { @@ -1283,9 +1595,7 @@ input { .sidebar-collapsed-desktop .toggle-sidebar-button .icon-chevron-double-lg-left { display: none; } -.sidebar-collapsed-desktop - .toggle-sidebar-button - .icon-chevron-double-lg-right { +.sidebar-collapsed-desktop .toggle-sidebar-button .icon-chevron-double-lg-right { display: block; margin: 0; } @@ -1301,6 +1611,7 @@ input { .close-nav-button { display: none; } + @media (max-width: 767.98px) { .close-nav-button { display: flex; @@ -1309,416 +1620,128 @@ input { display: none; } } -body.sidebar-refactoring.gl-dark .nav-sidebar li.active { - box-shadow: none; +table.table { + margin-bottom: 16px; } -body.sidebar-refactoring.gl-dark .nav-sidebar li a, -body.sidebar-refactoring .toggle-sidebar-button .collapse-text, -body.sidebar-refactoring .toggle-sidebar-button .icon-chevron-double-lg-left, -body.sidebar-refactoring .toggle-sidebar-button .icon-chevron-double-lg-right { - color: #c4c4c4; -} -body.sidebar-refactoring .nav-sidebar { - box-shadow: none; -} -body.sidebar-refactoring .nav-sidebar li.active { - background-color: transparent; - box-shadow: none; -} -@media (min-width: 768px) { - body.sidebar-refactoring .page-with-contextual-sidebar { - padding-left: 50px; - } -} -@media (min-width: 1200px) { - body.sidebar-refactoring .page-with-contextual-sidebar { - padding-left: 220px; - } -} -@media (min-width: 768px) { - body.sidebar-refactoring .page-with-icon-sidebar { - padding-left: 50px; - } -} -body.sidebar-refactoring .nav-sidebar { - position: fixed; - z-index: 600; - width: 220px; - top: 40px; - bottom: 0; - left: 0; - background-color: #303030; - transform: translate3d(0, 0, 0); -} -@media (min-width: 576px) and (max-width: 576px) { - body.sidebar-refactoring .nav-sidebar:not(.sidebar-collapsed-desktop) { - box-shadow: inset -1px 0 0 #404040, 2px 1px 3px rgba(0, 0, 0, 0.1); - } -} -body.sidebar-refactoring .nav-sidebar.sidebar-collapsed-desktop { - width: 50px; -} -body.sidebar-refactoring - .nav-sidebar.sidebar-collapsed-desktop - .nav-sidebar-inner-scroll { - overflow-x: hidden; -} -body.sidebar-refactoring - .nav-sidebar.sidebar-collapsed-desktop - .badge.badge-pill:not(.fly-out-badge), -body.sidebar-refactoring .nav-sidebar.sidebar-collapsed-desktop .nav-item-name { - border: 0; - clip: rect(0, 0, 0, 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - white-space: nowrap; - width: 1px; -} -body.sidebar-refactoring - .nav-sidebar.sidebar-collapsed-desktop - .sidebar-top-level-items - > li - > a { - min-height: 45px; -} -body.sidebar-refactoring - .nav-sidebar.sidebar-collapsed-desktop - .fly-out-top-item { - display: block; -} -body.sidebar-refactoring - .nav-sidebar.sidebar-collapsed-desktop - .avatar-container { - margin: 0 auto; -} -body.sidebar-refactoring .nav-sidebar a { +table.table .dropdown-menu a { text-decoration: none; - line-height: 1rem; - color: #2f2a6b; } -body.sidebar-refactoring .nav-sidebar li { - white-space: nowrap; +table.table .success, +table.table .info { + color: #333; } -body.sidebar-refactoring .nav-sidebar li .nav-item-name { - flex: 1; +table.table .success a:not(.btn), +table.table .info a:not(.btn) { + text-decoration: underline; + color: #333; } -body.sidebar-refactoring .nav-sidebar li > a { - margin-left: 0.25rem; - margin-right: 0.25rem; - padding-left: 0.75rem; - padding-right: 0.75rem; - padding-top: 0.5rem; - padding-bottom: 0.5rem; - display: flex; - align-items: center; - border-radius: 0.25rem; - width: auto; - margin-bottom: 1px; -} -body.sidebar-refactoring .nav-sidebar li.active > a { - font-weight: 600; -} -body.sidebar-refactoring .nav-sidebar li.active > a:not(.has-sub-items) { - background-color: rgba(41, 41, 97, 0.08); -} -body.sidebar-refactoring .nav-sidebar ul { - padding-left: 0; - list-style: none; -} -@media (max-width: 767.98px) { - body.sidebar-refactoring .nav-sidebar { - left: -220px; - } -} -body.sidebar-refactoring .nav-sidebar .nav-icon-container { - display: flex; - margin-right: 8px; -} -body.sidebar-refactoring .nav-sidebar .fly-out-top-item { - display: none; -} -body.sidebar-refactoring .nav-sidebar svg { - height: 16px; - width: 16px; -} -@media (min-width: 768px) and (max-width: 1199px) { - body.sidebar-refactoring .nav-sidebar:not(.sidebar-expanded-mobile) { - width: 50px; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .nav-sidebar-inner-scroll { - overflow-x: hidden; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .badge.badge-pill:not(.fly-out-badge), - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .nav-item-name { - border: 0; - clip: rect(0, 0, 0, 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - white-space: nowrap; - width: 1px; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .sidebar-top-level-items - > li - > a { - min-height: 45px; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .fly-out-top-item { - display: block; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .avatar-container { - margin: 0 auto; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .context-header { - height: 60px; - width: 50px; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .context-header - a { - padding: 10px 4px; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .sidebar-context-title { - border: 0; - clip: rect(0, 0, 0, 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - white-space: nowrap; - width: 1px; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .sidebar-top-level-items - > li - .sidebar-sub-level-items:not(.flyout-list) { - display: none; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .nav-icon-container { - margin-right: 0; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .toggle-sidebar-button { - padding: 16px; - width: 49px; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .toggle-sidebar-button - .collapse-text, - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .toggle-sidebar-button - .icon-chevron-double-lg-left { - display: none; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .toggle-sidebar-button - .icon-chevron-double-lg-right { - display: block; - margin: 0; - } -} -body.sidebar-refactoring .nav-sidebar-inner-scroll { - height: 100%; - width: 100%; - overflow: auto; -} -body.sidebar-refactoring .sidebar-top-level-items { - margin-bottom: 60px; -} -body.sidebar-refactoring .sidebar-top-level-items > li .badge.badge-pill { - border-radius: 0.5rem; - padding-top: 0.125rem; - padding-bottom: 0.125rem; - padding-left: 0.5rem; - padding-right: 0.5rem; - background-color: #064787; - color: #9dc7f1; -} -body.sidebar-refactoring - .sidebar-top-level-items - > li.active - .sidebar-sub-level-items:not(.is-fly-out-only) { +pre { + font-family: "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; display: block; + padding: 8px 12px; + margin: 0 0 8px; + font-size: 13px; + word-break: break-all; + word-wrap: break-word; + color: #fafafa; + background-color: #2e2e2e; + border: 1px solid #4f4f4f; + border-radius: 2px; } -body.sidebar-refactoring - .sidebar-top-level-items - > li.active - .badge.badge-pill { - font-weight: 400; - color: #9dc7f1; +.monospace { + font-family: "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; } -body.sidebar-refactoring .sidebar-sub-level-items { - padding-bottom: 0; - display: none; -} -body.sidebar-refactoring .sidebar-sub-level-items:not(.fly-out-list) li > a { - padding-left: 2.25rem; -} -body.sidebar-refactoring .toggle-sidebar-button, -body.sidebar-refactoring .close-nav-button { - height: 48px; - padding: 0 16px; - background-color: #303030; - border: 0; - color: #999; - display: flex; - align-items: center; - background-color: #303030; - color: #2f2a6b; -} -body.sidebar-refactoring .toggle-sidebar-button .collapse-text, -body.sidebar-refactoring .toggle-sidebar-button .icon-chevron-double-lg-left, -body.sidebar-refactoring .toggle-sidebar-button .icon-chevron-double-lg-right, -body.sidebar-refactoring .close-nav-button .collapse-text, -body.sidebar-refactoring .close-nav-button .icon-chevron-double-lg-left, -body.sidebar-refactoring .close-nav-button .icon-chevron-double-lg-right { - color: inherit; -} -body.sidebar-refactoring .toggle-sidebar-button, -body.sidebar-refactoring .close-nav-button { - position: fixed; - bottom: 0; - width: 219px; - border-top: 1px solid #404040; -} -body.sidebar-refactoring .toggle-sidebar-button svg, -body.sidebar-refactoring .close-nav-button svg { - margin-right: 8px; -} -body.sidebar-refactoring .toggle-sidebar-button .icon-chevron-double-lg-right, -body.sidebar-refactoring .close-nav-button .icon-chevron-double-lg-right { - display: none; -} -body.sidebar-refactoring .collapse-text { - white-space: nowrap; - overflow: hidden; -} -body.sidebar-refactoring .sidebar-collapsed-desktop .context-header { - height: 60px; - width: 50px; -} -body.sidebar-refactoring .sidebar-collapsed-desktop .context-header a { - padding: 10px 4px; -} -body.sidebar-refactoring .sidebar-collapsed-desktop .sidebar-context-title { - border: 0; - clip: rect(0, 0, 0, 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - white-space: nowrap; - width: 1px; -} -body.sidebar-refactoring - .sidebar-collapsed-desktop - .sidebar-top-level-items - > li - .sidebar-sub-level-items:not(.flyout-list) { - display: none; -} -body.sidebar-refactoring .sidebar-collapsed-desktop .nav-icon-container { - margin-right: 0; -} -body.sidebar-refactoring .sidebar-collapsed-desktop .toggle-sidebar-button { - padding: 16px; - width: 49px; -} -body.sidebar-refactoring - .sidebar-collapsed-desktop - .toggle-sidebar-button - .collapse-text, -body.sidebar-refactoring - .sidebar-collapsed-desktop - .toggle-sidebar-button - .icon-chevron-double-lg-left { - display: none; -} -body.sidebar-refactoring - .sidebar-collapsed-desktop - .toggle-sidebar-button - .icon-chevron-double-lg-right { - display: block; - margin: 0; -} -body.sidebar-refactoring .close-nav-button { - display: none; -} -@media (max-width: 767.98px) { - body.sidebar-refactoring .close-nav-button { - display: flex; - } - body.sidebar-refactoring .toggle-sidebar-button { - display: none; - } -} -input::-moz-placeholder { - color: #868686; +input::-moz-placeholder, +textarea::-moz-placeholder { + color: #a7a7a7; opacity: 1; } -input::-ms-input-placeholder { - color: #868686; +input::-ms-input-placeholder, +textarea::-ms-input-placeholder { + color: #a7a7a7; } -input:-ms-input-placeholder { - color: #868686; +input:-ms-input-placeholder, +textarea:-ms-input-placeholder { + color: #a7a7a7; } svg { fill: currentColor; } + svg.s12 { width: 12px; height: 12px; } + svg.s16 { width: 16px; height: 16px; } + svg.s18 { width: 18px; height: 18px; } + svg.s12 { vertical-align: -1px; } + svg.s16 { vertical-align: -3px; } +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +table.code { + width: 100%; + font-family: "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; + border: 0; + border-collapse: separate; + margin: 0; + padding: 0; + table-layout: fixed; + border-radius: 0 0 4px 4px; +} +.frame .badge.badge-pill { + position: absolute; + background-color: #1b69b6; + color: #333; + border: #333 1px solid; + min-height: 16px; + padding: 5px 8px; + border-radius: 12px; +} +.frame .badge.badge-pill { + transform: translate(-50%, -50%); +} +.color-label { + padding: 0 0.5rem; + line-height: 16px; + border-radius: 100px; + color: #333; +} +.label-link { + display: inline-flex; + vertical-align: text-bottom; +} +.milestones { + padding: 8px; + margin-top: 8px; + border-radius: 4px; + background-color: #4f4f4f; +} .search { margin: 0 8px; } .search form { - display: block; margin: 0; padding: 4px; width: 200px; @@ -1727,6 +1750,7 @@ svg.s16 { border: 0; border-radius: 4px; } + @media (min-width: 1200px) { .search form { width: 320px; @@ -1770,37 +1794,43 @@ svg.s16 { max-height: 400px; overflow: auto; } + @media (min-width: 1200px) { .search .search-input-wrap .dropdown-menu { width: 320px; } } -.search .identicon { - flex-basis: 16px; - flex-shrink: 0; - margin-right: 4px; +.search .search-input-wrap .dropdown-content { + max-height: 382px; } -.avatar, -.avatar-container { +.settings { + border-top: 1px solid #4f4f4f; +} +.settings:first-of-type { + margin-top: 10px; + border: 0; +} +.settings + div .settings:first-of-type { + margin-top: 0; + border-top: 1px solid #4f4f4f; +} +.avatar, .avatar-container { float: left; margin-right: 16px; border-radius: 50%; border: 1px solid #333; } -.avatar.s16, -.avatar-container.s16 { +.s16.avatar, .s16.avatar-container { width: 16px; height: 16px; margin-right: 8px; } -.avatar.s18, -.avatar-container.s18 { +.s18.avatar, .s18.avatar-container { width: 18px; height: 18px; margin-right: 8px; } -.avatar.s40, -.avatar-container.s40 { +.s40.avatar, .s40.avatar-container { width: 40px; height: 40px; margin-right: 8px; @@ -1814,45 +1844,15 @@ svg.s16 { overflow: hidden; border-color: rgba(255, 255, 255, 0.1); } +.avatar.center { + font-size: 14px; + line-height: 1.8em; + text-align: center; +} .avatar.avatar-tile { border-radius: 0; border: 0; } -.identicon { - text-align: center; - vertical-align: top; - color: #525252; - background-color: #eee; -} -.identicon.s16 { - font-size: 10px; - line-height: 16px; -} -.identicon.s40 { - font-size: 16px; - line-height: 38px; -} -.identicon.bg1 { - background-color: #ffebee; -} -.identicon.bg2 { - background-color: #f3e5f5; -} -.identicon.bg3 { - background-color: #e8eaf6; -} -.identicon.bg4 { - background-color: #e3f2fd; -} -.identicon.bg5 { - background-color: #e0f2f1; -} -.identicon.bg6 { - background-color: #fbe9e7; -} -.identicon.bg7 { - background-color: #eee; -} .avatar-container { overflow: hidden; display: flex; @@ -1887,207 +1887,6 @@ svg.s16 { .rect-avatar.s40 { border-radius: 4px; } -#content-body { - display: block; -} -body.gl-dark .navbar-gitlab { - background-color: #fafafa; -} -body.gl-dark .navbar-gitlab .navbar-collapse { - color: #fafafa; -} -body.gl-dark .navbar-gitlab .container-fluid .navbar-toggler { - border-left: 1px solid #b3b3b3; -} -body.gl-dark .navbar-gitlab .container-fluid .navbar-toggler svg { - fill: #fafafa; -} -body.gl-dark .navbar-gitlab .navbar-sub-nav > li.active > a, -body.gl-dark .navbar-gitlab .navbar-sub-nav > li.active > button, -body.gl-dark .navbar-gitlab .navbar-sub-nav > li.dropdown.show > a, -body.gl-dark .navbar-gitlab .navbar-sub-nav > li.dropdown.show > button, -body.gl-dark .navbar-gitlab .navbar-nav > li.active > a, -body.gl-dark .navbar-gitlab .navbar-nav > li.active > button, -body.gl-dark .navbar-gitlab .navbar-nav > li.dropdown.show > a, -body.gl-dark .navbar-gitlab .navbar-nav > li.dropdown.show > button { - color: #fafafa; - background-color: #333; -} -body.gl-dark .navbar-gitlab .navbar-sub-nav { - color: #fafafa; -} -body.gl-dark .navbar-gitlab .nav > li { - color: #fafafa; -} -body.gl-dark .navbar-gitlab .nav > li > a .notification-dot { - border: 2px solid #fafafa; -} -body.gl-dark - .navbar-gitlab - .nav - > li - > a.header-help-dropdown-toggle - .notification-dot { - background-color: #fafafa; -} -body.gl-dark - .navbar-gitlab - .nav - > li - > a.header-user-dropdown-toggle - .header-user-avatar { - border-color: #fafafa; -} -body.gl-dark .navbar-gitlab .nav > li.active > a, -body.gl-dark .navbar-gitlab .nav > li.dropdown.show > a { - color: #fafafa; - background-color: #333; -} -body.gl-dark .navbar-gitlab .nav > li.active > a .notification-dot, -body.gl-dark .navbar-gitlab .nav > li.dropdown.show > a .notification-dot { - border-color: #333; -} -body.gl-dark - .navbar-gitlab - .nav - > li.active - > a.header-help-dropdown-toggle - .notification-dot, -body.gl-dark - .navbar-gitlab - .nav - > li.dropdown.show - > a.header-help-dropdown-toggle - .notification-dot { - background-color: #fafafa; -} -body.gl-dark .search form { - background-color: rgba(250, 250, 250, 0.2); -} -body.gl-dark .search .search-input::-ms-input-placeholder { - color: rgba(250, 250, 250, 0.8); -} -body.gl-dark .search .search-input::placeholder { - color: rgba(250, 250, 250, 0.8); -} -body.gl-dark .search .search-input-wrap .search-icon, -body.gl-dark .search .search-input-wrap .clear-icon { - fill: rgba(250, 250, 250, 0.8); -} -body.gl-dark .nav-sidebar li.active { - box-shadow: inset 4px 0 0 #999; -} -body.gl-dark .nav-sidebar li.active > a { - color: #f0f0f0; -} -body.gl-dark .nav-sidebar li.active .nav-icon-container svg { - fill: #f0f0f0; -} -body.gl-dark .sidebar-top-level-items > li.active .badge.badge-pill { - color: #f0f0f0; -} -body.gl-dark .logo-text svg { - fill: var(--gl-text-color); -} -body.gl-dark .navbar-gitlab { - background-color: var(--gray-50); - box-shadow: 0 1px 0 0 var(--gray-100); -} -body.gl-dark .navbar-gitlab .navbar-sub-nav li.active > a, -body.gl-dark .navbar-gitlab .navbar-sub-nav li.active > button, -body.gl-dark .navbar-gitlab .navbar-sub-nav li.dropdown.show > a, -body.gl-dark .navbar-gitlab .navbar-sub-nav li.dropdown.show > button, -body.gl-dark .navbar-gitlab .navbar-nav li.active > a, -body.gl-dark .navbar-gitlab .navbar-nav li.active > button, -body.gl-dark .navbar-gitlab .navbar-nav li.dropdown.show > a, -body.gl-dark .navbar-gitlab .navbar-nav li.dropdown.show > button { - color: var(--gl-text-color); - background-color: var(--gray-200); -} -body.gl-dark .navbar-gitlab .search form { - background-color: var(--gray-100); - box-shadow: inset 0 0 0 1px var(--border-color); -} -body.gl-dark .navbar-gitlab .search form:active { - background-color: var(--gray-100); - box-shadow: inset 0 0 0 1px var(--blue-200); -} - -body.gl-dark { - --gray-10: #1f1f1f; - --gray-50: #303030; - --gray-100: #404040; - --gray-200: #525252; - --gray-300: #5e5e5e; - --gray-400: #868686; - --gray-500: #999; - --gray-600: #bfbfbf; - --gray-700: #dbdbdb; - --gray-800: #f0f0f0; - --gray-900: #fafafa; - --gray-950: #fff; - --green-50: #0a4020; - --green-100: #0d532a; - --green-200: #24663b; - --green-300: #217645; - --green-400: #108548; - --green-500: #2da160; - --green-600: #52b87a; - --green-700: #91d4a8; - --green-800: #c3e6cd; - --green-900: #ecf4ee; - --green-950: #f1fdf6; - --blue-50: #033464; - --blue-100: #064787; - --blue-200: #0b5cad; - --blue-300: #1068bf; - --blue-400: #1f75cb; - --blue-500: #428fdc; - --blue-600: #63a6e9; - --blue-700: #9dc7f1; - --blue-800: #cbe2f9; - --blue-900: #e9f3fc; - --blue-950: #f2f9ff; - --orange-50: #5c2900; - --orange-100: #703800; - --orange-200: #8f4700; - --orange-300: #9e5400; - --orange-400: #ab6100; - --orange-500: #c17d10; - --orange-600: #d99530; - --orange-700: #e9be74; - --orange-800: #f5d9a8; - --orange-900: #fdf1dd; - --orange-950: #fff4e1; - --red-50: #660e00; - --red-100: #8d1300; - --red-200: #ae1800; - --red-300: #c91c00; - --red-400: #dd2b0e; - --red-500: #ec5941; - --red-600: #f57f6c; - --red-700: #fcb5aa; - --red-800: #fdd4cd; - --red-900: #fcf1ef; - --red-950: #fff4f3; - --indigo-50: #1a1a40; - --indigo-100: #292961; - --indigo-200: #393982; - --indigo-300: #4b4ba3; - --indigo-400: #5b5bbd; - --indigo-500: #6666c4; - --indigo-600: #7c7ccc; - --indigo-700: #a6a6de; - --indigo-800: #d1d1f0; - --indigo-900: #ebebfa; - --indigo-950: #f7f7ff; - --indigo-900-alpha-008: rgba(235, 235, 250, 0.08); - --gl-text-color: #fafafa; - --border-color: #4f4f4f; - --white: #333; - --black: #fff; - --svg-status-bg: #333; -} .tab-width-8 { -moz-tab-size: 8; tab-size: 8; @@ -2103,16 +1902,12 @@ body.gl-dark { white-space: nowrap; width: 1px; } -.gl-absolute { - position: absolute; -} .gl-ml-3 { margin-left: 0.5rem; } -.gl-mx-0\! { - margin-left: 0 !important; - margin-right: 0 !important; +.content-wrapper > .alert-wrapper, +#content-body, .modal-dialog { + display: block; } - -@import "startup/cloaking"; +@import 'cloaking'; @include cloak-startup-scss(none); diff --git a/app/assets/stylesheets/startup/startup-general.scss b/app/assets/stylesheets/startup/startup-general.scss index 35b18b25158..44da509481d 100644 --- a/app/assets/stylesheets/startup/startup-general.scss +++ b/app/assets/stylesheets/startup/startup-general.scss @@ -1,6 +1,3 @@ -// DO NOT EDIT! This is auto-generated from "yarn run generate:startup_css" -// Please see the feedback issue for more details and help: -// https://gitlab.com/gitlab-org/gitlab/-/issues/331812 @charset "UTF-8"; *, *::before, @@ -11,16 +8,12 @@ html { font-family: sans-serif; line-height: 1.15; } -aside, -header, -nav { + header, nav, section { display: block; } body { margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, - "Noto Sans", Ubuntu, Cantarell, "Helvetica Neue", sans-serif, - "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Noto Sans", Ubuntu, Cantarell, "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 1rem; font-weight: 400; line-height: 1.5; @@ -28,29 +21,55 @@ body { text-align: left; background-color: #fff; } -h1 { +h1, h2, h3 { margin-top: 0; margin-bottom: 0.25rem; } +p { + margin-top: 0; + margin-bottom: 1rem; +} + ul { margin-top: 0; margin-bottom: 1rem; } + ul ul { margin-bottom: 0; } + strong { font-weight: bolder; } +sub { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +sub { + bottom: -.25em; +} a { color: #007bff; text-decoration: none; background-color: transparent; } -a:not([href]):not([class]) { +a:not([href]) { color: inherit; text-decoration: none; } +pre, +code { + font-family: "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; + font-size: 1em; +} +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; +} img { vertical-align: middle; border-style: none; @@ -59,11 +78,18 @@ svg { overflow: hidden; vertical-align: middle; } +table { + border-collapse: collapse; +} +th { + text-align: inherit; +} button { border-radius: 0; } input, -button { +button, +textarea { margin: 0; font-family: inherit; font-size: inherit; @@ -76,20 +102,21 @@ input { button { text-transform: none; } -[role="button"] { - cursor: pointer; -} button:not(:disabled), [type="button"]:not(:disabled), -[type="submit"]:not(:disabled) { +[type="reset"]:not(:disabled) { cursor: pointer; } button::-moz-focus-inner, [type="button"]::-moz-focus-inner, -[type="submit"]::-moz-focus-inner { +[type="reset"]::-moz-focus-inner { padding: 0; border-style: none; } +textarea { + overflow: auto; + resize: vertical; +} [type="search"] { outline-offset: -2px; } @@ -97,24 +124,81 @@ summary { display: list-item; cursor: pointer; } +template { + display: none; +} [hidden] { display: none !important; } -h1, -.h1 { +h1, h2, h3, +.h1, .h2, .h3 { margin-bottom: 0.25rem; font-weight: 600; line-height: 1.2; color: #303030; } -h1, -.h1 { +h1, .h1 { font-size: 2.1875rem; } +h2, .h2 { + font-size: 1.75rem; +} +h3, .h3 { + font-size: 1.53125rem; +} .list-unstyled { padding-left: 0; list-style: none; } +code { + font-size: 90%; + color: #1f1f1f; + word-wrap: break-word; +} +a > code { + color: inherit; +} +pre { + display: block; + font-size: 90%; + color: #303030; +} +pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} +.container { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .container { + max-width: 540px; + } +} + +@media (min-width: 768px) { + .container { + max-width: 720px; + } +} + +@media (min-width: 992px) { + .container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .container { + max-width: 1140px; + } +} .container-fluid { width: 100%; padding-right: 15px; @@ -122,7 +206,48 @@ h1, margin-right: auto; margin-left: auto; } -.form-control { + +@media (min-width: 576px) { + .container { + max-width: 540px; + } +} + +@media (min-width: 768px) { + .container { + max-width: 720px; + } +} + +@media (min-width: 992px) { + .container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .container { + max-width: 1140px; + } +} +.row { + display: flex; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; +} +.table { + width: 100%; + margin-bottom: 0.5rem; + color: #303030; +} +.table th, +.table td { + padding: 0.75rem; + vertical-align: top; + border-top: 1px solid #dbdbdb; +} + .search form { display: block; width: 100%; height: 34px; @@ -136,21 +261,18 @@ h1, border: 1px solid #dbdbdb; border-radius: 0.25rem; } + @media (prefers-reduced-motion: reduce) { } -.form-control:-moz-focusring { + .search form:-moz-focusring { color: transparent; text-shadow: 0 0 0 #303030; } -.form-control::-ms-input-placeholder { + .search form::placeholder { color: #5e5e5e; opacity: 1; } -.form-control::placeholder { - color: #5e5e5e; - opacity: 1; -} -.form-control:disabled { + .search form:disabled { background-color: #fafafa; opacity: 1; } @@ -159,8 +281,9 @@ h1, flex-flow: row wrap; align-items: center; } + @media (min-width: 576px) { - .form-inline .form-control { + .form-inline .search form, .search .form-inline form { display: inline-block; width: auto; vertical-align: middle; @@ -172,7 +295,7 @@ h1, color: #303030; text-align: center; vertical-align: middle; - -moz-user-select: none; + cursor: pointer; user-select: none; background-color: transparent; border: 1px solid transparent; @@ -181,24 +304,26 @@ h1, line-height: 20px; border-radius: 0.25rem; } + @media (prefers-reduced-motion: reduce) { } -.btn:disabled { +.btn.disabled, .btn:disabled { opacity: 0.65; } -.btn:not(:disabled):not(.disabled) { - cursor: pointer; +a.btn.disabled { + pointer-events: none; } .collapse:not(.show) { display: none; } + .dropdown { position: relative; } -.dropdown-menu-toggle { + .dropdown-menu-toggle { white-space: nowrap; } -.dropdown-menu-toggle::after { + .dropdown-menu-toggle::after { display: inline-block; margin-left: 0.255em; vertical-align: 0.255em; @@ -208,7 +333,7 @@ h1, border-bottom: 0; border-left: 0.3em solid transparent; } -.dropdown-menu-toggle:empty::after { + .dropdown-menu-toggle:empty::after { margin-left: 0; } .dropdown-menu { @@ -230,6 +355,16 @@ h1, border: 1px solid rgba(0, 0, 0, 0.15); border-radius: 0.25rem; } +.dropdown-menu-right { + right: 0; + left: auto; +} + .divider { + height: 0; + margin: 4px 0; + overflow: hidden; + border-top: 1px solid #dbdbdb; +} .dropdown-menu.show { display: block; } @@ -248,6 +383,7 @@ h1, justify-content: space-between; padding: 0.25rem 0.5rem; } +.navbar .container, .navbar .container-fluid { display: flex; flex-wrap: wrap; @@ -278,12 +414,15 @@ h1, border: 1px solid transparent; border-radius: 0.25rem; } + @media (max-width: 575.98px) { + .navbar-expand-sm > .container, .navbar-expand-sm > .container-fluid { padding-right: 0; padding-left: 0; } } + @media (min-width: 576px) { .navbar-expand-sm { flex-flow: row nowrap; @@ -295,6 +434,7 @@ h1, .navbar-expand-sm .navbar-nav .dropdown-menu { position: absolute; } + .navbar-expand-sm > .container, .navbar-expand-sm > .container-fluid { flex-wrap: nowrap; } @@ -328,6 +468,7 @@ h1, vertical-align: baseline; border-radius: 0.25rem; } + @media (prefers-reduced-motion: reduce) { } .badge:empty { @@ -342,6 +483,10 @@ h1, padding-left: 0.6em; border-radius: 10rem; } +.media { + display: flex; + align-items: flex-start; +} .close { float: right; font-size: 1.5rem; @@ -349,15 +494,55 @@ h1, line-height: 1; color: #000; text-shadow: 0 1px 0 #fff; - opacity: 0.5; + opacity: .5; } button.close { padding: 0; background-color: transparent; border: 0; + appearance: none; } -.rounded-circle { - border-radius: 50% !important; +a.close.disabled { + pointer-events: none; +} +.modal-dialog { + position: relative; + width: auto; + margin: 0.5rem; + pointer-events: none; +} + +@media (min-width: 576px) { + .modal-dialog { + max-width: 500px; + margin: 1.75rem auto; + } +} +.bg-transparent { + background-color: transparent !important; +} +.border { + border: 1px solid #dbdbdb !important; +} +.border-top { + border-top: 1px solid #dbdbdb !important; +} +.border-right { + border-right: 1px solid #dbdbdb !important; +} +.border-bottom { + border-bottom: 1px solid #dbdbdb !important; +} +.border-left { + border-left: 1px solid #dbdbdb !important; +} +.rounded { + border-radius: 0.25rem !important; +} +.clearfix::after { + display: block; + clear: both; + content: ""; } .d-none { display: none !important; @@ -368,16 +553,19 @@ button.close { .d-block { display: block !important; } + @media (min-width: 576px) { .d-sm-none { display: none !important; } } + @media (min-width: 768px) { .d-md-block { display: block !important; } } + @media (min-width: 992px) { .d-lg-none { display: none !important; @@ -386,11 +574,18 @@ button.close { display: block !important; } } + @media (min-width: 1200px) { .d-xl-block { display: block !important; } } +.flex-wrap { + flex-wrap: wrap !important; +} +.float-right { + float: right !important; +} .sr-only { position: absolute; width: 1px; @@ -405,60 +600,73 @@ button.close { .m-auto { margin: auto !important; } -.gl-button { - display: inline-flex; +.text-nowrap { + white-space: nowrap !important; } -.gl-button:not(.btn-link):active { - text-decoration: none; +.visible { + visibility: visible !important; } -.gl-button.gl-button { - border-width: 0; - padding-top: 0.5rem; - padding-bottom: 0.5rem; - padding-left: 0.75rem; - padding-right: 0.75rem; - background-color: transparent; - line-height: 1rem; + .search form.focus { color: #303030; - fill: currentColor; - box-shadow: inset 0 0 0 1px #bfbfbf; - justify-content: center; - align-items: center; - font-size: 0.875rem; - border-radius: 0.25rem; -} -.gl-button.gl-button.btn-default { background-color: #fff; + border-color: #80bdff; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } -.gl-button.gl-button.btn-default:active, -.gl-button.gl-button.btn-default.active { - box-shadow: inset 0 0 0 2px #5e5e5e, 0 0 0 1px rgba(255, 255, 255, 0.4), - 0 0 0 4px rgba(31, 117, 203, 0.48); +.gl-badge { + display: inline-flex; + align-items: center; + font-size: 0.75rem; + font-weight: 400; + line-height: 1rem; + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + padding-right: 0.5rem; outline: none; - background-color: #dbdbdb; } -body, -.form-control, +body, .search form, .search form { font-size: 0.875rem; } button, -html [type="button"], -[type="submit"], -[role="button"] { +html [type='button'], +[type='reset'], +[role='button'] { cursor: pointer; } h1, -.h1 { +.h1, +h2, +.h2, +h3, +.h3 { margin-top: 20px; margin-bottom: 10px; } +input[type='file'] { + line-height: 1; +} + strong { font-weight: bold; } a { color: #1068bf; } +code { + padding: 2px 4px; + color: #1f1f1f; + background-color: #f0f0f0; + border-radius: 4px; +} +.code > code { + background-color: inherit; + padding: unset; +} +table { + border-spacing: 0; +} .hidden { display: none !important; visibility: hidden !important; @@ -466,7 +674,7 @@ a { .hide { display: none; } -.dropdown-menu-toggle::after { + .dropdown-menu-toggle::after { display: none; } .badge:not(.gl-badge) { @@ -476,11 +684,8 @@ a { font-weight: 400; display: inline-block; } -.divider { - height: 0; - margin: 4px 0; - overflow: hidden; - border-top: 1px solid #dbdbdb; +pre code { + white-space: pre-wrap; } .toggle-sidebar-button .collapse-text, .toggle-sidebar-button .icon-chevron-double-lg-left, @@ -496,6 +701,29 @@ html { body { text-decoration-skip: ink; } +.content-wrapper { + margin-top: 40px; + padding-bottom: 100px; +} +.container { + padding-top: 0; + z-index: 5; +} +.container .content { + margin: 0; +} + +@media (max-width: 575.98px) { + .container .content { + margin-top: 20px; + } +} + +@media (max-width: 575.98px) { + .container .container .title { + padding-left: 15px !important; + } +} .btn { border-radius: 4px; font-size: 0.875rem; @@ -507,12 +735,7 @@ body { color: #303030; white-space: nowrap; } -.btn:active { - background-color: #f0f0f0; - box-shadow: none; -} -.btn:active, -.btn.active { +.btn:active, .btn.active { background-color: #eaeaea; border-color: #e3e3e3; color: #303030; @@ -521,7 +744,8 @@ body { height: 15px; width: 15px; } -.btn svg:not(:last-child) { +.btn svg:not(:last-child), +.btn .fa:not(:last-child) { margin-right: 5px; } .badge.badge-pill:not(.gl-badge) { @@ -530,10 +754,51 @@ body { color: #525252; vertical-align: baseline; } +.hint { + font-style: italic; + color: #bfbfbf; +} +.bold { + font-weight: 600; +} +pre.wrap { + word-break: break-word; + white-space: pre-wrap; +} +table a code { + position: relative; + top: -2px; + margin-right: 3px; +} +.loading { + margin: 20px auto; + height: 40px; + color: #525252; + font-size: 32px; + text-align: center; +} +.highlight { + text-shadow: none; +} .chart { overflow: hidden; height: 220px; } +.break-word { + word-wrap: break-word; +} +.center { + text-align: center; +} +.block { + display: block; +} +.flex { + display: flex; +} +.flex-grow { + flex-grow: 1; +} .dropdown { position: relative; } @@ -544,22 +809,23 @@ body { max-height: 312px; overflow-y: auto; } + @media (max-width: 575.98px) { .show.dropdown .dropdown-menu { width: 100%; } } -.show.dropdown .dropdown-menu-toggle, + .show.dropdown .dropdown-menu-toggle, .show.dropdown .dropdown-menu-toggle { border-color: #c4c4c4; } -.show.dropdown [data-toggle="dropdown"] { +.show.dropdown [data-toggle='dropdown'] { outline: 0; } .search-input-container .dropdown-menu { margin-top: 11px; } -.dropdown-menu-toggle { + .dropdown-menu-toggle { padding: 6px 8px 6px 10px; background-color: #fff; color: #303030; @@ -569,16 +835,21 @@ body { border-radius: 0.25rem; white-space: nowrap; } -.no-outline.dropdown-menu-toggle { + .no-outline.dropdown-menu-toggle { outline: 0; } -.dropdown-menu-toggle.dropdown-menu-toggle { - justify-content: flex-start; - overflow: hidden; + .dropdown-menu-toggle .fa { + color: #c4c4c4; +} +.dropdown-menu-toggle { padding-right: 25px; position: relative; - text-overflow: ellipsis; width: 160px; + text-overflow: ellipsis; + overflow: hidden; +} +.dropdown-menu-toggle .fa { + position: absolute; } .dropdown-menu { display: none; @@ -625,13 +896,6 @@ body { text-align: left; width: 100%; } -.dropdown-menu li > a:active, -.dropdown-menu li button:active { - background-color: #eee; - color: #303030; - outline: 0; - text-decoration: none; -} .dropdown-menu .divider { height: 1px; margin: 0.25rem 0; @@ -641,39 +905,66 @@ body { .dropdown-menu .badge.badge-pill + span:not(.badge):not(.badge-pill) { margin-right: 40px; } +.dropdown-select { + width: 300px; +} + +@media (max-width: 767.98px) { + .dropdown-select { + width: 100%; + } +} +.dropdown-content { + max-height: 252px; + overflow-y: auto; +} +.dropdown-loading { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: none; + z-index: 9; + background-color: rgba(255, 255, 255, 0.6); + font-size: 28px; +} +.dropdown-loading .fa { + position: absolute; + top: 50%; + left: 50%; + margin-top: -14px; + margin-left: -14px; +} + @media (max-width: 575.98px) { .navbar-gitlab li.dropdown { position: static; } - .navbar-gitlab li.dropdown.user-counter { - margin-left: 8px !important; - } - .navbar-gitlab li.dropdown.user-counter > a { - padding: 0 4px !important; - } header.navbar-gitlab .dropdown .dropdown-menu { width: 100%; min-width: 100%; } } + @media (max-width: 767.98px) { .dropdown-menu-toggle { width: 100%; } } +textarea { + resize: vertical; +} input { border-radius: 0.25rem; color: #303030; background-color: #fff; } -.form-control { + .search form { border-radius: 4px; padding: 6px 10px; } -.form-control::-ms-input-placeholder { - color: #868686; -} -.form-control::placeholder { + .search form::placeholder { color: #868686; } .navbar-gitlab { @@ -682,6 +973,7 @@ input { margin-bottom: 0; min-height: 40px; border: 0; + border-bottom: 1px solid #dbdbdb; position: fixed; top: 0; left: 0; @@ -731,6 +1023,9 @@ input { .navbar-gitlab .header-content .title img + .logo-text { margin-left: 8px; } +.navbar-gitlab .header-content .title.wrap { + white-space: normal; +} .navbar-gitlab .header-content .title a { display: flex; align-items: center; @@ -738,6 +1033,9 @@ input { margin: 5px 2px 5px -8px; border-radius: 4px; } +.navbar-gitlab .header-content .dropdown.open > a { + border-bottom-color: #fff; +} .navbar-gitlab .header-content .navbar-collapse > ul.nav > li:not(.d-none) { margin: 0 2px; } @@ -746,6 +1044,7 @@ input { border-top: 0; padding: 0; } + @media (max-width: 575.98px) { .navbar-gitlab .navbar-collapse { flex: 1 1 auto; @@ -754,6 +1053,7 @@ input { .navbar-gitlab .navbar-collapse .nav { flex-wrap: nowrap; } + @media (max-width: 575.98px) { .navbar-gitlab .navbar-collapse .nav > li:not(.d-none) a { margin-left: 0; @@ -776,10 +1076,7 @@ input { text-align: center; color: currentColor; } -.navbar-gitlab .container-fluid .navbar-toggler.active { - color: currentColor; - background-color: transparent; -} + @media (max-width: 575.98px) { .navbar-gitlab .container-fluid .navbar-nav { display: flex; @@ -787,14 +1084,11 @@ input { flex-direction: row; } } -.navbar-gitlab - .container-fluid - .navbar-nav - li - .badge.badge-pill:not(.merge-request-badge) { +.navbar-gitlab .container-fluid .navbar-nav li .badge.badge-pill { box-shadow: none; font-weight: 600; } + @media (max-width: 575.98px) { .navbar-gitlab .container-fluid .nav > li.header-user { padding-left: 10px; @@ -806,6 +1100,7 @@ input { padding: 6px 8px; height: 32px; } + @media (max-width: 575.98px) { .navbar-gitlab .container-fluid .nav > li > a { padding: 0; @@ -814,12 +1109,7 @@ input { .navbar-gitlab .container-fluid .nav > li > a.header-user-dropdown-toggle { margin-left: 2px; } -.navbar-gitlab - .container-fluid - .nav - > li - > a.header-user-dropdown-toggle - .header-user-avatar { +.navbar-gitlab .container-fluid .nav > li > a.header-user-dropdown-toggle .header-user-avatar { margin-right: 0; } .navbar-gitlab .container-fluid .nav > li .header-new-dropdown-toggle { @@ -840,9 +1130,7 @@ input { height: 32px; font-weight: 600; } -.navbar-sub-nav > li .top-nav-toggle, .navbar-sub-nav > li > button, -.navbar-nav > li .top-nav-toggle, .navbar-nav > li > button { background: transparent; border: 0; @@ -880,25 +1168,31 @@ input { font-weight: 400; margin-left: -6px; font-size: 11px; - color: var(--gray-950, #fff); + color: #fff; padding: 0 5px; line-height: 12px; border-radius: 7px; box-shadow: 0 1px 0 rgba(76, 78, 84, 0.2); } -.title-container .badge.badge-pill:not(.merge-request-badge).green-badge, -.navbar-nav .badge.badge-pill:not(.merge-request-badge).green-badge { - background-color: var(--green-400, #2da160); +.title-container .badge.badge-pill.green-badge, +.navbar-nav .badge.badge-pill.green-badge { + background-color: #108548; } -.title-container - .badge.badge-pill:not(.merge-request-badge).merge-requests-count, -.navbar-nav .badge.badge-pill:not(.merge-request-badge).merge-requests-count { - background-color: var(--orange-400, #c17d10); +.title-container .badge.badge-pill.merge-requests-count, +.navbar-nav .badge.badge-pill.merge-requests-count { + background-color: #de7e00; } -.title-container .badge.badge-pill:not(.merge-request-badge).todos-count, -.navbar-nav .badge.badge-pill:not(.merge-request-badge).todos-count { - background-color: var(--blue-400, #428fdc); +.title-container .badge.badge-pill.todos-count, +.navbar-nav .badge.badge-pill.todos-count { + background-color: #1f75cb; } +.title-container .canary-badge .badge, +.navbar-nav .canary-badge .badge { + font-size: 12px; + line-height: 16px; + padding: 0 0.5rem; +} + @media (max-width: 575.98px) { .navbar-gitlab .container-fluid { font-size: 18px; @@ -925,7 +1219,7 @@ input { } .header-user.show .dropdown-menu { margin-top: 4px; - color: var(--gl-text-color, #303030); + color: #303030; left: auto; max-height: 445px; } @@ -938,33 +1232,31 @@ input { border-radius: 50%; border: 1px solid #f5f5f5; } -.notification-dot { - background-color: #d99530; - height: 12px; - width: 12px; - margin-top: -15px; - pointer-events: none; - visibility: hidden; -} -.top-nav-toggle .dropdown-icon { - margin-right: 0.5rem; -} -.tanuki-logo .tanuki-left-ear, -.tanuki-logo .tanuki-right-ear, -.tanuki-logo .tanuki-nose { - fill: #e24329; -} -.tanuki-logo .tanuki-left-eye, -.tanuki-logo .tanuki-right-eye { - fill: #fc6d26; -} -.tanuki-logo .tanuki-left-cheek, -.tanuki-logo .tanuki-right-cheek { - fill: #fca326; +.media { + display: flex; + align-items: flex-start; } .card { margin-bottom: 16px; } +.content-wrapper { + width: 100%; +} +.content-wrapper .container-fluid { + padding: 0 16px; +} + +@media (min-width: 768px) { + .page-with-contextual-sidebar { + padding-left: 50px; + } +} + +@media (min-width: 1200px) { + .page-with-contextual-sidebar { + padding-left: 220px; + } +} .context-header { position: relative; margin-right: 2px; @@ -990,20 +1282,9 @@ input { overflow: hidden; text-overflow: ellipsis; } -@media (min-width: 768px) { - .page-with-contextual-sidebar { - padding-left: 50px; - } -} -@media (min-width: 1200px) { - .page-with-contextual-sidebar { - padding-left: 220px; - } -} -@media (min-width: 768px) { - .page-with-icon-sidebar { - padding-left: 50px; - } +.context-header .sidebar-context-title.text-secondary { + font-weight: normal; + font-size: 0.8em; } .nav-sidebar { position: fixed; @@ -1016,6 +1297,7 @@ input { box-shadow: inset -1px 0 0 #dbdbdb; transform: translate3d(0, 0, 0); } + @media (min-width: 576px) and (max-width: 576px) { .nav-sidebar:not(.sidebar-collapsed-desktop) { box-shadow: inset -1px 0 0 #dbdbdb, 2px 1px 3px rgba(0, 0, 0, 0.1); @@ -1028,6 +1310,7 @@ input { overflow-x: hidden; } .nav-sidebar.sidebar-collapsed-desktop .badge.badge-pill:not(.fly-out-badge), +.nav-sidebar.sidebar-collapsed-desktop .sidebar-context-title, .nav-sidebar.sidebar-collapsed-desktop .nav-item-name { border: 0; clip: rect(0, 0, 0, 0); @@ -1048,6 +1331,9 @@ input { .nav-sidebar.sidebar-collapsed-desktop .avatar-container { margin: 0 auto; } +.nav-sidebar.sidebar-expanded-mobile { + left: 0; +} .nav-sidebar a { text-decoration: none; } @@ -1070,6 +1356,7 @@ input { .nav-sidebar li.active > a { font-weight: 600; } + @media (max-width: 767.98px) { .nav-sidebar { left: -220px; @@ -1086,6 +1373,7 @@ input { height: 16px; width: 16px; } + @media (min-width: 768px) and (max-width: 1199px) { .nav-sidebar:not(.sidebar-expanded-mobile) { width: 50px; @@ -1093,8 +1381,8 @@ input { .nav-sidebar:not(.sidebar-expanded-mobile) .nav-sidebar-inner-scroll { overflow-x: hidden; } - .nav-sidebar:not(.sidebar-expanded-mobile) - .badge.badge-pill:not(.fly-out-badge), + .nav-sidebar:not(.sidebar-expanded-mobile) .badge.badge-pill:not(.fly-out-badge), + .nav-sidebar:not(.sidebar-expanded-mobile) .sidebar-context-title, .nav-sidebar:not(.sidebar-expanded-mobile) .nav-item-name { border: 0; clip: rect(0, 0, 0, 0); @@ -1122,21 +1410,7 @@ input { .nav-sidebar:not(.sidebar-expanded-mobile) .context-header a { padding: 10px 4px; } - .nav-sidebar:not(.sidebar-expanded-mobile) .sidebar-context-title { - border: 0; - clip: rect(0, 0, 0, 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - white-space: nowrap; - width: 1px; - } - .nav-sidebar:not(.sidebar-expanded-mobile) - .sidebar-top-level-items - > li - .sidebar-sub-level-items:not(.flyout-list) { + .nav-sidebar:not(.sidebar-expanded-mobile) .sidebar-top-level-items > li .sidebar-sub-level-items:not(.flyout-list) { display: none; } .nav-sidebar:not(.sidebar-expanded-mobile) .nav-icon-container { @@ -1146,17 +1420,11 @@ input { padding: 16px; width: 49px; } - .nav-sidebar:not(.sidebar-expanded-mobile) - .toggle-sidebar-button - .collapse-text, - .nav-sidebar:not(.sidebar-expanded-mobile) - .toggle-sidebar-button - .icon-chevron-double-lg-left { + .nav-sidebar:not(.sidebar-expanded-mobile) .toggle-sidebar-button .collapse-text, + .nav-sidebar:not(.sidebar-expanded-mobile) .toggle-sidebar-button .icon-chevron-double-lg-left { display: none; } - .nav-sidebar:not(.sidebar-expanded-mobile) - .toggle-sidebar-button - .icon-chevron-double-lg-right { + .nav-sidebar:not(.sidebar-expanded-mobile) .toggle-sidebar-button .icon-chevron-double-lg-right { display: block; margin: 0; } @@ -1173,12 +1441,10 @@ input { .sidebar-sub-level-items > li a { padding: 8px 16px 8px 40px; } -.sidebar-sub-level-items > li.active a { - background: rgba(0, 0, 0, 0.04); -} .sidebar-top-level-items { margin-bottom: 60px; } + @media (min-width: 576px) { .sidebar-top-level-items > li > a { margin-right: 1px; @@ -1198,28 +1464,23 @@ input { .sidebar-top-level-items > li.active .badge.badge-pill { font-weight: 600; } -.sidebar-top-level-items - > li.active - .sidebar-sub-level-items:not(.is-fly-out-only) { +.sidebar-top-level-items > li.active .sidebar-sub-level-items:not(.is-fly-out-only) { display: block; } .toggle-sidebar-button, .close-nav-button { + width: 219px; + position: fixed; height: 48px; + bottom: 0; padding: 0 16px; background-color: #fafafa; border: 0; + border-top: 1px solid #dbdbdb; color: #666; display: flex; align-items: center; } -.toggle-sidebar-button, -.close-nav-button { - position: fixed; - bottom: 0; - width: 219px; - border-top: 1px solid #dbdbdb; -} .toggle-sidebar-button svg, .close-nav-button svg { margin-right: 8px; @@ -1239,21 +1500,7 @@ input { .sidebar-collapsed-desktop .context-header a { padding: 10px 4px; } -.sidebar-collapsed-desktop .sidebar-context-title { - border: 0; - clip: rect(0, 0, 0, 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - white-space: nowrap; - width: 1px; -} -.sidebar-collapsed-desktop - .sidebar-top-level-items - > li - .sidebar-sub-level-items:not(.flyout-list) { +.sidebar-collapsed-desktop .sidebar-top-level-items > li .sidebar-sub-level-items:not(.flyout-list) { display: none; } .sidebar-collapsed-desktop .nav-icon-container { @@ -1267,9 +1514,7 @@ input { .sidebar-collapsed-desktop .toggle-sidebar-button .icon-chevron-double-lg-left { display: none; } -.sidebar-collapsed-desktop - .toggle-sidebar-button - .icon-chevron-double-lg-right { +.sidebar-collapsed-desktop .toggle-sidebar-button .icon-chevron-double-lg-right { display: block; margin: 0; } @@ -1285,6 +1530,7 @@ input { .close-nav-button { display: none; } + @media (max-width: 767.98px) { .close-nav-button { display: flex; @@ -1293,412 +1539,128 @@ input { display: none; } } -body.sidebar-refactoring .toggle-sidebar-button .collapse-text, -body.sidebar-refactoring .toggle-sidebar-button .icon-chevron-double-lg-left, -body.sidebar-refactoring .toggle-sidebar-button .icon-chevron-double-lg-right { - color: #c4c4c4; +table.table { + margin-bottom: 16px; } -body.sidebar-refactoring .nav-sidebar { - box-shadow: none; -} -body.sidebar-refactoring .nav-sidebar li.active { - background-color: transparent; - box-shadow: none; -} -@media (min-width: 768px) { - body.sidebar-refactoring .page-with-contextual-sidebar { - padding-left: 50px; - } -} -@media (min-width: 1200px) { - body.sidebar-refactoring .page-with-contextual-sidebar { - padding-left: 220px; - } -} -@media (min-width: 768px) { - body.sidebar-refactoring .page-with-icon-sidebar { - padding-left: 50px; - } -} -body.sidebar-refactoring .nav-sidebar { - position: fixed; - z-index: 600; - width: 220px; - top: 40px; - bottom: 0; - left: 0; - background-color: #f0f0f0; - transform: translate3d(0, 0, 0); -} -@media (min-width: 576px) and (max-width: 576px) { - body.sidebar-refactoring .nav-sidebar:not(.sidebar-collapsed-desktop) { - box-shadow: inset -1px 0 0 #dbdbdb, 2px 1px 3px rgba(0, 0, 0, 0.1); - } -} -body.sidebar-refactoring .nav-sidebar.sidebar-collapsed-desktop { - width: 50px; -} -body.sidebar-refactoring - .nav-sidebar.sidebar-collapsed-desktop - .nav-sidebar-inner-scroll { - overflow-x: hidden; -} -body.sidebar-refactoring - .nav-sidebar.sidebar-collapsed-desktop - .badge.badge-pill:not(.fly-out-badge), -body.sidebar-refactoring .nav-sidebar.sidebar-collapsed-desktop .nav-item-name { - border: 0; - clip: rect(0, 0, 0, 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - white-space: nowrap; - width: 1px; -} -body.sidebar-refactoring - .nav-sidebar.sidebar-collapsed-desktop - .sidebar-top-level-items - > li - > a { - min-height: 45px; -} -body.sidebar-refactoring - .nav-sidebar.sidebar-collapsed-desktop - .fly-out-top-item { - display: block; -} -body.sidebar-refactoring - .nav-sidebar.sidebar-collapsed-desktop - .avatar-container { - margin: 0 auto; -} -body.sidebar-refactoring .nav-sidebar a { +table.table .dropdown-menu a { text-decoration: none; - line-height: 1rem; - color: #2f2a6b; } -body.sidebar-refactoring .nav-sidebar li { - white-space: nowrap; +table.table .success, +table.table .info { + color: #fff; } -body.sidebar-refactoring .nav-sidebar li .nav-item-name { - flex: 1; +table.table .success a:not(.btn), +table.table .info a:not(.btn) { + text-decoration: underline; + color: #fff; } -body.sidebar-refactoring .nav-sidebar li > a { - margin-left: 0.25rem; - margin-right: 0.25rem; - padding-left: 0.75rem; - padding-right: 0.75rem; - padding-top: 0.5rem; - padding-bottom: 0.5rem; - display: flex; - align-items: center; - border-radius: 0.25rem; - width: auto; - margin-bottom: 1px; -} -body.sidebar-refactoring .nav-sidebar li.active > a { - font-weight: 600; -} -body.sidebar-refactoring .nav-sidebar li.active > a:not(.has-sub-items) { - background-color: rgba(41, 41, 97, 0.08); -} -body.sidebar-refactoring .nav-sidebar ul { - padding-left: 0; - list-style: none; -} -@media (max-width: 767.98px) { - body.sidebar-refactoring .nav-sidebar { - left: -220px; - } -} -body.sidebar-refactoring .nav-sidebar .nav-icon-container { - display: flex; - margin-right: 8px; -} -body.sidebar-refactoring .nav-sidebar .fly-out-top-item { - display: none; -} -body.sidebar-refactoring .nav-sidebar svg { - height: 16px; - width: 16px; -} -@media (min-width: 768px) and (max-width: 1199px) { - body.sidebar-refactoring .nav-sidebar:not(.sidebar-expanded-mobile) { - width: 50px; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .nav-sidebar-inner-scroll { - overflow-x: hidden; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .badge.badge-pill:not(.fly-out-badge), - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .nav-item-name { - border: 0; - clip: rect(0, 0, 0, 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - white-space: nowrap; - width: 1px; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .sidebar-top-level-items - > li - > a { - min-height: 45px; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .fly-out-top-item { - display: block; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .avatar-container { - margin: 0 auto; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .context-header { - height: 60px; - width: 50px; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .context-header - a { - padding: 10px 4px; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .sidebar-context-title { - border: 0; - clip: rect(0, 0, 0, 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - white-space: nowrap; - width: 1px; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .sidebar-top-level-items - > li - .sidebar-sub-level-items:not(.flyout-list) { - display: none; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .nav-icon-container { - margin-right: 0; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .toggle-sidebar-button { - padding: 16px; - width: 49px; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .toggle-sidebar-button - .collapse-text, - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .toggle-sidebar-button - .icon-chevron-double-lg-left { - display: none; - } - body.sidebar-refactoring - .nav-sidebar:not(.sidebar-expanded-mobile) - .toggle-sidebar-button - .icon-chevron-double-lg-right { - display: block; - margin: 0; - } -} -body.sidebar-refactoring .nav-sidebar-inner-scroll { - height: 100%; - width: 100%; - overflow: auto; -} -body.sidebar-refactoring .sidebar-top-level-items { - margin-bottom: 60px; -} -body.sidebar-refactoring .sidebar-top-level-items > li .badge.badge-pill { - border-radius: 0.5rem; - padding-top: 0.125rem; - padding-bottom: 0.125rem; - padding-left: 0.5rem; - padding-right: 0.5rem; - background-color: #cbe2f9; - color: #0b5cad; -} -body.sidebar-refactoring - .sidebar-top-level-items - > li.active - .sidebar-sub-level-items:not(.is-fly-out-only) { +pre { + font-family: "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; display: block; -} -body.sidebar-refactoring - .sidebar-top-level-items - > li.active - .badge.badge-pill { - font-weight: 400; - color: #0b5cad; -} -body.sidebar-refactoring .sidebar-sub-level-items { - padding-bottom: 0; - display: none; -} -body.sidebar-refactoring .sidebar-sub-level-items:not(.fly-out-list) li > a { - padding-left: 2.25rem; -} -body.sidebar-refactoring .toggle-sidebar-button, -body.sidebar-refactoring .close-nav-button { - height: 48px; - padding: 0 16px; + padding: 8px 12px; + margin: 0 0 8px; + font-size: 13px; + word-break: break-all; + word-wrap: break-word; + color: #303030; background-color: #fafafa; - border: 0; - color: #666; - display: flex; - align-items: center; - background-color: #f0f0f0; - color: #2f2a6b; + border: 1px solid #dbdbdb; + border-radius: 2px; } -body.sidebar-refactoring .toggle-sidebar-button .collapse-text, -body.sidebar-refactoring .toggle-sidebar-button .icon-chevron-double-lg-left, -body.sidebar-refactoring .toggle-sidebar-button .icon-chevron-double-lg-right, -body.sidebar-refactoring .close-nav-button .collapse-text, -body.sidebar-refactoring .close-nav-button .icon-chevron-double-lg-left, -body.sidebar-refactoring .close-nav-button .icon-chevron-double-lg-right { - color: inherit; +.monospace { + font-family: "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; } -body.sidebar-refactoring .toggle-sidebar-button, -body.sidebar-refactoring .close-nav-button { - position: fixed; - bottom: 0; - width: 219px; - border-top: 1px solid #dbdbdb; -} -body.sidebar-refactoring .toggle-sidebar-button svg, -body.sidebar-refactoring .close-nav-button svg { - margin-right: 8px; -} -body.sidebar-refactoring .toggle-sidebar-button .icon-chevron-double-lg-right, -body.sidebar-refactoring .close-nav-button .icon-chevron-double-lg-right { - display: none; -} -body.sidebar-refactoring .collapse-text { - white-space: nowrap; - overflow: hidden; -} -body.sidebar-refactoring .sidebar-collapsed-desktop .context-header { - height: 60px; - width: 50px; -} -body.sidebar-refactoring .sidebar-collapsed-desktop .context-header a { - padding: 10px 4px; -} -body.sidebar-refactoring .sidebar-collapsed-desktop .sidebar-context-title { - border: 0; - clip: rect(0, 0, 0, 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - white-space: nowrap; - width: 1px; -} -body.sidebar-refactoring - .sidebar-collapsed-desktop - .sidebar-top-level-items - > li - .sidebar-sub-level-items:not(.flyout-list) { - display: none; -} -body.sidebar-refactoring .sidebar-collapsed-desktop .nav-icon-container { - margin-right: 0; -} -body.sidebar-refactoring .sidebar-collapsed-desktop .toggle-sidebar-button { - padding: 16px; - width: 49px; -} -body.sidebar-refactoring - .sidebar-collapsed-desktop - .toggle-sidebar-button - .collapse-text, -body.sidebar-refactoring - .sidebar-collapsed-desktop - .toggle-sidebar-button - .icon-chevron-double-lg-left { - display: none; -} -body.sidebar-refactoring - .sidebar-collapsed-desktop - .toggle-sidebar-button - .icon-chevron-double-lg-right { - display: block; - margin: 0; -} -body.sidebar-refactoring .close-nav-button { - display: none; -} -@media (max-width: 767.98px) { - body.sidebar-refactoring .close-nav-button { - display: flex; - } - body.sidebar-refactoring .toggle-sidebar-button { - display: none; - } -} -input::-moz-placeholder { +input::-moz-placeholder, +textarea::-moz-placeholder { color: #868686; opacity: 1; } -input::-ms-input-placeholder { +input::-ms-input-placeholder, +textarea::-ms-input-placeholder { color: #868686; } -input:-ms-input-placeholder { +input:-ms-input-placeholder, +textarea:-ms-input-placeholder { color: #868686; } svg { fill: currentColor; } + svg.s12 { width: 12px; height: 12px; } + svg.s16 { width: 16px; height: 16px; } + svg.s18 { width: 18px; height: 18px; } + svg.s12 { vertical-align: -1px; } + svg.s16 { vertical-align: -3px; } +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +table.code { + width: 100%; + font-family: "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; + border: 0; + border-collapse: separate; + margin: 0; + padding: 0; + table-layout: fixed; + border-radius: 0 0 4px 4px; +} +.frame .badge.badge-pill { + position: absolute; + background-color: #428fdc; + color: #fff; + border: #fff 1px solid; + min-height: 16px; + padding: 5px 8px; + border-radius: 12px; +} +.frame .badge.badge-pill { + transform: translate(-50%, -50%); +} +.color-label { + padding: 0 0.5rem; + line-height: 16px; + border-radius: 100px; + color: #fff; +} +.label-link { + display: inline-flex; + vertical-align: text-bottom; +} +.milestones { + padding: 8px; + margin-top: 8px; + border-radius: 4px; + background-color: #dbdbdb; +} .search { margin: 0 8px; } .search form { - display: block; margin: 0; padding: 4px; width: 200px; @@ -1707,6 +1669,7 @@ svg.s16 { border: 0; border-radius: 4px; } + @media (min-width: 1200px) { .search form { width: 320px; @@ -1750,37 +1713,43 @@ svg.s16 { max-height: 400px; overflow: auto; } + @media (min-width: 1200px) { .search .search-input-wrap .dropdown-menu { width: 320px; } } -.search .identicon { - flex-basis: 16px; - flex-shrink: 0; - margin-right: 4px; +.search .search-input-wrap .dropdown-content { + max-height: 382px; } -.avatar, -.avatar-container { +.settings { + border-top: 1px solid #dbdbdb; +} +.settings:first-of-type { + margin-top: 10px; + border: 0; +} +.settings + div .settings:first-of-type { + margin-top: 0; + border-top: 1px solid #dbdbdb; +} +.avatar, .avatar-container { float: left; margin-right: 16px; border-radius: 50%; border: 1px solid #f5f5f5; } -.avatar.s16, -.avatar-container.s16 { +.s16.avatar, .s16.avatar-container { width: 16px; height: 16px; margin-right: 8px; } -.avatar.s18, -.avatar-container.s18 { +.s18.avatar, .s18.avatar-container { width: 18px; height: 18px; margin-right: 8px; } -.avatar.s40, -.avatar-container.s40 { +.s40.avatar, .s40.avatar-container { width: 40px; height: 40px; margin-right: 8px; @@ -1794,45 +1763,15 @@ svg.s16 { overflow: hidden; border-color: rgba(0, 0, 0, 0.1); } +.avatar.center { + font-size: 14px; + line-height: 1.8em; + text-align: center; +} .avatar.avatar-tile { border-radius: 0; border: 0; } -.identicon { - text-align: center; - vertical-align: top; - color: #525252; - background-color: #eee; -} -.identicon.s16 { - font-size: 10px; - line-height: 16px; -} -.identicon.s40 { - font-size: 16px; - line-height: 38px; -} -.identicon.bg1 { - background-color: #ffebee; -} -.identicon.bg2 { - background-color: #f3e5f5; -} -.identicon.bg3 { - background-color: #e8eaf6; -} -.identicon.bg4 { - background-color: #e3f2fd; -} -.identicon.bg5 { - background-color: #e0f2f1; -} -.identicon.bg6 { - background-color: #fbe9e7; -} -.identicon.bg7 { - background-color: #eee; -} .avatar-container { overflow: hidden; display: flex; @@ -1867,10 +1806,6 @@ svg.s16 { .rect-avatar.s40 { border-radius: 4px; } -#content-body { - display: block; -} - .tab-width-8 { -moz-tab-size: 8; tab-size: 8; @@ -1886,16 +1821,12 @@ svg.s16 { white-space: nowrap; width: 1px; } -.gl-absolute { - position: absolute; -} .gl-ml-3 { margin-left: 0.5rem; } -.gl-mx-0\! { - margin-left: 0 !important; - margin-right: 0 !important; +.content-wrapper > .alert-wrapper, +#content-body, .modal-dialog { + display: block; } - -@import "startup/cloaking"; +@import 'cloaking'; @include cloak-startup-scss(none); diff --git a/app/assets/stylesheets/startup/startup-signin.scss b/app/assets/stylesheets/startup/startup-signin.scss index ebb4f32054f..6b78abdb5e0 100644 --- a/app/assets/stylesheets/startup/startup-signin.scss +++ b/app/assets/stylesheets/startup/startup-signin.scss @@ -1,6 +1,3 @@ -// DO NOT EDIT! This is auto-generated from "yarn run generate:startup_css" -// Please see the feedback issue for more details and help: -// https://gitlab.com/gitlab-org/gitlab/-/issues/331812 @charset "UTF-8"; *, *::before, @@ -11,14 +8,12 @@ html { font-family: sans-serif; line-height: 1.15; } -header { + header, nav, section { display: block; } body { margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, - "Noto Sans", Ubuntu, Cantarell, "Helvetica Neue", sans-serif, - "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Noto Sans", Ubuntu, Cantarell, "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 1rem; font-weight: 400; line-height: 1.5; @@ -31,8 +26,7 @@ hr { height: 0; overflow: visible; } -h1, -h3 { +h1, h2, h3 { margin-top: 0; margin-bottom: 0.25rem; } @@ -45,20 +39,47 @@ address { font-style: normal; line-height: inherit; } + +ul { + margin-top: 0; + margin-bottom: 1rem; +} + +ul ul { + margin-bottom: 0; +} + +strong { + font-weight: bolder; +} +sub { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +sub { + bottom: -.25em; +} a { color: #007bff; text-decoration: none; background-color: transparent; } -a:not([href]):not([class]) { +a:not([href]) { color: inherit; text-decoration: none; } +pre, code { - font-family: "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", - "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; + font-family: "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; font-size: 1em; } +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; +} img { vertical-align: middle; border-style: none; @@ -67,54 +88,89 @@ svg { overflow: hidden; vertical-align: middle; } +table { + border-collapse: collapse; +} +th { + text-align: inherit; +} label { display: inline-block; margin-bottom: 0.5rem; } -input { +button { + border-radius: 0; +} +input, +button, +textarea { margin: 0; font-family: inherit; font-size: inherit; line-height: inherit; } +button, input { overflow: visible; } +button { + text-transform: none; +} +button:not(:disabled), +[type="button"]:not(:disabled), +[type="reset"]:not(:disabled), [type="submit"]:not(:disabled) { cursor: pointer; } +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { padding: 0; border-style: none; } + +input[type="checkbox"] { + box-sizing: border-box; + padding: 0; +} +textarea { + overflow: auto; + resize: vertical; +} fieldset { min-width: 0; padding: 0; margin: 0; border: 0; } +[type="search"] { + outline-offset: -2px; +} summary { display: list-item; cursor: pointer; } +template { + display: none; +} [hidden] { display: none !important; } -h1, -h3, -.h1, -.h3 { +h1, h2, h3, +.h1, .h2, .h3 { margin-bottom: 0.25rem; font-weight: 600; line-height: 1.2; color: #303030; } -h1, -.h1 { +h1, .h1 { font-size: 2.1875rem; } -h3, -.h3 { +h2, .h2 { + font-size: 1.75rem; +} +h3, .h3 { font-size: 1.53125rem; } hr { @@ -123,6 +179,10 @@ hr { border: 0; border-top: 1px solid rgba(0, 0, 0, 0.1); } +.list-unstyled { + padding-left: 0; + list-style: none; +} code { font-size: 90%; color: #1f1f1f; @@ -131,6 +191,16 @@ code { a > code { color: inherit; } +pre { + display: block; + font-size: 90%; + color: #303030; +} +pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} .container { width: 100%; padding-right: 15px; @@ -138,21 +208,56 @@ a > code { margin-right: auto; margin-left: auto; } + @media (min-width: 576px) { .container { max-width: 540px; } } + @media (min-width: 768px) { .container { max-width: 720px; } } + @media (min-width: 992px) { .container { max-width: 960px; } } + +@media (min-width: 1200px) { + .container { + max-width: 1140px; + } +} +.container-fluid { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .container { + max-width: 540px; + } +} + +@media (min-width: 768px) { + .container { + max-width: 720px; + } +} + +@media (min-width: 992px) { + .container { + max-width: 960px; + } +} + @media (min-width: 1200px) { .container { max-width: 1140px; @@ -164,26 +269,19 @@ a > code { margin-right: -15px; margin-left: -15px; } -.col, -.col-sm-5, -.col-sm-7, -.col-sm-12 { + .col-sm-5, .col-sm-7, .col-sm-12 { position: relative; width: 100%; padding-right: 15px; padding-left: 15px; } -.col { - flex-basis: 0; - flex-grow: 1; - max-width: 100%; -} .order-1 { order: 1; } .order-12 { order: 12; } + @media (min-width: 576px) { .col-sm-5 { flex: 0 0 41.66667%; @@ -204,7 +302,18 @@ a > code { order: 12; } } -.form-control { +.table { + width: 100%; + margin-bottom: 0.5rem; + color: #303030; +} +.table th, +.table td { + padding: 0.75rem; + vertical-align: top; + border-top: 1px solid #dbdbdb; +} +.form-control, .search form { display: block; width: 100%; height: 34px; @@ -218,37 +327,52 @@ a > code { border: 1px solid #dbdbdb; border-radius: 0.25rem; } + @media (prefers-reduced-motion: reduce) { } -.form-control:-moz-focusring { +.form-control:-moz-focusring, .search form:-moz-focusring { color: transparent; text-shadow: 0 0 0 #303030; } -.form-control::-ms-input-placeholder { +.form-control::placeholder, .search form::placeholder { color: #5e5e5e; opacity: 1; } -.form-control::placeholder { - color: #5e5e5e; - opacity: 1; -} -.form-control:disabled { +.form-control:disabled, .search form:disabled { background-color: #fafafa; opacity: 1; } +textarea.form-control { + height: auto; +} .form-group { margin-bottom: 1rem; } -.form-row { +.form-inline { display: flex; - flex-wrap: wrap; - margin-right: -5px; - margin-left: -5px; + flex-flow: row wrap; + align-items: center; } -.form-row > .col, -.form-row > [class*="col-"] { - padding-right: 5px; - padding-left: 5px; + +@media (min-width: 576px) { + .form-inline label { + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 0; + } + .form-inline .form-group { + display: flex; + flex: 0 0 auto; + flex-flow: row wrap; + align-items: center; + margin-bottom: 0; + } + .form-inline .form-control, .form-inline .search form, .search .form-inline form { + display: inline-block; + width: auto; + vertical-align: middle; + } } .btn { display: inline-block; @@ -256,7 +380,7 @@ a > code { color: #303030; text-align: center; vertical-align: middle; - -moz-user-select: none; + cursor: pointer; user-select: none; background-color: transparent; border: 1px solid transparent; @@ -265,17 +389,148 @@ a > code { line-height: 20px; border-radius: 0.25rem; } + @media (prefers-reduced-motion: reduce) { } -.btn:disabled { +.btn.disabled, .btn:disabled { opacity: 0.65; } -.btn:not(:disabled):not(.disabled) { - cursor: pointer; -} +a.btn.disabled, fieldset:disabled a.btn { pointer-events: none; } +.btn-success { + color: #fff; + background-color: #108548; + border-color: #108548; +} +.btn-success.disabled, .btn-success:disabled { + color: #fff; + background-color: #108548; + border-color: #108548; +} +.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active, +.show > .btn-success.dropdown-menu-toggle { + color: #fff; + background-color: #0b572f; + border-color: #094c29; +} + .login-page input[type='submit'] { + display: block; + width: 100%; +} + .login-page input[type='submit'] + input[type='submit'] { + margin-top: 0.5rem; +} + .login-page input[type="submit"][type='submit'], +.login-page input[type="reset"][type='submit'], +.login-page input[type="button"][type='submit'] { + width: 100%; +} +.collapse:not(.show) { + display: none; +} + +.dropdown { + position: relative; +} + .dropdown-menu-toggle { + white-space: nowrap; +} + .dropdown-menu-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; +} + .dropdown-menu-toggle:empty::after { + margin-left: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 10rem; + padding: 0.5rem 0; + margin: 0.125rem 0 0; + font-size: 1rem; + color: #303030; + text-align: left; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} +.dropdown-menu-right { + right: 0; + left: auto; +} + .divider { + height: 0; + margin: 4px 0; + overflow: hidden; + border-top: 1px solid #dbdbdb; +} +.dropdown-menu.show { + display: block; +} +.nav { + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.nav-link { + display: block; + padding: 0.5rem 1rem; +} +.nav-link.disabled { + color: #5e5e5e; + pointer-events: none; + cursor: default; +} +.nav-tabs { + border-bottom: 1px solid #999; +} +.nav-tabs .nav-item { + margin-bottom: -1px; +} +.nav-tabs .nav-link { + border: 1px solid transparent; + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} +.nav-tabs .nav-link.disabled { + color: #5e5e5e; + background-color: transparent; + border-color: transparent; +} +.nav-tabs .nav-link.active, +.nav-tabs .nav-item.show .nav-link { + color: #525252; + background-color: #fff; + border-color: #999 #999 #fff; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} .navbar { position: relative; display: flex; @@ -284,12 +539,77 @@ fieldset:disabled a.btn { justify-content: space-between; padding: 0.25rem 0.5rem; } -.navbar .container { +.navbar .container, +.navbar .container-fluid { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; } +.navbar-nav { + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.navbar-nav .nav-link { + padding-right: 0; + padding-left: 0; +} +.navbar-nav .dropdown-menu { + position: static; + float: none; +} +.navbar-collapse { + flex-basis: 100%; + flex-grow: 1; + align-items: center; +} +.navbar-toggler { + padding: 0.25rem 0.75rem; + font-size: 1.25rem; + line-height: 1; + background-color: transparent; + border: 1px solid transparent; + border-radius: 0.25rem; +} + +@media (max-width: 575.98px) { + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 576px) { + .navbar-expand-sm { + flex-flow: row nowrap; + justify-content: flex-start; + } + .navbar-expand-sm .navbar-nav { + flex-direction: row; + } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid { + flex-wrap: nowrap; + } + .navbar-expand-sm .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-sm .navbar-toggler { + display: none; + } +} .card { position: relative; display: flex; @@ -305,12 +625,132 @@ fieldset:disabled a.btn { margin-right: 0; margin-left: 0; } +.badge { + display: inline-block; + padding: 0.25em 0.4em; + font-size: 75%; + font-weight: 600; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25rem; +} + +@media (prefers-reduced-motion: reduce) { +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.badge-pill { + padding-right: 0.6em; + padding-left: 0.6em; + border-radius: 10rem; +} +.media { + display: flex; + align-items: flex-start; +} +.close { + float: right; + font-size: 1.5rem; + font-weight: 600; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .5; +} +button.close { + padding: 0; + background-color: transparent; + border: 0; + appearance: none; +} +a.close.disabled { + pointer-events: none; +} +.modal-dialog { + position: relative; + width: auto; + margin: 0.5rem; + pointer-events: none; +} + +@media (min-width: 576px) { + .modal-dialog { + max-width: 500px; + margin: 1.75rem auto; + } +} +.bg-transparent { + background-color: transparent !important; +} +.border { + border: 1px solid #dbdbdb !important; +} +.border-top { + border-top: 1px solid #dbdbdb !important; +} +.border-right { + border-right: 1px solid #dbdbdb !important; +} +.border-bottom { + border-bottom: 1px solid #dbdbdb !important; +} +.border-left { + border-left: 1px solid #dbdbdb !important; +} +.rounded { + border-radius: 0.25rem !important; +} +.clearfix::after { + display: block; + clear: both; + content: ""; +} +.d-none { + display: none !important; +} +.d-inline-block { + display: inline-block !important; +} .d-block { display: block !important; } .d-flex { display: flex !important; } + +@media (min-width: 576px) { + .d-sm-none { + display: none !important; + } +} + +@media (min-width: 768px) { + .d-md-block { + display: block !important; + } +} + +@media (min-width: 992px) { + .d-lg-none { + display: none !important; + } + .d-lg-block { + display: block !important; + } +} + +@media (min-width: 1200px) { + .d-xl-block { + display: block !important; + } +} .flex-wrap { flex-wrap: wrap !important; } @@ -320,6 +760,9 @@ fieldset:disabled a.btn { .align-items-center { align-items: center !important; } +.float-right { + float: right !important; +} .fixed-top { position: fixed; top: 0; @@ -327,8 +770,16 @@ fieldset:disabled a.btn { left: 0; z-index: 1030; } -.ml-2 { - margin-left: 0.5rem !important; +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; } .mt-3 { margin-top: 1rem !important; @@ -336,125 +787,81 @@ fieldset:disabled a.btn { .mb-3 { margin-bottom: 1rem !important; } +.m-auto { + margin: auto !important; +} + @media (min-width: 576px) { .mt-sm-0 { margin-top: 0 !important; } } -.text-center { - text-align: center !important; +.text-nowrap { + white-space: nowrap !important; +} +.text-left { + text-align: left !important; } .font-weight-normal { font-weight: 400 !important; } -.gl-form-input, -.gl-form-input.form-control { - background-color: #fff; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, - "Noto Sans", Ubuntu, Cantarell, "Helvetica Neue", sans-serif, - "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - font-size: 0.875rem; - line-height: 1rem; - padding-top: 0.5rem; - padding-bottom: 0.5rem; - padding-left: 0.75rem; - padding-right: 0.75rem; - height: auto; +.visible { + visibility: visible !important; +} +.form-control.focus, .search form.focus { color: #303030; - box-shadow: inset 0 0 0 1px #868686; - border-style: none; - appearance: none; - -moz-appearance: none; + background-color: #fff; + border-color: #80bdff; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); } -.gl-form-input:not(.form-control-plaintext):-moz-read-only, -.gl-form-input.form-control:not(.form-control-plaintext):-moz-read-only { - background-color: #fafafa; - color: #868686; - box-shadow: inset 0 0 0 1px #dbdbdb; - cursor: not-allowed; +input[type="color"].form-control { + height: 34px; + padding: 0.125rem 0.25rem; } -.gl-form-input:disabled, -.gl-form-input:not(.form-control-plaintext):read-only, -.gl-form-input.form-control:disabled, -.gl-form-input.form-control:not(.form-control-plaintext):read-only { - background-color: #fafafa; - color: #868686; - box-shadow: inset 0 0 0 1px #dbdbdb; - cursor: not-allowed; +input[type="color"].form-control:disabled { + background-color: #666; + opacity: 0.65; } -.gl-form-input::-ms-input-placeholder, -.gl-form-input.form-control::-ms-input-placeholder { - color: #868686; -} -.gl-form-input::placeholder, -.gl-form-input.form-control::placeholder { - color: #868686; -} -.gl-button { +.gl-badge { display: inline-flex; -} -.gl-button:not(.btn-link):active { - text-decoration: none; -} -.gl-button.gl-button { - border-width: 0; - padding-top: 0.5rem; - padding-bottom: 0.5rem; - padding-left: 0.75rem; - padding-right: 0.75rem; - background-color: transparent; - line-height: 1rem; - color: #303030; - fill: currentColor; - box-shadow: inset 0 0 0 1px #bfbfbf; - justify-content: center; align-items: center; - font-size: 0.875rem; - border-radius: 0.25rem; -} -.gl-button.gl-button .gl-button-icon { - height: 1rem; - width: 1rem; - flex-shrink: 0; - margin-right: 0.25rem; - top: auto; -} -.gl-button.gl-button.btn-default { - background-color: #fff; -} -.gl-button.gl-button.btn-default:active { - box-shadow: inset 0 0 0 2px #5e5e5e, 0 0 0 1px rgba(255, 255, 255, 0.4), - 0 0 0 4px rgba(31, 117, 203, 0.48); + font-size: 0.75rem; + font-weight: 400; + line-height: 1rem; + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + padding-right: 0.5rem; outline: none; - background-color: #dbdbdb; } -.gl-button.gl-button.btn-confirm { - color: #fff; -} -.gl-button.gl-button.btn-confirm { - background-color: #1f75cb; - box-shadow: inset 0 0 0 1px #1068bf; -} -.gl-button.gl-button.btn-confirm:active { - box-shadow: inset 0 0 0 2px #033464, 0 0 0 1px rgba(255, 255, 255, 0.4), - 0 0 0 4px rgba(31, 117, 203, 0.48); - outline: none; - background-color: #0b5cad; -} -body, -.form-control { +body, .form-control, .search form, +.search form { font-size: 0.875rem; } -[type="submit"] { +button, +html [type='button'], +[type='reset'], +[type='submit'], +[role='button'] { cursor: pointer; } h1, .h1, +h2, +.h2, h3, .h3 { margin-top: 20px; margin-bottom: 10px; } +input[type='file'] { + line-height: 1; +} + +strong { + font-weight: bold; +} a { color: #1068bf; } @@ -471,6 +878,9 @@ code { background-color: inherit; padding: unset; } +table { + border-spacing: 0; +} .hidden { display: none !important; visibility: hidden !important; @@ -478,6 +888,10 @@ code { .hide { display: none; } + .dropdown-menu-toggle::after { + display: none; +} +.badge:not(.gl-badge), .label { padding: 4px 5px; font-size: 12px; @@ -485,6 +899,28 @@ code { font-weight: 400; display: inline-block; } +.nav-tabs { + border-bottom: 0; +} +.nav-tabs .nav-link { + border-top: 0; + border-left: 0; + border-right: 0; +} +.nav-tabs .nav-item { + margin-bottom: 0; +} +pre code { + white-space: pre-wrap; +} +input[type="color"].form-control { + height: 34px; +} +.toggle-sidebar-button .collapse-text, +.toggle-sidebar-button .icon-chevron-double-lg-left, +.toggle-sidebar-button .icon-chevron-double-lg-right { + color: #666; +} svg { vertical-align: baseline; } @@ -497,6 +933,10 @@ body { body.navless { background-color: #fff !important; } +.content-wrapper { + margin-top: 40px; + padding-bottom: 100px; +} .container { padding-top: 0; z-index: 5; @@ -504,11 +944,13 @@ body.navless { .container .content { margin: 0; } + @media (max-width: 575.98px) { .container .content { margin-top: 20px; } } + @media (max-width: 575.98px) { .container .container .title { padding-left: 15px !important; @@ -529,35 +971,259 @@ body.navless { color: #303030; white-space: nowrap; } -.btn:active { - background-color: #f0f0f0; - box-shadow: none; -} -.btn:active { +.btn:active, .btn.active { + box-shadow: rgba(0, 0, 0, 0.16); background-color: #eaeaea; border-color: #e3e3e3; color: #303030; } +.btn.btn-success { + background-color: #108548; + border-color: #217645; + color: #fff; +} +.btn.btn-success:active, .btn.btn-success.active { + box-shadow: rgba(0, 0, 0, 0.16); + background-color: #24663b; + border-color: #0d532a; + color: #fff; +} .btn svg { height: 15px; width: 15px; } -.btn svg:not(:last-child) { +.btn svg:not(:last-child), +.btn .fa:not(:last-child) { margin-right: 5px; } -.light { - color: #303030; + .login-page input[type='submit'] { + width: 100%; + margin: 0; + margin-bottom: 15px; +} + .login-page input.btn[type='submit'] { + padding: 6px 0; +} +.badge.badge-pill:not(.gl-badge) { + font-weight: 400; + background-color: rgba(0, 0, 0, 0.07); + color: #525252; + vertical-align: baseline; +} +.hint { + font-style: italic; + color: #bfbfbf; +} +.bold { + font-weight: 600; +} +.tab-content { + overflow: visible; +} +pre.wrap { + word-break: break-word; + white-space: pre-wrap; } hr { - margin: 1.5rem 0; + margin: 24px 0; border-top: 1px solid #eee; } +table a code { + position: relative; + top: -2px; + margin-right: 3px; +} +.loading { + margin: 20px auto; + height: 40px; + color: #525252; + font-size: 32px; + text-align: center; +} +.highlight { + text-shadow: none; +} +.chart { + overflow: hidden; + height: 220px; +} .footer-links { margin-bottom: 20px; } .footer-links a { margin-right: 15px; } +.break-word { + word-wrap: break-word; +} +.append-bottom-20 { + margin-bottom: 20px; +} +.center { + text-align: center; +} +.block { + display: block; +} +.flex { + display: flex; +} +.flex-grow { + flex-grow: 1; +} +.dropdown { + position: relative; +} +.show.dropdown .dropdown-menu { + transform: translateY(0); + display: block; + min-height: 40px; + max-height: 312px; + overflow-y: auto; +} + +@media (max-width: 575.98px) { + .show.dropdown .dropdown-menu { + width: 100%; + } +} + .show.dropdown .dropdown-menu-toggle, +.show.dropdown .dropdown-menu-toggle { + border-color: #c4c4c4; +} +.show.dropdown [data-toggle='dropdown'] { + outline: 0; +} +.search-input-container .dropdown-menu { + margin-top: 11px; +} + .dropdown-menu-toggle { + padding: 6px 8px 6px 10px; + background-color: #fff; + color: #303030; + font-size: 14px; + text-align: left; + border: 1px solid #dbdbdb; + border-radius: 0.25rem; + white-space: nowrap; +} + .no-outline.dropdown-menu-toggle { + outline: 0; +} + .dropdown-menu-toggle .fa { + color: #c4c4c4; +} +.dropdown-menu-toggle { + padding-right: 25px; + position: relative; + width: 160px; + text-overflow: ellipsis; + overflow: hidden; +} +.dropdown-menu-toggle .fa { + position: absolute; +} +.dropdown-menu { + display: none; + position: absolute; + width: auto; + top: 100%; + z-index: 300; + min-width: 240px; + max-width: 500px; + margin-top: 4px; + margin-bottom: 24px; + font-size: 14px; + font-weight: 400; + padding: 8px 0; + background-color: #fff; + border: 1px solid #dbdbdb; + border-radius: 0.25rem; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} +.dropdown-menu ul { + margin: 0; + padding: 0; +} +.dropdown-menu li { + display: block; + text-align: left; + list-style: none; + padding: 0 1px; +} +.dropdown-menu li > a, +.dropdown-menu li button { + background: transparent; + border: 0; + border-radius: 0; + box-shadow: none; + display: block; + font-weight: 400; + position: relative; + padding: 8px 12px; + color: #303030; + line-height: 16px; + white-space: normal; + overflow: hidden; + text-align: left; + width: 100%; +} +.dropdown-menu .divider { + height: 1px; + margin: 0.25rem 0; + padding: 0; + background-color: #dbdbdb; +} +.dropdown-menu .badge.badge-pill + span:not(.badge):not(.badge-pill) { + margin-right: 40px; +} +.dropdown-select { + width: 300px; +} + +@media (max-width: 767.98px) { + .dropdown-select { + width: 100%; + } +} +.dropdown-content { + max-height: 252px; + overflow-y: auto; +} +.dropdown-loading { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: none; + z-index: 9; + background-color: rgba(255, 255, 255, 0.6); + font-size: 28px; +} +.dropdown-loading .fa { + position: absolute; + top: 50%; + left: 50%; + margin-top: -14px; + margin-left: -14px; +} + +@media (max-width: 575.98px) { + .navbar-gitlab li.dropdown { + position: static; + } + header.navbar-gitlab .dropdown .dropdown-menu { + width: 100%; + min-width: 100%; + } +} + +@media (max-width: 767.98px) { + .dropdown-menu-toggle { + width: 100%; + } +} .flash-container { margin: 0; margin-bottom: 16px; @@ -566,8 +1232,8 @@ hr { z-index: 1; } .flash-container.sticky { - position: -webkit-sticky; position: sticky; + position: -webkit-sticky; top: 48px; z-index: 251; } @@ -577,6 +1243,9 @@ hr { .flash-container:empty { margin: 0; } +textarea { + resize: vertical; +} input { border-radius: 0.25rem; color: #303030; @@ -588,61 +1257,809 @@ label { label.label-bold { font-weight: 600; } -.form-control { +.form-control, .search form { border-radius: 4px; padding: 6px 10px; } -.form-control::-ms-input-placeholder { +.form-control::placeholder, .search form::placeholder { color: #868686; } -.form-control::placeholder { - color: #868686; +.gl-field-error { + color: #dd2b0e; + font-size: 0.875rem; } -.gl-show-field-errors .form-control:not(textarea) { +.gl-show-field-errors .form-control:not(textarea), .gl-show-field-errors .search form:not(textarea), .search .gl-show-field-errors form:not(textarea) { height: 34px; } .gl-show-field-errors .gl-field-hint { color: #303030; } + +@media (max-width: 575.98px) { + .remember-me .remember-me-checkbox { + margin-top: 0; + } +} +body.ui-indigo .navbar-gitlab { + background-color: #292961; +} +body.ui-indigo .navbar-gitlab .navbar-collapse { + color: #d1d1f0; +} +body.ui-indigo .navbar-gitlab .container-fluid .navbar-toggler { + border-left: 1px solid #6868b9; +} +body.ui-indigo .navbar-gitlab .container-fluid .navbar-toggler svg { + fill: #d1d1f0; +} +body.ui-indigo .navbar-gitlab .navbar-sub-nav > li.active > a, +body.ui-indigo .navbar-gitlab .navbar-sub-nav > li.active > button, body.ui-indigo .navbar-gitlab .navbar-sub-nav > li.dropdown.show > a, +body.ui-indigo .navbar-gitlab .navbar-sub-nav > li.dropdown.show > button, +body.ui-indigo .navbar-gitlab .navbar-nav > li.active > a, +body.ui-indigo .navbar-gitlab .navbar-nav > li.active > button, +body.ui-indigo .navbar-gitlab .navbar-nav > li.dropdown.show > a, +body.ui-indigo .navbar-gitlab .navbar-nav > li.dropdown.show > button { + color: #292961; + background-color: #fff; +} +body.ui-indigo .navbar-gitlab .navbar-sub-nav { + color: #d1d1f0; +} +body.ui-indigo .navbar-gitlab .nav > li { + color: #d1d1f0; +} +body.ui-indigo .navbar-gitlab .nav > li > a.header-user-dropdown-toggle .header-user-avatar { + border-color: #d1d1f0; +} +body.ui-indigo .navbar-gitlab .nav > li.active > a, +body.ui-indigo .navbar-gitlab .nav > li.dropdown.show > a { + color: #292961; + background-color: #fff; +} +body.ui-indigo .search form { + background-color: rgba(209, 209, 240, 0.2); +} +body.ui-indigo .search .search-input::placeholder { + color: rgba(209, 209, 240, 0.8); +} +body.ui-indigo .search .search-input-wrap .search-icon, +body.ui-indigo .search .search-input-wrap .clear-icon { + fill: rgba(209, 209, 240, 0.8); +} +body.ui-indigo .nav-sidebar li.active { + box-shadow: inset 4px 0 0 #4b4ba3; +} +body.ui-indigo .nav-sidebar li.active > a { + color: #393982; +} +body.ui-indigo .nav-sidebar li.active .nav-icon-container svg { + fill: #393982; +} +body.ui-indigo .sidebar-top-level-items > li.active .badge.badge-pill { + color: #393982; +} +body.ui-indigo .nav-links li.active a, +body.ui-indigo .nav-links li a.active { + border-bottom: 2px solid #6666c4; +} +body.ui-indigo .nav-links li.active a .badge.badge-pill, +body.ui-indigo .nav-links li a.active .badge.badge-pill { + font-weight: 600; +} +.navbar-gitlab { + padding: 0 16px; + z-index: 1000; + margin-bottom: 0; + min-height: 40px; + border: 0; + border-bottom: 1px solid #dbdbdb; + position: fixed; + top: 0; + left: 0; + right: 0; + border-radius: 0; +} +.navbar-gitlab .logo-text { + line-height: initial; +} +.navbar-gitlab .logo-text svg { + width: 55px; + height: 14px; + margin: 0; + fill: #fff; +} +.navbar-gitlab .close-icon { + display: none; +} +.navbar-gitlab .header-content { + width: 100%; + display: flex; + justify-content: space-between; + position: relative; + min-height: 40px; + padding-left: 0; +} +.navbar-gitlab .header-content .title-container { + display: flex; + align-items: stretch; + flex: 1 1 auto; + padding-top: 0; + overflow: visible; +} +.navbar-gitlab .header-content .title { + padding-right: 0; + color: currentColor; + display: flex; + position: relative; + margin: 0; + font-size: 18px; + vertical-align: top; + white-space: nowrap; +} +.navbar-gitlab .header-content .title img { + height: 28px; +} +.navbar-gitlab .header-content .title img + .logo-text { + margin-left: 8px; +} +.navbar-gitlab .header-content .title.wrap { + white-space: normal; +} +.navbar-gitlab .header-content .title a { + display: flex; + align-items: center; + padding: 2px 8px; + margin: 5px 2px 5px -8px; + border-radius: 4px; +} +.navbar-gitlab .header-content .dropdown.open > a { + border-bottom-color: #fff; +} +.navbar-gitlab .header-content .navbar-collapse > ul.nav > li:not(.d-none) { + margin: 0 2px; +} +.navbar-gitlab .navbar-collapse { + flex: 0 0 auto; + border-top: 0; + padding: 0; +} + +@media (max-width: 575.98px) { + .navbar-gitlab .navbar-collapse { + flex: 1 1 auto; + } +} +.navbar-gitlab .navbar-collapse .nav { + flex-wrap: nowrap; +} + +@media (max-width: 575.98px) { + .navbar-gitlab .navbar-collapse .nav > li:not(.d-none) a { + margin-left: 0; + } +} +.navbar-gitlab .container-fluid { + padding: 0; +} +.navbar-gitlab .container-fluid .user-counter svg { + margin-right: 3px; +} +.navbar-gitlab .container-fluid .navbar-toggler { + position: relative; + right: -10px; + border-radius: 0; + min-width: 45px; + padding: 0; + margin: 8px -7px 8px 0; + font-size: 14px; + text-align: center; + color: currentColor; +} + +@media (max-width: 575.98px) { + .navbar-gitlab .container-fluid .navbar-nav { + display: flex; + padding-right: 10px; + flex-direction: row; + } +} +.navbar-gitlab .container-fluid .navbar-nav li .badge.badge-pill { + box-shadow: none; + font-weight: 600; +} + +@media (max-width: 575.98px) { + .navbar-gitlab .container-fluid .nav > li.header-user { + padding-left: 10px; + } +} +.navbar-gitlab .container-fluid .nav > li > a { + will-change: color; + margin: 4px 0; + padding: 6px 8px; + height: 32px; +} + +@media (max-width: 575.98px) { + .navbar-gitlab .container-fluid .nav > li > a { + padding: 0; + } +} +.navbar-gitlab .container-fluid .nav > li > a.header-user-dropdown-toggle { + margin-left: 2px; +} +.navbar-gitlab .container-fluid .nav > li > a.header-user-dropdown-toggle .header-user-avatar { + margin-right: 0; +} +.navbar-gitlab .container-fluid .nav > li .header-new-dropdown-toggle { + margin-right: 0; +} +.navbar-sub-nav > li > a, +.navbar-sub-nav > li > button, +.navbar-nav > li > a, +.navbar-nav > li > button { + display: flex; + align-items: center; + justify-content: center; + padding: 6px 8px; + margin: 4px 2px; + font-size: 12px; + color: currentColor; + border-radius: 4px; + height: 32px; + font-weight: 600; +} +.navbar-sub-nav > li > button, +.navbar-nav > li > button { + background: transparent; + border: 0; +} +.navbar-sub-nav .dropdown-menu, +.navbar-nav .dropdown-menu { + position: absolute; +} +.navbar-sub-nav { + display: flex; + margin: 0 0 0 6px; +} +.caret-down, +.btn .caret-down { + top: 0; + height: 11px; + width: 11px; + margin-left: 4px; + fill: currentColor; +} +.header-user .dropdown-menu, +.header-new .dropdown-menu { + margin-top: 4px; +} +.btn-sign-in { + background-color: #ebebfa; + color: #292961; + font-weight: 600; + line-height: 18px; + margin: 4px 0 4px 2px; +} +.title-container .badge.badge-pill, +.navbar-nav .badge.badge-pill { + position: inherit; + font-weight: 400; + margin-left: -6px; + font-size: 11px; + color: #fff; + padding: 0 5px; + line-height: 12px; + border-radius: 7px; + box-shadow: 0 1px 0 rgba(76, 78, 84, 0.2); +} +.title-container .badge.badge-pill.green-badge, +.navbar-nav .badge.badge-pill.green-badge { + background-color: #108548; +} +.title-container .badge.badge-pill.merge-requests-count, +.navbar-nav .badge.badge-pill.merge-requests-count { + background-color: #de7e00; +} +.title-container .badge.badge-pill.todos-count, +.navbar-nav .badge.badge-pill.todos-count { + background-color: #1f75cb; +} +.title-container .canary-badge .badge, +.navbar-nav .canary-badge .badge { + font-size: 12px; + line-height: 16px; + padding: 0 0.5rem; +} + +@media (max-width: 575.98px) { + .navbar-gitlab .container-fluid { + font-size: 18px; + } + .navbar-gitlab .container-fluid .navbar-nav { + table-layout: fixed; + width: 100%; + margin: 0; + text-align: right; + } + .navbar-gitlab .container-fluid .navbar-collapse { + margin-left: -8px; + margin-right: -10px; + } + .navbar-gitlab .container-fluid .navbar-collapse .nav > li:not(.d-none) { + flex: 1; + } + .header-user-dropdown-toggle { + text-align: center; + } + .header-user-avatar { + float: none; + } +} +.header-user.show .dropdown-menu { + margin-top: 4px; + color: #303030; + left: auto; + max-height: 445px; +} +.header-user.show .dropdown-menu svg { + vertical-align: text-top; +} +.header-user-avatar { + float: left; + margin-right: 5px; + border-radius: 50%; + border: 1px solid #f5f5f5; +} .navbar-empty { justify-content: center; height: 40px; background: #fff; border-bottom: 1px solid #f0f0f0; } -.navbar-empty .tanuki-logo, -.navbar-empty .brand-header-logo { - max-height: 100%; + +@media (max-width: 575.98px) { + .nav-links > li > a .badge.badge-pill { + display: none; + } } -.tanuki-logo .tanuki-left-ear, -.tanuki-logo .tanuki-right-ear, -.tanuki-logo .tanuki-nose { - fill: #e24329; + +@media (max-width: 575.98px) { + .nav-links > li > a { + margin-right: 3px; + } } -.tanuki-logo .tanuki-left-eye, -.tanuki-logo .tanuki-right-eye { - fill: #fc6d26; -} -.tanuki-logo .tanuki-left-cheek, -.tanuki-logo .tanuki-right-cheek { - fill: #fca326; +.media { + display: flex; + align-items: flex-start; } .card { margin-bottom: 16px; } -input::-moz-placeholder { +.nav-links:not(.quick-links) { + display: flex; + padding: 0; + margin: 0; + list-style: none; + height: auto; + border-bottom: 1px solid #dbdbdb; +} +.content-wrapper { + width: 100%; +} +.content-wrapper .container-fluid { + padding: 0 16px; +} + +@media (min-width: 768px) { + .page-with-contextual-sidebar { + padding-left: 50px; + } +} + +@media (min-width: 1200px) { + .page-with-contextual-sidebar { + padding-left: 220px; + } +} +.context-header { + position: relative; + margin-right: 2px; + width: 220px; +} +.context-header > a, +.context-header > button { + font-weight: 600; + display: flex; + width: 100%; + align-items: center; + padding: 10px 16px 10px 10px; + color: #303030; + background-color: transparent; + border: 0; + text-align: left; +} +.context-header .avatar-container { + flex: 0 0 40px; + background-color: #fff; +} +.context-header .sidebar-context-title { + overflow: hidden; + text-overflow: ellipsis; +} +.context-header .sidebar-context-title.text-secondary { + font-weight: normal; + font-size: 0.8em; +} +.nav-sidebar { + position: fixed; + z-index: 600; + width: 220px; + top: 40px; + bottom: 0; + left: 0; + background-color: #fafafa; + box-shadow: inset -1px 0 0 #dbdbdb; + transform: translate3d(0, 0, 0); +} + +@media (min-width: 576px) and (max-width: 576px) { + .nav-sidebar:not(.sidebar-collapsed-desktop) { + box-shadow: inset -1px 0 0 #dbdbdb, 2px 1px 3px rgba(0, 0, 0, 0.1); + } +} +.nav-sidebar.sidebar-collapsed-desktop { + width: 50px; +} +.nav-sidebar.sidebar-collapsed-desktop .nav-sidebar-inner-scroll { + overflow-x: hidden; +} +.nav-sidebar.sidebar-collapsed-desktop .badge.badge-pill:not(.fly-out-badge), +.nav-sidebar.sidebar-collapsed-desktop .sidebar-context-title, +.nav-sidebar.sidebar-collapsed-desktop .nav-item-name { + border: 0; + clip: rect(0, 0, 0, 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + white-space: nowrap; + width: 1px; +} +.nav-sidebar.sidebar-collapsed-desktop .sidebar-top-level-items > li > a { + min-height: 45px; +} +.nav-sidebar.sidebar-collapsed-desktop .fly-out-top-item { + display: block; +} +.nav-sidebar.sidebar-collapsed-desktop .avatar-container { + margin: 0 auto; +} +.nav-sidebar.sidebar-expanded-mobile { + left: 0; +} +.nav-sidebar a { + text-decoration: none; +} +.nav-sidebar ul { + padding-left: 0; + list-style: none; +} +.nav-sidebar li { + white-space: nowrap; +} +.nav-sidebar li a { + display: flex; + align-items: center; + padding: 12px 16px; + color: #666; +} +.nav-sidebar li .nav-item-name { + flex: 1; +} +.nav-sidebar li.active > a { + font-weight: 600; +} + +@media (max-width: 767.98px) { + .nav-sidebar { + left: -220px; + } +} +.nav-sidebar .nav-icon-container { + display: flex; + margin-right: 8px; +} +.nav-sidebar .fly-out-top-item { + display: none; +} +.nav-sidebar svg { + height: 16px; + width: 16px; +} + +@media (min-width: 768px) and (max-width: 1199px) { + .nav-sidebar:not(.sidebar-expanded-mobile) { + width: 50px; + } + .nav-sidebar:not(.sidebar-expanded-mobile) .nav-sidebar-inner-scroll { + overflow-x: hidden; + } + .nav-sidebar:not(.sidebar-expanded-mobile) .badge.badge-pill:not(.fly-out-badge), + .nav-sidebar:not(.sidebar-expanded-mobile) .sidebar-context-title, + .nav-sidebar:not(.sidebar-expanded-mobile) .nav-item-name { + border: 0; + clip: rect(0, 0, 0, 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + white-space: nowrap; + width: 1px; + } + .nav-sidebar:not(.sidebar-expanded-mobile) .sidebar-top-level-items > li > a { + min-height: 45px; + } + .nav-sidebar:not(.sidebar-expanded-mobile) .fly-out-top-item { + display: block; + } + .nav-sidebar:not(.sidebar-expanded-mobile) .avatar-container { + margin: 0 auto; + } + .nav-sidebar:not(.sidebar-expanded-mobile) .context-header { + height: 60px; + width: 50px; + } + .nav-sidebar:not(.sidebar-expanded-mobile) .context-header a { + padding: 10px 4px; + } + .nav-sidebar:not(.sidebar-expanded-mobile) .sidebar-top-level-items > li .sidebar-sub-level-items:not(.flyout-list) { + display: none; + } + .nav-sidebar:not(.sidebar-expanded-mobile) .nav-icon-container { + margin-right: 0; + } + .nav-sidebar:not(.sidebar-expanded-mobile) .toggle-sidebar-button { + padding: 16px; + width: 49px; + } + .nav-sidebar:not(.sidebar-expanded-mobile) .toggle-sidebar-button .collapse-text, + .nav-sidebar:not(.sidebar-expanded-mobile) .toggle-sidebar-button .icon-chevron-double-lg-left { + display: none; + } + .nav-sidebar:not(.sidebar-expanded-mobile) .toggle-sidebar-button .icon-chevron-double-lg-right { + display: block; + margin: 0; + } +} +.nav-sidebar-inner-scroll { + height: 100%; + width: 100%; + overflow: auto; +} +.sidebar-sub-level-items { + display: none; + padding-bottom: 8px; +} +.sidebar-sub-level-items > li a { + padding: 8px 16px 8px 40px; +} +.sidebar-top-level-items { + margin-bottom: 60px; +} + +@media (min-width: 576px) { + .sidebar-top-level-items > li > a { + margin-right: 1px; + } +} +.sidebar-top-level-items > li .badge.badge-pill { + background-color: rgba(0, 0, 0, 0.08); + color: #666; +} +.sidebar-top-level-items > li.active { + background: rgba(0, 0, 0, 0.04); +} +.sidebar-top-level-items > li.active > a { + margin-left: 4px; + padding-left: 12px; +} +.sidebar-top-level-items > li.active .badge.badge-pill { + font-weight: 600; +} +.sidebar-top-level-items > li.active .sidebar-sub-level-items:not(.is-fly-out-only) { + display: block; +} +.toggle-sidebar-button, +.close-nav-button { + width: 219px; + position: fixed; + height: 48px; + bottom: 0; + padding: 0 16px; + background-color: #fafafa; + border: 0; + border-top: 1px solid #dbdbdb; + color: #666; + display: flex; + align-items: center; +} +.toggle-sidebar-button svg, +.close-nav-button svg { + margin-right: 8px; +} +.toggle-sidebar-button .icon-chevron-double-lg-right, +.close-nav-button .icon-chevron-double-lg-right { + display: none; +} +.collapse-text { + white-space: nowrap; + overflow: hidden; +} +.sidebar-collapsed-desktop .context-header { + height: 60px; + width: 50px; +} +.sidebar-collapsed-desktop .context-header a { + padding: 10px 4px; +} +.sidebar-collapsed-desktop .sidebar-top-level-items > li .sidebar-sub-level-items:not(.flyout-list) { + display: none; +} +.sidebar-collapsed-desktop .nav-icon-container { + margin-right: 0; +} +.sidebar-collapsed-desktop .toggle-sidebar-button { + padding: 16px; + width: 49px; +} +.sidebar-collapsed-desktop .toggle-sidebar-button .collapse-text, +.sidebar-collapsed-desktop .toggle-sidebar-button .icon-chevron-double-lg-left { + display: none; +} +.sidebar-collapsed-desktop .toggle-sidebar-button .icon-chevron-double-lg-right { + display: block; + margin: 0; +} +.fly-out-top-item > a { + display: flex; +} +.fly-out-top-item .fly-out-badge { + margin-left: 8px; +} +.fly-out-top-item-name { + flex: 1; +} +.close-nav-button { + display: none; +} + +@media (max-width: 767.98px) { + .close-nav-button { + display: flex; + } + .toggle-sidebar-button { + display: none; + } +} +table.table { + margin-bottom: 16px; +} +table.table .dropdown-menu a { + text-decoration: none; +} +table.table .success, +table.table .info { + color: #fff; +} +table.table .success a:not(.btn), +table.table .info a:not(.btn) { + text-decoration: underline; + color: #fff; +} +pre { + font-family: "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; + display: block; + padding: 8px 12px; + margin: 0 0 8px; + font-size: 13px; + word-break: break-all; + word-wrap: break-word; + color: #303030; + background-color: #fafafa; + border: 1px solid #dbdbdb; + border-radius: 2px; +} +.monospace { + font-family: "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; +} +input::-moz-placeholder, +textarea::-moz-placeholder { color: #868686; opacity: 1; } -input::-ms-input-placeholder { +input::-ms-input-placeholder, +textarea::-ms-input-placeholder { color: #868686; } -input:-ms-input-placeholder { +input:-ms-input-placeholder, +textarea:-ms-input-placeholder { color: #868686; } svg { fill: currentColor; } + +svg.s12 { + width: 12px; + height: 12px; +} + +svg.s16 { + width: 16px; + height: 16px; +} + +svg.s18 { + width: 18px; + height: 18px; +} + +svg.s12 { + vertical-align: -1px; +} + +svg.s16 { + vertical-align: -3px; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +table.code { + width: 100%; + font-family: "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; + border: 0; + border-collapse: separate; + margin: 0; + padding: 0; + table-layout: fixed; + border-radius: 0 0 4px 4px; +} +.frame .badge.badge-pill { + position: absolute; + background-color: #428fdc; + color: #fff; + border: #fff 1px solid; + min-height: 16px; + padding: 5px 8px; + border-radius: 12px; +} +.frame .badge.badge-pill { + transform: translate(-50%, -50%); +} +.color-label { + padding: 0 0.5rem; + line-height: 16px; + border-radius: 100px; + color: #fff; +} +.label-link { + display: inline-flex; + vertical-align: text-bottom; +} +.label-link .label { + vertical-align: inherit; + font-size: 12px; +} .login-page .container { max-width: 960px; } @@ -679,25 +2096,6 @@ svg { border-radius: 0.25rem; padding: 15px; } -.login-page .login-box .login-heading h3, -.login-page .omniauth-container .login-heading h3 { - font-weight: 400; - line-height: 1.5; - margin: 0 0 10px; -} -.login-page .login-box .login-footer, -.login-page .omniauth-container .login-footer { - margin-top: 10px; -} -.login-page .login-box .login-footer p:last-child, -.login-page .omniauth-container .login-footer p:last-child { - margin-bottom: 0; -} -.login-page .login-box a.forgot, -.login-page .omniauth-container a.forgot { - float: right; - padding-top: 6px; -} .login-page .login-box .nav .active a, .login-page .omniauth-container .nav .active a { background: transparent; @@ -734,6 +2132,7 @@ svg { background: none; margin-bottom: 16px; } + @media (max-width: 991.98px) { .login-page .omniauth-container form { width: 100%; @@ -741,6 +2140,7 @@ svg { } .login-page .omniauth-container .omniauth-btn { width: 100%; + padding: 8px; } .login-page .new-session-tabs { display: flex; @@ -748,19 +2148,6 @@ svg { border-top-right-radius: 4px; border-top-left-radius: 4px; } -.login-page .new-session-tabs.custom-provider-tabs { - flex-wrap: wrap; -} -.login-page .new-session-tabs.custom-provider-tabs li { - min-width: 85px; - flex-basis: auto; -} -.login-page .new-session-tabs.custom-provider-tabs li:nth-child(n + 5) { - border-top: 1px solid #dbdbdb; -} -.login-page .new-session-tabs.custom-provider-tabs a { - font-size: 16px; -} .login-page .new-session-tabs li { flex: 1; text-align: center; @@ -783,29 +2170,17 @@ svg { .login-page .new-session-tabs li.active > a { cursor: default; } -.login-page .form-control:active, -.login-page .form-control:focus { - background-color: #fff; -} .login-page .submit-container { margin-top: 16px; } -.login-page input[type="submit"] { +.login-page input[type='submit'] { margin-bottom: 0; - display: block; - width: 100%; } .login-page .devise-errors h2 { margin-top: 0; font-size: 14px; color: #ae1800; } -@media (max-width: 575.98px) { - .login-page .col-md-5.float-right { - float: none !important; - margin-bottom: 45px; - } -} .devise-layout-html { margin: 0; padding: 0; @@ -838,57 +2213,191 @@ svg { .devise-layout-html body .navless-container { padding: 65px 15px; } + @media (max-width: 575.98px) { .devise-layout-html body .navless-container { padding: 0 15px 65px; } } +.milestones { + padding: 8px; + margin-top: 8px; + border-radius: 4px; + background-color: #dbdbdb; +} +.search { + margin: 0 8px; +} +.search form { + margin: 0; + padding: 4px; + width: 200px; + line-height: 24px; + height: 32px; + border: 0; + border-radius: 4px; +} -.gl-border-solid { - border-style: solid; +@media (min-width: 1200px) { + .search form { + width: 320px; + } } -.gl-border-gray-100 { - border-color: #dbdbdb; +.search .search-input { + border: 0; + font-size: 14px; + padding: 0 20px 0 0; + margin-left: 5px; + line-height: 25px; + width: 98%; + color: #fff; + background: none; } -.gl-border-1 { - border-width: 1px; +.search .search-input-container { + display: flex; + position: relative; } -.gl-rounded-base { - border-radius: 0.25rem; +.search .search-input-wrap { + width: 100%; } -.gl-text-green-600 { - color: #217645; +.search .search-input-wrap .search-icon, +.search .search-input-wrap .clear-icon { + position: absolute; + right: 5px; + top: 4px; } -.gl-text-red-500 { - color: #dd2b0e; +.search .search-input-wrap .search-icon { + -moz-user-select: none; + user-select: none; } -.gl-display-flex { +.search .search-input-wrap .clear-icon { + display: none; +} +.search .search-input-wrap .dropdown { + position: static; +} +.search .search-input-wrap .dropdown-menu { + left: -5px; + max-height: 400px; + overflow: auto; +} + +@media (min-width: 1200px) { + .search .search-input-wrap .dropdown-menu { + width: 320px; + } +} +.search .search-input-wrap .dropdown-content { + max-height: 382px; +} +.settings { + border-top: 1px solid #dbdbdb; +} +.settings:first-of-type { + margin-top: 10px; + border: 0; +} +.settings + div .settings:first-of-type { + margin-top: 0; + border-top: 1px solid #dbdbdb; +} +.avatar, .avatar-container { + float: left; + margin-right: 16px; + border-radius: 50%; + border: 1px solid #f5f5f5; +} +.s16.avatar, .s16.avatar-container { + width: 16px; + height: 16px; + margin-right: 8px; +} +.s18.avatar, .s18.avatar-container { + width: 18px; + height: 18px; + margin-right: 8px; +} +.s40.avatar, .s40.avatar-container { + width: 40px; + height: 40px; + margin-right: 8px; +} +.avatar { + transition-property: none; + width: 40px; + height: 40px; + padding: 0; + background: #fdfdfd; + overflow: hidden; + border-color: rgba(0, 0, 0, 0.1); +} +.avatar.center { + font-size: 14px; + line-height: 1.8em; + text-align: center; +} +.avatar.avatar-tile { + border-radius: 0; + border: 0; +} +.avatar-container { + overflow: hidden; display: flex; } -.gl-align-items-center { - align-items: center; +.avatar-container a { + width: 100%; + height: 100%; + display: flex; + text-decoration: none; } -.gl-p-2 { - padding: 0.25rem; +.avatar-container .avatar { + border-radius: 0; + border: 0; + height: auto; + width: 100%; + margin: 0; + align-self: center; } -.gl-p-4 { - padding: 0.75rem; +.avatar-container.s40 { + min-width: 40px; + min-height: 40px; } -.gl-mt-2 { - margin-top: 0.25rem; +.rect-avatar { + border-radius: 2px; } -.gl-mb-2 { - margin-bottom: 0.25rem; +.rect-avatar.s16 { + border-radius: 2px; } -.gl-mb-3 { - margin-bottom: 0.5rem; +.rect-avatar.s18 { + border-radius: 2px; } -.gl-mb-5 { - margin-bottom: 1rem; +.rect-avatar.s40 { + border-radius: 4px; } -.gl-text-left { - text-align: left; +.tab-width-8 { + -moz-tab-size: 8; + tab-size: 8; } - -@import "startup/cloaking"; +.gl-sr-only { + border: 0; + clip: rect(0, 0, 0, 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + white-space: nowrap; + width: 1px; +} +.gl-mt-5 { + margin-top: 1rem; +} +.gl-ml-3 { + margin-left: 0.5rem; +} +.content-wrapper > .alert-wrapper, +#content-body, .modal-dialog { + display: block; +} +@import 'cloaking'; @include cloak-startup-scss(none); diff --git a/app/graphql/mutations/ci/runner/delete.rb b/app/graphql/mutations/ci/runner/delete.rb new file mode 100644 index 00000000000..8d9a5f15505 --- /dev/null +++ b/app/graphql/mutations/ci/runner/delete.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +module Mutations + module Ci + module Runner + class Delete < BaseMutation + graphql_name 'RunnerDelete' + + authorize :delete_runner + + RunnerID = ::Types::GlobalIDType[::Ci::Runner] + + argument :id, RunnerID, + required: true, + description: 'ID of the runner to delete.' + + def resolve(id:, **runner_attrs) + runner = authorized_find!(id) + + error = authenticate_delete_runner!(runner) + return { errors: [error] } if error + + runner.destroy! + + { errors: runner.errors.full_messages } + end + + def authenticate_delete_runner!(runner) + return if current_user.can_admin_all_resources? + + "Runner #{runner.to_global_id} associated with more than one project" if runner.projects.count > 1 + end + + def find_object(id) + # TODO: remove this line when the compatibility layer is removed + # See: https://gitlab.com/gitlab-org/gitlab/-/issues/257883 + id = RunnerID.coerce_isolated_input(id) + + GitlabSchema.find_by_gid(id) + end + end + end + end +end diff --git a/app/graphql/types/mutation_type.rb b/app/graphql/types/mutation_type.rb index df0e5484ae7..561cbf24da3 100644 --- a/app/graphql/types/mutation_type.rb +++ b/app/graphql/types/mutation_type.rb @@ -100,6 +100,7 @@ module Types mount_mutation Mutations::Ci::Job::Play mount_mutation Mutations::Ci::Job::Retry mount_mutation Mutations::Ci::Runner::Update, feature_flag: :runner_graphql_query + mount_mutation Mutations::Ci::Runner::Delete, feature_flag: :runner_graphql_query mount_mutation Mutations::Namespace::PackageSettings::Update mount_mutation Mutations::UserCallouts::Create end diff --git a/app/helpers/groups_helper.rb b/app/helpers/groups_helper.rb index 7507d5cb3b6..21f96c01f98 100644 --- a/app/helpers/groups_helper.rb +++ b/app/helpers/groups_helper.rb @@ -88,14 +88,6 @@ module GroupsHelper .count end - def group_open_merge_requests_count(group) - if Feature.enabled?(:cached_sidebar_merge_requests_count, group, default_enabled: :yaml) - cached_issuables_count(@group, type: :merge_requests) - else - number_with_delimiter(group_merge_requests_count(state: 'opened')) - end - end - def group_merge_requests_count(state:) MergeRequestsFinder .new(current_user, group_id: @group.id, state: state, non_archived: true, include_subgroups: true) diff --git a/app/services/ci/create_downstream_pipeline_service.rb b/app/services/ci/create_downstream_pipeline_service.rb index 64a99e404c6..1eff76c2e5d 100644 --- a/app/services/ci/create_downstream_pipeline_service.rb +++ b/app/services/ci/create_downstream_pipeline_service.rb @@ -19,13 +19,14 @@ module Ci DuplicateDownstreamPipelineError.new, bridge_id: @bridge.id, project_id: @bridge.project_id ) - return + + return error('Already has a downstream pipeline') end pipeline_params = @bridge.downstream_pipeline_params target_ref = pipeline_params.dig(:target_revision, :ref) - return unless ensure_preconditions!(target_ref) + return error('Pre-conditions not met') unless ensure_preconditions!(target_ref) service = ::Ci::CreatePipelineService.new( pipeline_params.fetch(:project), @@ -119,8 +120,11 @@ module Ci return false if @bridge.triggers_child_pipeline? if Feature.enabled?(:ci_drop_cyclical_triggered_pipelines, @bridge.project, default_enabled: :yaml) - checksums = @bridge.pipeline.base_and_ancestors.map { |pipeline| config_checksum(pipeline) } - checksums.uniq.length != checksums.length + pipeline_checksums = @bridge.pipeline.base_and_ancestors.filter_map do |pipeline| + config_checksum(pipeline) unless pipeline.child? + end + + pipeline_checksums.uniq.length != pipeline_checksums.length end end diff --git a/app/views/groups/settings/ci_cd/_form.html.haml b/app/views/groups/settings/ci_cd/_form.html.haml index c5cc3eb693c..b6f70879d17 100644 --- a/app/views/groups/settings/ci_cd/_form.html.haml +++ b/app/views/groups/settings/ci_cd/_form.html.haml @@ -8,6 +8,5 @@ = f.number_field :max_artifacts_size, class: 'form-control' %p.form-text.text-muted = _("The maximum file size in megabytes for individual job artifacts.") - = link_to sprite_icon('question-o'), help_page_path('user/admin_area/settings/continuous_integration', anchor: 'maximum-artifacts-size'), target: '_blank' - + = link_to s_('Learn more.'), help_page_path('user/admin_area/settings/continuous_integration', anchor: 'maximum-artifacts-size'), target: '_blank', rel: 'noopener noreferrer' = f.submit _('Save changes'), class: "btn gl-button btn-confirm" diff --git a/app/views/layouts/_head.html.haml b/app/views/layouts/_head.html.haml index 14d0d73e2b7..b28cd47efcc 100644 --- a/app/views/layouts/_head.html.haml +++ b/app/views/layouts/_head.html.haml @@ -36,7 +36,7 @@ = favicon_link_tag favicon, id: 'favicon', data: { original_href: favicon }, type: 'image/png' - = render 'layouts/startup_css', { startup_filename: local_assigns.fetch(:startup_filename, nil) } + = render 'layouts/startup_css' - if user_application_theme == 'gl-dark' = stylesheet_link_tag_defer "application_dark" = yield :page_specific_styles diff --git a/app/views/layouts/_startup_css.haml b/app/views/layouts/_startup_css.haml index 67c871b95f5..7d3cfe28007 100644 --- a/app/views/layouts/_startup_css.haml +++ b/app/views/layouts/_startup_css.haml @@ -1,5 +1,4 @@ -- startup_filename_default = user_application_theme == 'gl-dark' ? 'dark' : 'general' -- startup_filename = local_assigns.fetch(:startup_filename, nil) || startup_filename_default +- startup_filename = current_path?("sessions#new") ? 'signin' : user_application_theme == 'gl-dark' ? 'dark' : 'general' %style = Rails.application.assets_manifest.find_sources("themes/#{user_application_theme_css_filename}.css").first.to_s.html_safe if user_application_theme_css_filename diff --git a/app/views/layouts/devise.html.haml b/app/views/layouts/devise.html.haml index ae7c160c060..ef61a04c288 100644 --- a/app/views/layouts/devise.html.haml +++ b/app/views/layouts/devise.html.haml @@ -1,6 +1,6 @@ !!! 5 %html.devise-layout-html{ class: system_message_class } - = render "layouts/head", { startup_filename: 'signin' } + = render "layouts/head" %body.ui-indigo.login-page.application.navless{ class: "#{client_class_list}", data: { page: body_data_page, qa_selector: 'login_page' } } = header_message = render "layouts/init_client_detection_flags" diff --git a/app/views/layouts/nav/sidebar/_group.html.haml b/app/views/layouts/nav/sidebar/_group.html.haml index f31e1b718ff..85a47603b51 100644 --- a/app/views/layouts/nav/sidebar/_group.html.haml +++ b/app/views/layouts/nav/sidebar/_group.html.haml @@ -1,5 +1,5 @@ - issues_count = cached_issuables_count(@group, type: :issues) -- merge_requests_count = group_open_merge_requests_count(@group) +- merge_requests_count = cached_issuables_count(@group, type: :merge_requests) - aside_title = @group.subgroup? ? _('Subgroup navigation') : _('Group navigation') %aside.nav-sidebar{ class: ("sidebar-collapsed-desktop" if collapsed_sidebar?), **sidebar_tracking_attributes_by_object(@group), 'aria-label': aside_title } diff --git a/app/views/projects/merge_requests/_awards_block.html.haml b/app/views/projects/merge_requests/_awards_block.html.haml index 09466ed2244..80a58053ff7 100644 --- a/app/views/projects/merge_requests/_awards_block.html.haml +++ b/app/views/projects/merge_requests/_awards_block.html.haml @@ -1,5 +1,5 @@ -.content-block.content-block-small.emoji-list-container.js-noteable-awards +.content-block.emoji-block.emoji-list-container.js-noteable-awards = render 'award_emoji/awards_block', awardable: @merge_request, inline: true, api_awards_path: award_emoji_merge_request_api_path(@merge_request) do - .ml-auto.mt-auto.mb-auto + .ml-auto.gl-my-2 #js-vue-sort-issue-discussions = render "projects/merge_requests/discussion_filter" diff --git a/app/views/shared/issue_type/_emoji_block.html.haml b/app/views/shared/issue_type/_emoji_block.html.haml index ca2749b6bf9..26d30341999 100644 --- a/app/views/shared/issue_type/_emoji_block.html.haml +++ b/app/views/shared/issue_type/_emoji_block.html.haml @@ -4,7 +4,7 @@ .row.gl-m-0.gl-justify-content-space-between .js-noteable-awards = render 'award_emoji/awards_block', awardable: issuable, inline: true, api_awards_path: api_awards_path - .new-branch-col + .new-branch-col.gl-my-2 = render_if_exists "projects/issues/timeline_toggle", issuable: issuable #js-vue-sort-issue-discussions #js-vue-discussion-filter{ data: { default_filter: current_user&.notes_filter_for(issuable), notes_filters: UserPreference.notes_filters.to_json } } diff --git a/app/views/shared/nav/_sidebar_menu.html.haml b/app/views/shared/nav/_sidebar_menu.html.haml index 67c775d1a85..2d1d84706fa 100644 --- a/app/views/shared/nav/_sidebar_menu.html.haml +++ b/app/views/shared/nav/_sidebar_menu.html.haml @@ -15,12 +15,11 @@ %ul.sidebar-sub-level-items{ class: ('is-fly-out-only' unless sidebar_menu.has_renderable_items?) } = nav_link(**sidebar_menu.all_active_routes, html_options: { class: 'fly-out-top-item' } ) do - = link_to sidebar_menu.link, **sidebar_menu.collapsed_container_html_options do - %strong.fly-out-top-item-name - = sidebar_menu.title - - if sidebar_menu.has_pill? - %span.badge.badge-pill.count.fly-out-badge{ **sidebar_menu.pill_html_options } - = number_with_delimiter(sidebar_menu.pill_count) + - if sidebar_refactor_disabled? + = link_to sidebar_menu.link, **sidebar_menu.collapsed_container_html_options do + = render 'shared/nav/sidebar_menu_collapsed', sidebar_menu: sidebar_menu + - else + = render 'shared/nav/sidebar_menu_collapsed', sidebar_menu: sidebar_menu - if sidebar_menu.has_items? %li.divider.fly-out-top-item diff --git a/app/views/shared/nav/_sidebar_menu_collapsed.html.haml b/app/views/shared/nav/_sidebar_menu_collapsed.html.haml new file mode 100644 index 00000000000..78567a991df --- /dev/null +++ b/app/views/shared/nav/_sidebar_menu_collapsed.html.haml @@ -0,0 +1,5 @@ +%strong.fly-out-top-item-name + = sidebar_menu.title +- if sidebar_menu.has_pill? + %span.badge.badge-pill.count.fly-out-badge{ **sidebar_menu.pill_html_options } + = number_with_delimiter(sidebar_menu.pill_count) diff --git a/app/workers/bulk_imports/pipeline_worker.rb b/app/workers/bulk_imports/pipeline_worker.rb index 2547b6bcecb..d3297017714 100644 --- a/app/workers/bulk_imports/pipeline_worker.rb +++ b/app/workers/bulk_imports/pipeline_worker.rb @@ -43,7 +43,7 @@ module BulkImports def run(pipeline_tracker) if ndjson_pipeline?(pipeline_tracker) - status = ExportStatus.new(pipeline_tracker, pipeline_tracker.pipeline_class::RELATION) + status = ExportStatus.new(pipeline_tracker, pipeline_tracker.pipeline_class.relation) raise(Pipeline::ExpiredError, 'Pipeline timeout') if job_timeout?(pipeline_tracker) raise(Pipeline::FailedError, status.error) if status.failed? diff --git a/config/feature_flags/development/cached_sidebar_merge_requests_count.yml b/config/feature_flags/development/cached_sidebar_merge_requests_count.yml deleted file mode 100644 index f542ba6323c..00000000000 --- a/config/feature_flags/development/cached_sidebar_merge_requests_count.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -name: cached_sidebar_merge_requests_count -introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/55971 -rollout_issue_url: -milestone: '13.11' -type: development -group: group::product planning -default_enabled: true diff --git a/db/migrate/20210525184900_add_latest_pipeline_id_into_vulnerability_statistics_table.rb b/db/migrate/20210525184900_add_latest_pipeline_id_into_vulnerability_statistics_table.rb new file mode 100644 index 00000000000..508ad92f9e5 --- /dev/null +++ b/db/migrate/20210525184900_add_latest_pipeline_id_into_vulnerability_statistics_table.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddLatestPipelineIdIntoVulnerabilityStatisticsTable < ActiveRecord::Migration[6.0] + def change + add_column :vulnerability_statistics, :latest_pipeline_id, :bigint + end +end diff --git a/db/migrate/20210526181820_add_index_to_vulnerability_statistics_on_latest_pipeline_id.rb b/db/migrate/20210526181820_add_index_to_vulnerability_statistics_on_latest_pipeline_id.rb new file mode 100644 index 00000000000..dd11b1e6f11 --- /dev/null +++ b/db/migrate/20210526181820_add_index_to_vulnerability_statistics_on_latest_pipeline_id.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class AddIndexToVulnerabilityStatisticsOnLatestPipelineId < ActiveRecord::Migration[6.0] + include Gitlab::Database::MigrationHelpers + + INDEX_NAME = 'index_vulnerability_statistics_on_latest_pipeline_id' + + disable_ddl_transaction! + + def up + add_concurrent_index :vulnerability_statistics, :latest_pipeline_id, name: INDEX_NAME + end + + def down + remove_concurrent_index_by_name :vulnerability_statistics, INDEX_NAME + end +end diff --git a/db/migrate/20210526181821_add_foreign_key_for_latest_pipeline_id_to_ci_pipelines.rb b/db/migrate/20210526181821_add_foreign_key_for_latest_pipeline_id_to_ci_pipelines.rb new file mode 100644 index 00000000000..adcac5e2637 --- /dev/null +++ b/db/migrate/20210526181821_add_foreign_key_for_latest_pipeline_id_to_ci_pipelines.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class AddForeignKeyForLatestPipelineIdToCiPipelines < ActiveRecord::Migration[6.0] + include Gitlab::Database::MigrationHelpers + + disable_ddl_transaction! + + def up + add_concurrent_foreign_key :vulnerability_statistics, :ci_pipelines, column: :latest_pipeline_id, on_delete: :nullify + end + + def down + with_lock_retries do + remove_foreign_key_if_exists :vulnerability_statistics, :ci_pipelines + end + end +end diff --git a/db/schema_migrations/20210525184900 b/db/schema_migrations/20210525184900 new file mode 100644 index 00000000000..5e507e7a363 --- /dev/null +++ b/db/schema_migrations/20210525184900 @@ -0,0 +1 @@ +ae91ea7481ea21ce29b4c0697f77fd83017c36d913739ed67e5c907a48c56f69 \ No newline at end of file diff --git a/db/schema_migrations/20210526181820 b/db/schema_migrations/20210526181820 new file mode 100644 index 00000000000..b21e0c66d2a --- /dev/null +++ b/db/schema_migrations/20210526181820 @@ -0,0 +1 @@ +e72471e63dc108939473232437eda4c718382630c1173ae20023002d382e5ffa \ No newline at end of file diff --git a/db/schema_migrations/20210526181821 b/db/schema_migrations/20210526181821 new file mode 100644 index 00000000000..055ae0886b3 --- /dev/null +++ b/db/schema_migrations/20210526181821 @@ -0,0 +1 @@ +3c53d85bec154ec68a23841d37317d10fa6c7c846bc5f54f5b7876081105ac7b \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index b64f3585342..0d215ee6655 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -19249,7 +19249,8 @@ CREATE TABLE vulnerability_statistics ( low integer DEFAULT 0 NOT NULL, unknown integer DEFAULT 0 NOT NULL, info integer DEFAULT 0 NOT NULL, - letter_grade smallint NOT NULL + letter_grade smallint NOT NULL, + latest_pipeline_id bigint ); CREATE SEQUENCE vulnerability_statistics_id_seq @@ -24869,6 +24870,8 @@ CREATE UNIQUE INDEX index_vulnerability_remediations_on_project_id_and_checksum CREATE UNIQUE INDEX index_vulnerability_scanners_on_project_id_and_external_id ON vulnerability_scanners USING btree (project_id, external_id); +CREATE INDEX index_vulnerability_statistics_on_latest_pipeline_id ON vulnerability_statistics USING btree (latest_pipeline_id); + CREATE INDEX index_vulnerability_statistics_on_letter_grade ON vulnerability_statistics USING btree (letter_grade); CREATE UNIQUE INDEX index_vulnerability_statistics_on_unique_project_id ON vulnerability_statistics USING btree (project_id); @@ -25973,6 +25976,9 @@ ALTER TABLE ONLY sprints ALTER TABLE ONLY application_settings ADD CONSTRAINT fk_e8a145f3a7 FOREIGN KEY (instance_administrators_group_id) REFERENCES namespaces(id) ON DELETE SET NULL; +ALTER TABLE ONLY vulnerability_statistics + ADD CONSTRAINT fk_e8b13c928f FOREIGN KEY (latest_pipeline_id) REFERENCES ci_pipelines(id) ON DELETE SET NULL; + ALTER TABLE ONLY ci_triggers ADD CONSTRAINT fk_e8e10d1964 FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE CASCADE; diff --git a/doc/.vale/gitlab/spelling-exceptions.txt b/doc/.vale/gitlab/spelling-exceptions.txt index 3e0bc041e4f..b890306b7d0 100644 --- a/doc/.vale/gitlab/spelling-exceptions.txt +++ b/doc/.vale/gitlab/spelling-exceptions.txt @@ -295,7 +295,6 @@ keytab keytabs Kibana Kinesis -Klar Knative Kramdown Kroki diff --git a/doc/administration/geo/setup/external_database.md b/doc/administration/geo/setup/external_database.md index 59156bdb1c2..94d823278a5 100644 --- a/doc/administration/geo/setup/external_database.md +++ b/doc/administration/geo/setup/external_database.md @@ -24,11 +24,19 @@ developed and tested. We aim to be compatible with most external sudo -i ``` -1. Edit `/etc/gitlab/gitlab.rb` and add a **unique** ID for your node (arbitrary value): +1. Edit `/etc/gitlab/gitlab.rb` and add: ```ruby - # The unique identifier for the Geo node. - gitlab_rails['geo_node_name'] = '' + ## + ## Geo Primary role + ## - configure dependent flags automatically to enable Geo + ## + roles ['geo_primary_role'] + + ## + ## The unique identifier for the Geo site. + ## + gitlab_rails['geo_node_name'] = '' ``` 1. Reconfigure the **primary** node for the change to take effect: diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md index 01eb7ef2514..a7116c508bb 100644 --- a/doc/api/graphql/reference/index.md +++ b/doc/api/graphql/reference/index.md @@ -83,9 +83,9 @@ Fields related to design management. Returns [`DesignManagement!`](#designmanagement). -### `Query.devopsAdoptionSegments` +### `Query.devopsAdoptionEnabledNamespaces` -Get configured DevOps adoption segments on the instance. **BETA** This endpoint is subject to change without notice. +Get configured DevOps adoption namespaces. **BETA** This endpoint is subject to change without notice. Returns [`DevopsAdoptionSegmentConnection`](#devopsadoptionsegmentconnection). @@ -97,7 +97,7 @@ four standard [pagination arguments](#connection-pagination-arguments): | Name | Type | Description | | ---- | ---- | ----------- | -| `displayNamespaceId` | [`NamespaceID`](#namespaceid) | Filter by display namespace. | +| `displayNamespaceId` | [`NamespaceID`](#namespaceid) | Filter by display namespace. | ### `Query.echo` @@ -758,27 +758,27 @@ Input type: `BoardListUpdateLimitMetricsInput` | `errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. | | `list` | [`BoardList`](#boardlist) | The updated list. | -### `Mutation.bulkFindOrCreateDevopsAdoptionSegments` +### `Mutation.bulkEnableDevopsAdoptionNamespaces` **BETA** This endpoint is subject to change without notice. -Input type: `BulkFindOrCreateDevopsAdoptionSegmentsInput` +Input type: `BulkEnableDevopsAdoptionNamespacesInput` #### Arguments | Name | Type | Description | | ---- | ---- | ----------- | -| `clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. | -| `displayNamespaceId` | [`NamespaceID`](#namespaceid) | Display namespace ID. | -| `namespaceIds` | [`[NamespaceID!]!`](#namespaceid) | List of Namespace IDs for the segments. | +| `clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. | +| `displayNamespaceId` | [`NamespaceID`](#namespaceid) | Display namespace ID. | +| `namespaceIds` | [`[NamespaceID!]!`](#namespaceid) | List of Namespace IDs. | #### Fields | Name | Type | Description | | ---- | ---- | ----------- | -| `clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. | -| `errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. | -| `segments` | [`[DevopsAdoptionSegment!]`](#devopsadoptionsegment) | Created segments after mutation. | +| `clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. | +| `enabledNamespaces` | [`[DevopsAdoptionSegment!]`](#devopsadoptionsegment) | Enabled namespaces after mutation. | +| `errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. | ### `Mutation.ciCdSettingsUpdate` @@ -1094,28 +1094,6 @@ Input type: `CreateCustomEmojiInput` | `customEmoji` | [`CustomEmoji`](#customemoji) | The new custom emoji. | | `errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. | -### `Mutation.createDevopsAdoptionSegment` - -**BETA** This endpoint is subject to change without notice. - -Input type: `CreateDevopsAdoptionSegmentInput` - -#### Arguments - -| Name | Type | Description | -| ---- | ---- | ----------- | -| `clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. | -| `displayNamespaceId` | [`NamespaceID`](#namespaceid) | Display namespace ID. | -| `namespaceId` | [`NamespaceID!`](#namespaceid) | Namespace ID to set for the segment. | - -#### Fields - -| Name | Type | Description | -| ---- | ---- | ----------- | -| `clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. | -| `errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. | -| `segment` | [`DevopsAdoptionSegment`](#devopsadoptionsegment) | The segment after mutation. | - ### `Mutation.createDiffNote` Input type: `CreateDiffNoteInput` @@ -1678,26 +1656,6 @@ Input type: `DeleteAnnotationInput` | `clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. | | `errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. | -### `Mutation.deleteDevopsAdoptionSegment` - -**BETA** This endpoint is subject to change without notice. - -Input type: `DeleteDevopsAdoptionSegmentInput` - -#### Arguments - -| Name | Type | Description | -| ---- | ---- | ----------- | -| `clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. | -| `id` | [`[AnalyticsDevopsAdoptionSegmentID!]!`](#analyticsdevopsadoptionsegmentid) | One or many IDs of the segments to delete. | - -#### Fields - -| Name | Type | Description | -| ---- | ---- | ----------- | -| `clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. | -| `errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. | - ### `Mutation.designManagementDelete` Input type: `DesignManagementDeleteInput` @@ -1914,6 +1872,26 @@ Input type: `DestroySnippetInput` | `errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. | | `snippet` | [`Snippet`](#snippet) | The snippet after mutation. | +### `Mutation.disableDevopsAdoptionNamespace` + +**BETA** This endpoint is subject to change without notice. + +Input type: `DisableDevopsAdoptionNamespaceInput` + +#### Arguments + +| Name | Type | Description | +| ---- | ---- | ----------- | +| `clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. | +| `id` | [`[AnalyticsDevopsAdoptionEnabledNamespaceID!]!`](#analyticsdevopsadoptionenablednamespaceid) | One or many IDs of the enabled namespaces to disable. | + +#### Fields + +| Name | Type | Description | +| ---- | ---- | ----------- | +| `clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. | +| `errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. | + ### `Mutation.discussionToggleResolve` Toggles the resolved state of a discussion. @@ -1961,6 +1939,28 @@ Input type: `DismissVulnerabilityInput` | `errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. | | `vulnerability` | [`Vulnerability`](#vulnerability) | The vulnerability after dismissal. | +### `Mutation.enableDevopsAdoptionNamespace` + +**BETA** This endpoint is subject to change without notice. + +Input type: `EnableDevopsAdoptionNamespaceInput` + +#### Arguments + +| Name | Type | Description | +| ---- | ---- | ----------- | +| `clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. | +| `displayNamespaceId` | [`NamespaceID`](#namespaceid) | Display namespace ID. | +| `namespaceId` | [`NamespaceID!`](#namespaceid) | Namespace ID. | + +#### Fields + +| Name | Type | Description | +| ---- | ---- | ----------- | +| `clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. | +| `enabledNamespace` | [`DevopsAdoptionSegment`](#devopsadoptionsegment) | Enabled namespace after mutation. | +| `errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. | + ### `Mutation.environmentsCanaryIngressUpdate` Input type: `EnvironmentsCanaryIngressUpdateInput` @@ -3569,6 +3569,26 @@ Input type: `RunDASTScanInput` | `errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. | | `pipelineUrl` | [`String`](#string) | URL of the pipeline that was created. | +### `Mutation.runnerDelete` + +Available only when feature flag `runner_graphql_query` is enabled. + +Input type: `RunnerDeleteInput` + +#### Arguments + +| Name | Type | Description | +| ---- | ---- | ----------- | +| `clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. | +| `id` | [`CiRunnerID!`](#cirunnerid) | ID of the runner to delete. | + +#### Fields + +| Name | Type | Description | +| ---- | ---- | ----------- | +| `clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. | +| `errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. | + ### `Mutation.runnerUpdate` Available only when feature flag `runner_graphql_query` is enabled. @@ -8271,15 +8291,15 @@ four standard [pagination arguments](#connection-pagination-arguments): ### `DevopsAdoptionSegment` -Segment. +Enabled namespace for DevopsAdoption. #### Fields | Name | Type | Description | | ---- | ---- | ----------- | | `displayNamespace` | [`Namespace`](#namespace) | Namespace where data should be displayed. | -| `id` | [`ID!`](#id) | ID of the segment. | -| `latestSnapshot` | [`DevopsAdoptionSnapshot`](#devopsadoptionsnapshot) | The latest adoption metrics for the segment. | +| `id` | [`ID!`](#id) | ID of the enabled namespace. | +| `latestSnapshot` | [`DevopsAdoptionSnapshot`](#devopsadoptionsnapshot) | The latest adoption metrics for the enabled namespace. | | `namespace` | [`Namespace`](#namespace) | Namespace which should be calculated. | ### `DevopsAdoptionSnapshot` @@ -15010,11 +15030,11 @@ A `AlertManagementHttpIntegrationID` is a global ID. It is encoded as a string. An example `AlertManagementHttpIntegrationID` is: `"gid://gitlab/AlertManagement::HttpIntegration/1"`. -### `AnalyticsDevopsAdoptionSegmentID` +### `AnalyticsDevopsAdoptionEnabledNamespaceID` -A `AnalyticsDevopsAdoptionSegmentID` is a global ID. It is encoded as a string. +A `AnalyticsDevopsAdoptionEnabledNamespaceID` is a global ID. It is encoded as a string. -An example `AnalyticsDevopsAdoptionSegmentID` is: `"gid://gitlab/Analytics::DevopsAdoption::Segment/1"`. +An example `AnalyticsDevopsAdoptionEnabledNamespaceID` is: `"gid://gitlab/Analytics::DevopsAdoption::EnabledNamespace/1"`. ### `AwardableID` diff --git a/doc/api/vulnerability_exports.md b/doc/api/vulnerability_exports.md index f70662c7c61..6d01d7e7d96 100644 --- a/doc/api/vulnerability_exports.md +++ b/doc/api/vulnerability_exports.md @@ -199,13 +199,13 @@ Example response: ```csv Group Name,Project Name,Scanner Type,Scanner Name,Status,Vulnerability,Details,Additional Info,Severity,CVE,CWE,Other Identifiers -Gitlab.org,Defend,container_scanning,Clair,detected,CVE-2017-16997 in glibc,,CVE-2017-16997 in glibc,critical,CVE-2017-16997 -Gitlab.org,Defend,container_scanning,Clair,detected,CVE-2017-18269 in glibc,,CVE-2017-18269 in glibc,critical,CVE-2017-18269 -Gitlab.org,Defend,container_scanning,Clair,detected,CVE-2018-1000001 in glibc,,CVE-2018-1000001 in glibc,high,CVE-2018-1000001 -Gitlab.org,Defend,container_scanning,Clair,detected,CVE-2016-10228 in glibc,,CVE-2016-10228 in glibc,medium,CVE-2016-10228 -Gitlab.org,Defend,container_scanning,Clair,detected,CVE-2010-4052 in glibc,,CVE-2010-4052 in glibc,low,CVE-2010-4052 -Gitlab.org,Defend,container_scanning,Clair,detected,CVE-2018-18520 in elfutils,,CVE-2018-18520 in elfutils,low,CVE-2018-18520 -Gitlab.org,Defend,container_scanning,Clair,detected,CVE-2018-16869 in nettle,,CVE-2018-16869 in nettle,unknown,CVE-2018-16869,CWE-1 +Gitlab.org,Defend,container_scanning,Trivy,detected,CVE-2017-16997 in glibc,,CVE-2017-16997 in glibc,critical,CVE-2017-16997 +Gitlab.org,Defend,container_scanning,Trivy,detected,CVE-2017-18269 in glibc,,CVE-2017-18269 in glibc,critical,CVE-2017-18269 +Gitlab.org,Defend,container_scanning,Trivy,detected,CVE-2018-1000001 in glibc,,CVE-2018-1000001 in glibc,high,CVE-2018-1000001 +Gitlab.org,Defend,container_scanning,Trivy,detected,CVE-2016-10228 in glibc,,CVE-2016-10228 in glibc,medium,CVE-2016-10228 +Gitlab.org,Defend,container_scanning,Trivy,detected,CVE-2010-4052 in glibc,,CVE-2010-4052 in glibc,low,CVE-2010-4052 +Gitlab.org,Defend,container_scanning,Trivy,detected,CVE-2018-18520 in elfutils,,CVE-2018-18520 in elfutils,low,CVE-2018-18520 +Gitlab.org,Defend,container_scanning,Trivy,detected,CVE-2018-16869 in nettle,,CVE-2018-16869 in nettle,unknown,CVE-2018-16869,CWE-1 Gitlab.org,Defend,dependency_scanning,Gemnasium,detected,Regular Expression Denial of Service in debug,,Regular Expression Denial of Service in debug,unknown,CVE-2021-1234,CWE-2,"""yarn.lock:debug:gemnasium:37283ed4-0380-40d7-ada7-2d994afcc62a""" Gitlab.org,Defend,dependency_scanning,Gemnasium,detected,Authentication bypass via incorrect DOM traversal and canonicalization in saml2-js,,Authentication bypass via incorrect DOM traversal and canonicalization in saml2-js,unknown,,,"""yarn.lock:saml2-js:gemnasium:9952e574-7b5b-46fa-a270-aeb694198a98""" Gitlab.org,Defend,sast,Find Security Bugs,detected,Predictable pseudorandom number generator,,Predictable pseudorandom number generator,medium,,,"""818bf5dacb291e15d9e6dc3c5ac32178:PREDICTABLE_RANDOM:src/main/java/com/gitlab/security_products/tests/App.java:47""" diff --git a/doc/policy/maintenance.md b/doc/policy/maintenance.md index 217618c1771..3a5cd4cd3b3 100644 --- a/doc/policy/maintenance.md +++ b/doc/policy/maintenance.md @@ -149,6 +149,8 @@ This decision is made on a case-by-case basis. ## More information -More information about the release procedures can be found in our -[release documentation](https://gitlab.com/gitlab-org/release/docs). You may also want to read our -[Responsible Disclosure Policy](https://about.gitlab.com/security/disclosure/). +You may also want to read our: + +- [Release documentation](https://gitlab.com/gitlab-org/release/docs) describing release procedures +- [Deprecation guidelines](../development/deprecation_guidelines/index.md) +- [Responsible Disclosure Policy](https://about.gitlab.com/security/disclosure/) diff --git a/doc/subscriptions/bronze_starter.md b/doc/subscriptions/bronze_starter.md index a705306f3aa..66ab61e48b8 100644 --- a/doc/subscriptions/bronze_starter.md +++ b/doc/subscriptions/bronze_starter.md @@ -10,7 +10,9 @@ Although GitLab has discontinued selling the Bronze and Starter tiers, GitLab continues to honor the entitlements of existing Bronze and Starter tier GitLab customers for the duration of their contracts at that level. -These features remain available to Bronze and Starter customers, even though +New paid features will not be released in Bronze and Starter tiers after GitLab 13.9. + +The following features remain available to Bronze and Starter customers, even though the tiers are no longer mentioned in GitLab documentation: - [Activate GitLab EE with a license](../user/admin_area/license.md) diff --git a/doc/topics/autodevops/stages.md b/doc/topics/autodevops/stages.md index 66b37f30bbc..68889dab588 100644 --- a/doc/topics/autodevops/stages.md +++ b/doc/topics/autodevops/stages.md @@ -208,9 +208,9 @@ documentation. ## Auto Container Scanning **(ULTIMATE)** -Vulnerability Static Analysis for containers uses either [Clair](https://github.com/quay/clair) -or [Trivy](https://aquasecurity.github.io/trivy/latest/) to check for potential security issues in -Docker images. The Auto Container Scanning stage is skipped on licenses other than [Ultimate](https://about.gitlab.com/pricing/). +Vulnerability static analysis for containers uses [Trivy](https://aquasecurity.github.io/trivy/latest/) +to check for potential security issues in Docker images. The Auto Container Scanning stage is +skipped on licenses other than [Ultimate](https://about.gitlab.com/pricing/). After creating the report, it's uploaded as an artifact which you can later download and check out. The merge request displays any detected security issues. diff --git a/doc/user/analytics/value_stream_analytics.md b/doc/user/analytics/value_stream_analytics.md index c311317b909..c3b3fcba52e 100644 --- a/doc/user/analytics/value_stream_analytics.md +++ b/doc/user/analytics/value_stream_analytics.md @@ -45,11 +45,9 @@ The stages tracked by Value Stream Analytics by default represent the [GitLab fl ### Date ranges -To filter analytics results based on a date range, select one of these options: - -- **Last 7 days** -- **Last 30 days** (default) -- **Last 90 days** +To filter analytics results based on a date range, +select different **From** and **To** days +from the date picker (default: last 30 days). ## How Time metrics are measured diff --git a/doc/user/application_security/container_scanning/index.md b/doc/user/application_security/container_scanning/index.md index 2246a66a683..dcaefd39dde 100644 --- a/doc/user/application_security/container_scanning/index.md +++ b/doc/user/application_security/container_scanning/index.md @@ -46,12 +46,7 @@ To enable container scanning in your pipeline, you need the following: or [`kubernetes`](https://docs.gitlab.com/runner/install/kubernetes.html) executor. - Docker `18.09.03` or higher installed on the same computer as the runner. If you're using the shared runners on GitLab.com, then this is already the case. -- An image matching the following supported distributions (depending on the scanner being used): - - | Scanning Engine | Supported distributions | - | --- | --- | - | [Trivy](https://github.com/aquasecurity/trivy) | Supported [operating systems](https://aquasecurity.github.io/trivy/latest/vuln-detection/os/) and [languages](https://aquasecurity.github.io/trivy/latest/vuln-detection/library/) | - +- An image matching the [supported distributions](https://aquasecurity.github.io/trivy/latest/vuln-detection/os/)). - [Build and push](../../packages/container_registry/index.md#build-and-push-by-using-gitlab-cicd) your Docker image to your project's container registry. The name of the Docker image should use the following [predefined CI/CD variables](../../../ci/variables/predefined_variables.md): @@ -98,14 +93,16 @@ How you enable container scanning depends on your GitLab version: variable. - GitLab 13.9 [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/322656) integration with [Trivy](https://github.com/aquasecurity/trivy) by upgrading `CS_MAJOR_VERSION` from `3` to `4`. -- GitLab 14.0 makes Trivy the default scanner. +- GitLab 14.0 [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/61850) + integration with [Trivy](https://github.com/aquasecurity/trivy) + as the default for container scanning. To include the `Container-Scanning.gitlab-ci.yml` template (GitLab 11.9 and later), add the following to your `.gitlab-ci.yml` file: ```yaml include: - - template: Container-Scanning.gitlab-ci.yml + - template: Security/Container-Scanning.gitlab-ci.yml ``` The included template: @@ -144,7 +141,7 @@ build: - docker push $IMAGE include: - - template: Container-Scanning.gitlab-ci.yml + - template: Security/Container-Scanning.gitlab-ci.yml ``` ### Customizing the container scanning settings @@ -161,7 +158,7 @@ enables verbose output for the analyzer: ```yaml include: - - template: Container-Scanning.gitlab-ci.yml + - template: Security/Container-Scanning.gitlab-ci.yml variables: SECURE_LOG_LEVEL: 'debug' @@ -169,7 +166,7 @@ variables: #### Available CI/CD variables -You can [configure](#customizing-the-container-scanning-settings) both analyzers by using the following CI/CD variables: +You can [configure](#customizing-the-container-scanning-settings) analyzers by using the following CI/CD variables: | CI/CD Variable | Default | Description | Scanner | | ------------------------------ | ------------- | ----------- | ------------ | @@ -195,7 +192,7 @@ This example sets `GIT_STRATEGY` to `fetch`: ```yaml include: - - template: Container-Scanning.gitlab-ci.yml + - template: Security/Container-Scanning.gitlab-ci.yml container_scanning: variables: @@ -224,7 +221,7 @@ your CI file: offline environment, see [Running container scanning in an offline environment](#running-container-scanning-in-an-offline-environment). -1. If present, remove the `.cs_common` configuration section. +1. If present, remove the `.cs_common` and `container_scanning_new` configuration sections. 1. If the `container_scanning` section is present, it's safer to create one from scratch based on the new version of the [`Container-Scanning.gitlab-ci.yml` template](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Security/Container-Scanning.gitlab-ci.yml). @@ -408,7 +405,7 @@ For details on saving and transporting Docker images as a file, see Docker's doc ```yaml include: - - template: Container-Scanning.gitlab-ci.yml + - template: Security/Container-Scanning.gitlab-ci.yml container_scanning: image: $CI_REGISTRY/namespace/gitlab-container-scanning @@ -432,7 +429,7 @@ variables: image: docker:stable -update-vulnerabilities-db: +update-scanner-image: services: - docker:19-dind script: @@ -574,8 +571,8 @@ the security vulnerabilities in your groups, projects and pipelines. ## Vulnerabilities database update -If you're using Klar and want more information about the vulnerabilities database update, see the -[maintenance table](../vulnerabilities/index.md#vulnerability-scanner-maintenance). +If you use container scanning and want more information about the vulnerabilities database update, +see the [maintenance table](../vulnerabilities/index.md#vulnerability-scanner-maintenance). ## Interacting with the vulnerabilities diff --git a/doc/user/application_security/terminology/index.md b/doc/user/application_security/terminology/index.md index bc1334db78b..ce30accfb4d 100644 --- a/doc/user/application_security/terminology/index.md +++ b/doc/user/application_security/terminology/index.md @@ -101,7 +101,7 @@ of the finding's [first identifier](https://gitlab.com/gitlab-org/security-produ combine to create the value. Examples of primary identifiers include `PluginID` for OWASP Zed Attack Proxy (ZAP), or `CVE` for -Klar. Note that the identifier must be stable. Subsequent scans must return the same value for the +Trivy. Note that the identifier must be stable. Subsequent scans must return the same value for the same finding, even if the location has slightly changed. ### Report finding @@ -122,7 +122,7 @@ The type of scan. This must be one of the following: ### Scanner Software that can scan for vulnerabilities. The resulting scan report is typically not in the -[Secure report format](#secure-report-format). Examples include ESLint, Klar, and ZAP. +[Secure report format](#secure-report-format). Examples include ESLint, Trivy, and ZAP. ### Secure product diff --git a/doc/user/group/import/index.md b/doc/user/group/import/index.md index 42fa52df555..c63d43983a1 100644 --- a/doc/user/group/import/index.md +++ b/doc/user/group/import/index.md @@ -69,6 +69,8 @@ The following resources are migrated to the target instance: - name - link URL - image URL +- Boards +- Board Lists Any other items are **not** migrated. diff --git a/doc/user/group/value_stream_analytics/index.md b/doc/user/group/value_stream_analytics/index.md index 4b473c9217d..01c6c3dcf37 100644 --- a/doc/user/group/value_stream_analytics/index.md +++ b/doc/user/group/value_stream_analytics/index.md @@ -104,7 +104,7 @@ Each stage of Value Stream Analytics is further described in the table below. | **Stage** | **Description** | | --------- | --------------- | -| Issue | Measures the median time between creating an issue and taking action to solve it, by either labeling it or adding it to a milestone, whatever comes first. The label will be tracked only if it already has an [Issue Board list](../../project/issue_board.md) created for it. | +| Issue | Measures the median time between creating an issue and taking action to solve it, by either labeling it or adding it to a milestone, whatever comes first. The label is tracked only if it already has an [Issue Board list](../../project/issue_board.md) created for it. | | Plan | Measures the median time between the action you took for the previous stage, and pushing the first commit to the branch. The very first commit of the branch is the one that triggers the separation between **Plan** and **Code**, and at least one of the commits in the branch needs to contain the related issue number (e.g., `#42`). If none of the commits in the branch mention the related issue number, it is not considered to the measurement time of the stage. | | Code | Measures the median time between pushing a first commit (previous stage) and creating a merge request (MR) related to that commit. The key to keep the process tracked is to include the [issue closing pattern](../../project/issues/managing_issues.md#closing-issues-automatically) to the description of the merge request (for example, `Closes #xxx`, where `xxx` is the number of the issue related to this merge request). If the closing pattern is not present, then the calculation takes the creation time of the first commit in the merge request as the start time. | | Test | Measures the median time to run the entire pipeline for that project. It's related to the time GitLab CI/CD takes to run every job for the commits pushed to that merge request defined in the previous stage. It is basically the start->finish time for all pipelines. | diff --git a/doc/user/project/merge_requests/reviews/index.md b/doc/user/project/merge_requests/reviews/index.md index 6f79796ff26..317202e9303 100644 --- a/doc/user/project/merge_requests/reviews/index.md +++ b/doc/user/project/merge_requests/reviews/index.md @@ -360,32 +360,7 @@ All the above can be done with the [`git-mr`](https://gitlab.com/glensc/git-mr) ## Cached merge request count > - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/299542) in GitLab 13.11. -> - It's [deployed behind a feature flag](../../../feature_flags.md), enabled by default. -> - It's enabled on GitLab.com. -> - It's recommended for production use. -> - For GitLab self-managed instances, GitLab administrators can opt to [disable it](#enable-or-disable-cached-merge-request-count). - -WARNING: -This feature might not be available to you. Refer to the previous **version history** note for details. +> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/327319) in GitLab 14.0. In a group, the sidebar displays the total count of open merge requests. This value is cached if it's greater than than 1000. The cached value is rounded to thousands (or millions) and updated every 24 hours. - -### Enable or disable cached merge request count **(FREE SELF)** - -Cached merge request count in the left sidebar is under development but ready for production use. It is -deployed behind a feature flag that is **enabled by default**. -[GitLab administrators with access to the GitLab Rails console](../../../../administration/feature_flags.md) -can disable it. - -To disable it: - -```ruby -Feature.disable(:cached_sidebar_merge_requests_count) -``` - -To enable it: - -```ruby -Feature.enable(:cached_sidebar_merge_requests_count) -``` diff --git a/lib/bulk_imports/groups/pipelines/boards_pipeline.rb b/lib/bulk_imports/groups/pipelines/boards_pipeline.rb new file mode 100644 index 00000000000..08a0a4abc9f --- /dev/null +++ b/lib/bulk_imports/groups/pipelines/boards_pipeline.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module BulkImports + module Groups + module Pipelines + class BoardsPipeline + include NdjsonPipeline + + relation_name 'boards' + + extractor ::BulkImports::Common::Extractors::NdjsonExtractor, relation: relation + end + end + end +end diff --git a/lib/bulk_imports/groups/pipelines/labels_pipeline.rb b/lib/bulk_imports/groups/pipelines/labels_pipeline.rb index 806db68e5d1..1dd74c10b65 100644 --- a/lib/bulk_imports/groups/pipelines/labels_pipeline.rb +++ b/lib/bulk_imports/groups/pipelines/labels_pipeline.rb @@ -6,34 +6,9 @@ module BulkImports class LabelsPipeline include NdjsonPipeline - RELATION = 'labels' + relation_name 'labels' - extractor ::BulkImports::Common::Extractors::NdjsonExtractor, relation: RELATION - - def transform(context, data) - relation_hash = data.first - relation_index = data.last - relation_definition = import_export_config.top_relation_tree(RELATION) - - deep_transform_relation!(relation_hash, RELATION, relation_definition) do |key, hash| - Gitlab::ImportExport::Group::RelationFactory.create( - relation_index: relation_index, - relation_sym: key.to_sym, - relation_hash: hash, - importable: context.portable, - members_mapper: nil, - object_builder: object_builder, - user: context.current_user, - excluded_keys: import_export_config.relation_excluded_keys(key) - ) - end - end - - def load(_, label) - return unless label - - label.save! unless label.persisted? - end + extractor ::BulkImports::Common::Extractors::NdjsonExtractor, relation: relation end end end diff --git a/lib/bulk_imports/groups/pipelines/milestones_pipeline.rb b/lib/bulk_imports/groups/pipelines/milestones_pipeline.rb index 9b2be30735c..b2bd14952e7 100644 --- a/lib/bulk_imports/groups/pipelines/milestones_pipeline.rb +++ b/lib/bulk_imports/groups/pipelines/milestones_pipeline.rb @@ -4,26 +4,11 @@ module BulkImports module Groups module Pipelines class MilestonesPipeline - include Pipeline + include NdjsonPipeline - extractor BulkImports::Common::Extractors::GraphqlExtractor, - query: BulkImports::Groups::Graphql::GetMilestonesQuery + relation_name 'milestones' - transformer Common::Transformers::ProhibitedAttributesTransformer - - def load(context, data) - return unless data - - raise ::BulkImports::Pipeline::NotAllowedError unless authorized? - - context.group.milestones.create!(data) - end - - private - - def authorized? - context.current_user.can?(:admin_milestone, context.group) - end + extractor ::BulkImports::Common::Extractors::NdjsonExtractor, relation: relation end end end diff --git a/lib/bulk_imports/ndjson_pipeline.rb b/lib/bulk_imports/ndjson_pipeline.rb index 4f5f94c30b8..2de06bbcb88 100644 --- a/lib/bulk_imports/ndjson_pipeline.rb +++ b/lib/bulk_imports/ndjson_pipeline.rb @@ -9,6 +9,30 @@ module BulkImports included do ndjson_pipeline! + def transform(context, data) + relation_hash, relation_index = data + relation_definition = import_export_config.top_relation_tree(relation) + + deep_transform_relation!(relation_hash, relation, relation_definition) do |key, hash| + Gitlab::ImportExport::Group::RelationFactory.create( + relation_index: relation_index, + relation_sym: key.to_sym, + relation_hash: hash, + importable: context.portable, + members_mapper: members_mapper, + object_builder: object_builder, + user: context.current_user, + excluded_keys: import_export_config.relation_excluded_keys(key) + ) + end + end + + def load(_, object) + return unless object + + object.save! unless object.persisted? + end + def deep_transform_relation!(relation_hash, relation_key, relation_definition, &block) relation_key = relation_key_override(relation_key) @@ -58,6 +82,18 @@ module BulkImports def object_builder "Gitlab::ImportExport::#{portable.class}::ObjectBuilder".constantize end + + def relation + self.class.relation + end + + def members_mapper + @members_mapper ||= Gitlab::ImportExport::MembersMapper.new( + exported_members: [], + user: current_user, + importable: portable + ) + end end end end diff --git a/lib/bulk_imports/pipeline.rb b/lib/bulk_imports/pipeline.rb index 24aa7482974..f27818dae18 100644 --- a/lib/bulk_imports/pipeline.rb +++ b/lib/bulk_imports/pipeline.rb @@ -30,6 +30,10 @@ module BulkImports @import_export_config ||= context.import_export_config end + def current_user + @current_user ||= context.current_user + end + included do private @@ -174,6 +178,14 @@ module BulkImports class_attributes[:ndjson_pipeline] end + def relation_name(name) + class_attributes[:relation_name] = name + end + + def relation + class_attributes[:relation_name] + end + private def add_attribute(sym, klass, options) diff --git a/lib/bulk_imports/stage.rb b/lib/bulk_imports/stage.rb index 35b77240ea7..bc7fc14b5a0 100644 --- a/lib/bulk_imports/stage.rb +++ b/lib/bulk_imports/stage.rb @@ -29,9 +29,13 @@ module BulkImports pipeline: BulkImports::Groups::Pipelines::BadgesPipeline, stage: 1 }, + boards: { + pipeline: BulkImports::Groups::Pipelines::BoardsPipeline, + stage: 2 + }, finisher: { pipeline: BulkImports::Groups::Pipelines::EntityFinisher, - stage: 2 + stage: 3 } }.freeze diff --git a/lib/gitlab/auth.rb b/lib/gitlab/auth.rb index 4489fc9f3b2..d2261148b21 100644 --- a/lib/gitlab/auth.rb +++ b/lib/gitlab/auth.rb @@ -371,7 +371,9 @@ module Gitlab end def find_build_by_token(token) - ::Ci::AuthJobFinder.new(token: token).execute + ::Gitlab::Database::LoadBalancing::Session.current.use_primary do + ::Ci::AuthJobFinder.new(token: token).execute + end end def user_auth_attempt!(user, success:) diff --git a/lib/gitlab/ci/parsers/test/junit.rb b/lib/gitlab/ci/parsers/test/junit.rb index 200e58ffc50..a5cea386b34 100644 --- a/lib/gitlab/ci/parsers/test/junit.rb +++ b/lib/gitlab/ci/parsers/test/junit.rb @@ -70,6 +70,8 @@ module Gitlab elsif data.key?('error') status = ::Gitlab::Ci::Reports::TestCase::STATUS_ERROR system_output = data['error'] + attachment = attachment_path(data['system_out']) + attachment = remove_project_prefix(attachment, job) elsif data.key?('skipped') status = ::Gitlab::Ci::Reports::TestCase::STATUS_SKIPPED system_output = data['skipped'] diff --git a/package.json b/package.json index ef4b3dcb4ab..25ff42eae2e 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,6 @@ "scripts": { "check-dependencies": "scripts/frontend/check_dependencies.sh", "block-dependencies": "node scripts/frontend/block_dependencies.js", - "check:startup_css": "scripts/frontend/startup_css/startup_css_changed.sh", "clean": "rm -rf public/assets tmp/cache/*-loader", "dev-server": "NODE_OPTIONS=\"--max-old-space-size=3584\" node scripts/frontend/webpack_dev_server.js", "file-coverage": "scripts/frontend/file_test_coverage.js", diff --git a/scripts/frontend/startup_css/constants.js b/scripts/frontend/startup_css/constants.js index a76092f8b45..9b9dc522a8f 100644 --- a/scripts/frontend/startup_css/constants.js +++ b/scripts/frontend/startup_css/constants.js @@ -27,6 +27,7 @@ const CSS_TO_REMOVE = [ /\.commit/, /\.md/, /\.with-performance-bar/, + /\.identicon/, ]; const APPLICATION_CSS_PREFIX = 'application'; const APPLICATION_DARK_CSS_PREFIX = 'application_dark'; @@ -35,55 +36,49 @@ const UTILITIES_DARK_CSS_PREFIX = 'application_utilities_dark'; // paths ----------------------------------------------------------------------- const ROOT = path.resolve(__dirname, '../../..'); -const ROOT_RAILS = IS_EE ? path.join(ROOT, 'ee') : ROOT; const FIXTURES_FOLDER_NAME = IS_EE ? 'fixtures-ee' : 'fixtures'; const FIXTURES_ROOT = path.join(ROOT, 'tmp/tests/frontend', FIXTURES_FOLDER_NAME); const PATH_SIGNIN_HTML = path.join(FIXTURES_ROOT, 'startup_css/sign-in.html'); const PATH_ASSETS = path.join(ROOT, 'tmp/startup_css_assets'); -const PATH_STARTUP_SCSS = path.join(ROOT_RAILS, 'app/assets/stylesheets/startup'); - -// helpers --------------------------------------------------------------------- -const createMainOutput = ({ outFile, cssKeys, type }) => ({ - outFile, - htmlPaths: [ - path.join(FIXTURES_ROOT, `startup_css/project-${type}.html`), - path.join(FIXTURES_ROOT, `startup_css/project-${type}-legacy-menu.html`), - path.join(FIXTURES_ROOT, `startup_css/project-${type}-legacy-sidebar.html`), - path.join(FIXTURES_ROOT, `startup_css/project-${type}-signed-out.html`), - ], - cssKeys, - purgeOptions: { - safelist: { - standard: [ - 'page-with-icon-sidebar', - 'sidebar-collapsed-desktop', - // We want to include the root dropdown-menu style since it should be hidden by default - 'dropdown-menu', - ], - // We want to include the identicon backgrounds - greedy: [/^bg[0-9]$/], +const PATH_STARTUP_SCSS = path.join(ROOT, 'app/assets/stylesheets/startup'); +const OUTPUTS = [ + { + outFile: 'startup-general', + htmlPaths: [ + path.join(FIXTURES_ROOT, 'startup_css/project-general.html'), + path.join(FIXTURES_ROOT, 'startup_css/project-general-legacy-menu.html'), + path.join(FIXTURES_ROOT, 'startup_css/project-general-signed-out.html'), + ], + cssKeys: [APPLICATION_CSS_PREFIX, UTILITIES_CSS_PREFIX], + // We want to include the root dropdown-menu style since it should be hidden by default + purgeOptions: { + safelist: { + standard: ['dropdown-menu'], + }, }, }, -}); - -const OUTPUTS = [ - createMainOutput({ - type: 'general', - outFile: 'startup-general', - cssKeys: [APPLICATION_CSS_PREFIX, UTILITIES_CSS_PREFIX], - }), - createMainOutput({ - type: 'dark', + { outFile: 'startup-dark', + htmlPaths: [ + path.join(FIXTURES_ROOT, 'startup_css/project-dark.html'), + path.join(FIXTURES_ROOT, 'startup_css/project-dark-legacy-menu.html'), + path.join(FIXTURES_ROOT, 'startup_css/project-dark-signed-out.html'), + ], cssKeys: [APPLICATION_DARK_CSS_PREFIX, UTILITIES_DARK_CSS_PREFIX], - }), + // We want to include the root dropdown-menu styles since it should be hidden by default + purgeOptions: { + safelist: { + standard: ['dropdown-menu'], + }, + }, + }, { outFile: 'startup-signin', htmlPaths: [PATH_SIGNIN_HTML], cssKeys: [APPLICATION_CSS_PREFIX, UTILITIES_CSS_PREFIX], purgeOptions: { safelist: { - standard: ['fieldset', 'hidden'], + standard: ['fieldset'], deep: [/login-page$/], }, }, diff --git a/scripts/frontend/startup_css/startup_css_changed.sh b/scripts/frontend/startup_css/startup_css_changed.sh deleted file mode 100755 index b1df97f2f42..00000000000 --- a/scripts/frontend/startup_css/startup_css_changed.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/sh - -echo "-----------------------------------------------------------" -echo "If you are run into any issues with Startup CSS generation," -echo "please check out the feedback issue:" -echo "" -echo "https://gitlab.com/gitlab-org/gitlab/-/issues/331812" -echo "-----------------------------------------------------------" - -startup_glob="*stylesheets/startup*" - -echo "Staging changes to '${startup_glob}' so we can check for untracked files..." -git add ${startup_glob} - -if [ -n "$(git diff HEAD --name-only -- ${startup_glob})" ]; then - diff=$(git diff HEAD -- ${startup_glob}) - cat < { // https://gitlab.com/gitlab-org/gitlab/-/issues/331812 @charset "UTF-8"; ${raw} -@import 'startup/cloaking'; +@import 'cloaking'; @include cloak-startup-scss(none); `; diff --git a/spec/features/issues/user_interacts_with_awards_spec.rb b/spec/features/issues/user_interacts_with_awards_spec.rb index bbb7e8a028d..2921eea7641 100644 --- a/spec/features/issues/user_interacts_with_awards_spec.rb +++ b/spec/features/issues/user_interacts_with_awards_spec.rb @@ -62,11 +62,11 @@ RSpec.describe 'User interacts with awards' do page.within('.awards') do expect(page).to have_selector('[data-testid="award-button"]') - expect(page.find('[data-testid="award-button"].is-active .js-counter')).to have_content('1') - expect(page).to have_css('[data-testid="award-button"].is-active[title="You"]') + expect(page.find('[data-testid="award-button"].selected .js-counter')).to have_content('1') + expect(page).to have_css('[data-testid="award-button"].selected[title="You"]') expect do - page.find('[data-testid="award-button"].is-active').click + page.find('[data-testid="award-button"].selected').click wait_for_requests end.to change { page.all('[data-testid="award-button"]').size }.from(3).to(2) end @@ -205,7 +205,7 @@ RSpec.describe 'User interacts with awards' do it 'adds award to issue' do first('[data-testid="award-button"]').click - expect(page).to have_selector('[data-testid="award-button"].is-active') + expect(page).to have_selector('[data-testid="award-button"].selected') expect(first('[data-testid="award-button"]')).to have_content '1' visit project_issue_path(project, issue) @@ -215,7 +215,7 @@ RSpec.describe 'User interacts with awards' do it 'removes award from issue' do first('[data-testid="award-button"]').click - find('[data-testid="award-button"].is-active').click + find('[data-testid="award-button"].selected').click expect(first('[data-testid="award-button"]')).to have_content '0' diff --git a/spec/features/merge_request/user_awards_emoji_spec.rb b/spec/features/merge_request/user_awards_emoji_spec.rb index 6f46cc20cba..240b8f996c8 100644 --- a/spec/features/merge_request/user_awards_emoji_spec.rb +++ b/spec/features/merge_request/user_awards_emoji_spec.rb @@ -18,7 +18,7 @@ RSpec.describe 'Merge request > User awards emoji', :js do it 'adds award to merge request' do first('[data-testid="award-button"]').click - expect(page).to have_selector('[data-testid="award-button"].is-active') + expect(page).to have_selector('[data-testid="award-button"].selected') expect(first('[data-testid="award-button"]')).to have_content '1' visit project_merge_request_path(project, merge_request) @@ -27,7 +27,7 @@ RSpec.describe 'Merge request > User awards emoji', :js do it 'removes award from merge request' do first('[data-testid="award-button"]').click - find('[data-testid="award-button"].is-active').click + find('[data-testid="award-button"].selected').click expect(first('[data-testid="award-button"]')).to have_content '0' visit project_merge_request_path(project, merge_request) diff --git a/spec/fixtures/bulk_imports/boards.ndjson b/spec/fixtures/bulk_imports/boards.ndjson new file mode 100644 index 00000000000..a3e28584ff5 --- /dev/null +++ b/spec/fixtures/bulk_imports/boards.ndjson @@ -0,0 +1 @@ +{"id":173,"project_id":null,"created_at":"2020-02-11T14:35:51.561Z","updated_at":"2020-02-11T14:35:51.561Z","name":"first board","milestone_id":null,"group_id":4351,"weight":null,"lists":[{"id":189,"board_id":173,"label_id":271,"list_type":"label","position":0,"created_at":"2020-02-11T14:35:57.131Z","updated_at":"2020-02-11T14:35:57.131Z","user_id":null,"milestone_id":null,"max_issue_count":0,"max_issue_weight":0,"label":{"id":271,"title":"TSL","color":"#58796f","project_id":null,"created_at":"2019-11-20T17:02:20.541Z","updated_at":"2020-02-06T15:44:52.048Z","template":false,"description":null,"group_id":4351,"type":"GroupLabel","priorities":[]},"board":{"id":173,"project_id":null,"created_at":"2020-02-11T14:35:51.561Z","updated_at":"2020-02-11T14:35:51.561Z","name":"hi","milestone_id":null,"group_id":4351,"weight":null}},{"id":190,"board_id":173,"label_id":272,"list_type":"label","position":1,"created_at":"2020-02-11T14:35:57.868Z","updated_at":"2020-02-11T14:35:57.868Z","user_id":null,"milestone_id":null,"max_issue_count":0,"max_issue_weight":0,"label":{"id":272,"title":"Sosync","color":"#110320","project_id":null,"created_at":"2019-11-20T17:02:20.532Z","updated_at":"2020-02-06T15:44:52.057Z","template":false,"description":null,"group_id":4351,"type":"GroupLabel","priorities":[]},"board":{"id":173,"project_id":null,"created_at":"2020-02-11T14:35:51.561Z","updated_at":"2020-02-11T14:35:51.561Z","name":"hi","milestone_id":null,"group_id":4351,"weight":null}},{"id":188,"board_id":173,"label_id":null,"list_type":"closed","position":null,"created_at":"2020-02-11T14:35:51.593Z","updated_at":"2020-02-11T14:35:51.593Z","user_id":null,"milestone_id":null,"max_issue_count":0,"max_issue_weight":0}],"labels":[]} diff --git a/spec/fixtures/bulk_imports/gz/boards.ndjson.gz b/spec/fixtures/bulk_imports/gz/boards.ndjson.gz new file mode 100644 index 0000000000000000000000000000000000000000..294ef04db8802aca95bc1fda061894688683792b GIT binary patch literal 432 zcmV;h0Z;xPiwFqIEm)fFXtph!+UO$fGWy1TBe=o`3`DDxZ}r(}LN=jw@~Mw=z|^Ef!obZDh$# z8t;{?tM2T%1UcZ1@%@V#p9-#x2K4#Z&mKk&=suQwqKI_MM0dmi>R(9Ap=z6Vk8ImY zYHqkJ0fkpVgC%n3fKEBh)CtZx#3Fr9xYjjGGFg|V8)K@Cz;Ivzw1@3*3^$@hiPtOJ zE0aPhdwL*Y5cxYWW05GbLoYClQ9vQ47%qwTJs+nixVC2SJVT`Dwl zK+bfgc-3F%`5g}T|JasS;}R5?%C3R6>)bTM9!J=}wep4EAY;=w!>kd!Xd%94A(~-f z=!df`9CN>CA)YK;OMNJ_QxOq@E`~RX=;C=IlHgy&vm%D!1reto=xAalq-OaS73b1L a?mW67_hU9Tn*pg`*4+n(_GxXz1^@tLzshC+ literal 0 HcmV?d00001 diff --git a/spec/fixtures/bulk_imports/labels.ndjson.gz b/spec/fixtures/bulk_imports/gz/labels.ndjson.gz similarity index 100% rename from spec/fixtures/bulk_imports/labels.ndjson.gz rename to spec/fixtures/bulk_imports/gz/labels.ndjson.gz diff --git a/spec/fixtures/bulk_imports/gz/milestones.ndjson.gz b/spec/fixtures/bulk_imports/gz/milestones.ndjson.gz new file mode 100644 index 0000000000000000000000000000000000000000..f959cd7a0bddef043ab2f1cc72b1d1ecdf75a57c GIT binary patch literal 402 zcmV;D0d4*tiwFqIEWZe(h6Z*Bmc)4fi^Fc1guou@c?E>-M= zk9K3=4G;rMWyL2rNeL=a2e)IK%fL&Kx?JYwVzeQnsS7mi{ce7d z%D-Q~r@(QJHuQJ$`{rwLkS7j(t3!>8*6IQy+o-{#3or(sanHJN0xthWuES7$8^*D2 z!O&x&11=cDMHt-)hHAoiMN1PyBtz2%0CTAxdqy|}%W+!EK)Jq2=peJd5~JI+VI1qu zWAv9`^qUh5*@W@ru)tv!`MV+WRY-MUG*3?Ms`P5pHW$Bj=hLf;(m$T0@7m@6>n#NU0BY*QRsaA1 literal 0 HcmV?d00001 diff --git a/spec/fixtures/bulk_imports/labels.ndjson b/spec/fixtures/bulk_imports/labels.ndjson new file mode 100644 index 00000000000..c7d31d7cbbe --- /dev/null +++ b/spec/fixtures/bulk_imports/labels.ndjson @@ -0,0 +1 @@ +{"id":111,"title":"Label 1","color":"#6699cc","project_id":null,"created_at":"2021-04-15T07:15:08.063Z","updated_at":"2021-04-15T07:15:08.063Z","template":false,"description":"Label 1","group_id":107,"type":"GroupLabel","priorities":[],"textColor":"#FFFFFF"} diff --git a/spec/fixtures/bulk_imports/milestones.ndjson b/spec/fixtures/bulk_imports/milestones.ndjson new file mode 100644 index 00000000000..40523f276e7 --- /dev/null +++ b/spec/fixtures/bulk_imports/milestones.ndjson @@ -0,0 +1,5 @@ +{"id":7642,"title":"v4.0","project_id":null,"description":"Et laudantium enim omnis ea reprehenderit iure.","due_date":null,"created_at":"2019-11-20T17:02:14.336Z","updated_at":"2019-11-20T17:02:14.336Z","state":"closed","iid":5,"start_date":null,"group_id":4351} +{"id":7641,"title":"v3.0","project_id":null,"description":"Et repellat culpa nemo consequatur ut reprehenderit.","due_date":null,"created_at":"2019-11-20T17:02:14.323Z","updated_at":"2019-11-20T17:02:14.323Z","state":"active","iid":4,"start_date":null,"group_id":4351} +{"id":7640,"title":"v2.0","project_id":null,"description":"Velit cupiditate est neque voluptates iste rem sunt.","due_date":null,"created_at":"2019-11-20T17:02:14.309Z","updated_at":"2019-11-20T17:02:14.309Z","state":"active","iid":3,"start_date":null,"group_id":4351} +{"id":7639,"title":"v1.0","project_id":null,"description":"Amet velit repellat ut rerum aut cum.","due_date":null,"created_at":"2019-11-20T17:02:14.296Z","updated_at":"2019-11-20T17:02:14.296Z","state":"active","iid":2,"start_date":null,"group_id":4351} +{"id":7638,"title":"v0.0","project_id":null,"description":"Ea quia asperiores ut modi dolorem sunt non numquam.","due_date":null,"created_at":"2019-11-20T17:02:14.282Z","updated_at":"2019-11-20T17:02:14.282Z","state":"active","iid":1,"start_date":null,"group_id":4351} diff --git a/spec/frontend/fixtures/startup_css.rb b/spec/frontend/fixtures/startup_css.rb index 003f7b768dd..134d29d3106 100644 --- a/spec/frontend/fixtures/startup_css.rb +++ b/spec/frontend/fixtures/startup_css.rb @@ -11,13 +11,12 @@ RSpec.describe 'Startup CSS fixtures', type: :controller do before(:all) do stub_feature_flags(combined_menu: true) - stub_feature_flags(sidebar_refactor: true) clean_frontend_fixtures('startup_css/') end shared_examples 'startup css project fixtures' do |type| let(:user) { create(:user, :admin) } - let(:project) { create(:project, :public, :repository, description: 'Code and stuff', creator: user) } + let(:project) { create(:project, :public, :repository, description: 'Code and stuff', avatar: fixture_file_upload('spec/fixtures/dk.png', 'image/png'), creator: user) } before do sign_in(user) @@ -43,17 +42,6 @@ RSpec.describe 'Startup CSS fixtures', type: :controller do expect(response).to be_successful end - it "startup_css/project-#{type}-legacy-sidebar.html" do - stub_feature_flags(sidebar_refactor: false) - - get :show, params: { - namespace_id: project.namespace.to_param, - id: project - } - - expect(response).to be_successful - end - it "startup_css/project-#{type}-signed-out.html" do sign_out(user) diff --git a/spec/frontend/vue_shared/components/__snapshots__/awards_list_spec.js.snap b/spec/frontend/vue_shared/components/__snapshots__/awards_list_spec.js.snap index d64f845d2fa..3f91591f5cd 100644 --- a/spec/frontend/vue_shared/components/__snapshots__/awards_list_spec.js.snap +++ b/spec/frontend/vue_shared/components/__snapshots__/awards_list_spec.js.snap @@ -5,7 +5,7 @@ exports[`vue_shared/components/awards_list default matches snapshot 1`] = ` class="awards js-awards-block" >